站点图标 星露谷值班站长

Nginx + gunicorn 502 问题解决

最近公司要求上线一个工单系统,使用过程中发现数据量过多时前端请求后端会报错 502, 原因是后端数据过多响应慢导致的,于是乎开始着手解决问题。

架构如下

Nginx — gunicorn — Django

需要修改 nginx 和 gunicorn 的配置,如果只更改 nginx 配置那么问题还是无法解决,需要同时更改 nginx 和 gunicorn 的配置

nginx 配置

调整 nginx 的超时时间

proxy_connect_timeout 120s;
proxy_read_timeout 120s;
proxy_send_timeout 120s;

这三个参数都是加大 nginx 代理后端的超时时间

详细参数可以参考 Nginx 官方文档: 传送门

proxy_connect_timeout 默认超时时间为 60s,如果超过这个时间没有返回数据则认为后端程序不可用,返回 502。

gunicorn 配置
gunicorn 默认超时时间是 30s, 解决思路就是增加超时时间
使用参数 –timeout 120 超时时间为 2 分钟
启动命令如下

/data/web/xx_sql/venv/bin/python3 /data/web/xx_sql/venv/bin/gunicorn settingConf.wsgi:application -w 2 -b 0.0.0.0:6001 –access-logfile /data/logs/xx_sql/access.log –error-logfile /data/logs/xx_sql/error.log –timeout 120 -p gunicorn.pid -D

然后保存修改的配置文件,重启 nginx 和 gunicorn,再次访问接口,502 超时问题解决!

退出移动版