在子域上configurationnginx -http httpsredirect

我试图设置一个Web服务器,将强制https。 目前根域(我称之为name.com)redirect到https没有问题,但子域(my.name.com)没有。 https://my.name.com确实工作。

这是我的configuration文件:

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 } 

我在这里错过了什么?

根据您的configuration,它看起来像这是服务器上的默认站点,如果是这样,请尝试编辑您的第一个服务块是:

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

您没有将第一个块作为端口80的default_server,并且没有列出任何server_names(如果它不是默认服务器,则需要这样做),因此没有可能会触及第一个服务器块的stream量。

当一个块被设置为default_server时,它告诉Nginx使用该块来处理该块所绑定的端口/ IP地址上的所有请求(在这种情况下,在所有IP上的端口80),这与不同于更具体的服务器块名称。 另一种方法是把它看作是一个“全部捕捉”块。

当一个块有一个或多个特定的服务器名称时,该块将只适用于这些主机名。 所以在你的情况下,第二个服务器块将只响应my.name.com和www.my.name.com

有关SSLredirect的更多信息和详细信息,请参阅此网站 。