Nginx 配置项目

1、 HTTP 请求

    server {
        listen       80;
        server_name  www.xxxxxxxx.com;
        
        location / {
                proxy_pass http://127.0.0.1:8089;  
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header Host $host;
                proxy_set_header X-Forwarded-Proto https;   
                proxy_set_header Forwarded $remote_addr; 
                proxy_set_header X-Real-IP   $remote_addr;

                root  /home/project/WebContent;
                index  index.html index.htm;
        }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root  /home/project/WebContent;
        }
       
    }  

2、HTTPS

Nginx ssl配置

3、websocket

http中,添加map指令。map指令作用:

  1. 如果客户端请求中包含Upgrade: websocket头, $http_upgrade的值为websocket$connection_upgrade的值为upgrade
  2. 如果客户端请求中没有Upgrade头,$http_upgrade为空,$connection_upgrade的值为close
    这样可以确保只有WebSocket请求被升级,普通HTTP请求不会受到影响。
http {
    map $http_upgrade $connection_upgrade {
        default upgrade;
        ''      close;
    }
}
    server {
        listen       80;
        server_name  8.138.240.104;
        
        location / {
                proxy_pass http://127.0.0.1:8888;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header Host $host;
                proxy_set_header X-Forwarded-Proto https;
                proxy_set_header Forwarded $remote_addr;
                proxy_set_header X-Real-IP   $remote_addr;
                # WebSocket支持
                proxy_http_version 1.1;
                proxy_set_header Upgrade $http_upgrade;
                proxy_set_header Connection $connection_upgrade;  # 使用nginx.conf中的动态设置
                proxy_read_timeout 300s;  # 设置为 5 分钟。默认是60秒内没有数据交互时连接被自动关闭
        }

    } 

4、前后端分离(nginx跨域问题)

    server {
        listen       80;
        server_name  localhost;
        
        location ~* \.htm$ { # 我的服务端接口格式是: /**/*.htm .
                proxy_pass http://127.0.0.1:8221;  
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header Host $host;
                proxy_set_header X-Forwarded-Proto https;   
                proxy_set_header Forwarded $remote_addr; 
                proxy_set_header X-Real-IP   $remote_addr;
        }

        location / {  # 非 .htm,应该就是前端的了, 走通过匹配
                root  /home/system_web;
                index  index.html index.htm;
        }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root  /home/system_web;
        }
    } 

注意的是,前端发送请求时,url接口不需要再带服务端的端口号:
http://xxx.x.x.xxx:8221/login.htm ==> http://xxx.x.x.xxx/login.htm

5、监听非80端口时的特殊情况

  • 比如nginx配置监听8888端口,服务器接口端口号9999。对于spring boot mvc 项目里的 return "redirect:",浏览器访问时,重定向可能会会丢失端口号,从而访问到80端口项目页面。
    解决方法:修改nginx配置 proxy_set_header Host $host; 调整为 proxy_set_header Host $host:$server_port; 保留原始请求的端口号。
    工作中都是使用域名不带端口号的,即默认的80或443。个人搞着玩可能会遇到。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容