如何修改AWS Beanstalk Flask应用的NGINX配置解决504超时错误?
Elastic Beanstalk Flask应用Nginx超时配置失效解决方案
配置路径正确性说明
你写的myconf.conf内容语法完全正确,不需要额外添加头信息、大括号或引号,该类独立配置文件会被Nginx主配置自动引入到http块中生效。
路径规则和你的EB平台版本强相关:
- 已废弃的Amazon Linux AMI(第一代)平台:配置放在
.ebextensions/nginx/conf.d/路径下生效 - 现在主流的Amazon Linux 2平台:配置必须放在
.platform/nginx/conf.d/路径下生效 - 额外注意:打包部署时必须保证
.platform/.ebextensions目录在压缩包的根层级,不要嵌套在子文件夹中,否则EB不会读取配置。
你需要同步调整的其他超时配置
你遇到的60秒返回504问题,90%以上是因为只改了Nginx的代理超时,漏了以下两个核心链路的超时配置:
- 负载均衡器空闲超时调整:EB默认的应用负载均衡器(ALB)空闲超时为60秒,超过时间会主动断开连接返回504。可以在项目中新增
.ebextensions/alb-timeout.config文件,写入以下配置:
option_settings: aws:elbv2:loadbalancer: IdleTimeout: 180
如果你使用的是经典负载均衡器,将配置键替换为aws:elb:loadbalancer即可。
- WSGI服务器超时调整:EB Flask平台默认使用Gunicorn作为WSGI服务器,其默认请求超时为30秒,远低于你设置的180秒阈值。可以在项目根目录新增
Procfile,写入以下启动规则(将app:app替换为你自己的Flask实例入口):
web: gunicorn --timeout 180 app:app
配置生效验证方法
部署完成后可通过以下步骤确认所有配置正常生效:
- SSH连接到EB实例,执行
cat /etc/nginx/conf.d/myconf.conf确认你的Nginx配置已同步到实例中,再执行sudo nginx -t验证配置语法无错误 - 在EB控制台的「配置-负载均衡器」页面,确认空闲超时已调整为180秒
- SSH连接到EB实例,执行
ps aux | grep gunicorn确认进程启动参数中携带--timeout 180
内容的提问来源于stack exchange,提问作者zoidberg
相关产品推荐
相关产品推荐

