这是我第一次在Nginx工作。我知道为了轻松连接Django和Nginx,我需要uWSGI。
uWSGI :
我认为我的uWSGI设置完全正常,我已经用它在HTTP端口80
上运行我的Django网站:
uwsgi --http :80 --root /root/Env/firstsite --chdir /root/mysite -w mysite.wsgi
但是,因为这不是一个非常实用的方法,而且最好的"安全性,我不得不使用Nginx。在这种情况下,我使用过" uWSGI Emperor"模式,然后我创建了一个新文件/etc/uwsgi/sites/mysite.ini
:
[uwsgi]
project = mysite
base = /root
chdir = %(base)/%(project)
home = %(base)/Env/%(project)
module = %(project).wsgi:application
master = true
processes = 5
socket = %(base)/%(project)/%(project).sock
chmod-socket = 666
vacuum = true
在这种情况下,我使用的是使用uwsgi
协议的unix套接字而不是HTTP端口。
最后,我创建了/etc/systemd/system/uwsgi.service
文件(根据我的理解,启动时会启动uwsgi):
[Unit]
Description=uWSGI Emperor service
After=syslog.target
[Service]
ExecStart=/usr/uwsgi --emperor /etc/uwsgi/sites
Restart=always
KillSignal=SIGQUIT
Type=notify
StandardError=syslog
NotifyAccess=all
[Install]
WantedBy=multi-user.target
Nginx的:
我的Nginx设置非常简单,我只是修改了现有的服务器块以适应uWSGI配置:
server {
listen 80;
server_name mysite.com www.mysite.com;
location = favicon.ico { access_log off; log_not_found off; }
location /static/ {
root /root/mysite;
}
location / {
include uwsgi_params;
uwsgi_pass unix:/run/uwsgi/mysite.sock;
}
}
发起:
sudo systemctl start nginx
sudo systemctl start uwsgi
sudo systemctl enable nginx
sudo systemctl enable uwsgi
此过程不会输出任何错误。
Webserver返回Nginx的默认html响应 - 当我希望它返回Django的默认html响应时。这有什么理由吗?我觉得我在这里遇到一个非常简单的问题,因为我无法在stackoverflow上找到它。
/run/uwsgi/mysite.sock
由于某种原因不存在,这让我觉得这可能是原因。
在systemctl status nginx
中,错误Failed to read PID from file /run/nginx.pid: Invalid argument
应该是上述问题的原因? (systemctl status wsgi
没有错误。)
从上述问题来看,我认为这些问题是由我的Nginx配置引起的,这是正确的吗?
它指向50x.html
错误500,502,503,504(在这种情况下,它是HTTP 502,错误的网关 - 这必须对配置执行某些操作)。
主要可能原因:
在systemctl status nginx
中有一个错误Failed to read PID from file /run/nginx.pid: Invalid argument
应该是上述问题的原因? (systemctl status wsgi
没有错误。)
已检查this problem & solution,但它无效。
请确保/run/uwsgi/
目录为空,也许这就是原因。
谢谢!
答案 0 :(得分:1)
解决了问题!
Nginx服务器配置:
server {
listen 80;
server_name mysite.com www.mysite.com;
location = favicon.ico { access_log off; log_not_found off; }
location /static/ {
root /root/mysite;
}
location / {
include uwsgi_params;
uwsgi_pass unix:/run/uwsgi/mysite.sock;
}
}
与uWSGI
配置不匹配:
[uwsgi]
project = mysite
base = /root
chdir = %(base)/%(project)
home = %(base)/Env/%(project)
module = %(project).wsgi:application
master = true
processes = 5
socket = %(base)/%(project)/%(project).sock
chmod-socket = 666
vacuum = true
可见,Nginx配置中指定的unix套接字的路径不正确。因此,必须在配置中匹配这些套接字路径:/run/uwsgi/%(project).sock
。