504网关超时uwsgi + nginx django应用程序

504网关超时uwsgi + nginx django应用程序

504 Gateway Time-out我正在尝试使用 Nginx + uwsgi 运行我的 Django 应用程序,但加载一分钟后才收到。

我的应用程序需要一些时间来完成所需的操作,因为它要在多个网站上搜索特定的东西。

我的 nginx 配置如下:

upstream uwsgi {
    server 127.0.0.1:8000;
}

server {

    listen 80;
    server_name server_ip;

    root /opt/emails/subscriptions;
    index index.html index.htm index.php;

    location /emailsproject/ {
        root /opt/emails/subscriptions/;
    }

    location / {
        proxy_set_header X-Real-IP      $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass http://uwsgi;
        proxy_set_header Host $http_host;
        uwsgi_read_timeout 18000;
    }
}

我的 uwsgi 脚本:

description "uWSGI server"

env PYTHONPATH=/opt/emails/subscriptions
env DJANGO_SETTINGS_MODULE=emailsproject.settings

start on runlevel [2345]
stop on runlevel [!2345]
respawn
exec uwsgi_python --http-socket  127.0.0.1:8000 -p 4 --wsgi-file /opt/emails/subscriptions/emailsproject/wsgi.py

我的 nginx 在 error.log 中给出了以下错误消息:

2015/09/28 02:15:57 [error] 4450#0: *19 upstream timed out (110: Connection timed out) while reading response header from upstream, client: 37.235.53.246, server: my_server_ip, request: "POST /home/ HTTP/1.1", upstream: "http://127.0.0.1:8000/home/", host: "my_server_ip", referrer: "http://my_server_ip/home/"

有人知道我该如何摆脱这个问题吗?我尝试过很多 stackoverflows 解决方案,但都不起作用。

答案1

我知道我迟到了,但在尝试了许多这些建议(和其他建议)后,我最终发现我的超时是由于我的 DNS 引起的 - 如果您使用 Amazon 负载均衡器,它们的“空闲超时”默认设置为 120 秒。

答案2

这是因为您需要设置proxy_read_timeout,而不是uwsgi_read_timeout。反过来,这是因为您实际上没有使用 uwsgi,而是使用了 HTTP 代理。Uwsgi 后端是使用uwsgi_pass指令声明的。

答案3

许多人认为 504 与客户端的请求有关,或者如果站点上存在一些 DDoS 攻击,则会导致大量会话堆积。504 是双向的,因为如果您的 wsgi 无法显示代码和/或服务器由于溢出而无法响应,您可能会看到错误。因此,请确保运行 manage.py 来仔细检查您的代码是否可以显示。然后尝试"curl -I yoursite.com"命令以查看它是否仍然给您错误。您需要关注两个与 nginx 相关的文件,一个是/etc/nginx/nginx.conf默认全局设置。第二个是您在 中自己创建的/etc/nginx/sites-available。在您的全局/etc/nginx/nginx.conf安装中添加以下几行

proxy_connect_timeout   10;
proxy_send_timeout      15;
proxy_read_timeout      20;

此解决方案解决了不同情况下导致的 90% 504 错误。您的项目配置应该与上面提到的相同。

相关内容