我在 CentOS 7 服务器上配置了 Nginx。我有 2 个站点正在运行,我使用 Cerbot 安装了 SSL 证书,并且该过程执行没有错误。我有 2 个子域,x.mydomain.com
和 y.mydomain.com
我正在运行的站点对应于在它们自己的端口上运行的应用程序,其中一个为 9100,第二个为 9200,因此我将 Nginx 配置为将请求重定向到相应的端口。例如,第一个应用程序的服务器 block 是:
server {
listen 80;
server_name x.mydomain.com;
access_log logs/mydomainX.log main;
location / {
proxy_pass http://127.0.0.1:9100;
}
listen 443 ssl; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/x.mydomain.com/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/x.mydomain.com/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
if ($scheme != "https") {
return 301 https://$host$request_uri;
} # managed by Certbot
}
所以,如果我在浏览器中打开
x.mydomain.com
我从 Nginx 获得状态码 502,但是,如果我直接使用 IP 打开:xxx.xxx.xxx.xxx.xxx:9100
然后我可以看到该网站。所以我在 Nginx 配置中一定有问题,我错过了什么?谢谢
最佳答案
状态码 502 表明 nginx 可以连接到代理上游,所以 127.0.0.1:9100
上的上游有问题.
如果请求 xxx.xxx.xxx.xxx.xxx:9100 工作正常,您可以更改您的 nginx
配置如下:
server {
listen 80;
server_name x.mydomain.com;
access_log logs/mydomainX.log main;
location / {
proxy_pass http://xxx.xxx.xxx.xxx.xxx:9100;
}
listen 443 ssl; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/x.mydomain.com/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/x.mydomain.com/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
if ($scheme != "https") {
return 301 https://$host$request_uri;
} # managed by Certbot
}
如果您仍想为 proxy_pass 使用 127.0.0.1:9100,您应该检查您的应用程序,可能它没有绑定(bind)到 127.0.0.1。
关于nginx - Nginx 中的状态 502,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44931057/