我想将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虚拟主机都必须定义密钥/证书。所以在您的例子中,如果您写了"listen…ssl",你必须写ssl_证书行。这并不重要,如果密钥/证书对将用于任何其他用途。

你可以有化名。即,如果/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;

即使在这种情况下,您也可以重定向,但我认为,如果这些是不同的vhost,那么理解和维护配置就更容易了。

Tag: nginx