Nginxredirectwww到no-www(SSL)创build不安全

我正在运行一个Nginx服务器,通过SSL为我的网站提供服务。 对于SSL支持,我使用LetsEncrypte。 sites-available Nginxconfiguration文件sites-available如下所示:

 server { listen 80; server_name domain.nl anotherdomain.nl; # return 301 https://$server_name$request_uri; return 301 https://domain.nl$request_uri; } server { listen 80; server_name www.domain.nl; return 301 $scheme://domain.nl$request_uri; } server { listen 443; server_name domain.nl; # SSL ssl_certificate /etc/letsencrypt/live/domain.nl/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/domain.nl/privkey.pem; include snippets/ssl-params.conf; location / { proxy_pass http://localhost:6000; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header Host $host; proxy_cache_bypass $http_upgrade; } } 

如果您访问domain.nl我的网站工作得很好。 在第一个服务器块中,我也有另一个域,在这个例子中是anotherdomain.nl 。 这一个也工作正常,并redirect到没有www的安全网站。 以某种方式使用www. 在域名导致浏览器“您的连接不是安全”消息之前。 我为www.创build了一个新的服务器块www. 并尝试将其添加到第一个服务器块。 两者都没有工作。

我看不出这有什么问题。 任何抬头?

您需要为SSL www.domain.nl创build另一个server块,以domain.nl重写,如下所示:

 server { listen 443 ssl; server_name www.domain.nl; ssl_certificate /etc/letsencrypt/live/domain.nl/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/domain.nl/privkey.pem; include snippets/ssl-params.conf; return 301 https://domain.nl$request_uri; } 

您还必须确保您的证书对于www.domain.nldomain.nl均有效。

您当前的configuration导致nginx使用端口443的默认server处理www.domain.nl ,因为没有该域名的SSL服务器块。 如果listen指令中有一个带有default_server选项的单独的server块,则用于该请求。 如果这样的服务器块不存在,则由nginx确定的默认值进行处理。