我正在运行一个 Nginx 服务器,它使用 SSL 为我的网站提供服务。为了支持 SSL,我使用 LetsEncrypte。我的 Nginx 配置文件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
在第一个服务器块中,我还有另一个域。这个也运行良好,并重定向到没有 www 的安全网站。不知何故,在域之前使用会导致浏览器出现“您的连接不安全”消息。我为创建了一个新的服务器块,并尝试将其添加到第一个服务器块。两者都不起作用。anotherdomain.nl
www.
www.
我看不出这有什么问题。有什么提示吗?
答案1
您需要创建另一个server
块以供 SSLwww.domain.nl
重写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.nl
和均有效domain.nl
。
www.domain.nl
您当前的配置导致 nginx 使用端口 443 的默认值进行处理server
,因为没有具有该域名的 SSL 服务器块。如果指令中有一个带有选项server
的单独块,则该块将用于请求。如果不存在这样的服务器块,则将由 nginx 确定的默认值进行处理。default_server
listen