连接Nginx和Django

时间:2018-04-27 18:44:30

标签: django nginx uwsgi

这是我第一次在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上找到它。

可能的原因:

    nginx配置中的
  1. /run/uwsgi/mysite.sock由于某种原因不存在,这让我觉得这可能是原因。

  2. systemctl status nginx中,错误Failed to read PID from file /run/nginx.pid: Invalid argument应该是上述问题的原因? (systemctl status wsgi没有错误。)

  3. 从上述问题来看,我认为这些问题是由我的Nginx配置引起的,这是正确的吗?

  4. 它指向50x.html错误500,502,503,504(在这种情况下,它是HTTP 502,错误的网关 - 这必须对配置执行某些操作)。

  5. 主要可能原因:

    systemctl status nginx中有一个错误Failed to read PID from file /run/nginx.pid: Invalid argument应该是上述问题的原因? (systemctl status wsgi没有错误。)

    已检查this problem & solution,但它无效。

    请确保/run/uwsgi/目录为空,也许这就是原因。

    谢谢!

1 个答案:

答案 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