将Nginx HTTP / HTTPS www重定向到非www

时间:2017-08-25 00:18:07

标签: ssl nginx

我刚购买了通配符SSL证书,可以让我访问动态子域。我可以使用我的配置访问以下域名:

https://test.example.co/

https://example.co/

http://example.co/转到 - > https://example.co/

因此,我强制所有HTTP转换为HTTPS并删除www

我的问题是我有动态子域,允许用户拥有他们想要的任何子域(https://user1.example.cohttps://user2.example.cohttps://user3.example.co)。

我的问题是,当用户访问http://www.user1.example.co/https://www.user1.example.co/时,我会收到以下信息:

NET::ERR_CERT_COMMON_NAME_INVALID

我的配置:

server {
    server_name www.example.co;
    return 301 $scheme://example.co$request_uri;
}
server {
    listen 443;
    ssl on;
    ssl_certificate /etc/nginx/blah;
    ssl_certificate_key /etc/nginx/blah;

    server_name example.co *.example.co;

    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;

    location / {
        proxy_pass http://127.0.0.1:3000;
        proxy_set_header X_FORWARDED_PROTO https;
        proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header  Host $http_host;
        proxy_set_header  X-Url-Scheme $scheme;
        proxy_redirect    off;
        proxy_max_temp_file_size 0;
    }
}

我已删除了证书和内部逻辑,但我的目标是删除任何www.。所以它会这样:

http://www.user1.example.com - > https://user1.example.com http://www.user2.example.com - > https://user2.example.com

当然,我上面的所有域名都像现在一样工作。

1 个答案:

答案 0 :(得分:2)

只有在您拥有所有可用的子域名之后才有可能。

您可以在同一证书中包含多个带通配符的子域。因此,您需要一个包含您将要使用的所有子域的证书

*.example.com
*.user1.example.com
*.user2.example.com
*.user3.example.com
*.user4.example.com

这意味着您无法动态地将新子域添加到列表中,因为它需要重新生成证书。

  

名称中的通配符仅反映单个标签,通配符只能位于最左侧。因此,没有 .example.org,www。*。example.org是可能的。 * .example.org既不匹配example.org也不匹配www.subdomain.example.org,只匹配subdomain.example.org。

     

但是你可以在同一个证书中有多个通配符名称,也就是说你可以在同一个证书中包含* .example.org和* .subdomain.example.org

SSL Multilevel Subdomain Wildcard