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

欢迎留言