鱼头
AI编程

Docker 部署 AI 项目遇到 60 秒超时问题排查与解决

最近在服务器 Docker 上部署一个 AI 项目时,遇到一个很典型的问题: 请求 AI 接口超过 60 秒就自动超时断开。 最后排查发现是 Nginx 反向代理默认超时导致,这里记录一下完整排查过程,给后来人避坑。

一、问题现象

项目架构大致是:

浏览器 → Nginx → 前端服务 → 后端 API → AI 接口

当 AI 处理时间较长(>60s)时,请求会失败,表现为:

  • 页面一直转圈
  • 最后返回 504 / timeout
  • 时间基本固定在 60 秒左右

如果你的超时时间非常接近 60 秒,基本可以确定是某一层默认超时。


二、排查思路(非常重要)

Web 请求一般会经过很多层:

层级可能超时
浏览器 / 前端60s
Nginx60s
Node.js server60s
Gunicorn30s / 60s
Python requests60s
OpenAI SDK60s
Cloudflar e100s

所以排查顺序建议:

1. Nginx
2. 前端 axios
3. 后端 server (Node / Gunicorn)
4. 后端请求 AI 的 timeout

三、最终定位到 Nginx 在 Docker 容器里

一开始在服务器执行:

nginx -t
nginx -s reload

结果提示:

nginx: command not found

后来才发现 Nginx 并不在宿主机,而是在前端 Docker 容器里

查看容器:

docker ps

进入容器:

docker exec -it nginx_container_name /bin/bash

在容器里重载:

nginx -t
nginx -s reload

或者直接:

docker restart nginx_container_name

四、Nginx 超时配置修改

找到反向代理配置:

location / {
    proxy_pass http://127.0.0.1:5174;
}

location 中加入超时配置:

location / {
    proxy_pass http://127.0.0.1:5174;

    proxy_connect_timeout 600s;
    proxy_send_timeout 600s;
    proxy_read_timeout 600s;
    send_timeout 600s;

    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
}

然后重载 nginx。

建议把超时设为 600 秒(10 分钟)。


五、如果修改 Nginx 后仍然 60 秒超时

说明超时不在 Nginx,而在后端或前端。

需要继续检查:

1. 前端 axios 超时

axios.defaults.timeout = 600000

2. Node.js server 超时

server.timeout = 600000

3. Gunicorn 超时

gunicorn app:app -k uvicorn.workers.UvicornWorker --timeout 600

4. Python requests 调用 AI

requests.post(url, json=data, timeout=600)

5. OpenAI SDK

client = OpenAI(timeout=600)

六、AI 项目更推荐的架构(避免超时)

其实 AI 推理时间可能很长,不推荐用 HTTP 同步等待结果,更好的架构是:

用户请求 → 创建任务 → 返回 task_id
                 ↓
             后端慢慢跑 AI
                 ↓
        前端轮询 / websocket 获取结果

这样就不会受到 HTTP 超时限制。

很多 AI 项目都是这样做的,例如:

  • ChatGPT
  • Dify
  • OpenWebUI
  • Langchain 服务
  • 各种 AI SaaS

七、经验总结

以后如果遇到:

请求总是在 60 秒左右失败

优先检查:

1. Nginx proxy timeout
2. 前端 axios timeout
3. Node server timeout
4. Gunicorn timeout
5. Python requests timeout
6. CDN / Cloudflare timeout

60 秒几乎一定是默认超时,不是程序崩了。


八、一个非常有用的排查命令

查所有反向代理配置:

grep -R "proxy_pass" /www/ -n

可以快速找到所有代理位置。


九、总结一句话

AI 项目部署时,超时问题几乎是必踩的坑,尤其是 Docker + Nginx + 前后端分离架构。

只要记住:

60 秒超时 ≈ 一定有一层默认 timeout 没改

基本都能很快定位问题。


如果这篇能帮到后来的人,这篇踩坑记录就值了。

2026年3月27日阅读 00收藏 0

评论

登录后才可以发表评论。
暂无评论。