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

Ruby on Rails配合Puma、Nginx环境WebSocket连接失败排查求助

排查思路
  • 优先查看Nginx错误日志,执行cat /var/log/nginx/error.log,筛选/cable相关的请求记录,确认请求在Nginx层的返回状态码:
    • 如果状态码为401,说明是基础身份验证拦截了请求
    • 如果状态码为502/503,说明请求转发到Puma失败,检查Puma服务运行状态和socket路径是否正确
  • 用curl直接测试WebSocket相关接口,执行curl -I https://upgrade.mysite.com/cable,验证Nginx层的请求拦截逻辑
  • 查看Rails对应环境日志,路径为/home/myuser/mysite/current/log/[环境名].log,确认是否有/cable请求进入应用层,若存在报错可直接定位到Rails配置问题
  • 检查Rails Action Cable相关配置,确认允许的请求源、适配器配置是否和预发布环境一致
解决方案

1. 修复Nginx /cable配置

你当前的配置遗漏了两个核心配置项:关闭/cable路径的基础身份验证、传递请求协议头,修正后的location块如下:

location /cable {
    auth_basic off;
    proxy_pass http://app;
    proxy_http_version 1.1;
    proxy_set_header Upgrade websocket;
    proxy_set_header Connection "upgrade";
    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 $scheme;
    proxy_set_header Host $http_host;
    proxy_read_timeout 86400; # 可选,避免长连接被主动断开
}

如果需要保留/cable路径的身份验证,可将Basic Auth凭证拼接在连接地址中,格式为wss://{用户名}:{密码}@upgrade.mysite.com/cable,该方案不建议生产环境使用,存在凭证泄露风险。

2. 修复Rails Action Cable配置

  • 打开对应环境的配置文件config/environments/[环境名].rb,添加如下配置:
# 替换为你实际的站点域名
config.action_cable.allowed_request_origins = ['https://upgrade.mysite.com']
config.action_cable.url = 'wss://upgrade.mysite.com/cable'
  • 检查config/cable.yml,生产/独立环境必须使用支持多进程的适配器,推荐用Redis,示例配置:
production:
  adapter: redis
  url: redis://localhost:6379/1 # 替换为你实际的Redis连接地址

3. 重启服务生效

配置修改完成后执行以下命令重启服务:

# 重启Nginx
sudo systemctl restart nginx
# 重启Puma,若使用Capistrano部署可执行 cap [环境名] deploy:restart 替代
sudo systemctl restart puma

内容的提问来源于stack exchange,提问作者Semen Shekhovtsov

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 11:24:03