使用通配符 LetsEncrypt 证书时,NGINX 将子域重定向到记录根域的根目录

NGINX redirecting subdomains to document root of root domain when using wildcard LetsEncrypt cert

我有一个 EC2 实例 运行 NGINX,我已经设置了一个涵盖子域的通配符 LetsEncrypt 证书。它实际上并没有重定向域名(例如 test.example.com 没有重定向到 example.com。它保持为 test.example.com 但显示 example.com 的文档根目录)。

我很确定我的 DNS 设置正确,因为当我删除我的 301 重定向并将根目录放在第一个服务器块中时,我所有的子域都正常工作,这让我相信 SSL 证书是问题所在.

这是我的 NGINX 配置:

server {
  listen 80;
  listen [::]:80;

  server_name example.com;

  return 301 https://example.com;
}

server {
  listen 443 ssl;

  root /var/www/html/example.com;

  index index.html;

  ssl_certificate /home/webadmin/letsencrypt/config/live/example.com/fullchain.pem;
  ssl_certificate_key /home/webadmin/letsencrypt/config/live/example.com/privkey.pem;
}

server {
    listen 80;
    listen [::]:80;

    server_name test.example.com;

    return 301 https://test.example.com;
}

server {
    listen 443 ssl;

    root /var/www/html/test.example.com;

    ssl_certificate /home/webadmin/letsencrypt/config/live/example.com/fullchain.pem;
    ssl_certificate_key /home/webadmin/letsencrypt/config/live/example.com/privkey.pem;
}

根据您的示例配置,您的 SSL server 块没有 server_name,但 http server 块有。所以 nginx 知道你在说什么 301 重定向但是 nginx 会选择第一个匹配端口/协议的服务器块,如果它不匹配 server_name