首页 文章

Nginx和Gunicorn 502

提问于
浏览
0

我正在将应用程序部署到服务器,但我似乎误解了一些基本概念 . 问题是我正在使用端口8001的gunicorn

gunicorn myproj.wsgi:application --bind XXX.XXX.XXX.XXX:8001

但是,Nginx正在侦听端口8000,正如您在文件/ etc / nginx / sites-available / myproj中看到的那样:

server {
    listen 8000;
    server_name XXX.XXX.XXX.XXX;

    access_log off;

    location /static/ {
        root /opt/myproj;
    }

    location / {
        proxy_pass http://127.0.0.1:8001;
        proxy_set_header X-Forwarded-Host $server_name;
        proxy_set_header X-Real-IP $remote_addr;
        add_header P3p 'CP="ALL DSP COR PSAa PSDa OUR NOR ONL UNI COM NAV"';
    }
}

那么,这是发生了什么:

当我访问XXX.XXX.XXX.XXXX:8001时,我得到了我的页面,但没有任何静态文件 . 我可以通过XXX.XXX.XXX.XXX:8000/static/css/mycss.css访问静态文件 . 但是,当我访问XXX.XXX.XXX.XXX:8000时,我收到 502 - Bad Gateway 错误 .

我在这里误解了什么?如何使用静态文件访问我的页面?

2 回答

  • 2

    您的问题正在发生,因为您将gunicorn绑定到外部IP,但nginx正在转发到localhost端口 . 关键在于,根本不应该向外面使用炮弹;所有请求都应该通过nginx反向代理 .

    将gunicorn绑定到127.0.0.1:8001 .

  • 1

    使用像gunicorn这样的应用服务器的基本方案是:

    [User's web browser] <-> [Web server(Nginx)] <-> [Application server(Gunicorn)]

    Web服务器通常侦听端口80上的公共IP地址,然后将连接转发到应用程序服务器,作为反向代理 . 如果您在同一主机上运行应用程序服务器和Web服务器,则通常将两者都绑定到“localhost”(IP:127.0.0.1)和相同的端口,即您的情况下为8001 . 因此,请尝试在您的Nginx配置中指定的127.0.0.1:8001绑定Gunicorn .

    注意:如果两台服务器在一台计算机上运行,由于性能原因,通常需要通过Unix套接字而不是网络套接字连接它们 .

相关问题