mirror of
https://github.com/mintlify/docs.git
synced 2026-09-14 13:35:46 +08:00
843449eae3
Co-authored-by: locadex-agent[bot] <217277504+locadex-agent[bot]@users.noreply.github.com>
230 lines
8.8 KiB
Plaintext
230 lines
8.8 KiB
Plaintext
---
|
||
title: "AWS Route 53 和 CloudFront"
|
||
sidebarTitle: "AWS"
|
||
description: "使用 AWS 的 Route 53 DNS(域名系统)和 CloudFront CDN 在子路径上部署文档。"
|
||
keywords: ["AWS 部署", "Route 53 DNS(域名系统)", "CloudFront CDN", "缓存策略"]
|
||
---
|
||
|
||
import Propagating from "/snippets/zh/custom-subpath-propagating.mdx";
|
||
|
||
若要使用 AWS Route 53 和 CloudFront 将文档托管在类似 `yoursite.com/docs` 这样的子路径上,你必须将 DNS(域名系统)服务提供商配置为将其解析到你的 CloudFront 分配。
|
||
|
||
|
||
<div id="overview">
|
||
## 概览
|
||
</div>
|
||
|
||
将流量路由到以下路径,并将缓存策略(Cache Policy)设置为 **CachingDisabled**:
|
||
|
||
- `/.well-known/acme-challenge/*` - 用于 Let's Encrypt 证书验证
|
||
- `/.well-known/vercel/*` - 用于域名验证
|
||
- `/docs/*` - 用于子路径路由
|
||
- `/docs/` - 用于子路径路由
|
||
|
||
将流量路由到以下路径,并将缓存策略(Cache Policy)设置为 **CachingEnabled**:
|
||
|
||
- `/mintlify-assets/_next/static/*`
|
||
- `Default (*)` - 你的网站着陆页
|
||
|
||
所有 Behaviors 都必须将 **origin request policy** 设置为 `AllViewerExceptHostHeader`。
|
||
|
||

|
||
|
||
<div id="create-cloudfront-distribution">
|
||
## 创建 CloudFront 分配
|
||
</div>
|
||
|
||
1. 在 AWS 控制台中前往 [CloudFront](https://aws.amazon.com/cloudfront)。
|
||
2. 选择 **Create distribution**。
|
||
|
||
<Frame>
|
||

|
||
</Frame>
|
||
|
||
3. 在 Origin domain 中输入 `[SUBDOMAIN].mintlify.dev`,其中 `[SUBDOMAIN]` 是你项目的唯一子域。
|
||
|
||
<Frame>
|
||

|
||
</Frame>
|
||
|
||
4. 在 “Web Application Firewall (WAF)” 中,启用安全防护。
|
||
|
||
<Frame>
|
||

|
||
</Frame>
|
||
|
||
5. 其余设置保持默认。
|
||
6. 选择 **Create distribution**。
|
||
|
||
<div id="add-default-origin">
|
||
## 添加默认 Origin
|
||
</div>
|
||
|
||
1. 创建分发后,前往 “Origins” 标签页。
|
||
|
||
<Frame>
|
||

|
||
</Frame>
|
||
|
||
2. 找到与你主域名对应的预发布环境 URL。具体取决于你的落地页托管方式。例如,Mintlify 的预发布 URL 是 [mintlify-landing-page.vercel.app](https://mintlify-landing-page.vercel.app)。
|
||
|
||
<Info>
|
||
如果你的落地页托管在 Webflow 上,请使用 Webflow 的预发布 URL,通常为 `.webflow.io`。
|
||
|
||
如果你使用 Vercel,请使用每个项目默认提供的 `.vercel.app` 域名。
|
||
</Info>
|
||
|
||
3. 新建一个 Origin,并将你的预发布 URL 填入 “Origin domain”。
|
||
|
||
<Frame>
|
||

|
||
</Frame>
|
||
|
||
此时,你应当有两个 Origins:一个为 `[SUBDOMAIN].mintlify.app`,另一个为你的预发布 URL。
|
||
|
||
<Frame>
|
||

|
||
</Frame>
|
||
|
||
<div id="set-behaviors">
|
||
## 设置行为
|
||
</div>
|
||
|
||
CloudFront 中的行为用于控制子路径逻辑。总体而言,我们希望实现以下逻辑:
|
||
|
||
- **如果用户访问你的自定义子路径**,跳转到 `[SUBDOMAIN].mintlify.dev`。
|
||
- **如果用户访问其他任意页面**,跳转到当前登录页。
|
||
|
||
1. 打开 CloudFront 分配的 “Behaviors” 标签页。
|
||
|
||
<Frame>
|
||

|
||
</Frame>
|
||
|
||
2. 点击 **Create behavior** 按钮,并创建以下行为。
|
||
|
||
<div id="well-known">
|
||
### `/.well-known/*`
|
||
</div>
|
||
|
||
为用于 Vercel 域名验证的路径创建一个 **Path pattern** 为 `/.well-known/*` 的行为,并将 **Origin and origin groups** 指向你的文档站点 URL。
|
||
|
||
在 "Cache policy" 中选择 **CachingDisabled**,以确保这些验证请求直通且不被缓存。
|
||
|
||
<Frame>
|
||

|
||
</Frame>
|
||
|
||
<Info>
|
||
如果 `.well-known/*` 过于宽泛,至少可以为 Vercel 将其细化为 2 个行为:
|
||
- `/.well-known/vercel/*` - Vercel 域名验证所必需
|
||
- `/.well-known/acme-challenge/*` - Let's Encrypt 证书验证所必需
|
||
</Info>
|
||
|
||
<div id="your-subpath">
|
||
### 你的子路径
|
||
</div>
|
||
|
||
创建一个行为,将 **Path pattern** 设置为你选择的子路径,例如 `/docs`,并将 **Origin and origin groups** 指向 `.mintlify.dev` 的 URL(在我们的示例中为 `acme.mintlify.dev`)。
|
||
|
||
- 将 "Cache policy" 设置为 **CachingOptimized**。
|
||
- 将 "Origin request policy" 设置为 **AllViewerExceptHostHeader**。
|
||
- 将 "Viewer Protocol Policy" 设置为 **Redirect HTTP to HTTPS**。
|
||
|
||
<Frame>
|
||

|
||
</Frame>
|
||
|
||
<div id="your-subpath-with-wildcard">
|
||
### 带通配符的子路径
|
||
</div>
|
||
|
||
创建一个行为,在 **Path pattern** 中填写你选择的子路径并在后面添加 `/*`,例如 `/docs/*`,并将 **Origin and origin groups** 指向相同的 `.mintlify.dev` URL。
|
||
|
||
除 **Path pattern** 外,其余设置应与基础子路径行为完全一致。
|
||
|
||
- 将 "Cache policy" 设置为 **CachingOptimized**
|
||
- 将 "Origin request policy" 设置为 **AllViewerExceptHostHeader**
|
||
- 将 "Viewer protocol policy" 设置为 **Redirect HTTP to HTTPS**
|
||
|
||
<div id="mintlify-assets_nextstatic">
|
||
### `/mintlify-assets/_next/static/*`
|
||
</div>
|
||
|
||
- 将“Cache policy”设置为 **CachingOptimized**
|
||
- 将“Origin request policy”设置为 **AllViewerExceptHostHeader**
|
||
- 将“Viewer protocol policy”设置为 **Redirect HTTP to HTTPS**
|
||
|
||
<div id="default">
|
||
### `Default (*)`
|
||
</div>
|
||
|
||
最后,我们将编辑 `Default (*)` 行为。
|
||
|
||
<Frame>
|
||

|
||
</Frame>
|
||
|
||
1. 将默认行为的 **Origin and origin groups** 更改为预发布环境的 URL(在我们的示例中为 `mintlify-landing-page.vercel.app`)。
|
||
|
||
<Frame>
|
||

|
||
</Frame>
|
||
|
||
2. 选择 **保存更改**。
|
||
|
||
<div id="check-behaviors-are-set-up-correctly">
|
||
### 检查行为是否配置正确
|
||
</div>
|
||
|
||
如果你按上述步骤操作,行为配置应如下所示:
|
||
|
||
<Frame>
|
||

|
||
</Frame>
|
||
|
||
<div id="preview-distribution">
|
||
## 预览分发
|
||
</div>
|
||
|
||
你现在可以进入 “General” 标签页并访问 **Distribution domain name** 的 URL,来测试分发是否已正确配置。
|
||
|
||
<Frame>
|
||

|
||
</Frame>
|
||
|
||
所有页面应当指向你的主着陆页;但如果在该 URL 后追加你选择的子路径(例如 `/docs`),则应会跳转到你的 Mintlify 文档实例。
|
||
|
||
<div id="connect-with-route53">
|
||
## 连接 Route53
|
||
</div>
|
||
|
||
现在,我们将把 CloudFront 分配的功能接入到你的主域名。
|
||
|
||
<Note>
|
||
本节你也可以参考 AWS 的官方指南:[将 Amazon Route 53 配置为将流量路由到 CloudFront 分配](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/routing-to-cloudfront-distribution.html#routing-to-cloudfront-distribution-config)
|
||
</Note>
|
||
|
||
1. 在 AWS 控制台中进入 [Route53](https://aws.amazon.com/route53)。
|
||
2. 进入主域名的“Hosted zone”。
|
||
3. 选择 **Create record**。
|
||
|
||
<Frame>
|
||

|
||
</Frame>
|
||
|
||
4. 打开 `Alias`,然后在 **Route traffic to** 中选择 `Alias to CloudFront distribution` 选项。
|
||
|
||
<Frame>
|
||

|
||
</Frame>
|
||
|
||
5. 选择 **Create records**。
|
||
|
||
<Note>
|
||
如果当前存在 A 记录,你可能需要将其删除。
|
||
</Note>
|
||
|
||
你的文档现已通过主域名中你选择的子路径对外可用。
|
||
|
||
<Propagating /> |