Django,Gunicorn 设置

Django, Gunicorn Setup

我正在尝试在我的服务器上设置一个 django 项目,但无法将其传送到 运行。我正在为静态文件使用 virtualenv、gunicorn 和 nginx。我不确定我是不是错了。我目前的设置如下:

myenv
  - project(my django project)
  - bin(and all it contains)
  - lib(and all it contains)
  - include(and all it contains)
  - gunicorn_config.py

gunicorn_config.py:

command = '/home/me/django/myenv/bin/gunicorn'
pythonpath = '/home/me/django/myenv/project'
bind = '127.0.0.1:80'
workers = 2

nginx project.conf:

upstream project_server {
    server unix:/tmp/gunicorn_project.sock fail_timeout=0;
}

server {
    listen 80;
    client_max_body_size 4G;

    # set the correct host(s) for your site
    server_name project.com www.project.com;

    keepalive_timeout 5;

    # path for static files
    root /home/me/django/myenv/assets;

    location / {
        # checks for static file, if not found proxy to app
        try_files $uri @proxy_to_app;
    }

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

    error_page 500 502 503 504 /500.html;
    location = /500.html {
        root /home/me/django/myenv/project/project/templates;
    }
}

并且我运行以下尝试启动它:

/home/me/django/myenv/bin/gunicorn -c /home/me/django/myenv/gunicorn_config.py project/project/wsgi.py

但它只是说 "Can't connect to ('127.0.0.1', 80)"

基本上,我猜 nginx 在 gunicorn 之前启动。它占用端口 80(来自您的 listen)。接下来是 gunicorn,也需要端口 80(来自您的 bind),并发现它已被占用,因此出错。 运行 不同端口上的 gunicorn 并使用 proxy_pass 告诉 nginx。

独角兽

bind = '127.0.0.1:8000'

Nginx

proxy_pass http://127.0.0.1:8000/;

您已将 gunicorn 配置为绑定到 TCP 端口,但 gunicorn 绑定到 unix 套接字。你应该使用同样的东西;最好是套接字,这样它就不会与 nginx 实际监听的端口冲突。

在gunicorn_config.py中:

bind = 'unix:/tmp/gunicorn_project.sock'