2015-09-28 82 views
1

我想使用Nginx + uwsgi運行我的Django應用程序,但在加載一分鐘後我收到504 Gateway Time-out504網關超時uwsgi + nginx django應用程序

我的應用程序需要一些時間來執行所需的任務,因爲它在多個網站上搜索特定的東西。

我的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解決方案,但沒有爲我工作。

+0

如果您的應用程序正在運行一個漫長的過程,您可以嘗試使用芹菜異步運行它。 Nginx可能有一種方法來增加超時,但是長時間執行同步任務並不是一個好主意。 http://celery.readthedocs.org/en/latest/django/first-steps-with-django.html – cdvv7788

+0

您是否找到任何解決方案? – rkatkam

回答

1

如果它的內部任務花費太多時間進行處理,請使用芹菜來運行任務。 http://docs.celeryproject.org/en/latest/userguide/tasks.html

如果它不是純粹的內部任務,例如: - 上傳大文件,則將Nginx client_body_timeout增加到大於60s。

它是因爲nginx配置中的默認超時。編輯Nginx虛擬主機文件 並在服務器{}部分添加以下行。 http://nginx.org/en/docs/http/ngx_http_core_module.html#client_body_timeout

# defualt is 60 seconds, For a 300 second timeout. 
client_body_timeout 300s; 

編輯: uwsgi_read_timeout 300S;也是需要的。但它已經在你的配置中。