nginx HTTPS WWWredirect到非WWW

我的SSL证书是为mydomain.com,所以我试图将所有www.mydomain.comredirect到没有www。 现在,所有这些工作:

http://www.mydomain.com http://mydomain.com https://mydomain.com 

但https://www.mydomain.com是给浏览器的“网站不安全”的警告…我试图设置一个像下面的redirect,但请告诉我在哪里我的脚本是越野车…

  server { listen 80; server_name www.mydomain.com mydomain.com; rewrite ^(.*) https://mydomain.com$1 permanent; client_max_body_size 100M; location / { index index.htm index.html index.php; } location ~ \.php$ { include fastcgi_params; fastcgi_index index.php; fastcgi_pass 127.0.0.1:9000; fastcgi_param SCRIPT_FILENAME /var/www/mysite$fastcgi_script_name; } } server { listen 443; ssl on; ssl_certificate /usr/local/nginx/conf/public.crt; ssl_certificate_key /usr/local/nginx/conf/server.key; server_name www.mydomain.com; rewrite ^(.*) https://mydomain.com$1 permanent; } server { listen 443; ssl on; ssl_certificate /usr/local/nginx/conf/public.crt; ssl_certificate_key /usr/local/nginx/conf/server.key; client_max_body_size 100M; server_name mydomain.com; root /var/www/mysite; index index.php; location ~ \.php$ { include fastcgi_params; fastcgi_index index.php; fastcgi_pass 127.0.0.1:9000; fastcgi_param SCRIPT_FILENAME /var/www/mysite$fastcgi_script_name; } } 

您的configuration脚本不是越野车。

使用您当前的configuration(假设您已经安装了标准的单一主题SSL证书), 这不是一个选项

原因是https连接的工作方式:

当客户端(浏览器)向服务器(nginx)发出https请求时,它通过SSL握手的方式启动SSL会话。 当且仅当握手成功并且会话build立时,浏览器发送包含主机名的实际HTTP请求。 由于SSL / TLS不仅是为数据连接提供encryption的一种方式,而且也是服务器向客户端validation自身的一种方式。 作为身份validation过程的一部分,浏览器validation服务器的身份。 validation检查之一是将证书使用者名称与浏览器想要请求内容的主机名相匹配。 如果validation失败,浏览器会向用户发出警告。

由于validation过程失败,服务器从不在端口443侦听器上接收到www.mydomain.com的HTTP请求,因此无法向客户端/浏览器发送redirect响应。

要启用从https://www.mydomain.com/到https://mydomain.com的redirect,您有几个选项,但是最重要的是:您需要一个证书,其中包含每个主机名的主题。

  1. SAN证书

    • 获得UC / SAN证书,并将www.mydomain.com添加为SAN(主题备用名称)
    • 主题(s)现在匹配mydomain.comwww.mydomain.com请求

  2. 多个IP地址

    • 获取您的服务器的另一个IP地址。
    • 获取主题为www.mydomain.com的SSL证书
    • configurationwww.mydomain.com https server以侦听新的IP地址(仍然是端口443)
    • www.mydomain.com https serverconfiguration为使用新证书
    • 更新www.mydomain.com的Alogging以指向公共DNS区域中的新IP地址

  3. TLS SNI

    • 像上面的例子一样,获取主题名为www.mydomain.com的SSL证书
    • 而不是使用另一个IP地址,请利用服务器名称指示 TLS扩展。

由于SNI对浏览器的支持有限,所以我会避免提出build议。3.如果您喜欢,请查看SNI上的nginx文档 (页面底部)

更新 :某些证书颁发机构提供单一主题证书,并为www.提供免费的额外SAN www. 字首。

如果您的网域不匹配,则无法避免“网站不安全”警告。 您的证书必须对要通过HTTPS提供服务的每个域有效,包括仅限redirect的域。

如果您的证书对“www.example.com”无效,仅对“example.com”有效,则无法从https://www.example.com/redirect到https://example.com/一个安全警告。

你可以试试这个:

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

否则,您可以获得通配符证书,该证书将涵盖所有三级域名。