關於nginx代理websocket,404問題


今天遇到一個問題,通過nginx代理了一個websocket端口,但是訪問一直404

 

nginx代理websocket相關配置如下:

location /chat/ {
    proxy_pass http://backend;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
}

http {
    map $http_upgrade $connection_upgrade {
        default upgrade;
        ''      close;
    }

    server {
        ...

        location /chat/ {
            proxy_pass http://backend;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection $connection_upgrade;
        }
    }

具體配置介紹可以參考官網:http://nginx.org/en/docs/http/websocket.html

 

配置完成之后,怎么訪問都是404,經過反復測試,發現是 location 匹配的路徑太長,導致無法匹配到對應的 代理節點

通過修改location匹配規則之后回復正常,在這里記錄下location 匹配規則介紹:

語法規則: location [=|~|~*|^~] /uri/ { … }

= 開頭表示精確匹配

^~ 開頭表示uri以某個常規字符串開頭,理解為匹配 url路徑即可。nginx不對url做編碼,因此請求為/static/20%/aa,可以被規則^~ /static/ /aa匹配到(注意是空格)。

~ 開頭表示區分大小寫的正則匹配      

~* 開頭表示不區分大小寫的正則匹配            

!~和!~*分別為區分大小寫不匹配及不區分大小寫不匹配 的正則

/ 通用匹配,任何請求都會匹配到。

  

 


免責聲明!

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



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