最近公司要求上线一个工单系统,使用过程中发现数据量过多时前端请求后端会报错 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 超时问题解决!