我正在将应用程序部署到服务器,但我似乎误解了一些基本概念。问题是我正在使用带端口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
错误。
我在这里误解了什么?如何使用静态文件访问我的页面?
答案 0 :(得分:2)
您的问题正在发生,因为您将gunicorn绑定到外部IP,但nginx正在转发到localhost端口。关键在于,根本不应该向外面使用炮弹;所有请求都应该通过nginx反向代理。
将gunicorn绑定到127.0.0.1:8001。
答案 1 :(得分:1)
使用应用程序服务器时的基本方案,如gunicorn:
[用户的网络浏览器]< - > [Web服务器(Nginx)]< - > [应用程序服务器(Gunicorn)]
Web服务器通常侦听端口80上的公共IP地址,然后将连接转发到应用程序服务器,充当反向代理。如果您在同一主机上运行应用程序服务器和Web服务器,则通常将两者都绑定到“localhost”(IP:127.0.0.1)和相同的端口,即您的情况下为8001。因此,请尝试在您的Nginx配置中指定的127.0.0.1:8001绑定Gunicorn。
注意:如果两台服务器在一台计算机上运行,出于性能原因,通常需要通过Unix套接字而不是网络套接字连接它们。