You need to enable JavaScript to run this app. NestJS部署至Google App Engine标准环境后websocket传输失效仅支持长轮询
优惠活动
大模型
产品
解决方案
定价
更多

NestJS部署至Google App Engine标准环境后websocket传输失效仅支持长轮询

API侧(NestJS项目)配置调整

  • 若使用Socket.IO实现WebSocket服务,显式声明允许的传输类型,确保包含websocket,同时匹配前端的CORS规则:
    // NestJS WebSocketGateway 配置示例
    @WebSocketGateway({
      transports: ['websocket', 'polling'],
      cors: {
        origin: "你的Angular前端域名",
        credentials: true
      }
    })
    
    若使用原生WS库,需要显式处理HTTP升级事件,不要拦截Upgrade请求头。
  • 在NestJS启动配置中开启信任代理设置,App Engine的请求会经过GCP前置反向代理,不信任代理会导致WebSocket升级请求的头校验失败:
    // main.ts bootstrap 函数中添加
    async function bootstrap() {
      const app = await NestFactory.create(AppModule);
      app.set('trust proxy', true);
      await app.listen(process.env.PORT || 8080);
    }
    
  • 新增WebSocket错误捕获逻辑,避免异常未上报到日志系统:
    // 在Gateway中添加连接错误监听
    @OnGatewayConnection()
    handleConnection(socket: Socket) {
      socket.on('error', (err) => {
        console.error('WebSocket连接错误:', JSON.stringify(err));
      });
    }
    
    // 全局监听Socket.IO连接升级错误
    @OnGatewayInit()
    afterInit(server: Server) {
      server.on('connection_error', (err) => {
        console.error('WebSocket升级失败:', err);
      });
    }
    

GCP App Engine标准环境部署侧配置调整

App Engine标准环境默认会拦截WebSocket升级请求,需要在app.yaml中显式开启相关配置:

  • 调整handler规则,匹配WebSocket请求路径的规则添加websocket: true参数,允许GCP转发升级请求,同时使用14及以上版本的Node.js运行时(旧版本不支持WebSocket):
    runtime: nodejs18
    service: 你的服务名
    
    handlers:
      # 匹配你的WebSocket请求路径,Socket.IO默认路径为/socket.io/
      - url: /socket.io/.*
        script: auto
        websocket: true
        secure: always
      # 其他普通请求规则
      - url: /.*
        script: auto
        secure: always
    
  • 开启会话亲和性,保证同一个客户端的WebSocket请求始终调度到同一个实例,避免跨实例握手失败:
    network:
      session_affinity: true
    
  • 不要使用免费的F1/F2级实例,免费实例有休眠机制和连接数限制,会主动断开长连接,至少使用B1及以上的基础实例,或G1及以上的自动扩缩容实例。

内容的提问来源于stack exchange,提问作者Blair Holmes

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.14 21:36:06