Nginx:redirectHTTPS站点到www HTTPS,需要证书吗?

我有一个example.comwww.example.com的证书和以下configuration:

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

我正在尝试redirect到www.example.com ,它在我访问https://example.com时起作用。 我成功redirect。 但我不明白为什么它的作品。 301redirect应该通过SSL进行,但是我没有指定证书。 它怎么能工作?

另外,什么是build议的方式来做到这一点? 只是在上面的块中添加证书?

是的,您需要https://站点的证书才能redirect到https:// www站点。 一般来说,最简单的方法是获得一个同时包含www和non-www的证书,并在两个服务器configuration中使用它。 让我们encryption这没有问题。

为什么你的configuration工作?

我不知道为什么你的configuration上面的工作,没有指定证书。 据我所知它不应该。

我把你的configuration放到我的Nginx实例上,稍微调整一下,如下所示

 server { listen 443 ssl; listen [::]:443 ssl; server_name example2.com; return 301 https://www.example2.com$request_uri; } server { listen 443 ssl; listen [::]:443 ssl; server_name www.example2.com; root /var/www/folder; } 

我将以下内容添加到我的/ etc / hosts中

 11.0.1.10 example2.com www.example2.com 

当我做了一个wget这是我得到的

 wget https://www.example2.com --2017-07-29 08:07:17-- https://www.example2.com/ Resolving www.example2.com (www.example2.com)... 11.0.1.10 Connecting to www.example2.com (www.example2.com)|11.0.1.10|:443... connected. Unable to establish SSL connection. 

您可以看到它可以连接到服务器,但无法build立SSL连接。 当我使用curl我得到不同的回应,但它不起作用。

 curl https://www.example2.com curl: (35) Encountered end of file 

基于这一点,我认为你所告诉我们的东西缺less一些东西。

这是应该如何

这显示了Nginx应该如何configuration。

 # Main website, https www server { server_name www.example.com; listen 443 ssl http2; # http2 is optional ssl_certificate /path/to/fullchain; ssl_certificate_key /path/to/privkey; # locations etc } # forward https non-www to www server { server_name example.com; listen 443 ssl; ssl_certificate /path/to/fullchain; ssl_certificate_key /path/to/privkey; return 301 https://www.example.com$request_uri; } # Forward http to https server { listen 80; server_name example.com www.example.com; access_log /var/log/nginx/access.log main buffer=128k flush=1m if=$log_ua; return 301 https://example.com$request_uri; }