簡體   English   中英

django-gunicorn-nginx:502壞網關

[英]django-gunicorn-nginx: 502 bad gateway

我正在嘗試將我的Web應用程序發送到服務器,這是我第一次配置服務器。 我正在使用django-gunicorn-nginx設置,遵循本教程http://ijcdigital.com/blog/django-gunicorn-and-nginx-setup/首先,一切都很完美,我得到了django歡迎頁面 然后我在django項目中加載應用程序並設置靜態根目錄,現在我得到502壞網關你可以在http://qlimp.com查看

gunicorn和supervisor設置的所有內容與該教程中顯示的相同。 但我修改了一些nginx conf。 這里是:

upstream app_server_djangoapp {
    server localhost:8001 fail_timeout=0;
}

server {
    listen 80;
    server_name qlimp.com;

    access_log  /var/log/nginx/guni-access.log;
    error_log  /var/log/nginx/guni-error.log info;

    keepalive_timeout 5;

    location / {
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_redirect off;
        if (!-f $request_filename) {
            proxy_pass http://app_server_djangoapp;
            break;
        }
    }
    location /files/ {
        autoindex on;
        root /home/nirmal/qlimp/qlimp/files/;
    }
}

這是我的媒體網址:

MEDIA_URL = '/files/'

文件是我擁有所有靜態文件的文件夾。 如何讓我的項目在服務器中工作? 誰能指導我?

UPDATE

Errors.log https://gist.github.com/2768425

謝謝!

第一。 不要在nginx conf中使用if 這不好。 就像真的一樣,非常可怕。 請改用以下內容:

location / {
    try_files $uri @proxy;
}

location @proxy {
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
    proxy_redirect off;
    proxy_pass http://app_server_djangoapp;
}

請參閱: http//wiki.nginx.org/IfIsEvilhttp://wiki.nginx.org/Pitfalls

現在,就調試而言。 你的gunicorn工作人員正在啟動,因為有一些致命的錯誤。 嘗試關閉gunicorn。 如果您正在使用主管:

sudo supervisorctl stop [gunicorn process name]

然后,從您的項目根運行:

python manage.py run_gunicorn -c path/to/gunicorn.conf

請注意任何啟動錯誤或實際啟動時,請在瀏覽器中測試您的站點。 如果您仍然沒有獲得任何有意義的信息,請嘗試運行標准的runserver

python manage.py runserver

再次注意任何錯誤,如果加載正常,請在瀏覽器中測試您的網站。 我建議像在開發中那樣在localhost:8000上進行測試。 其中一個應該給你一些工作。

UPDATE

你得到的錯誤說它無法連接到“ind = 127.0.0.1”。 然后,查看您正在運行的命令gunicorn_django -bind=127.0.0.1:8001 ,很容易看到問題所在。 您可以使用-b--bind指定要綁定的IP和端口。 由於您只使用了一個-它將IP解釋為ind=127.0.0.1 ,這顯然是不正確的。 你需要使用:

gunicorn_django --bind=127.0.0.1:8001

要么

gunicorn_django -b 127.0.0.1:8001

您需要正確理解指令。 “server_name”指令保存IP地址,“proxy_pass”將連接到托管服務器的端口。 在你的情況下:

server_name 127.0.0.1;
proxy_pass http://127.0.0.1:8001;

這沒有理由不工作但仍然如果它沒有嘗試“python manage.py runserver”命令以確保您的站點運行沒有錯誤,因為如果站點無法向wsgi.py提供數據可能會顯示相同的錯誤。

增加keepalive_timeout。

server {
        listen 5000 default deferred;
        client_max_body_size 4G;
        keepalive_timeout 5;
        server_name _;
        location / {
            proxy_read_timeout 800;
            proxy_pass  http://localhost:9000;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            break;
        }
}

嘗試使用像gevent這樣的工人級 我在python 3.7中使用gevent時遇到了一些麻煩,最好使用python 3.6。

Django,Python 3.6示例:

pip install gevent
gunicorn my_app.wsgi --workers 2 --worker-class=gevent --bind 0.0.0.0:80 --timeout=90 --graceful-timeout=10

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM