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

Nest.js+Flutter项目部署至Railway.app后WebSocket连接超时求助

解决Railway部署Nest.js WebSocket连接超时问题

问题根源

Railway平台的部署服务通过反向代理对外暴露,不会开放自定义端口(如你使用的5003),直接指定端口连接会被防火墙拦截,最终导致超时。另外,Railway默认启用HTTPS,WebSocket连接需对应使用wss://协议而非ws://。

修复步骤

1. 修改Nest.js Gateway配置

移除固定端口设置,让服务监听Railway分配的PORT环境变量端口,同时添加反向代理适配配置:

@WebSocketGateway({
  path: '/',
  serveClient: false,
  cors: {
    origin: '*', // 生产环境建议指定具体合法域名
    credentials: true,
  },
  // 适配反向代理,让Nest识别真实请求来源
  proxy: true,
})
export class AppGateway implements OnGatewayInit, OnGatewayConnection, OnGatewayDisconnect {
  prisma = new PrismaClient();
  wsClients = [];

  @WebSocketServer()
  private server: Server;

  // 同时在main.ts中确保监听环境变量端口
  // async function bootstrap() {
  //   const app = await NestFactory.create(AppModule);
  //   await app.listen(process.env.PORT || 3000);
  // }
}

2. 调整Flutter端连接地址

使用Railway分配的域名,协议替换为wss://,无需手动指定端口:

// 错误写法
// final socket = WebSocket.connect('ws://website-live-nestjs-production.up.railway.app:5003');

// 正确写法
final socket = WebSocket.connect('wss://website-live-nestjs-production.up.railway.app');

3. 验证Railway服务配置

  • 进入Railway项目的服务设置,确认未手动指定端口映射(Railway会自动处理端口转发)
  • 确保服务启动命令正确(如npm run start:prod),且项目能正常监听PORT环境变量指定的端口

额外注意事项

  • 若WebSocket路径非根路径(/),需在连接地址中补充对应路径,比如wss://xxx.up.railway.app/ws
  • 生产环境避免使用origin: '*',应指定你的Flutter Web域名或移动端合法来源

内容的提问来源于stack exchange,提问作者mohamed hawas

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 16:24:55