我想用 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.ini
和 mysite.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/