nginx给websocket页面做代理
背景
某一产品部署在Aip上,页面打开体现Aip:http://10.20.30.40:1234/inside/html#信息,但需求方让用同域下的F5地址Bip:10.200.300.400,对外体现为:http://10.200.300.400:1234/outside/html#。目前已做好Bip的代理,但在对Aip页面及Bip页面对比发现,代理后的地址Bip有一模块显示有问题。
对背景中Aip给Bip代理的代码如下,参考。
location /outside/html#{
proxy_pass http://10.20.30.40:1234/inside/html#;
}
打开F12开发者模式排查。
- 点击network发现很多接口都标红报错,接口红色异常,把url代理。
- F12页面已无红色异常项,但页面展示仍有问题,查看当前页面调用接口,有websocket。
- 点击websocket接口,虽然没有标红异常,但是看到messages未显示信息且报404。点击console,发现有红色报错,failed to load resource:the server responded with a status of 404(),定位到要给websocket做代理。
给websocket接口做代理。
如报错接口为:ws://10.200.300.400:1234/x/websocket
在nginx增加代理如下:
location /x/websocket{
rewrite^/x/websocket/(.*)$ / $1 break;
proxy_pass http://10.200.300.400:1234/x/websocket;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection “upgrade”;
proxy_connect_timeout 1800s;
proxy_send_timeout 1800s;
proxy_read_timeout 1800s;
}
格式:
location /x/websocket{//此处/后的内容建议与url中ws地址端口后的一致
rewrite^/x/websocket/(.*)$ / $1 break;
proxy_pass http://此处为url中完整的ws地址, 如X.X.X.X:XXXX/x/websocket;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection “upgrade”;
proxy_connect_timeout 1800s;
proxy_send_timeout 1800s;
proxy_read_timeout 1800s;
}