nginx配置websocket


問題

最近開發的時候需要用到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,發現原來能訪問的接口也會出現問題,這應該是配置沖突的原因吧


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM