侧边栏壁纸
博主头像
怪客のBlog 博主等级

行动起来,活在当下

  • 累计撰写 35 篇文章
  • 累计创建 1 个标签
  • 累计收到 1 条评论

目 录CONTENT

文章目录

Nginx常用配置信息(静态、反向代理、SSL等)

怪客
2022-03-16 / 0 评论 / 1 点赞 / 318 阅读 / 0 字

Nginx处理请求规则

  1. 当Nginx在某个端口收到一个HTTP请求时,会交给监听该端口的server处理。
  2. 如果监听该端口的server有多个,则取决于请求头的Host与哪个server的域名(server_name)匹配。
  3. 如果没有匹配的域名,或者请求头的Host是IP地址,则交给监听该端口的默认server处理。
  4. 选用了server之后,Nginx会寻找与HTTP请求的URL匹配的location,决定如何做出响应。

静态资源

    server {
                listen 80; #更改为网站监听端口
                server_name localhost; #更改为域名名称
                location / {
                    root /home/web/test;  # 指定静态网站根目录
                    index index.html;  # 指定默认访问的文件
                  # Nginx 支持 rewrite 功能:
                  # 访问网址链接时自动追加 .html 后缀(这样,访问网址时就可以不用 .html 后缀)
                    if (!-e $request_filename){
                       rewrite ^(.*)$ /$1.html last;
                       break;
                    }
                }
            }  

反向代理

   server {
                listen 80; #更改为网站监听端口
                server_name localhost; #更改为域名名称
                location / {
                    proxy_pass http://localhost:5000; #转发请求到本地5000端口
                    proxy_http_version 1.1;
                    proxy_set_header Upgrade $http_upgrade;
                    proxy_set_header Connection keep-alive;
                    proxy_set_header Host $host;
                    proxy_cache_bypass $http_upgrade;
                    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                    proxy_set_header X-Forwarded-Proto $scheme;
                }
            }

Https

server {
 #SSL 访问端口号为 443
    listen 443 ssl; 
 #填写绑定证书的域名
    server_name www.test.com test.com; 
 #证书文件名称
    ssl_certificate /etc/letsencrypt/live/test.com/fullchain.pem;
 #私钥文件名称
    ssl_certificate_key /etc/letsencrypt/live/test.com/privkey.pem;
    ssl_session_timeout 5m;
 #请按照以下协议配置
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2; 
 #请按照以下套件配置,配置加密套件,写法遵循 openssl 标准。
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE; 
    ssl_prefer_server_ciphers on;
    location / {
      proxy_pass  https://localhost:5000;
      proxy_http_version 1.1;
      proxy_set_header Upgrade $http_upgrade;
      proxy_set_header Connection "upgrade";
      proxy_set_header Host $host;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }

}

Http自动转换为Https

方式1

server {
    listen 80;
    server_name www.test.com test.com;
    rewrite ^(.*) https://$server_name$1 permanent;
}

方式2

  server {
    listen 80;
    server_name www.test.com test.com;
    return 301 https://www.test.com;
}

多个网站公用一个端口

定义多个server监听同一个端口(server_name配置的域名信息不同即可)

#站点1
server {
    #SSL 访问端口号为 443
    listen 443 ssl; 
 #填写绑定证书的域名
    server_name www.site1.cn site1.cn; 
 #证书文件名称
    ssl_certificate /Web/SSL/site1.cn_bundle.crt; 
 #私钥文件名称
    ssl_certificate_key /Web/SSL/site1.cn.key; 
    ssl_session_timeout 5m;
 #请按照以下协议配置
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2; 
 #请按照以下套件配置,配置加密套件,写法遵循 openssl 标准。
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE; 
    ssl_prefer_server_ciphers on;
    location / {
      proxy_pass  https://localhost:5000;
      proxy_http_version 1.1;
      proxy_set_header Upgrade $http_upgrade;
      proxy_set_header Connection "upgrade";
      proxy_set_header Host $host;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}



#站点2
server {
    #SSL 访问端口号为 443
    listen 443 ssl; 
 #填写绑定证书的域名
    server_name www.site2.com site2.com; 
 #证书文件名称
    ssl_certificate /etc/letsencrypt/live/site2.com/fullchain.pem;
 #私钥文件名称
    ssl_certificate_key /etc/letsencrypt/live/site2.com/privkey.pem;
    ssl_session_timeout 5m;
 #请按照以下协议配置
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2; 
 #请按照以下套件配置,配置加密套件,写法遵循 openssl 标准。
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE; 
    ssl_prefer_server_ciphers on;
    location / {
       root  /Web/test;
       index  index.html;
    }

}

无匹配server处理

添加默认server 用于当没有找到请求相匹配的server时 返回一个Nginx的404页面

#http没有匹配到server_name返回404
	server {
		listen 80 default_server;
		#隐藏nginx版本号
		server_tokens off;
		server_name _;
		return 404;
	}

	#https没有匹配到server_name返回404
	server {
		listen 443 ssl http2 default_server;
		server_name _;
		#隐藏nginx版本号
		server_tokens off;
		#证书文件名称
		ssl_certificate /SSL/cert.cer;
		#私钥文件名称
		ssl_certificate_key /SSL/cert.key;
		return 404;
	}

多配置文件

当我们有多个域名的时候可以将配置文件进行拆分

  1. 将所有配置文件放到nginx目录下的conf.d目录中
  2. 然后在nginx.conf中加载所有配置文件(http{}中配置)
	# 加载目录下所有配置文件(多域名拆分配置文件)
	include /etc/nginx/conf.d/*.conf;

主配置文件用于加载所有conf.d下的配置文件 以及一些公用配置
各个子配置文件存放各自域名对应的server监听节点即可

1

评论区