問題
最近開發的時候需要用到websocket像前端推送消息,本地測試正常,但是部署到服務器上之后連接失敗
3.0746436a626b95efe66f.js:1 WebSocket connection to 'ws://***.***.***.***:8066/****' failed: Error during WebSocket handshake: Unexpected response code: 200
和度娘研究后發現,原因是我們服務器上用的是nginx代理,然后查看nginx配置后發現,並沒有對websocket進行配置
解決方法
原配置:
location ~ /(api)/.* {
proxy_next_upstream http_502 http_504 error timeout invalid_header;
proxy_set_header Host $host:$server_port;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_pass http://testTomcat;
#expires 1d;
}
修改后的配置:
location ~ /(api)/.* {
proxy_next_upstream http_502 http_504 error timeout invalid_header;
proxy_set_header Host $host:$server_port;
# websocket的配置
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
#
proxy_set_header X-Forwarded-For $remote_addr;
proxy_pass http://testTomcat;
#expires 1d;
}
修改后重啟nginx,完美解決~
遇到的坑
中間測試了多種修改方法,如:
location ~ /(api)/.* {
proxy_pass http://testTomcat;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
location ~ /(api)/.* {
proxy_next_upstream http_502 http_504 error timeout invalid_header;
proxy_set_header Host $host:$server_port;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_pass http://testTomcat;
#expires 1d;
}
如果直接添加一個location,發現原來能訪問的接口也會出現問題,這應該是配置沖突的原因吧
