在哪里为多个 nginx 服务器块定义 SSL 配置

在哪里为多个 nginx 服务器块定义 SSL 配置

我想将 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;

即使在这种情况下您也可以进行重定向,但我认为如果它们是不同的虚拟主机,则更容易理解和维护配置。

相关内容