我已将 NGINX 设置为仅接受端口 443 上的 HTTPS 流量,并且我想将所有非 HTTPS 流量从端口 80 重定向到 HTTPS。
我还有多个想要独立管理的子域。
我将从我的配置中发布一个示例,但会省略一些无聊的内容。
普通用户应该能够浏览的主要网站:
server
{
listen 443 ssl;
listen [::]:443 ssl;
server_name www.myserver.com;
root /var/www/www.myserver.com;
index index.php index.html index.htm;
}
其中一个子域名:
server
{
listen 443 ssl;
listen [::]:443 ssl;
server_name subdomain.myserver.com;
location /
{
proxy_pass https://127.0.0.1:8500;
}
}
现在我想将流量从端口 80 重定向到 HTTPS:
server
{
listen 80;
listen [::]:80;
server_name subdomain.myserver.com;
return 301 https://subdomain.myserver.com$request_uri;
}
问题:全部子域名将自动重定向至“https://subdomain.myserver.com",即使它们与重定向块中指定的服务器名称不匹配。
“http://www.myserver.com“(没有配置块)将被重定向到”https://subdomain.myserver.com“即使它与 server_name 不匹配
答案1
答案2
根据链接https://nginx.org/en/docs/http/request_processing.htmlDrifter104 评论中给出,配置中遇到的第一个特定端口的服务器定义被假定为默认端口,这就是为什么所有子域都重定向到第一个服务器定义。尝试/etc/nginx/conf.d/default_server.conf
使用以下内容创建配置:
server {
listen 80 default_server;
server_name default.myserver.com;
location / {
return 404;
}
}
server {
listen 443 ssl default_server;
server_name default.myserver.com;
location / {
return 404;
}
}
重新启动 nginx 后,所有未在配置中明确列出的域名都将显示 404 错误。