我有一个example.com和www.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; }