Nginx 子域 CNAME ssl 处理

问题描述 投票:0回答:1

我有一个带有 vite 的 React 应用程序,它为每个用户创建一个子域,并允许他们根据需要对其进行自定义。它是用 nginx 包装的,配置如下

server {
    server_name test.domainname.ai *.test.domainname.ai;

    location / {
        proxy_pass http://localhost:5173;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
        add_header X-location-header $scheme$request_method$host$request_uri;
    }
    
  listen 443 ssl http2;
  ssl_certificate /etc/letsencrypt/live/test.supportio.ai/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/test.supportio.ai/privkey.pem;
  include /etc/letsencrypt/options-ssl-nginx.conf;
  ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
  root /var/www/test.supportio.ai;
}

当我将我的域名 (somedomainname.com) 指向带有 CNAME 记录的 somename.test.domainname.ai 时,它会给出 SSL 错误,提示“test.domainname.ai”不验证“somedomainname.com”

我已经使用 certbot 为子域的通配符子域生成了 ssl 证书(测试)

reactjs ubuntu nginx vps
1个回答
0
投票

您遇到的 SSL 错误是由于

test.domainname.ai
的 SSL 证书未覆盖域
somedomainname.com
造成的。 SSL 证书颁发给特定域名或通配符,并验证这些域的身份。当您创建 CNAME 记录以将
somedomainname.com
指向
somename.test.domainname.ai
时,
test.domainname.ai
的 SSL 证书不会自动验证
somedomainname.com

要解决此问题,您有以下几种选择:

  1. somedomainname.com
    颁发新的SSL证书:如果您拥有或控制
    somedomainname.com
    ,您可以为其颁发单独的SSL证书。
  2. 使用多域(SAN)证书:此类证书可以在单个证书中覆盖多个特定域名(包括不同级别和不同域)。
  3. 更新 Nginx 配置:如果您计划有多个域指向您的服务器,您可能需要设置单独的服务器块或使用 Nginx 中的默认服务器块来处理这些情况,每个域都有自己的 SSL 证书。
  4. 动态 SSL 证书加载:一些高级 Nginx 设置可以根据请求的域动态加载正确的 SSL 证书。这需要额外的配置和可能的脚本来选择正确的证书。
  5. Let's Encrypt 和 Certbot:如果您使用 Let's Encrypt,则可以使用 Certbot 为其他域颁发证书。您还可以探索使用 Certbot 的挂钩来自动执行添加新域时部署新证书的过程。
© www.soinside.com 2019 - 2024. All rights reserved.