PushUlinkSaaSTenant SubdomainCustom Domain

Freemium SaaS 自动创建客户环境时,subdomain routing 怎么设计?

给 SaaS 团队的一篇通俗指南:早期用 slug、subdomain 还是 custom domain?关键不是选哪个,而是别把 tenant routing 写散。

快速答案

早期 freemium SaaS 通常可以先用 slug,除非租户身份、品牌 URL、cookie 边界或未来 custom domain 是产品核心。真正重要的不是第一天选 slug 还是 subdomain,而是把 tenant resolution 集中到一个地方,未来可以从 slug 扩展到 subdomain,再扩展到 custom domain。

重点章节

先看这几部分

Freemium SaaS 很快就会遇到一个小但麻烦的问题:每个客户怎么访问自己的空间?

一个用户注册。第二个用户注册。某个团队创建 workspace。然后有客户问:“能不能给我一个更像我们自己的 URL?”

你会开始纠结:

用 path slug?

app.example.com/acme

用 subdomain?

acme.example.com

还是一开始就支持客户自己的 custom domain?

portal.acme.com

答案取决于阶段、品牌需求、隔离需求和你愿意承担多少运营复杂度。

快速回答

早期 freemium SaaS 通常可以先用 slug,除非租户身份、品牌 URL、cookie 边界或未来 custom domain 是产品核心。真正重要的不是第一天选 slug 还是 subdomain,而是把 tenant resolution 集中到一个地方,未来可以从 slug 扩展到 subdomain,再扩展到 custom domain。

决策表

模式示例适合什么阶段主要代价
Path slugapp.example.com/acme早期产品、简单 onboarding品牌感弱
Subdomainacme.example.com租户身份明显、分享更好看需要 wildcard DNS 和 hostname routing
Custom domainportal.acme.comB2B 客户、品牌门户需要验证、SSL、生命周期管理

为什么早期常常先用 slug

Slug 简单。

它更容易:

  • 开发
  • 本地测试
  • 部署
  • debug
  • 通过一个 app 处理
  • 使用同一套 TLS 配置
  • 给早期用户解释

如果你还在验证用户到底要不要这个产品,不要让 tenant URL 架构变成主项目。

什么时候 subdomain 值得做

当租户身份需要体现在 hostname 上时,subdomain 更有吸引力。

比如:

  • 客户会公开分享自己的入口
  • workspace 需要更清晰的品牌感
  • 你希望在进入 app path 前就做 tenant routing
  • cookie 或 session 需要更清楚的边界
  • 未来要支持 customer-owned domain
  • 你想让升级路径更自然:customer.yourapp.com

Microsoft Azure Architecture Center 在多租户域名设计里提到,域名可以用于区分租户、路由请求到正确基础设施,并提供品牌体验。这也是 subdomain 和 custom domain 在 SaaS 里有价值的根本原因。

最大错误:tenant 解析逻辑写得到处都是

最糟糕的不是先用 slug。

最糟糕的是 tenant 解析散落在各处:

  • 一个 helper 解析 path
  • 一个 API route 解析 hostname
  • 一个 middleware 查数据库
  • 一个后台任务假设 tenant ID
  • 一个营销页面写死 tenant URL

以后迁移时会很痛。

更好的做法是集中成一个函数:

resolveTenant(request)

它可以先支持:

  1. 从 path slug 读 tenant。
  2. 以后从 subdomain 读 tenant。
  3. 再以后从 custom domain mapping 读 tenant。

应用的其他部分不应该关心用户是从哪种 URL 模式进来的。

Tenant entry 应该记录什么

一旦支持 subdomain 或 custom domain,tenant entry 就不是一条简单路由了,而是一个运营对象。

建议记录:

  • tenant ID
  • hostname
  • target app route
  • status
  • owner
  • verification status
  • SSL status
  • last seen
  • created by
  • updated by
  • change history
  • retirement state

很多团队低估了这部分工作。创建第一个 subdomain 很容易,长期管理成百上千个 tenant entries 才是难点。

Pushulink 目前处于 MVP 阶段,专注于托管子域转发、OpenAPI 自动化、访问统计、权限边界、日志和可追踪操作。

一个实用的演进路线

阶段 1:Path slug

先用:

app.example.com/acme

足够验证产品。

阶段 2:Managed subdomain

再加:

acme.example.com

映射到同一个 tenant ID,不要拆成另一套逻辑。

阶段 3:Custom domain

支持:

portal.acme.com

要有验证、SSL 和 ownership。

阶段 4:Lifecycle 管理

开始追踪:

  • active tenants
  • paused tenants
  • deleted workspaces
  • old domains
  • 仍有访问的旧入口
  • 可以安全 retire 的 entries

这个阶段开始,URL 模式就不只是工程选择,而是运营问题。

FAQ

Subdomain 对 SEO 更好吗?

不一定。SEO 取决于内容策略、可抓取性、canonical 和内链。公开租户页面可能适合 subdomain,但也会增加管理面。

Subdomain 对安全更好吗?

它可以帮助一些隔离模式,例如 cookie 边界。但它不是魔法安全功能,也会带来复杂度。

每个 freemium 用户都要给 subdomain 吗?

不一定。如果大多数免费用户不会公开分享 workspace,slug 可能更适合早期。

第一件事应该设计什么?

先设计 tenant resolution 和 lifecycle states。URL 长什么样可以以后演进。

参考资料

FAQ

常见问题

Subdomain 对 SEO 更好吗?

不一定。SEO 取决于内容策略、可抓取性、canonical 和内链。公开租户页面可能适合 subdomain,但也会增加管理面。

Subdomain 对安全更好吗?

它可以帮助一些隔离模式,例如 cookie 边界。但它不是魔法安全功能,也会带来复杂度。

每个 freemium 用户都要给 subdomain 吗?

不一定。如果大多数免费用户不会公开分享 workspace,slug 可能更适合早期。

第一件事应该设计什么?

先设计 tenant resolution 和 lifecycle states。URL 长什么样可以以后演进。

谁适合读这篇文章?

这篇文章适合正在管理活动链接、客户域名、合作方入口、社媒入口、跳转统计或跨团队上线流程的团队阅读。