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%를 해결합니다. 프로젝트 구성은 위에서 언급한 것과 동일해야 합니다.