我正在尝试将nginx配置为如下: 顶级域名,例如example.com,由HTTP访问,重定向到HTTPS。其所有子域名也必须重定向到HTTPS(显然,子域名必须重定向到自身,但HTTPS)。
这是配置(文件default
):
server {
listen 80;
listen [::]:80;
server_name example.com *.example.com;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl default_server;
listen [::]:443 ssl default_server;
include snippets/ssl-example.com.conf;
include snippets/ssl-params.conf;
server_name example.com www.example.com;
root /home/user/wwwroot;
index index.html index.htm index.nginx-debian.html;
location / {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
try_files $uri $uri/ =404;
}
}
以下是'yt'子域(文件yt
)
server {
listen 443 ssl;
server_name yt.example.com;
location ^~ /.well-known {
allow all;
root /home/user/wwwroot;
}
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host $http_host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass http://localhost:8080;
}
}
正如所见,yt.example.com只是将请求传递给应用程序(在本例中为Youtrack)。
example.com和www.example.com的重定向工作正常,但对于yt.example.com,它表现得很奇怪。当我访问http://yt.example.com时,nginx会重定向到https://yt.example.com,但会提供root /home/user/wwwroot
文件中指定的内容default
。当我点击刷新按钮时,我的浏览器在https://yt.example.com重新加载页面,然后nginx按照我的预期将请求传递给应用程序。因此,当它将HTTP重定向到HTTPS时,它不会传递请求,但是当请求已经使用HTTPS时,它会成功重定向。
我不是nginx-guru,所以我需要一些帮助。