You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP Ratchet+Nginx配置WSS握手失败(502错误)求助

解决PHP Ratchet + Nginx WSS反向代理的502错误问题

嘿,看起来你在配置Ratchet与Nginx的WSS反向代理时踩了个典型的坑,我来帮你一步步排查解决:

核心问题分析

你的502错误主要来自错误的proxy_pass配置:Ratchet服务运行在8081端口,使用的是原生的ws协议(基于HTTP),本身并没有处理SSL加密。而你当前的proxy_pass指向了https://connect.mydomain.net:8081,相当于让Nginx尝试用HTTPS去连接一个只支持HTTP的后端服务,自然会握手失败返回502。

修正后的Nginx配置

把配置调整成以下内容,重点修改proxy_pass指向,并确保其他参数正确:

map $http_upgrade $connection_upgrade {
    default Upgrade;
    '' close;
}

upstream socket {
    server localhost:8081;
    # 如果Ratchet运行在其他服务器,这里填对应IP:端口即可
}

server {
    # 确保你已经配置了SSL证书(比如Let's Encrypt)
    listen 443 ssl;
    server_name connect.mydomain.net;

    ssl_certificate /path/to/your/cert.pem;
    ssl_certificate_key /path/to/your/key.pem;

    location /ws/ {
        proxy_pass http://socket;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection $connection_upgrade;
        proxy_set_header Host $host;
        proxy_redirect off;
        proxy_send_timeout 86400s;
        keepalive_timeout 86400s;
        proxy_buffers 8 32k;
        proxy_buffer_size 64k;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto https;
        reset_timedout_connection on;
    }
}

额外检查项

  • 确认Nginx所在服务器能正常访问localhost:8081:可以用telnet localhost 8081或者curl http://localhost:8081测试连通性,如果不通,要检查Ratchet服务是否真的在运行,或者防火墙是否拦截了8081端口。
  • 确保SSL证书配置正确:如果证书无效或路径错误,也可能导致WSS连接失败,你可以先通过浏览器访问https://connect.mydomain.net确认HTTPS服务正常。
  • 重启Nginx:修改配置后一定要重启Nginx服务(sudo systemctl restart nginx)让配置生效。

完成以上调整后,再测试你的WSS连接代码:

var conn = new WebSocket('wss://connect.mydomain.net/ws/');

内容的提问来源于stack exchange,提问作者Alan Murphy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 07:23:30