背景:一个应用,使用 Django 开发。部署到生产环境,使用 Gunicorn 运行 Django 应用,使用 Nginx 做为前端入口。使用 Supervisor 控制 Gunicorn 服务。
现象:
- 在线生成一个报告,等待下载时,出现“后台出错“。
- 在本地调试环境下,相同的代码,能报告能正常重生成并下载。
日志
从 Django 的应用后台日志,看不到任何问题。但是从 Nginx 的 access_error.log 可以看到以下错误:
*196220 upstream prematurely closed connection while reading response header from upstream, client: x.x.x., server: xxx.xxx.com, request: "POST /some_url_path/?keyword=some_keyword HTTP/1.1",
另外,从 gunicorn 的 log 可以看到以下错误:
[2022-12-31 10:14:18 +0800] [28748] [CRITICAL] WORKER TIMEOUT (pid:28760)
第一次尝试,修改 nginx 的 proxy 超时配置
先怀疑是不是 Nginx 超时了。
在 Nginx 的代理到后台 app 的配置中,增加以下 timeout 相关的内容: