用本地自定义域名访问远程服务器,并支持websocket和cookie
场景
在公司会有很多测试的机器,或者一些OA服务,Confluence,Jenkins,各种中间件的后台等等,都使用HTTP访问,且由于是内网机器没有域名,输入IP又要输入不同端口,访问起来比较麻烦。
解决方案
使用本地Nginx,并配置 C:\Windows\System32\drivers\etc\hosts(/etc/hosts Linux/MacOS.)
目标
- 支持Cookie会话转发
- 支持Websocket会话
- 支持301等重定向,redirect
以上三点具备之后,可以说基本上覆盖100%的web功能开发了。
行动方案
server {
listen 80;
server_name some.company-inc.com;
#charset koi8-r;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
location ~ /microservices/api/ws {
proxy_http_version 1.1;
proxy_pass http://10.11.11.11:8084;
proxy_redirect default;
proxy_cookie_domain ~\.?10.11.11.11 some.company-inc.com;
proxy_set_header Host $host;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_read_timeout 600s;
proxy_connect_timeout 600s;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Origin "";
proxy_buffering on;
proxy_send_timeout 300s;
client_max_body_size 2048M;
}
location / {
proxy_pass http://10.11.11.11:8084;
proxy_redirect http://some.company-inc.com:8084/ /;
proxy_cookie_domain ~\.?10.11.11.11 some.company-inc.com;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_connect_timeout 600s;
proxy_send_timeout 300s;
proxy_read_timeout 300s;
client_max_body_size 2048m;
}
}
以上配置经过验证。
需要说明的事项
A. websocket和普通http代理的不同就是,前者需要这个三项:
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
且Websocket是长时间保持的连接,因此需要延长会话时间,否则会被Nginx提前断开:
proxy_connect_timeout 600s;
proxy_send_timeout 300s;
proxy_read_timeout 300s;
B. Cookie基于域名,因此目标机器发布的Cookie,需要修改为你本地自定义域名:
proxy_cookie_domain ~\.?10.11.11.11 some.company-inc.com;
本例中,目标机器地址为10.11.11.11,本地浏览器中输入的域名为some.company-inc.com。这样因访问浏览器,服务端写到本地浏览器时,Cookie就会正确被浏览器接受。
另一方面,浏览器发起请求时附带的Cookie,将会被Nginx代理转换为实际的目标机器的Cookie,Domain会被还原成10.11.11.11。
C. 当服务器发出301这样的重定向请求时,Location字段需要经过处理,否则浏览器会转发到错误的地址。
proxy_redirect http://some.company-inc.com:8084/ /;
如果不加上述配置,当收到Redirect请求时,如果我没有记错,浏览器会访问诸如 http://some.company-inc.com/10.11.11.11:8084/xxxxxxx
这样的地址。
D. 以下配置是解决可能遇到的跨域问题,如果遇到JS请求出现的CORS相关的错误时,可能需要这个配置。
proxy_set_header Origin "";
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!