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

EC2 Ubuntu部署Flask深度学习API遇Nginx 504超时问题求助

解决深度学习API多标签预测时的Nginx 504超时问题

嘿,这个问题我太熟悉了——长耗时的AI模型API很容易碰到这类超时问题,尤其是处理多任务的时候。咱们先从最直接的配置问题入手,一步步解决:

1. 修正Nginx站点配置的超时参数

你当前的站点配置里用了fastcgi_read_timeout,但你的API是通过uWSGI和Nginx通信的,这个参数对uWSGI完全无效!得换成uWSGI专属的超时设置,同时把超时时间拉到足够覆盖10个标签的预测时长(单个5分钟,10个就是50分钟左右,设置3600秒即1小时足够):

修改/etc/nginx/sites-enabled/default里的server块:

server {
    listen 80;
    server_name xxx;
    charset utf-8;
    client_max_body_size 75M;

    # 替换原有的fastcgi_read_timeout,添加uWSGI相关超时
    uwsgi_read_timeout 3600;
    uwsgi_send_timeout 3600;
    uwsgi_connect_timeout 3600;

    location / {
        include uwsgi_params;
        uwsgi_pass 127.0.0.1:8000;
        uwsgi_param UWSGI_CHDIR /home/ubuntu/xxxx/src;
        uwsgi_param UWSGI_SCRIPT app:app;
    }
}

2. 检查并调整uWSGI的超时设置

光Nginx设置还不够,uWSGI本身有个harakiri(切腹)机制,会自动杀死运行时间过长的进程,这也会导致超时。你需要在uWSGI的配置文件(比如uwsgi.ini)里添加以下参数:

[uwsgi]
# 保留你原有配置的前提下,新增这些超时设置
harakiri = 3600          # 允许进程最长运行3600秒
socket-timeout = 3600    # socket连接超时
http-timeout = 3600      # HTTP请求超时

如果是用命令行启动uWSGI,就加上对应的参数:

uwsgi --socket 127.0.0.1:8000 --chdir /home/ubuntu/xxxx/src --module app:app --harakiri 3600 --socket-timeout 3600 --http-timeout 3600

3. 排查AWS层面的超时限制

如果你用了AWS的弹性负载均衡(ELB/ALB),那负载均衡本身也有连接超时设置,默认可能只有60-120秒,这会导致ELB先断开连接,Nginx直接返回504。你需要登录AWS控制台,找到对应的负载均衡器,调整空闲超时时间到3600秒(ALB最大支持4000秒,完全足够)。

另外,确认EC2安全组的入站/出站规则没有限制长时间TCP连接,不过这个一般不会是问题,但也可以顺手检查一下。

4. 验证配置并测试

修改完所有配置后,重启Nginx和uWSGI生效:

sudo systemctl restart nginx
sudo systemctl restart uwsgi  # 换成你实际的uWSGI服务名

测试时可以给curl加上-v参数,查看详细的请求过程,同时可以查看Nginx的错误日志/var/log/nginx/error.log和uWSGI的日志,确认是否还有超时问题。如果还是报错,可以从日志里找具体的触发点,再针对性调整。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 09:17:51