今天遇到一个问题,通过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匹配到(注意是空格)。 ~ 开头表示区分大小写的正则匹配 ~* 开头表示不区分大小写的正则匹配 !~和!~*分别为区分大小写不匹配及不区分大小写不匹配 的正则 / 通用匹配,任何请求都会匹配到。