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

更新日期: 2023-03-05 阅读次数: 1945 字数: 421 分类: Nginx

注意!!!

虽然这个配置能达到预期的效果,但是这个配置有 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 聊聊, 查看更多联系方式