事实:Nginx 默认可以访问。Gunicorn 正在运行,网站可以通过 LAN 访问。Nginx 运行,没有给我任何错误。当我检查时sudo lsof -i -P -n | grep LISTEN
,它告诉我 Nginx 没有监听任何东西,并且端口 80 和 443 是开放的。
我关注本教程建立一个 Flask 网站,直到最后一切都运行良好。我让 Gunicorn 在 上提供服务localhost:8000
,并可以通过其 LAN 地址的其他计算机访问它。然而,当我尝试从74.114.75.91
我的静态 IP 在线访问它时,我只得到 502。这是我的sites-available
代码。
server {
# listen on port 80 (http)
listen 80;
server_name _;
location / {
# redirect any requests to the same URL but on https
return 301 https://$host$request_uri;
}
}
server {
# listen on port 443 (https)
listen 443 ssl;
server_name _;
# location of the self-signed SSL certificate
ssl_certificate /home/pi/farmData/certs/cert.pem;
ssl_certificate_key /home/pi/farmData/certs/key.pem;
# write access and error logs to /var/log
access_log /var/log/farmData_access.log;
error_log /var/log/farmData_error.log;
location / {
# forward application requests to the gunicorn server
proxy_pass http://localhost:8000;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location /static {
# handle static files directly, without forwarding to the application
alias /home/pi/farmData/app/static;
expires 30d;
}
}
答案1
你的陈述相互矛盾。
您声明:“gunicorn 正在 localhost:8000 上运行”并且“可以通过其 LAN 地址上的其他计算机访问它”。
如果 Gunicorn 正在监听localhost:8000
,则它无法与 LAN 客户端通信。如果 Gunicorn 正在监听<lan_ip>:8000
,则 nginx 无法使用地址与其通信localhost:8000
。
您需要确保 Gunicorn 正在监听localhost:8000
地址。