我想将 http 重定向到 https,并裸转到 www。
所以我的配置:
# http naked -> https www
# http www -> https www
server {
listen 80;
server_name example.com www.example.com;
return 301 https://www.example.com$request-uri;
}
# https naked -> https www
server {
listen 443 ssl http2;
server_name example.com;
#ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem # <--- ??
#ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem # <--- ??
return 301 https://www.$host$request-uri;
}
# https www
server {
listen 443 ssl http2;
server_name www.example.com;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem
}
我是否需要重复??
中间块中显示的 SSL 内容?
每个 ssl 虚拟主机都必须定义密钥/证书。所以在你的情况下,如果你写了“listen ... ssl”,你必须写 ssl_certificate 行。这并不重要,如果该密钥/证书对将用于其他任何事情。
你可以有别名。即,如果您在 /etc/letsencrypt/live/example.com 中的密钥/证书对对 example.com 和 www.example.com 都有效(即 SAN 证书),并且您希望从 www.example 提供相同的内容.com 和 example.com 没有重定向,你在 nginx 中只能有一个 ssl vhost: server_name example.com www.example.com;
即使在这种情况下,您也可以进行重定向,但我认为如果它们是不同的虚拟主机,则更容易理解和维护配置。