【问题标题】:Deploying Django with uwsgi and nginx, uwsgi ok but nginx not working使用 uwsgi 和 nginx 部署 Django,uwsgi ok 但 nginx 不工作
【发布时间】:2018-10-24 15:59:35
【问题描述】:

我正在尝试运行我的网站,当我运行时

uwsgi --socket 0.0.0.0:8080 --protocol=http --chdir /opt/virtualenv/landivarpj/ --wsgi-file /opt/virtualenv/landivarpj/landivarpj/wsgi.py 

我可以访问 192.xxx.xxx.xxx:8080 并且我的测试文本出现了, 但是如果我尝试访问 192.xxx.xxx.xxx 我只会得到一个 nginx 欢迎页面, 如果我尝试进入我的域名 www.xxxxxxxx.com,那么它根本不起作用。

在我的项目文件夹中(opt/virtualenv/landivarpj)我有一个带有

的 uswgi_params 文件
uwsgi_param  QUERY_STRING       $query_string;
uwsgi_param  REQUEST_METHOD     $request_method;
uwsgi_param  CONTENT_TYPE       $content_type;
uwsgi_param  CONTENT_LENGTH     $content_length;

uwsgi_param  REQUEST_URI        $request_uri;
uwsgi_param  PATH_INFO          $document_uri;
uwsgi_param  DOCUMENT_ROOT      $document_root;
uwsgi_param  SERVER_PROTOCOL    $server_protocol;
uwsgi_param  REQUEST_SCHEME     $scheme;
uwsgi_param  HTTPS              $https if_not_empty;

uwsgi_param  REMOTE_ADDR        $remote_addr;
uwsgi_param  REMOTE_PORT        $remote_port;
uwsgi_param  SERVER_PORT        $server_port;
uwsgi_param  SERVER_NAME        $server_name;

然后在 (opt/virtualenv/landivarpj/landivarpj) wsgi.py 是

import os

from django.core.wsgi import get_wsgi_application

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "landivarpj.settings")

application = get_wsgi_application()

在 etc/nginx/sites-available 中有 drlandivar.conf

upstream django {
    server 192.xxx.xxx.xxx:8080; # for a web port socket (we'll use this first)
}

server {
    listen      80;
    server_name drlandivar.com www.drlandivar.com;
    charset     utf-8;

    client_max_body_size 75M;   # adjust to taste

    location /media  {
        alias /opt/virtualenv/landivarpj/media;  
    }

    location /static {
        alias /opt/virtualenv/landivarpj/static; 
    }

    location / {
        uwsgi_pass  django;
        include     /opt/virtualenv/landivarpj/uwsgi_params; 
    }
}

site-available 和 site-enable 已链接

我做错了什么为什么它在 192.xxx.xxx.xxx:8080 上工作 但没有通过域和 nginx

***** nginx/availables-site/drlandivar.conf 推荐的新编辑

upstream django {
    server 192.254.145.207:8080;
}

server {
    listen      80;
    server_name drlandivar.com www.drlandivar.com;
    charset     utf-8;

    client_max_body_size 75M;   # adjust to taste

    location /media  {
        alias /opt/virtualenv/landivarpj/media;  
    }

    location /static {
        alias /opt/virtualenv/landivarpj/static; 
    }

    location / {
        proxy_pass  http://django;
    }
}

它仍然给我同样的问题页面只加载 trought 192.xxx.xxx.xxx:8080 not trought drlandivar.com 请帮忙

【问题讨论】:

  • server_name drlandivar.com www.drlandivar.com; 表示该块不接受没有主机名(只是一个 IP 地址)的请求。所以 nginx 会改为显示回退页面。请注意,当 DEBUG=False 时,Django 也应该拒绝没有接受主机名的请求。因此,在任何情况下,裸露的 IP 地址通常都会失败。
  • 您是否打算仅使用 IP 地址在生产中提供您的 django 页面?这是可能的,但你应该重新提出你的问题,专门询问这个问题。
  • 您正在使用带有 HTTP 协议的 uwsgi,因此您必须在 nginx 配置中使用 proxy_pass(而不是 uwsgi_pass)。 (反之亦然)

标签: django nginx uwsgi


【解决方案1】:

您需要改为proxy_pass。以下配置应该可以解决问题。

upstream django {
    server 192.254.145.207:8080;
}

server {

    ...

    location / {
        proxy_pass  http://django;
    }
}

【讨论】:

  • 这不起作用,或者我做错了什么,我编辑了代码参见上面的****部分。但该页面仅以 192.xxx.xxx.xxx:8080 打开,无法使用 drlandivar.com 加载它:(
  • 你能检查一下 nginx 和 django 的日志吗?是 5xx 错误吗?
  • 对不起,我是一个 huuuuge 新手,我不知道去哪里检查
  • 对于 nginx,/var/log/nginx/access.log 和 /var/log/nginx/error.log 是默认设置。对于 django,您仍然从命令运行,对吗?然后请检查是否有任何击中 django 的东西?
  • 列表对于 nginx 来说很长,但在 access.log 中我看到的都是 404 错误
【解决方案2】:

将您的示例与我的示例进行比较,有一件事很突出。试试

...
location / {
    include uwsgi_params;
    proxy_pass http://django;
}

将 --logto /var/log/uwsgi/uwsgi.log 添加到您的 uwsgi 调用(在创建 /var/log/uswgi 并使其可写入 uwsgi 进程之后)可能会带来一些额外的好处。

【讨论】:

    猜你喜欢
    • 2015-06-22
    • 2017-08-07
    • 2016-08-12
    • 2018-11-27
    • 2014-05-31
    • 2016-01-29
    • 2014-12-17
    • 2011-10-10
    • 2011-11-25
    相关资源
    最近更新 更多