關於nginx代理websocket,404問題
阿新 • • 發佈:2022-03-15
今天遇到一個問題,通過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匹配到(注意是空格)。 ~ 開頭表示區分大小寫的正則匹配 ~* 開頭表示不區分大小寫的正則匹配 !~和!~*分別為區分大小寫不匹配及不區分大小寫不匹配 的正則 / 通用匹配,任何請求都會匹配到。