我想将 http 重定向到 https,并将 naked 重定向到 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 内容?
答案1
每个 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;
即使在这种情况下您也可以进行重定向,但我认为如果它们是不同的虚拟主机,则更容易理解和维护配置。