配置 nginx - 在子域名上将 http 重定向到 https

配置 nginx - 在子域名上将 http 重定向到 https

我正在尝试设置一个强制使用 https 的 Web 服务器。目前,根域(我将其称为 name.com)可以毫无问题地重定向到 https,但子域(my.name.com)却不行。https://my.name.com确实有效。

这是我的配置文件:

server {
    listen 80;
    listen [::]:80;
    return 301 https://$host$request_uri;
}    
server {
    # SSL configuration
    listen 443 ssl default_server;
    listen [::]:443 ssl default_server;

    root /var/www/html;

    # Add index.php to the list if you are using PHP
    index index.html index.htm index.nginx-debian.html;

    server_name my.name.com www.my.name.com;
    location / {
        proxy_pass http://localhost:8080;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
    }
    ssl_dhparam /etc/ssl/certs/dhparam.pem;

    ssl_certificate <path to cert>
    ssl_certificate_key <path to key>
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot     
}

我在这里遗漏了什么?

答案1

根据您的配置,这似乎是服务器上的默认站点,如果是这样,请尝试编辑您的第一个服务块如下:

服务器 {
    听 80 默认服务器;
    听[::]:80默认服务器;
    服务器名称 _;
    返回 301 https://$host$request_uri;
}

您没有将第一个块作为端口 80 的默认服务器,也没有列出任何服务器名称(如果它不是默认服务器,则需要列出),因此可能没有流量击中第一个服务器块。

当某个块被设置为 default_server 时,它会告诉 Nginx 使用该块来处理该块所绑定的端口/IP 地址上的所有请求(在本例中为所有 IP 上的端口 80),这些请求与名称更具体的服务器块不匹配。另一种理解方式是将其视为“全部捕获”块。

当一个块设置了一个或多个特定服务器名称时,该块将仅适用于这些主机名。因此,在您的情况下,第二个服务器块将仅响应 my.name.com 和 www.my.name.com

本网站有关 SSL 重定向的更多信息和详细信息。

相关内容