连接Nginx和Django

连接Nginx和Django,django,nginx,uwsgi,Django,Nginx,Uwsgi,这是我第一次在Nginx工作。我知道为了方便地连接Django和Nginx,我需要uWSGI 安装程序 uWSGI: sudo systemctl start nginx sudo systemctl start uwsgi sudo systemctl enable nginx sudo systemctl enable uwsgi 我认为我的uWSGI设置非常好,我已经用它在HTTP端口80上运行了我的Django网站: uwsgi--http:80--root/root/Env/firs

这是我第一次在Nginx工作。我知道为了方便地连接Django和Nginx,我需要uWSGI

安装程序 uWSGI

sudo systemctl start nginx
sudo systemctl start uwsgi
sudo systemctl enable nginx
sudo systemctl enable uwsgi
我认为我的uWSGI设置非常好,我已经用它在HTTP端口
80
上运行了我的Django网站:

uwsgi--http:80--root/root/Env/firstsite--chdir/root/mysite-w mysite.wsgi

但是,由于这不是一种非常实用的方法来实现“最佳”安全性,所以我不得不使用Nginx。在本例中,我使用了“uWSGI皇帝”模式,然后创建了一个新文件
/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
在本例中,我使用的不是HTTP端口,而是unix套接字,它使用
uwsgi
协议

最后,我创建了
/etc/systemd/system/uwsgi.service
文件(据我所知,它在启动时启动uwsgi):

Nginx

sudo systemctl start nginx
sudo systemctl start uwsgi
sudo systemctl enable nginx
sudo systemctl enable uwsgi
我的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;
    }
}
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]
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
启动

sudo systemctl start nginx
sudo systemctl start uwsgi
sudo systemctl enable nginx
sudo systemctl enable uwsgi
此过程不会输出任何错误

问题: Webserver返回Nginx的默认html响应——我希望它返回Django的默认html响应。这有什么原因吗?我觉得我在这里遇到了一个非常简单的问题,因为我在stackoverflow的任何地方都找不到它

可能的原因:
  • nginx配置中的
    /run/uwsgi/mysite.sock
    由于某种原因不存在,这让我认为这可能是原因

  • systemctl status nginx
    中,从文件/run/nginx.PID读取PID时出现错误
    失败:无效参数
    这应该是上述问题的原因?(
    systemctl status wsgi
    没有错误)

  • 从上面的问题来看,我认为这些问题是由我的Nginx配置引起的,对吗

  • 它指向
    50x.html
    ,用于错误500502503504(在本例中是HTTP 502,坏网关-这与配置有关)

  • 主要可能原因:

    systemctl status nginx
    中,从文件/run/nginx.PID读取PID时出现错误
    失败:无效参数
    这应该是上述问题的原因?(
    systemctl status wsgi
    没有错误)

    检查过了,但不起作用

    请确保
    /run/uwsgi/
    目录为空,可能这就是原因

    谢谢大家!

    解决了这个问题

    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;
        }
    }
    
    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]
    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
    配置:

    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;
        }
    }
    
    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]
    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

    可能在nginx仍指向其默认值的地方。检查是否定义了任何服务器块。django设置是否在允许的\u主机列表中有“mysite.com”和“www.mysite.com”。@HashSplat Yes
    mysite.com
    在允许的\u主机数组中。@NishanthSpShetty我想没有,我检查了,只有一个服务器块。顺便说一句,它返回'50x.html',这可能是由于内部服务器错误造成的。假设您在进行更改后重新加载或重新启动了nginx,那么nginx pid问题呢???@NishanthSpShetty出于某种原因,nginx pid问题是由上述问题引起的。一旦我解决了这个问题,就不再有nginx-pid错误了。