跳到主要内容

通配符 DNS 配置

通配符 DNS 允许使用 acme.yourdomain.comtechcorp.yourdomain.com 等租户子域名。这是可选功能 — FeedbackPulse 不需要通配符 DNS 也可正常使用基于 slug 的 URL(如 /wall/acme-corp)。


我是否需要通配符 DNS?

场景是否需要通配符 DNS?
租户使用基于 slug 的公开页面(/wall/acme-corp
租户需要自己的子域名(acme.yourdomain.com
租户使用自有自定义域名(feedback.acme.com否(使用 CNAME 代替)

所需条件

  1. 通配符 DNS A 记录: *.yourdomain.com → 您的服务器 IP
  2. 通配符 SSL 证书: 覆盖 *.yourdomain.com
  3. Web 服务器配置: 接受所有子域名请求

第一步:添加 DNS 记录

进入您的域名注册商 DNS 管理面板并添加:

类型名称/主机TTL
A*123.456.789.0(您的服务器 IP)300

根域名同样需要普通 A 记录:

类型名称/主机
A@123.456.789.0

各服务商操作说明

Cloudflare

  1. 登录 Cloudflare 控制台
  2. 选择您的域名
  3. 进入 DNS记录
  4. 点击 添加记录
  5. 类型:A | 名称:* | IPv4:您的服务器 IP | 代理:仅 DNS(灰色云朵)
  6. 点击 保存

重要: 通配符子域名请将 Cloudflare 代理设置为仅 DNS(灰色云朵),而非已代理(橙色云朵)。Cloudflare 免费计划不支持代理通配符子域名。

Namecheap

  1. 登录 → 域名列表管理您的域名
  2. 进入 高级 DNS
  3. 点击 添加新记录
  4. 类型:A Record | 主机:* | 值:您的服务器 IP | TTL:自动
  5. 保存

GoDaddy

  1. 登录 → 我的产品 → 您域名的 DNS
  2. 点击 添加记录
  3. 类型:A | 名称:* | 值:您的服务器 IP | TTL:600
  4. 保存

Google Domains / Google Cloud DNS

  1. 进入 Google Domains
  2. 选择您的域名 → DNS
  3. 自定义记录 下添加:
  4. 主机:* | 类型:A | 数据:您的服务器 IP
  5. 保存

AWS Route 53

  1. 进入 Route 53托管区域 → 选择您的域名
  2. 点击 创建记录
  3. 记录名称:* | 记录类型:A
  4. 值:您的服务器 IP | TTL:300
  5. 点击 创建记录

DigitalOcean DNS

  1. 进入 网络域名
  2. 选择您的域名
  3. 添加:类型 A | 主机名 * | 指向:您的服务器 IP | TTL:300

Hetzner DNS

  1. 进入 Hetzner DNS 控制台
  2. 选择您的区域
  3. 添加记录:类型 A | 名称 * | 值:您的服务器 IP

第二步:获取通配符 SSL 证书

方案 A:Let's Encrypt DNS 验证(免费)

Let's Encrypt 的通配符证书需要使用 DNS-01 验证(非 HTTP):

# 安装适合您服务商的 Certbot DNS 插件
# 示例:Cloudflare
sudo apt install certbot python3-certbot-dns-cloudflare

# 创建 Cloudflare 凭据文件
sudo mkdir -p /etc/letsencrypt
sudo nano /etc/letsencrypt/cloudflare.ini

添加您的 Cloudflare API token:

dns_cloudflare_api_token = your_cloudflare_api_token_here
sudo chmod 600 /etc/letsencrypt/cloudflare.ini

# 获取通配符证书
sudo certbot certonly \
--dns-cloudflare \
--dns-cloudflare-credentials /etc/letsencrypt/cloudflare.ini \
-d yourdomain.com \
-d "*.yourdomain.com"

其他服务商的 DNS 插件

服务商Certbot 插件安装命令
Cloudflarepython3-certbot-dns-cloudflaresudo apt install python3-certbot-dns-cloudflare
Route 53python3-certbot-dns-route53sudo apt install python3-certbot-dns-route53
DigitalOceanpython3-certbot-dns-digitaloceansudo apt install python3-certbot-dns-digitalocean
Google Cloudpython3-certbot-dns-googlesudo apt install python3-certbot-dns-google

方案 B:手动 DNS 验证

如果您的 DNS 服务商没有 Certbot 插件:

sudo certbot certonly --manual --preferred-challenges dns \
-d yourdomain.com -d "*.yourdomain.com"

Certbot 会要求您创建一条 TXT 记录,按提示操作即可。

手动验证注意事项: 您需要每 90 天手动续期,每次续期都要更新 DNS TXT 记录。

方案 C:付费通配符证书

可从以下服务商购买:

  • Comodo/Sectigo(约 $70/年)
  • DigiCert(约 $400/年)
  • RapidSSL(约 $125/年)

第三步:配置 Web 服务器

请参阅以下文档中的通配符部分:

关键:Apache 使用 ServerAlias *.yourdomain.com,Nginx 使用 server_name yourdomain.com *.yourdomain.com;


第四步:验证配置

# 测试子域名 DNS 解析
dig test.yourdomain.com

# 应在 ANSWER 部分返回您的服务器 IP

# 使用 curl 测试
curl -I https://anything.yourdomain.com
# 应返回 200 或重定向(而非"无法解析主机名")

第五步:配置 FeedbackPulse

更新您的 .env 文件:

# 设置 Session 域名以允许跨子域名使用 Cookie
SESSION_DOMAIN=.yourdomain.com

# 主应用 URL(不含子域名)
APP_URL=https://yourdomain.com

注意 SESSION_DOMAIN=.yourdomain.com 中的前导点号 — 这样 Session Cookie 才能在所有子域名间正常工作。


FeedbackPulse 中子域名的工作原理

当请求到达 acme.yourdomain.com 时:

  1. ResolveTenant 中间件提取子域名(acme
  2. 查找 subdomain = 'acme' 的租户
  3. 找到后,将该租户设置为当前上下文
  4. 用户看到该租户的登录页面或仪表板

租户在注册时设置自己的子域名,您也可以在管理面板中手动设置。


下一步