鱼鱼头
•AI编程Docker 部署 AI 项目遇到 60 秒超时问题排查与解决
最近在服务器 Docker 上部署一个 AI 项目时,遇到一个很典型的问题: 请求 AI 接口超过 60 秒就自动超时断开。 最后排查发现是 Nginx 反向代理默认超时导致,这里记录一下完整排查过程,给后来人避坑。
一、问题现象
项目架构大致是:
浏览器 → Nginx → 前端服务 → 后端 API → AI 接口
当 AI 处理时间较长(>60s)时,请求会失败,表现为:
- 页面一直转圈
- 最后返回 504 / timeout
- 时间基本固定在 60 秒左右
如果你的超时时间非常接近 60 秒,基本可以确定是某一层默认超时。
二、排查思路(非常重要)
Web 请求一般会经过很多层:
| 层级 | 可能超时 |
|---|---|
| 浏览器 / 前端 | 60s |
| Nginx | 60s |
| Node.js server | 60s |
| Gunicorn | 30s / 60s |
| Python requests | 60s |
| OpenAI SDK | 60s |
| Cloudflar e | 100s |
所以排查顺序建议:
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日阅读 0赞 0收藏 0