EAS Hosting 生产部署怎么绑定自定义域名并通过 DNS 验证与 SSL 配置?
【免费下载链接】expoAn open-source framework for making universal native apps with React. Expo runs on Android, iOS, and the web.项目地址: https://gitcode.com/GitHub_Trending/ex/expo
默认情况下,Expo 项目中部署到 EAS Hosting 的生产环境地址是my-app.expo.app这种形式(my-app是你选择的 preview subdomain name)。如果你自有域名,可以把它作为自定义域名绑定到项目的生产部署上,让example.com直接路由到你的生产环境。这篇文章描述完整的绑定路径:先把一个部署提升到 production,再到 Hosting settings 里填写自定义域名,然后在你的 DNS 服务商处添加三条记录(域名验证、SSL、路由),最后等仪表盘检查全部通过。
前提条件
在开始之前,需要满足以下三个条件(均来自 EAS Hosting 官方文档):
一个已有生产部署的 EAS Hosting 项目。自定义域名只会加载 production deployment,所以项目里必须先有一个被提升到 production 的部署。如果还没有,在项目目录中执行:
npx expo export --platform web eas deploy --prod第一次运行
eas deploy会提示你关联 EAS 项目并选择 preview subdomain name。已有部署也可以事后提升:eas deploy:alias --prod --id=deploymentId其中
deploymentId是 preview URL 中的部署 ID(详见 Deployments and aliases)。一个你拥有且可以管理 DNS 记录的域名。apex 域(如
example.com)和子域(如anything.example.com)都支持。付费套餐。自定义域名是 premium feature,Free plan 不可用(见 Custom domain)。
每个项目只能绑定一个自定义域名,它固定指向该项目的生产部署。
在仪表盘填写自定义域名
- 在 expo.dev 的项目 dashboard 中进入Hosting settings(
expo.dev/accounts/[accountName]/projects/[projectName]/hosting/settings路径下的 Hosting 设置页)。 - 如果没有 production deployment,界面会先提示你指定一个生产部署。
- 在Custom domain一栏填入要绑定的域名。
填写后,仪表盘会给出三条需要在 DNS 服务商处添加的记录,分别对应:
- Verification:证明你拥有该域名;
- SSL:用于配置 SSL 证书;
- CNAME(子域)或A record(apex 域):把域名指向你的生产部署。
添加三条 DNS 记录
三条记录的具体含义和落点如下(example.com为文档中的示例域名,请替换为你自己的域名):
| 记录类型 | 记录所在主机名 | 指向 / 作用 |
|---|---|---|
| Verification TXT | _cf-custom-hostname.example.com | 证明域名所有权。记录带有一个自定义 token,EAS Hosting 可以读回该 token 来确认你在操作自己控制的域名 |
| SSL CNAME | _acme-challenge.example.com | 向证书颁发机构证明域名所有权(Domain Control Validation,DCV)。做成 CNAME 是因为证书的续期和验证都交给自动化流程,防止证书过期 |
| 路由记录 | 域名本身 | apex 域:A record 到172.66.0241(文档原值为172.66.0.241);子域:CNAME 到origin.expo.app |
几点说明:
- 前两条验证记录都创建在你所设置的自定义域名的子域上。如果你设置的是
anything.example.com,对应主机名就是_cf-custom-hostname.anything.example.com和_acme-challenge.anything.example.com。 - 路由记录对 apex 域和子域是等价的两种写法,但有些 DNS 服务商不允许在 apex 域上设置 CNAME,所以 apex 域通常用 A record,子域用 CNAME。
关于零停机:如果你要求切换域名时零停机,必须按仪表盘给出的顺序逐条添加记录——先加 Verification TXT 并点 Refresh 直到 UI 确认该记录,再加 SSL CNAME 并确认,最后才加第三条路由记录。如果不在意短暂停机,三条记录可以一次性全部添加。
验证结果
添加完记录后,回到 Hosting settings 页面,反复点击Refresh按钮,直到所有检查项(checks)全部通过。文档说明这一步通常只需要几分钟,具体取决于 DNS 服务商的生效速度。
三项检查都通过后,自定义域名就会路由到你的production部署。后续即使你用--prod或eas deploy:alias --prod --id=<deploymentId>把生产部署切换到新的部署 ID,自定义域名始终跟随当前生产部署,无需重新配置。
可选:为其他别名配置子域
虽然每个项目只能绑定一个自定义域名,但可以额外添加子域 DNS 记录来处理生产别名以外的请求:请求会路由到别名与子域匹配的那个部署。
例如,先创建一个staging别名(eas deploy --alias staging),然后在 DNS 中添加:
- 如果自定义域名是 apex 域
example.com:在staging.example.com上创建 CNAME 记录,指向origin.expo.app; - 如果自定义域名是子域
anything.example.com:在staging.anything.example.com上创建同样的 CNAME 记录。
也可以设置通配符:在*.example.com(或*.anything.example.com)上创建 CNAME 记录指向origin.expo.app,任何子域请求都会被尝试路由到同名的别名部署。
例外是www子域:如果存在www子域且没有名为www的别名,请求会收到 308 响应并重定向到自定义域名,按生产部署处理。如果只想做这个自动重定向,只需在www.<yourdomain>上创建 CNAME 记录指向origin.expo.app。
注意:如果是在2025 年 3 月 19 日之前已经设置好自定义域名的项目,先按上文流程点一次 "Refresh",再执行通配符域名的配置。
限制与注意事项
- 仅限付费套餐,且每个项目一个自定义域名。
- EAS Hosting 使用SNI(Server Name Indication),IP 地址是共享的、不专属某个项目(见 Deployments and aliases 的 FAQ),因此绑定依赖域名解析与 SNI 匹配,而不是固定 IP。
- 三条 DNS 记录的值(验证 token、A record IP、CNAME 目标)以你所在项目 Hosting settings 页面实时展示为准,本文中的
172.66.0.241、origin.expo.app均为文档给出的典型值。
【免费下载链接】expoAn open-source framework for making universal native apps with React. Expo runs on Android, iOS, and the web.项目地址: https://gitcode.com/GitHub_Trending/ex/expo
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考