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