我在服务器上有一个 nginx 反向代理,在其中运行一堆应用程序,例如 app1.domain.com、app2.domain.com 等。我最近添加了一个具有以下配置的新应用程序(使用 LetsEncrypt for SSL):
server {
server_name app.domain.com;
server_name_in_redirect off;
location / {
proxy_pass http://127.0.0.1:6767;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $http_connection;
}
listen 443 ssl; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/app.domain.com/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/app.domain.com/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
}
server {
if ($host = app.domain.com) {
return 301 https://$host$request_uri;
}
# managed by Certbot
server_name app.domain.com;
listen 80;
return 404; # managed by Certbot
}
但是,每当我访问时,https://app.domain.com/
它都会重定向到https://127.0.0.1:6767/somelandingpage/
。更奇怪的是,如果我手动将 URL 修复到,https://app.domain.com/somelandingpage/
它可以正常加载,如果我在应用程序周围单击以导航到不同的路径,它会正确地停留在app.domain.com
。这个 nginx 配置与我使用的另一个应用程序几乎相同,所以我不确定为什么这个特别会这样重定向。起初我以为是应用程序认为它的 URL 是 127.0.0.1:6767 并重定向到那里,但如果我https://app.domain.com/
在 Postman 中尝试 GET 请求,我会得到Error: connect ECONNREFUSED 127.0.0.1:6767
(没有 /somelandingpage 路径)所以这让我认为这一定是 nginx 配置。但如果是这样的话,我在这里遗漏了什么?