nginx配置http及https

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等块中,区别是不同块作用域不同;

相关推荐
Aa美少女战士8 小时前
单域名 vs 通配符:如何选择最适合你的 SSL 证书?
网络协议·https·ssl
咕噜签名8 小时前
如何申请p12证书
网络协议·https·ssl
2a3b4c8 小时前
SSL/TLS
网络协议·https·ssl
沫夕残雪10 小时前
HTTP,请求响应报头,以及抓包工具的讨论
网络·vscode·网络协议·http
viqecel10 小时前
网站改版html页面 NGINX 借用伪静态和PHP脚本 实现301重定向跳转
nginx·php·nginx重定向·301重定向·html页面重定向
硪就是硪14 小时前
内网环境将nginx的http改完https访问
nginx·http·https
鹅肝手握高V五色15 小时前
Wireshark入门教程:如何抓取和过滤网络数据包
websocket·网络协议·tcp/ip·http·网络安全·https·udp
云上艺旅15 小时前
K8S学习之基础七十二:Ingress基于Https代理pod
学习·云原生·容器·https·kubernetes
ak啊15 小时前
Nginx 安全加固详细配置指南
nginx
旧味清欢|16 小时前
关注分离(Separation of Concerns)在前端开发中的实践演进:从 XMLHttpRequest 到 Fetch API
javascript·http·es6