Nginx反向代理Actix WebSocket遇404问题求助
问题分析与解决
你的Nginx配置确实存在问题,导致WebSocket请求返回404,核心原因是路径转发时的前缀处理错误:
当你用wss://my_domain.com/ws/client?token=xxx发起请求时,Nginx的location /ws会把完整路径/ws/client转发到后端的http://127.0.0.1:8181/ws/client,但你的Actix Web服务原本监听的是/client路径(本地用ws://server:8181/client就能正常连接),后端找不到/ws/client这个路由,所以返回404。
修复步骤
修改Nginx中location /ws块的proxy_pass配置,在地址末尾加上斜杠/:
location /ws { proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $host; proxy_set_header X-NginX-Proxy false; # 末尾添加斜杠,让Nginx去掉/ws前缀后转发路径 proxy_pass http://127.0.0.1:8181/; proxy_redirect off; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; }
添加斜杠后,Nginx会将/ws/client转换为/client转发到后端,和你本地测试的路径一致,这样Actix Web就能正确匹配WebSocket路由了。
验证操作
- 修改配置后,执行命令重新加载Nginx:
sudo nginx -s reload
- 重新发起WebSocket连接,检查是否能正常建立。
如果还有问题,可以查看Actix Web的服务日志,确认收到的请求路径是否为/client,进一步排查路由匹配问题。
内容的提问来源于stack exchange,提问作者ir1keren
相关产品推荐
相关产品推荐

