nginx下配置WebSocket連接錯誤Error:Unexpected response code 404


起因是今天剛部署項目的時候小伙伴反應websocket連不上了,但是這個項目部署在其他服務器下是ok的,莫非玄學?也可能是缺什么東西

先wscat連接檢查一下

顯示連接Error:Unexpected response code 404

由於網絡環境是內網,所以看下是不是網絡問題,用ip+端口測試訪問正常,那么我們可以斷定是Nginx代理配置方面的問題

我的conf結構為:

server{
    listen  80;
    server_name 1.test.com;
     location /  {
        proxy_pass http://127.0.0.1:8888; 
     }
 }

查了一下有關websocket的nginx官方相關文檔:http://nginx.org/en/docs/http/websocket.html

大概的意思是為了讓升級的服務器了解客戶端將協議切換到 WebSocket 的意圖,必須明確傳遞這些標題

默認情況下,如果預接的服務器在 60 秒內不傳輸任何數據,則連接將關閉。此超時可以通過proxy_read_timeout指令增加。或者,可以配置已增殖的服務器,定期發送 WebSocket ping 幀來重置超時並檢查連接是否仍然有效。

那么我們添加一下配置:

    location / {
     proxy_pass http://127.0.0.1:8888;

        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
         
        proxy_connect_timeout 4s; 
        proxy_read_timeout 7200s; 
        proxy_send_timeout 12s;

        proxy_set_header    Host             $host;#保留代理之前的host
        proxy_set_header    X-Real-IP        $remote_addr;#保留代理之前的真實客戶端ip
        proxy_set_header    X-Forwarded-For  $proxy_add_x_forwarded_for;
        proxy_set_header    HTTP_X_FORWARDED_FOR $remote_addr;#在多級代理的情況下,記錄每次代理之前的客戶端真實ip
        proxy_set_header X-Forwarded-Proto $scheme; #表示客戶端真實的協議(http還是https)
        proxy_redirect      default;#指定修改被代理服務器返回的響應頭中的location頭域跟refresh頭域數值

    }

reload一下,就可以成功連接咯,無視用同一張圖,xixi


免責聲明!

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



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