nginx配置http及https
现在日常工作中的项目大多数都是采用前后端分离,就用到了nginx进行反向代理、处理静态资源等;因此,记录整理了nginx一些常用的配置;
1.动静分离
将动态请求和静态请求分开处理;通常是将动态请求转发到应用服务器进行处理,静态请求由nginx直接提供;
bash
server {
listen 80;
location / {
#指定静态资源
root /data/test/test-front/dist/;
index index.html index.htm;
try_files $uri $uri/ /index.html;
}
location /prod-api/ {
#指定动态请求的处理
proxy_pass http://127.0.0.1:8000/;
}
}
2.负载均衡
将客户端请求均匀分配到多个服务器上,提高系统的响应速度及可用性;
bash
http {
upstream backend {
#配置负载均衡服务器组
#有端口需要把端口带上server www.xxxxx.com:80;
server www.xxxxx1.com;
server www.xxxxx2.com;
}
server {
listen 80;
location / {
proxy_pass http://backend;
}
}
}
提示:可以对负载均衡服务器组里面的节点设置权重、尝试连接主机失败次数、失败次数后下次检查的间隔时间、热备、标记为不可用等;
weight=1
:设置服务器权重,默认1,权重值越大,接受的请求比例越大;
max_fails=1
:nginx尝试连接失败的次数,超过次数就会将请求转发给其他正常工作的服务器;
fail_timeout=10s
:设置尝试连接失败后,下次检查的间隔时间,默认10s;
backup
:热备,将服务器作为备用服务器,其他主服务器全部宕机后就会像他转发请求;
down
:标记服务器为不可用;
例如:
server www.xxxxx.com weight=1 max_fails=1 fails_timeout=10s;
<----#默认配置
server www.xxxxx.com backup;
server www.xxxxx.com down;
3.配置https
bash
server {
listen 443 ssl;
server_name www.xxxxx.com;
#指定ssl的crt文件和key文件路径;
ssl_certificate /data/test/ssl/xxxxxx.crt;
ssl_certificate_key /data/test/ssl/xxxxxx.key;
#设置Nginx的SSL/TLS片段优化加强HTTPS安全性和性能;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
#强制转htttps
proxy_redirect http:// $scheme://;
#设置请求体、文件大小限制,默认1m;非必选;
client_max_body_size 50m;
location / {
root /data/test/test-front/dist/;
index index.html index.htm;
try_files $uri $uri/ /index.html;
}
location /prod-api/ {
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://127.0.0.1:8000/;
}
4.请求重定向
1.return简单重定向
如:访问www.xxxxx.com时,返回一个301的请求,并重定向到http://www.xxxxx.com:8000,保留其参数;
www.xxxxx.com
:源地址;
http://www.xxxxx.com:8000/
:目标地址;
?$args
:表示保留参数;
bash
server {
listen 80;
server_name www.xxxxx.com;
location / {
return 301 http://www.xxxxx.com:8000/?$args;
}
}
2.rewrite根据规则进行重定向
如:访问www.xxxxx.com时,进行规则匹配^/(.*),将符合规则的重定到http://www.xxxxx.com:8000,保留其参数;
www.xxxxx.com
:源地址;
^/(.*)$
:匹配url规则(任何url路径),并将匹配到的内容存储在$1
中;
http://www.xxxxx.com:8000/
:目标地址;
?$args
:表示保留参数;
permanent
:表示永久重定向;
bash
server {
listen 80;
server_name www.xxxxx.com;
location / {
rewrite ^/(.*)$ http://www.xxxxx.com:8000/$1?$args permanent;
}
}
5.常用参数配置介绍
client_max_body_size
:#设置请求体、文件大小限制默认1m,如:client_max_body_size 50m;
;
client_header_timeout
:默认值60s,client发送一个请求头的超时时间,如:client_header_timeout 60s;
;
client_body_timeout
:默认值60s,设置请求体的读取超时时间,如:client_header_timeout 60s;
;
proxy_connect_timeout
:默认60s,设置的连接超时时间,如:proxy_connect_timeout 60s;
;
proxy_read_timeout 600s;
:默认60s,设置nginx等待请求响应的时间,如:proxy_read_timeout 60s;
;
proxy_send_timeout
:默认60s,设置发送请求给服务器的超时时间,如:proxy_send_timeout 60s
;
proxy_set_header Host $http_host;
:设置转发请求的请求头host字段为,客户端主机;
proxy_set_header X-Real-IP $remote_addr;
:设置转发请求的请求头X-Real-IP字段为,客户端真实ip(准确的说是上一节点的ip);
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
:设置X-Forwarded-For字段,用来记录原始ip地址;
proxy_set_header X-Forwarded-Proto $scheme;
:将请求重定向为指定协议,如:https配置中,即是强制转https;
以上参数可以配置在,http、server、location等块中,区别是不同块作用域不同;