使用 Vapor 时,每个环境都会提供一个唯一的自定义域名,您可以在部署环境后使用该域名访问环境。但是,请务必记住,自定义域名仅用于开发目的,Vapor 会自动将“no-index”标头添加到来自这些 URL 的响应中,以防止它们被搜索引擎索引。
此外,即使应用程序处于维护模式,这些自定义域名也将继续起作用,允许您在禁用维护模式并恢复一般访问权限之前测试您的环境。
虽然自定义域名在开发过程中很有用,但建议不要在生产环境中使用它们或与公众共享。相反,最佳做法是使用您自己的自定义域名。
您可以通过 Vapor 的域名屏幕或使用 domain
CLI 命令将您拥有的域名添加到 Vapor。将域名添加到 Vapor 时,始终添加根域名,即使您计划从子域名提供您的应用程序也是如此
vapor domain example.com
当然,您可以从 Vapor UI 或使用 domain:list
CLI 命令查看 Vapor 域名的详细信息
vapor domain:list
将域名添加到 Vapor 时,您将获得名称服务器,您应该将这些名称服务器提供给您的域名注册商的名称服务器配置屏幕。这将指定 Vapor 作为管理域名 DNS 记录的实体。这也允许 Vapor 根据需要自动添加和删除域名的 DNS 记录。
如果您希望自行管理 DNS 记录,则请求证书或将域名附加到环境将要求您通过您的域名注册商手动创建 DNS 记录。
如果您选择让 Vapor 管理您的 DNS 记录,您可以随时根据需要添加、更新或删除 DNS 记录。Vapor 提供两种方式供您管理 DNS 记录:通过 Vapor UI 的域名详情页面或通过 Vapor CLI。要使用 Vapor CLI 创建 DNS 记录,您可以使用 `record` 命令
vapor record example.com A www 192.168.1.1
vapor record example.com A @ 192.168.1.1
vapor record example.com CNAME foo another-example.com
vapor record example.com MX foo "10 example.com,20 example2.com"
记录更新
`record` 命令充当“UPSERT”操作。如果存在与给定类型和名称匹配的现有记录,其值将更新为给定值。如果不存在与给定类型或名称匹配的记录,则将创建该记录。
要使用 Vapor CLI 删除记录,您可以使用 `record:delete` 命令
vapor record:delete example.com A www
在将域名附加到现有 Vapor 环境之前,您必须拥有有效的 SSL 证书。Vapor 通过 AWS Certificate Manager 为您的 Vapor 环境提供免费的自动续期 SSL 证书。
通常,用户会为其证书选择“us-east-1”区域,这是所有使用 API Gateway 1.0 的环境所需的证书区域。但是,使用 API Gateway 2.0 或 Application Load Balancers 的环境需要与项目位于同一区域的证书。
您可以通过 Vapor UI 的域名页面或使用 `cert` CLI 命令创建证书
vapor cert example.com
此时,无需进一步操作,您的证书将在几分钟内完成验证和颁发。
自管理域名
如果您自行管理域名的 DNS 记录,Vapor 将无法自动更新它们。在这种情况下,您可以从 Vapor UI 的域名详情页面或通过运行 vapor `record:list example.com` 命令获取域名的证书 CNAME 记录。然后,您可以相应地更新外部域名注册商的 DNS 记录。
请注意,一些 DNS 提供商会自动将域名附加到 CNAME 名称。在这种情况下,您可以从 CNAME 名称中删除域名。
您可以在 Vapor UI 上或使用 `cert:list` CLI 命令查看证书的验证状态
vapor cert:list example.com
如果您想删除未附加到环境的旧证书,可以通过 Vapor UI 的域名详细信息屏幕或使用 cert:delete
CLI 命令来执行此操作。运行命令后,Vapor 会提示您选择要为给定域名删除的特定证书。
vapor cert:delete example.com
一旦您的域名拥有有效的 SSL 证书,您就可以使用应用程序 vapor.yml
文件中的 domain
配置选项将您的域名附加到您的环境。将域名附加到环境时,您不需要包含“www”子域名。
id: 2
name: vapor-laravel-app
environments:
production:
domain: example.com
build:
- 'composer install --no-dev'
在部署期间,Vapor 会自动配置环境以处理此域名的请求。但是,由于 AWS CloudFront 的性质,自定义域名通常需要 30-45 分钟才能完全激活。因此,如果您的自定义域名在部署后无法立即访问,请不要担心。
自管理域名
如果您自行管理域名的 DNS 记录,Vapor 将无法自动更新它们。在这种情况下,您可以从 Vapor UI 的域名详细信息屏幕或通过运行 vapor record:list example.com
命令获取域名的环境 CNAME 记录。然后,您可以相应地更新外部域名注册商的 DNS 记录。
Vapor 允许您将多个域名附加到单个项目。在执行此操作之前,请确保您拥有每个域名的有效证书。然后,更新应用程序的 vapor.yml
文件以包含每个域名。
id: 2
name: vapor-laravel-app
environments:
production:
domain:
- example1.com
- example2.com
build:
- 'composer install --no-dev'
只要您拥有主域名的有效证书,您就可以指示域名支持通配符子域名。要将通配符域名附加到环境,请将 *
指定为子域名。
id: 2
name: vapor-laravel-app
environments:
production:
domain: '*.example.com'
build:
- 'composer install --no-dev'
Vapor 支持多级子域名 - 例如 v1.api.example.com
。要使用此功能,必须请求一个明确包含完整多级子域名的证书。
可以从 Vapor CLI 请求证书
vapor cert v1.api.example.com
您也可以从 Vapor 域名仪表板 获取多级子域名的证书,方法是在请求证书时将多级子域名设置为“域名”或“高级设置”中的任何“备用名称”。
证书颁发后,您可以通过将多级子域包含在 `vapor.yml` 配置文件的 `domain` 部分并从 Vapor CLI 执行完整部署来访问您的应用程序。
id: 2
name: vapor-laravel-app
environments:
production:
domain: 'v1.api.example.com'
build:
- 'composer install --no-dev'
通配符多级子域
AWS 证书管理器提供的通配符证书只能保护单级子域。因此,当仅使用通配符子域时,无法通过多级子域访问您的应用程序。必须将多级子域显式添加到您的 `vapor.yml` 文件中。
如果您不再希望将个性化域名附加到您的环境,可以使用 `vanity-domain:delete <environment>` 命令将其删除。
vapor vanity-domain:delete production