我正在尝试将我的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/'
文件是我拥有所有静态文件的文件夹。如何让我的项目在服务器中工作?有谁能指导我?
更新
Errors.log https://gist.github.com/2768425
谢谢!
答案 0 :(得分:11)
首先。不要在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/IfIsEvil和http://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上进行测试。其中一个应该为你提供某些东西。
<强>更新强>
您收到的错误说它无法连接到“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
答案 1 :(得分:0)
增加keepalive_timeout。
YES
答案 2 :(得分:0)
您需要正确理解指令。 &#34;服务器名称&#34;指令保存IP地址和&#34; proxy_pass&#34;将连接到托管服务器的端口。在你的情况下:
server_name 127.0.0.1;
proxy_pass http://127.0.0.1:8001;
没有理由不这样做,但如果不这样做,那么就试试&#34; python manage.py runserver&#34;命令以确保您的站点运行没有错误,因为如果站点无法向wsgi.py提供可能显示相同错误的数据。
答案 3 :(得分: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