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

配置AWS ECS Service Connect后Nginx代理Nextjs遇426错误求助

AWS Fargate + ECS Service Connect: Nginx代理Nextjs返回HTTP 426错误

问题背景

同一ECS集群中部署两个Fargate服务:

  • Nextjs服务:监听3000端口,已开启ECS Service Connect
  • Nginx服务:监听80端口,已开启ECS Service Connect,配置文件如下:
server {
  listen 80;

  location / {
    if ($request_uri = "/") {
      add_header Content-Type text/html;
      return 200 "<html><body><h1>It works!</h1></body></html>";
    }

    proxy_pass http://nextjs:3000;
    proxy_set_header Nginx-Message "Message from Nginx";
  }
}

本地Docker Compose环境运行正常,但部署到AWS后:

  • 访问ELB根路径正常
  • 访问其他路由(如/any-route)返回HTTP ERROR 426

可能的原因及修复方案

1. 协议版本不匹配(HTTP/1.1 vs HTTP/2)

ECS Service Connect默认可能为服务端点启用HTTP/2,而Nginx默认使用HTTP/1.1发起代理请求,导致Nextjs服务返回426错误要求升级协议。

修复Nginx配置:在代理块中添加协议兼容配置:

location / {
    if ($request_uri = "/") {
      add_header Content-Type text/html;
      return 200 "<html><body><h1>It works!</h1></body></html>";
    }

    proxy_pass http://nextjs:3000;
    proxy_http_version 1.1;
    proxy_set_header Host $host;
    proxy_set_header Connection ""; # 清空Connection头以适配HTTP/2通信
    proxy_set_header Nginx-Message "Message from Nginx";
}

2. Service Connect端点配置错误

检查Nextjs服务的Service Connect服务器端点设置:

  • 确认端点协议类型为HTTP(而非HTTP2或GRPC);若配置为HTTP2,需修改Nginx支持HTTP2代理,或调整端点协议为HTTP
  • 确认容器端口映射正确:Nextjs容器监听3000端口,Service Connect端点的容器端口需设置为3000

3. Nextjs服务路由配置差异

AWS环境中Nextjs可能因环境变量或配置差异,要求特定请求头或协议。检查next.config.js,确保没有强制启用HTTP/2或其他协议限制。


内容的提问来源于stack exchange,提问作者Luigi Minardi Maia

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 23:42:51