带有 nginx uwsgi 错误网关 502 的 django

标签 django ubuntu nginx uwsgi

我想用 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
    }
}

然后使用以下方法创建符号链接(symbolic link):

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 Bad Gateway

nginx/1.10.0 (Ubuntu)

错误日志:

2017/02/06 09:46:41 [crit] 6867#6867: *1 connect() to unix:///root/cartoview_project/mysite.sock failed (13: Permission denied) while connecting to upstream, client: xx.xx.xxx.xxx, server: xxx.xxx.xxx.xxx, request: "GET / HTTP/1.1", upstream: "uwsgi://unix:///root/cartoview_project/mysite.sock:", host: "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 进程 - 此时出现 502 错误意味着 nginx 正在正确传递响应,但是它没有任何连接 ,或者它没有得到正确的响应。

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

例如

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

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

关于带有 nginx uwsgi 错误网关 502 的 django,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42063718/

相关文章:

python - 模型方法的详细名称

python - Django DATE_FORMAT 工作日名称

ubuntu - 在 tclsh 和模块上打开终端时出错

ubuntu - 我可以在安装 CUDA 和 CUDNN 后更新我的 nvidia 驱动程序而不会弄乱我的 CUDA 安装吗?

php - 由于 noscript nginx,fail2ban 经常禁止我进入 WordPress 管理员

javascript - PayPal JavaScript SDK 按钮打开大约 :blank#blocked window in Django template but not in local HTML file

python - Django 1.8中的cache_page导致 'str'对象不支持项目分配错误

linux - Docker 运行 - 用户组没有按预期工作?

nginx - nginx 可以在不使用分块编码的情况下发送动态压缩的内容吗?

docker - Nginx 作为 Nexus 的反向代理服务器 - 无法在 docker 环境中连接