Nginx 转发 HTTP 及 WebSocket 请求到另一个域名的配置

文章目录

    注意!!!

    虽然这个配置能达到预期的效果,但是这个配置有 301 问题,暂时没有找到问题根源。

    还是对 Nginx 的具体规则不了解。alias,rewrite, redirect 得重新学习下。

    需求场景

    通过修改本地 hosts 文件,将目标域名的 IP 指向我的服务器,转发所有请求。

    同时,

    存在的问题

    • 几个 alias 用的不对,会导致请求 301 到带斜杠后缀的链接。但好在能正常运行
    • post 请求无法返回指定文件的内容。但是基于上面错误配置,会将 post 请求 301 到 get 请求,居然正常了。。。
    • alias 应该用于目录的处理。所以才会缀上斜杠后缀
    • excel 下载在 chrome 上正常下载,但是在 edge 上无法下载完整,似乎 edge 的安全策略有问题

    配置

    server {
    	listen 80;
    	server_name www.some_domain.com;
    
    	location ^~ /maintain/api1 {
    		default_type application/json;
    		index api_result.json;
    		alias /home/user1/sunzhongwei.com;
    	}
    
    	location ^~ /maintain/exportExcel {
    		expires -1;
    		add_header Cache-Control no-store;
    		default_type application/msexcel;
    		index demo.xlsx;
    		alias /home/user1/sunzhongwei.com;
    	}
    
    	location = /maintain/main.html {
    		default_type text/html;
    		index main.html;
    		alias /home/user1/sunzhongwei.com;
    	}
    
    	location ^~ /maintain/js/some.js {
    		default_type application/javascript;
    		index fault.js;
    		alias /home/user1/sunzhongwei.com;
    	}
    
    	# websocket
    	location ^~ /rangeDataItem {
    		proxy_pass http://www.some_domain.com;
    		proxy_read_timeout 300s;
    		proxy_send_timeout 300s;
    		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_set_header  X-Forwarded-Proto $scheme;
    		proxy_http_version 1.1;
    		proxy_set_header Upgrade $http_upgrade;
    	}
    
    	location / {
    		proxy_pass http://www.some_domain.com;
    		proxy_set_header Host $host;
    		proxy_set_header X-Real-IP $remote_addr;
    	}
    }
    

    参考

    关于作者 🌱

    我是来自山东烟台的一名开发者,有感兴趣的话题,或者软件开发需求,欢迎加微信 zhongwei 聊聊,或者关注我的个人公众号“大象工具”, 查看更多联系方式