我安装了 django-nginx-gunicorn-supervisor-postgresql 。在Django管理员中,如果加载视图的时间超过5秒,我就得到504.
例如,如果我使用许多记录过滤更改列表视图并花费的时间超过该时间,则会显示504。只要花费更少的时间,相同的视图就可以使用更少的记录。
我也注意到一些视图仍然在后台运行,即使在504之后,因为我可以看到它们在完成后在数据库中进行的修改。
我试图增加我发现的所有超时(nginx,gunicorn),但没有一个被配置为5秒。 有什么可能是错误配置的猜测?或者哪里可以提高504的超时?
由于
我配置的超时时间是:
在/ etc / nginx / sites-enabled / mysite
中proxy_connect_timeout 60;
proxy_read_timeout 90;
proxy_send_timeout 90;
send_timeout 90;
fastcgi_read_timeout 300;
在/etc/nginx/nginx.conf
send_timeout 300;
keepalive_timeout 65;
proxy_connect_timeout 300;
proxy_read_timeout 300;
proxy_send_timeout 300;
在gunicorn_start文件中(由主管发起)
exec gunicorn -c ${CONF_FILE} ${DJANGO_WSGI_MODULE}:application \
--name ${NAME} \
--user=${USER} --group=${GROUP} \
--log-level=debug \
--timeout=90
在gunicorn.conf文件中(之前的$ {CONF_FILE})
timeout = 90
graceful_timeout = 30
keepalive = 3
答案 0 :(得分:1)
我发现调试事物的最佳方法是从Django开始,一直向上,直到找出什么是超时。
首先,检查Django是否超时。
在一个终端运行中:
python manage.py runserver 127.0.0.1:8000
然后在同一台机器上的终端中执行:
wget http://127.0.0.1:8000/<path_to_your_admin_view>
如果有效,请检查Gunicorn是否超时:
在Gunicorn配置文件中,更改设置,使其绑定到本地端口而不是套接字:
exec gunicorn -c ${CONF_FILE} ${DJANGO_WSGI_MODULE}:application \
--name ${NAME} \
--user=${USER} --group=${GROUP} \
--log-level=debug \
--bind=127.0.0.1:8001
--timeout=90
确保重新启动主管。然后在同一台机器上的终端中执行:
wget http://127.0.0.1:8001/<path_to_your_admin_view>
如果可行,则撤消对gunicorn配置的更改,重新启动主管并直接连接到nginx以查看它是否超时:
wget http://127.0.0.1:80/<path_to_your_admin_view>
如果这样可行,您的问题可能在代理或负载均衡器的上游。