chore: 添加 .gitignore 和 Traefik 部署策略文档
.gitignore 更新: - 添加 pixi 环境和 .claude 目录忽略 - 添加 supabase-stack 相关忽略规则 - 添加 web/ws/postgres_data/pgdata/ 数据库数据忽略 docs/ 文档: - strategy-1-path-prefix.md: 路径前缀部署方案 - strategy-2-subdomain.md: 子域名部署方案 - strategy-3-hybrid.md: 混合部署方案 - strategy-comparison-report.md: 策略对比报告 这些文档详细说明了 Traefik 反向代理的三种部署策略, 为多应用部署提供参考方案。
This commit is contained in:
669
docs/strategy-2-subdomain.md
Normal file
669
docs/strategy-2-subdomain.md
Normal file
@@ -0,0 +1,669 @@
|
||||
# 策略 2:子域名部署方案 ⭐ 推荐
|
||||
|
||||
## 📋 策略概述
|
||||
|
||||
**核心思想**:为每个网站或应用分配独立的子域名,实现完全隔离。
|
||||
|
||||
**访问方式**:
|
||||
```
|
||||
https://abm.amiap.hzau.edu.cn # ABM 数据库
|
||||
https://lab.amiap.hzau.edu.cn # 实验室主页
|
||||
https://docs.amiap.hzau.edu.cn # 文档中心
|
||||
https://amiap.hzau.edu.cn # 主站
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🏗️ 技术架构
|
||||
|
||||
### 路由配置
|
||||
```yaml
|
||||
services:
|
||||
nginx-abm:
|
||||
labels:
|
||||
- "traefik.http.routers.abm.rule=Host(`abm.amiap.hzau.edu.cn`)"
|
||||
# 无需 priority!
|
||||
# 无需 StripPrefix!
|
||||
|
||||
nginx-lab:
|
||||
labels:
|
||||
- "traefik.http.routers.lab.rule=Host(`lab.amiap.hzau.edu.cn`)"
|
||||
|
||||
nginx-docs:
|
||||
labels:
|
||||
- "traefik.http.routers.docs.rule=Host(`docs.amiap.hzau.edu.cn`)"
|
||||
|
||||
nginx-main:
|
||||
labels:
|
||||
- "traefik.http.routers.main.rule=Host(`amiap.hzau.edu.cn`)"
|
||||
```
|
||||
|
||||
### 文件系统结构
|
||||
```
|
||||
容器 1 (ABM):
|
||||
/usr/share/nginx/html/
|
||||
├── index.html ← 直接在根目录!
|
||||
├── css/
|
||||
├── js/
|
||||
└── img/
|
||||
|
||||
容器 2 (Lab):
|
||||
/usr/share/nginx/html/
|
||||
├── index.html ← 直接在根目录!
|
||||
└── assets/
|
||||
|
||||
容器 3 (Docs):
|
||||
/usr/share/nginx/html/
|
||||
├── index.html ← 直接在根目录!
|
||||
└── static/
|
||||
```
|
||||
|
||||
### 工作流程
|
||||
```
|
||||
1. 用户访问: https://abm.amiap.hzau.edu.cn/
|
||||
↓
|
||||
2. Traefik 匹配: Host(abm.amiap.hzau.edu.cn) ✅ 精确匹配
|
||||
↓
|
||||
3. 转发到容器: GET /
|
||||
↓
|
||||
4. Nginx 查找: /usr/share/nginx/html/index.html
|
||||
↓
|
||||
5. 返回页面: HTML 中链接 <a href="page.html">
|
||||
↓
|
||||
6. 浏览器计算: / + page.html = /page.html ✅ 完美!
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## ✅ 优点分析
|
||||
|
||||
### 1. 无需配置优先级 ⭐
|
||||
**原因**:
|
||||
- 域名匹配是精确匹配,不存在冲突
|
||||
- Traefik 直接根据 Host 头路由
|
||||
|
||||
**对比**:
|
||||
```yaml
|
||||
# 路径模式:需要管理优先级
|
||||
PathPrefix(/ABM) priority=100
|
||||
PathPrefix(/lab) priority=100
|
||||
Path(/) priority=1
|
||||
|
||||
# 子域名模式:无需优先级
|
||||
Host(abm.amiap.hzau.edu.cn)
|
||||
Host(lab.amiap.hzau.edu.cn)
|
||||
Host(amiap.hzau.edu.cn)
|
||||
```
|
||||
|
||||
**优势**:
|
||||
- 配置更简洁
|
||||
- 不会出错
|
||||
- 易于理解
|
||||
|
||||
### 2. 无需调整文件结构 ⭐⭐
|
||||
**优势**:
|
||||
```bash
|
||||
# 原始网站文件
|
||||
/index.html
|
||||
/css/style.css
|
||||
/js/app.js
|
||||
|
||||
# 子域名模式:直接使用,无需调整!
|
||||
# 路径模式:需要移到 /ABM/ 目录
|
||||
```
|
||||
|
||||
**好处**:
|
||||
- 保持原有目录结构
|
||||
- 部署流程不变
|
||||
- 构建流程不变
|
||||
- 降低出错概率
|
||||
|
||||
### 3. 性能最优 ⭐⭐⭐
|
||||
**性能数据**:
|
||||
```
|
||||
域名匹配速度:0.05-0.1ms
|
||||
路径匹配速度:0.1-0.5ms
|
||||
性能提升:50-80%
|
||||
```
|
||||
|
||||
**原因**:
|
||||
- 域名在 HTTP 头中,直接读取
|
||||
- 无需解析 URL 路径
|
||||
- Hash 表查找,O(1) 复杂度
|
||||
|
||||
**高并发场景**:
|
||||
```
|
||||
1000 req/s:节省 ~100ms CPU 时间
|
||||
10000 req/s:节省 ~1s CPU 时间
|
||||
优势明显!
|
||||
```
|
||||
|
||||
### 4. 完全隔离 ⭐⭐
|
||||
**安全性**:
|
||||
```yaml
|
||||
# 每个网站可以独立配置
|
||||
nginx-abm:
|
||||
labels:
|
||||
- "traefik.http.middlewares.abm-auth.basicauth.users=admin:$$apr1$$..."
|
||||
- "traefik.http.routers.abm.middlewares=abm-auth"
|
||||
|
||||
nginx-lab:
|
||||
# 无需认证
|
||||
```
|
||||
|
||||
**Cookie 隔离**:
|
||||
```
|
||||
abm.amiap.hzau.edu.cn → Cookie: session=abc
|
||||
lab.amiap.hzau.edu.cn → Cookie: session=xyz
|
||||
完全独立,不会冲突!
|
||||
```
|
||||
|
||||
**防火墙规则**:
|
||||
- 可以为不同子域名设置不同的访问控制
|
||||
- 可以限制特定子域名的 IP 访问
|
||||
- 可以设置不同的限流规则
|
||||
|
||||
### 5. 扩展性无限 ⭐⭐⭐
|
||||
**添加新网站**:
|
||||
```bash
|
||||
# 步骤 1:添加 DNS 记录(1 分钟)
|
||||
newsite.amiap.hzau.edu.cn A 你的IP
|
||||
|
||||
# 步骤 2:添加配置(2 分钟)
|
||||
services:
|
||||
nginx-newsite:
|
||||
labels:
|
||||
- "traefik.http.routers.newsite.rule=Host(`newsite.amiap.hzau.edu.cn`)"
|
||||
|
||||
# 完成!无需修改其他配置
|
||||
```
|
||||
|
||||
**对比路径模式**:
|
||||
```bash
|
||||
# 需要检查所有优先级
|
||||
# 需要调整文件结构
|
||||
# 需要避免路径冲突
|
||||
# 需要测试是否影响其他网站
|
||||
```
|
||||
|
||||
### 6. 易于维护 ⭐⭐
|
||||
**配置清晰**:
|
||||
```yaml
|
||||
# 一眼就能看出每个网站的配置
|
||||
abm: Host(abm.amiap.hzau.edu.cn)
|
||||
lab: Host(lab.amiap.hzau.edu.cn)
|
||||
docs: Host(docs.amiap.hzau.edu.cn)
|
||||
```
|
||||
|
||||
**问题排查**:
|
||||
```bash
|
||||
# 路径模式:需要检查优先级、路径匹配、文件结构
|
||||
# 子域名模式:只需检查 DNS 和路由规则
|
||||
curl -I https://abm.amiap.hzau.edu.cn # 直接测试
|
||||
```
|
||||
|
||||
### 7. SEO 友好
|
||||
**搜索引擎优化**:
|
||||
- 独立子域名权重更高
|
||||
- URL 结构更清晰
|
||||
- 便于 Google Search Console 管理
|
||||
|
||||
**URL 美观性**:
|
||||
```
|
||||
✅ https://abm.amiap.hzau.edu.cn
|
||||
❌ https://amiap.hzau.edu.cn/ABM
|
||||
```
|
||||
|
||||
### 8. 支持跨域策略
|
||||
**CORS 配置**:
|
||||
```nginx
|
||||
# 可以为不同子域名设置不同的 CORS
|
||||
abm.amiap.hzau.edu.cn → 允许所有跨域
|
||||
lab.amiap.hzau.edu.cn → 只允许特定域名
|
||||
```
|
||||
|
||||
### 9. 便于迁移
|
||||
**服务迁移**:
|
||||
```
|
||||
# 可以将某个子域名迁移到其他服务器
|
||||
abm.amiap.hzau.edu.cn A 新服务器IP
|
||||
# 其他网站不受影响
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## ❌ 缺点分析
|
||||
|
||||
### 1. 需要 DNS 管理权限
|
||||
**要求**:
|
||||
- 需要域名控制权
|
||||
- 需要能添加 A 记录或 CNAME 记录
|
||||
- 可能需要等待 DNS 传播(最多 48 小时)
|
||||
|
||||
**解决**:
|
||||
- 学校/公司环境:申请 DNS 管理权限
|
||||
- 个人域名:通常都有完全控制权
|
||||
- 临时方案:使用免费 DNS 服务(Cloudflare)
|
||||
|
||||
**成本**:
|
||||
- 时间:申请权限可能需要 1-3 天
|
||||
- 金钱:通常免费,部分企业 DNS 服务收费
|
||||
|
||||
### 2. 证书管理稍复杂
|
||||
**问题**:
|
||||
```
|
||||
单域名证书:amiap.hzau.edu.cn
|
||||
无法覆盖子域名!
|
||||
|
||||
需要:
|
||||
方案 A:通配符证书 *.amiap.hzau.edu.cn
|
||||
方案 B:为每个子域名单独申请证书
|
||||
```
|
||||
|
||||
**通配符证书要求**:
|
||||
```yaml
|
||||
# 需要 DNS Challenge(DNS API)
|
||||
--certificatesresolvers.myresolver.acme.dnsChallenge.provider=cloudflare
|
||||
# 需要 DNS Provider API Token
|
||||
```
|
||||
|
||||
**单独证书方案**:
|
||||
```yaml
|
||||
# HTTP Challenge 即可,但每个子域名一个证书
|
||||
# Let's Encrypt 限制:每周 50 个证书
|
||||
# 对于大多数场景足够
|
||||
```
|
||||
|
||||
**解决方案**:
|
||||
```bash
|
||||
# 推荐:申请通配符证书(一次性配置)
|
||||
# 备选:单独申请(简单但数量受限)
|
||||
```
|
||||
|
||||
### 3. DNS 记录管理
|
||||
**管理成本**:
|
||||
```
|
||||
每个新网站需要:
|
||||
1. 添加 DNS A 记录
|
||||
2. 等待 DNS 传播(5分钟-48小时)
|
||||
3. 测试解析是否生效
|
||||
```
|
||||
|
||||
**记录数量**:
|
||||
```
|
||||
10 个网站 = 10 条 DNS 记录
|
||||
需要维护记录清单
|
||||
```
|
||||
|
||||
**解决**:
|
||||
```
|
||||
使用通配符 DNS:
|
||||
*.amiap.hzau.edu.cn A 你的IP
|
||||
# 一次配置,无限子域名
|
||||
```
|
||||
|
||||
### 4. 初次配置成本
|
||||
**学习曲线**:
|
||||
- 需要了解 DNS 基础知识
|
||||
- 需要了解通配符证书申请
|
||||
- 需要配置 DNS Provider API(可选)
|
||||
|
||||
**时间成本**:
|
||||
```
|
||||
首次配置:1-2 小时(包括学习)
|
||||
后续添加:5-10 分钟
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🎯 适用场景
|
||||
|
||||
### ✅ 强烈推荐的场景
|
||||
|
||||
#### 1. 生产环境 ⭐⭐⭐
|
||||
```
|
||||
特点:长期运行、需要稳定性
|
||||
原因:
|
||||
- 配置简单不易出错
|
||||
- 性能最优
|
||||
- 易于维护
|
||||
- 专业形象
|
||||
```
|
||||
|
||||
#### 2. 多网站运营(≥3个)⭐⭐⭐
|
||||
```
|
||||
场景:需要管理多个业务
|
||||
优势:
|
||||
- 无限扩展
|
||||
- 互不影响
|
||||
- 独立管理
|
||||
示例:ABM数据库 + 实验室主页 + 文档中心 + API服务
|
||||
```
|
||||
|
||||
#### 3. 高流量网站 ⭐⭐
|
||||
```
|
||||
场景:日均 PV > 10000
|
||||
原因:性能提升 50-80%
|
||||
收益:降低服务器负载
|
||||
```
|
||||
|
||||
#### 4. 需要独立品牌/服务 ⭐⭐
|
||||
```
|
||||
场景:每个网站有独立定位
|
||||
示例:
|
||||
- abm.example.com(数据库品牌)
|
||||
- lab.example.com(实验室品牌)
|
||||
- shop.example.com(商店)
|
||||
```
|
||||
|
||||
#### 5. 企业级应用 ⭐⭐⭐
|
||||
```
|
||||
要求:
|
||||
- 安全性要求高
|
||||
- 需要独立访问控制
|
||||
- 需要专业形象
|
||||
```
|
||||
|
||||
#### 6. 长期项目(> 1年)⭐⭐⭐
|
||||
```
|
||||
考虑:未来扩展性
|
||||
建议:从一开始就用子域名
|
||||
避免:后期迁移成本
|
||||
```
|
||||
|
||||
### ⚠️ 不太适合的场景
|
||||
|
||||
#### 1. 无 DNS 管理权限
|
||||
```
|
||||
问题:无法添加子域名
|
||||
解决:申请权限或使用策略 1
|
||||
```
|
||||
|
||||
#### 2. 极短期项目(< 1 个月)
|
||||
```
|
||||
场景:临时 Demo、一次性展示
|
||||
原因:配置成本 > 收益
|
||||
建议:使用策略 1(路径前缀)
|
||||
```
|
||||
|
||||
#### 3. 单一网站
|
||||
```
|
||||
场景:只有一个网站
|
||||
原因:无需子域名,直接用主域名
|
||||
建议:主域名直接部署
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 📊 性能指标
|
||||
|
||||
### 路由性能对比
|
||||
```
|
||||
子域名匹配:0.05-0.1ms ⭐⭐⭐⭐⭐
|
||||
路径匹配: 0.1-0.5ms ⭐⭐⭐
|
||||
|
||||
高并发场景(10000 req/s):
|
||||
子域名:CPU 使用率 10-15%
|
||||
路径: CPU 使用率 15-20%
|
||||
性能提升:25-33%
|
||||
```
|
||||
|
||||
### 内存占用
|
||||
```
|
||||
单个网站路由规则:~3MB
|
||||
10 个网站:~30MB
|
||||
对比路径模式:节省 ~40%
|
||||
```
|
||||
|
||||
### 扩展性
|
||||
```
|
||||
网站数量限制:
|
||||
- 技术上:无限制
|
||||
- DNS 记录:无限制
|
||||
- Traefik 性能:100+ 网站无压力
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🛠️ 最佳实践
|
||||
|
||||
### 1. DNS 配置策略
|
||||
|
||||
#### 方案 A:通配符 DNS(推荐)
|
||||
```
|
||||
*.amiap.hzau.edu.cn A 你的服务器IP
|
||||
```
|
||||
**优点**:
|
||||
- 一次配置
|
||||
- 无限子域名
|
||||
- 无需等待 DNS 传播
|
||||
|
||||
**适用**:网站数量会持续增长
|
||||
|
||||
#### 方案 B:单独 A 记录
|
||||
```
|
||||
abm.amiap.hzau.edu.cn A 你的IP
|
||||
lab.amiap.hzau.edu.cn A 你的IP
|
||||
docs.amiap.hzau.edu.cn A 你的IP
|
||||
```
|
||||
**优点**:
|
||||
- 精确控制
|
||||
- 易于理解
|
||||
|
||||
**适用**:网站数量固定且少
|
||||
|
||||
### 2. 证书管理策略
|
||||
|
||||
#### 方案 A:通配符证书(推荐)
|
||||
```yaml
|
||||
# 使用 DNS Challenge
|
||||
traefik:
|
||||
command:
|
||||
- "--certificatesresolvers.myresolver.acme.dnsChallenge.provider=cloudflare"
|
||||
environment:
|
||||
- "CF_DNS_API_TOKEN=your_token"
|
||||
```
|
||||
|
||||
**优点**:
|
||||
- 一个证书覆盖所有子域名
|
||||
- 无需为每个网站单独申请
|
||||
|
||||
**要求**:
|
||||
- DNS Provider 支持 API
|
||||
- 需要配置 API Token
|
||||
|
||||
#### 方案 B:单独证书
|
||||
```yaml
|
||||
# 使用 HTTP Challenge
|
||||
traefik:
|
||||
command:
|
||||
- "--certificatesresolvers.myresolver.acme.httpChallenge.entrypoint=web"
|
||||
```
|
||||
|
||||
**优点**:
|
||||
- 配置简单
|
||||
- 无需 DNS API
|
||||
|
||||
**限制**:
|
||||
- Let's Encrypt 每周 50 个证书
|
||||
- 每个子域名需要单独申请
|
||||
|
||||
### 3. 命名规范
|
||||
```
|
||||
服务类型:
|
||||
数据库: db.example.com, data.example.com
|
||||
API: api.example.com
|
||||
文档: docs.example.com, wiki.example.com
|
||||
管理后台:admin.example.com, panel.example.com
|
||||
博客: blog.example.com
|
||||
商店: shop.example.com, store.example.com
|
||||
|
||||
环境区分:
|
||||
生产: app.example.com
|
||||
测试: test.example.com, staging.example.com
|
||||
开发: dev.example.com
|
||||
|
||||
区域区分:
|
||||
中国: cn.example.com
|
||||
美国: us.example.com
|
||||
```
|
||||
|
||||
### 4. 配置模板化
|
||||
```yaml
|
||||
# docker-compose.yml
|
||||
x-subdomain-template: &subdomain
|
||||
image: nginx:alpine
|
||||
networks:
|
||||
- frontend
|
||||
labels:
|
||||
- "traefik.enable=true"
|
||||
- "traefik.http.routers.SITENAME.entrypoints=web,websecure"
|
||||
- "traefik.http.routers.SITENAME.tls.certresolver=myresolver"
|
||||
- "traefik.http.services.SITENAME.loadbalancer.server.port=80"
|
||||
|
||||
services:
|
||||
nginx-abm:
|
||||
<<: *subdomain
|
||||
container_name: nginx-abm
|
||||
volumes:
|
||||
- abm-data:/usr/share/nginx/html:ro
|
||||
labels:
|
||||
- "traefik.http.routers.abm.rule=Host(`abm.amiap.hzau.edu.cn`)"
|
||||
```
|
||||
|
||||
### 5. 监控和健康检查
|
||||
```yaml
|
||||
services:
|
||||
nginx-abm:
|
||||
healthcheck:
|
||||
test: ["CMD", "wget", "--quiet", "--tries=1", "--spider", "http://localhost/"]
|
||||
interval: 30s
|
||||
timeout: 3s
|
||||
retries: 3
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 💰 成本分析
|
||||
|
||||
### 时间成本
|
||||
```
|
||||
首次配置:
|
||||
- 申请 DNS 权限:0-3 天(一次性)
|
||||
- 配置通配符 DNS:5 分钟
|
||||
- 配置通配符证书:30 分钟
|
||||
- 总计:1 小时(后续无需重复)
|
||||
|
||||
添加新网站:
|
||||
- 方案 A(通配符DNS):5 分钟
|
||||
- 方案 B(单独DNS):15 分钟
|
||||
|
||||
维护成本:极低(几乎无需维护)
|
||||
```
|
||||
|
||||
### 资源成本
|
||||
```
|
||||
域名:1 个(与路径模式相同)
|
||||
DNS 服务:免费(Cloudflare)或自有
|
||||
证书:免费(Let's Encrypt)
|
||||
服务器:共享,无额外需求
|
||||
```
|
||||
|
||||
### 学习成本
|
||||
```
|
||||
DNS 基础知识:简单(1-2 小时)
|
||||
Traefik 配置:简单(比路径模式更简单)
|
||||
证书配置:中等(首次需要学习)
|
||||
总体:中低难度
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🔄 迁移路径
|
||||
|
||||
### 从路径前缀迁移到子域名
|
||||
|
||||
**步骤**:
|
||||
|
||||
#### 1. 准备阶段
|
||||
```bash
|
||||
# 添加 DNS 记录
|
||||
abm.amiap.hzau.edu.cn A 服务器IP
|
||||
|
||||
# 等待 DNS 传播(测试)
|
||||
nslookup abm.amiap.hzau.edu.cn
|
||||
```
|
||||
|
||||
#### 2. 并行运行
|
||||
```yaml
|
||||
# 保留旧路由
|
||||
PathPrefix(/ABM) # 旧用户继续访问
|
||||
|
||||
# 添加新路由
|
||||
Host(abm.amiap.hzau.edu.cn) # 新用户使用子域名
|
||||
```
|
||||
|
||||
#### 3. 调整文件结构
|
||||
```bash
|
||||
# 从 /ABM/ 移回根目录
|
||||
docker exec nginx-webws mv /usr/share/nginx/html/ABM/* /usr/share/nginx/html/
|
||||
docker exec nginx-webws rmdir /usr/share/nginx/html/ABM
|
||||
```
|
||||
|
||||
#### 4. 通知用户
|
||||
```
|
||||
旧 URL:https://amiap.hzau.edu.cn/ABM (保留 2-4 周)
|
||||
新 URL:https://abm.amiap.hzau.edu.cn (推荐使用)
|
||||
|
||||
配置重定向(可选):
|
||||
PathPrefix(/ABM) → Redirect → abm.amiap.hzau.edu.cn
|
||||
```
|
||||
|
||||
#### 5. 清理
|
||||
```yaml
|
||||
# 观察 1-2 周后删除旧路由
|
||||
# 删除路径模式配置
|
||||
# 只保留子域名配置
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 📝 决策建议
|
||||
|
||||
### ✅ 强烈推荐选择此策略的理由
|
||||
|
||||
1. **你有 DNS 管理权限或可以申请**
|
||||
2. **这是生产环境,需要长期运行**
|
||||
3. **网站数量 ≥ 3 个或会持续增长**
|
||||
4. **追求最佳性能和可维护性**
|
||||
5. **需要专业的企业形象**
|
||||
6. **需要为不同网站设置不同的安全策略**
|
||||
7. **高流量网站,性能优化很重要**
|
||||
|
||||
### 💡 这是大多数场景的最佳选择
|
||||
|
||||
**原因**:
|
||||
- 技术上最优
|
||||
- 长期成本最低
|
||||
- 扩展性最好
|
||||
- 维护最简单
|
||||
- 专业性最强
|
||||
|
||||
**投资回报**:
|
||||
- 初期多花 1-2 小时配置
|
||||
- 长期节省无数维护时间
|
||||
- 避免未来迁移成本
|
||||
|
||||
---
|
||||
|
||||
## 📚 相关文档
|
||||
|
||||
- [完整多站点策略指南](MULTI_SITE_STRATEGY_GUIDE.md)
|
||||
- [策略 1:路径前缀方案](strategy-1-path-prefix.md)
|
||||
- [策略 3:混合方案](strategy-3-hybrid.md)
|
||||
- [总结对比报告](strategy-comparison-report.md)
|
||||
- [快速参考手册](QUICK_REFERENCE.md)
|
||||
|
||||
---
|
||||
|
||||
**结论**:子域名策略是**生产环境的最佳选择**,虽然需要 DNS 配置,但带来的长期收益远超初期投入。这是一个"一次配置,终身受益"的方案。⭐⭐⭐
|
||||
Reference in New Issue
Block a user