【问题标题】:django with nginx uwsgi bad gateway 502django 与 nginx uwsgi 坏网关 502
【发布时间】:2017-06-23 03:42:50
【问题描述】:

我想用 nginx 运行 django,我遵循了这个 instructions 并在

/etc/nginx/sites-available/cartoview_one

upstream django {
    server unix:///root/cartoview_project/mysite.sock; # for a file socket    }

server {
    listen      80;
    server_name xx.xx.xx.xx;
    charset     utf-8;

    # max upload size
    client_max_body_size 2048M;   # adjust to taste

    # Django media
    location /media  {
        alias /root/cartoview_project/uploaded;
    }

    location /static {
        alias /root/cartoview_project/static;
    }
    location / {
        uwsgi_pass  django;
        include     /root/cartoview_project/uwsgi_params; # the uwsgi_params file you installed
    }
}

然后使用以下命令创建符号链接:

sudo ln -s /etc/nginx/sites-available/cartoview_one /etc/nginx/sites-enabled

在项目文件夹mysite_uwsgi.ini:

[uwsgi]
project = cartoview_project
chdir           = /root/cartoview_project
module          = %(project).wsgi:application
home            = /root/env
master          = true
processes       = 10
socket          = /root/cartoview_project/mysite.sock
chmod-socket = 666
vacuum          = true
http-socket = 0.0.0.0:80

项目结构:

.
|-- apps
|-- cartoview_project
|   |-- __init__.py
|   |-- __init__.pyc
|   |-- local_settings.py
|   |-- local_settings.pyc
|   |-- local_settings.py.sample
|   |-- settings.py
|   |-- settings.pyc
|   |-- urls.py
|   |-- wsgi.py
|   `-- wsgi.pyc
|-- default_oauth_apps.json
|-- initial_data.json
|-- manage.py
|-- mysite_uwsgi.ini
`-- uwsgi_params

当我尝试使用 myip 访问网站时,会出现此消息:

502 网关错误

nginx/1.10.0 (Ubuntu)

错误日志:

2017/02/06 09:46:41 [crit] 6867#6867: *1 connect() to unix:///root/cartoview_project/mysite.sock 失败(13: 权限被拒绝)同时连接到上游,客户端: xx.xx.xxx.xxx,服务器:xxx.xxx.xxx.xxx,请求:“GET / HTTP/1.1”,上游: “uwsgi://unix:///root/cartoview_project/mysite.sock:”,主机: “xxx.xxx.xxx.xxx”

更新:

我删除了http-socket并运行以下命令/root/env/bin/uwsgi --ini mysite_uwsgi.inimysite.sock出现在项目中然后重新启动nginx但没有任何改变。

:~/cartoview_project# stat mysite.sock
  File: 'mysite.sock'
  Size: 0               Blocks: 0          IO Block: 4096   socket
Device: 802h/2050d      Inode: 17172079    Links: 1
Access: (0666/srw-rw-rw-)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2017-02-06 10:44:56.188168371 +0100
Modify: 2017-02-06 10:44:56.188168371 +0100
Change: 2017-02-06 10:44:56.188168371 +0100
 Birth: -

机器:vps(Ubuntu 16.04) 用户:root

已解决: 通过将include /root/cartoview_project/uwsgi_params 更改为include /etc/nginx/uwsgi_params;

【问题讨论】:

  • 您可以使用此命令在后端运行您的应用程序,使用 uwsgi uwsgi --http 0.0.0.0:8134 --wsgi-file UniservedWebsite/wsgi.py & 并将您的 nginx 引用到 0.0.0.0:8134 并添加 http-timeout

标签: django ubuntu nginx uwsgi


【解决方案1】:

根据描述,您似乎还没有运行 uwsgi 进程 - 此时出现 502 错误意味着 nginx 正在正确传递响应,但没有任何东西可以连接 ,或者它没有得到正确的响应。

which uwsgi 将为您提供适当的 uwsgi 的路径(如果您正在运行,请在您的 virtualenv 中执行此操作)。

例如

/root/cartoview_project/uwsgi --ini mysite_uwsgi.ini

您应该从 uwsgi 中取出 http-socket 配置变量 - nginx 正在侦听端口 80,并将其传递给您的 uwsgi 应用程序创建的 .sock 文件。

【讨论】:

  • 我删除了 http-socket 并运行以下命令 /root/env/bin/uwsgi --ini mysite_uwsgi.ini 并重新启动 nginx 但没有任何变化 注意:mysite.sock 出现在项目中
  • wsgi 肯定在运行吗?入住顶部。如果您在 mysite.sock 文件上运行 stat,您将获得什么用户/组和权限?
  • 统计结果有问题
  • 在迁移到套接字之前,您是否在端口上工作过?它看起来基本没问题,但我认为当您将 django 向上游传递时会发生一些奇怪的事情 - 如果您还没有尝试过,请尝试 section with ports first。供参考here is my nginx conf from a production site也许参数需要放在第一位?
  • 我还在那里添加了我们的 uwsgi.ini 的匿名版本。
猜你喜欢
  • 2019-01-01
  • 2015-04-30
  • 1970-01-01
  • 1970-01-01
  • 2020-06-29
  • 1970-01-01
  • 2017-07-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多