Nginx 重定向到 www 域名不起作用。

5
我有以下的nginx配置。
server {
    listen 80;
    listen [::]:80;
    listen 443 ssl;
    server_name example.com;
    return 301 https://www.example.com$request_uri;
}
  • 它将 http://example.com 重定向到 https://www.example.com
  • 但是不会将 https://example.com 重定向到 https://www.example.com

如何将 https://example.com 重定向到 https://www.example.com


您在这个确切的服务器上(而不是主要的www.-)设置了有效的证书吗? - Vasfed
不,证书只适用于www子域名。这是个问题吗?@Vasfed - Tony Joseph
这可能是因为 SSL 配置不完整。证书通常会针对 www.@ 两者进行签发,所以尝试复制其配置,即使它无效 - 你至少应该会收到警告而不是默默地不起作用。 - Vasfed
我已经更新了配置,包括证书路径,但仍然无法正常工作。这些证书适用于www和@。 - Tony Joseph
1个回答

8
请分离http和https流量。您当前的配置会有一些问题。以下代码将所有来自http://example.com的请求重写为https://example.com,并使用永久重定向:
server {
   listen 80;
   server_name example.com;
   return 301 https://$server_name$request_uri;
}

第二个代码块将处理从端口443进入的请求(此示例将使您在ssllabs.com上获得A评级):

server {
   listen 443 ssl;
   server_name example.com;

   ssl_certificate /path_to/ssl.crt;
   ssl_certificate_key /path_to/ssl.key;
   ssl_session_timeout 1d;
   ssl_session_cache shared:SSL:10m;
   # ssl_session_tickets off;

   # openssl dhparam -out dhparam.pem 2048
   # ssl_dhparam /etc/nginx/SSL/dhparams.pem;

   ssl_protocols TLSv1.1 TLSv1.2;
   ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGC$
   ssl_prefer_server_ciphers on;

   add_header Strict-Transport-Security "max-age=15768000;includeSubdomains; preload";

   root /srv/wwwroot/;
   index index.html index.htm index.php;

   client_max_body_size 20M;

   location / {
       # your special config if needed
   }


 }

最后,在我们的配置中,通过第三个块,我们将 https://www.example.com 重写回 https://example.com

server {
   listen 443;
   server_name www.example.com;
   return 301 https://$server_name$request_uri;
}

希望这可以帮到您。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接