504 게이트웨이 시간 초과 uwsgi + nginx django 애플리케이션

504 게이트웨이 시간 초과 uwsgi + nginx django 애플리케이션

Nginx + uwsgi를 사용하여 Django 애플리케이션을 실행하려고 하는데 504 Gateway Time-out로드 1분 후에 수신이 발생합니다.

내 앱은 여러 웹사이트에서 특정 항목을 검색하므로 필요한 작업을 수행하는 데 시간이 걸립니다.

내 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/"

누구든지 내가 어떻게 이것을 제거할 수 있는지 알고 있습니까? 나는 수많은 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;

이 솔루션은 다양한 시나리오에서 발생하는 504 오류의 90%를 해결합니다. 프로젝트 구성은 위에서 언급한 것과 동일해야 합니다.

관련 정보