子域名架構設計
High Contrast
Dark Mode
Light Mode
Sepia
Forest
3 min read614 words

子域名架構設計

良好的子域名架構讓系統清晰、易於管理,也有助於 SEO 和安全隔離。

常用子域名慣例

子域名 用途
www 主網站(傳統)
api API 服務
app Web 應用程序
admin 管理後台
mail 郵件服務器
blog 博客(如果用子域名而非子路徑)
shop 電商
docs 文檔
status 系統狀態頁面
cdn CDN 資源
dev 開發環境
staging 測試環境
static 靜態資源

子域名 vs 子路徑:SEO 的選擇

對於博客、電商等內容,SEO 上的選擇:

子域名方式:
blog.example.com/article
shop.example.com/product
子路徑方式:
example.com/blog/article
example.com/shop/product

SEO 建議:使用子路徑

Shopify 的建議(電商場景): - shop.example.com 指向 Shopify(子域名,Shopify 技術要求) - 使用 Shopify Markets 的子路徑(example.com/en-us)更好


多環境子域名架構

Production(生產):
www.example.com      → 用戶流量
api.example.com      → API 服務
cdn.example.com      → 靜態資源
Staging(測試):
staging.example.com  → 部署前測試
api-staging.example.com
Development(開發):
dev.example.com      → 開發環境(本機)
localhost:3000       → 本地開發

環境隔離原則: - devstaging 不應該對外公開(加密碼保護或 IP 限制) - 測試環境的域名不需要 SSL 公開憑證(可以用 Let's Encrypt) - 確保測試環境的 DNS 記錄不會影響生產環境


通配符 DNS 記錄

通配符記錄覆蓋所有未明確定義的子域名:

*.example.com    A    93.184.216.34

效果: 任意子域名.example.com 都解析到同一個 IP

使用場景: - SaaS 產品(每個用戶有自己的子域名:user1.app.comuser2.app.com) - 測試環境(每個功能分支有自己的子域名)

注意: 通配符記錄優先級低於明確定義的記錄(www.example.com 的 A 記錄會覆蓋 *.example.com


子域名接管(Subdomain Takeover)漏洞

危險場景:

你曾經設置:
CNAME    blog    username.github.io.
後來刪除了 GitHub Pages,但忘記刪除 DNS 記錄
攻擊者:
在 GitHub 創建 username 帳號
發布到 GitHub Pages
← 他們現在控制了 blog.example.com!

防護措施: - 刪除服務時,同時刪除對應的 DNS 記錄 - 定期審查所有 CNAME 記錄,確認目標服務仍然存在 - 使用 Subtake、Subzy 等工具掃描你的子域名是否有接管漏洞


子域名組織清單模板

建立一個文檔記錄所有子域名:

子域名 指向 用途 負責人 創建日期
www Shopify 主商店 行銷 2024-01
api 192.0.2.1 REST API 技術 2024-02
blog username.github.io 內容博客 行銷 2024-03
staging 192.0.2.2 測試環境 技術 2024-01

定期審查,刪除不再使用的記錄。


下一節多雲與負載均衡 DNS——高可用架構的 DNS 配置。