我尝试使用Nginx + uwsgi运行我的Django应用程序,但在加载一分钟后收到504 Gateway Time-out 。
我的应用程序需要一些时间来做它需要的东西,因为它在几个网站上search特定的东西
我的nginx conf是下一个:
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/"
有没有人有任何想法,我怎样才能摆脱这一点? 我已经尝试了大量的stackoverflow解决scheme,但没有为我工作。
很多人认为504与客户端的请求有关,或者如果现场有大量的DDoS攻击,会话堆积量很大。 如果您的wsgi无法显示代码和/或服务器由于溢出而无法响应,您可以看到错误。 所以请确保你运行manage.py来仔细检查你的代码是否是可显示的。 然后尝试"curl -I yoursite.com"命令,看看它是否给你错误仍然。 有两个nginx相关的文件需要关注,一个是在/etc/nginx/nginx.conf默认的全局设置。 第二个是你在/etc/nginx/sites-available创build自己的东西。 在您的全局/etc/nginx/nginx.conf安装中添加以下几行
proxy_connect_timeout 10; proxy_send_timeout 15; proxy_read_timeout 20;
该解决scheme解决了在不同情况下导致的90%的504错误。 你的项目conf应该和你上面提到的一样。
这是因为你需要设置proxy_read_timeout ,而不是uwsgi_read_timeout 。 而这又是因为你实际上不使用uwsgi,而是使用HTTP代理。 Uwsgi后端声明使用uwsgi_pass指令。