2012-05-22 102 views
9

我试图将我的web应用程序发送到服务器,这是我第一次配置服务器。我正在使用django-gunicorn-nginx按照本教程设置http://ijcdigital.com/blog/django-gunicorn-and-nginx-setup/首先,所有内容都非常完美,我收到了django欢迎页面。然后我装的应用程序在Django项目和设置静态根,现在我得到502网关可以在http://qlimp.comdjango-gunicorn-nginx:502坏的网关

高达一切的gunicorn和监督者设置检查出相同显示该教程。但我修改了一些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

谢谢!

+0

502基本上就是说,nginx无法连接到upserver。 – vartec

+0

@vartec为何如此?我在conf配置中犯了什么错误吗? – rnk

+0

@mk:我不知道为什么,你必须自己调试。看看你的日志。尝试查看http:// localhost:8001是否在本地工作等。 – vartec

回答

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/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 
+0

我按照你所说的完成了修改。然后我运行这个命令:'sudo supervisorctl stop qlimp'。它显示'unix:///var/run/supervisor.sock没有这样的文件' – rnk

+0

当我运行这个'python manage.py runserver'它显示什么,但是当我运行'gunicorn_django -bind = 127.0.0.1:8001'它显示https://gist.github.com/2769983 – rnk

+0

而对于此代码'python manage.py run_gunicorn -c path/to/gunicorn.conf'它显示'Unknown command:'run_gunicorn'' – rnk

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; 
     } 
} 
0

您需要正确理解指令。 “server_name”指令保存IP地址,“proxy_pass”将连接到托管服务器的端口。你的情况:

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

没有理由不工作,但仍,如果它不那么试试“蟒蛇manage.py runserver命令”命令,以确保您的网站有没有错误运行,因为在现场的情况下无法向可能显示相同错误的wsgi.py显示数据。