我正在将应用程序部署到服务器,但我似乎误解了一些基本概念 . 问题是我正在使用端口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 回答
您的问题正在发生,因为您将gunicorn绑定到外部IP,但nginx正在转发到localhost端口 . 关键在于,根本不应该向外面使用炮弹;所有请求都应该通过nginx反向代理 .
将gunicorn绑定到127.0.0.1:8001 .
使用像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套接字而不是网络套接字连接它们 .