1. 程式人生 > 其它 >關於nginx代理websocket,404問題

關於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匹配到(注意是空格)。

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

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

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

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