10

我正在尝试将我的 Web 应用程序发送到服务器,这是我第一次配置服务器。我按照本教程使用django-gunicorn-nginx设置http://ijcdigital.com/blog/django-gunicorn-and-nginx-setup/首先一切都很完美,我得到了django 欢迎页面。然后我在 django 项目中加载了应用程序并设置了静态根目录,现在我得到502 bad gateway你可以在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/'

Files 是我拥有所有静态文件的文件夹。如何让我的项目在服务器中工作?有人可以指导我吗?

更新

错误日志 https://gist.github.com/2768425

谢谢!

4

4 回答 4

12

第一的。不要if在 nginx conf 中使用。这不好。真的,真的很可怕。请改用以下内容:

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/IfIsEvil和http://wiki.nginx.org/Pitfalls

现在,就调试而言。你的 gunicorn 工人正在启动,因为有一些致命的错误。尝试关闭 gunicorn。如果您使用主管:

sudo supervisorctl stop [gunicorn process name]

然后,从您的项目根目录运行:

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

注意任何启动错误,或者如果它确实启动,请在浏览器中测试您的站点。如果您仍然没有得到任何有意义的信息,请尝试运行标准运行服务器

python manage.py runserver

同样,请注意任何错误,如果加载正常,请在浏览器中测试您的网站。我建议像在开发中一样在 localhost:8000 上进行测试。其中之一应该给你一些工作。

更新

您收到的错误说它无法连接到“ind=127.0.0.1”。然后,查看你正在运行的命令gunicorn_django -bind=127.0.0.1:8001,很容易看出问题所在。您可以使用-b或指定要绑定的 IP 和端口--bind。由于您只使用了一个-,因此将 IP 解释为ind=127.0.0.1,这显然是不正确的。你需要使用:

gunicorn_django --bind=127.0.0.1:8001

或者

gunicorn_django -b 127.0.0.1:8001
于 2012-05-22T15:14:15.907 回答
2

您需要正确理解指令。“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 提供数据可能会显示相同的错误。

于 2016-03-20T14:16:16.237 回答
0

增加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;
        }
}
于 2015-07-24T10:32:05.790 回答
0

尝试使用像 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
于 2018-08-10T16:36:21.270 回答