> ## Documentation Index
> Fetch the complete documentation index at: https://tomee-mintlify-99ed5a6d.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# AWS Route 53 and CloudFront

> Deploy your Mintlify documentation at a subpath on AWS using Route 53 for DNS routing and CloudFront as a CDN with Lambda@Edge functions.

To host your documentation at a subpath such as `yoursite.com/docs` using AWS Route 53 and CloudFront, you must configure your DNS provider to point to your CloudFront distribution.

Before configuring AWS, set your base path in your dashboard:

1. Navigate to the [Custom domain setup](https://app.mintlify.com/settings/deployment/custom-domain) page in your dashboard.
2. Enable the **Host at** toggle.
3. Enter your domain.
4. Enter your base path. For example, `/docs` or `/help`.
5. Click **Add domain**.

## Overview

<Note>
  The following examples use the `/docs` base path. If you use a different base path, replace `/docs` with your base path.
</Note>

Route traffic to these paths with a Cache Policy of **CachingDisabled**:

* `/.well-known/acme-challenge/*` - Required for Let's Encrypt certificate verification
* `/.well-known/vercel/*` - Required for domain verification
* `/docs/*` - Required for subpath routing
* `/docs/` - Required for subpath routing

Route traffic to these paths with a Cache Policy of **CachingEnabled**:

* `/mintlify-assets/_next/static/*`
* `Default (*)` - Your website's landing page

All Behaviors must have an **origin request policy** of `AllViewerExceptHostHeader`.

The behaviors for your subpath must allow all HTTP methods. CloudFront only allows `GET` and `HEAD` requests by default, which blocks the `POST` requests that Mintlify uses for analytics and other interactive features.

<img src="https://mintcdn.com/tomee-mintlify-99ed5a6d/lvphfaR5JRO8wLLv/images/cloudfront/all-behaviors.png?fit=max&auto=format&n=lvphfaR5JRO8wLLv&q=85&s=b29520998557de1b44f6de9ec42c55d9" alt="CloudFront &#x22;Behaviors&#x22; page with 4 behaviors: /docs/*, /docs, Default, and /.well-known/*." width="1603" height="365" data-path="images/cloudfront/all-behaviors.png" />

## Create CloudFront distribution

1. Navigate to [CloudFront](https://aws.amazon.com/cloudfront) inside the AWS console.
2. Click **Create distribution**.

<Frame>
  <img src="https://mintcdn.com/tomee-mintlify-99ed5a6d/lvphfaR5JRO8wLLv/images/cloudfront/create-distribution.png?fit=max&auto=format&n=lvphfaR5JRO8wLLv&q=85&s=f316bcb51f11bd38f5b5d9e7857d4241" alt="CloudFront Distributions page with the &#x22;Create distribution&#x22; button emphasized." width="3024" height="922" data-path="images/cloudfront/create-distribution.png" />
</Frame>

3. For the Origin domain, input `[SUBDOMAIN].mintlify.site` where `[SUBDOMAIN]` is your project's unique subdomain.

<Frame>
  <img src="https://mintcdn.com/tomee-mintlify-99ed5a6d/lvphfaR5JRO8wLLv/images/cloudfront/origin-name.png?fit=max&auto=format&n=lvphfaR5JRO8wLLv&q=85&s=7b7461ac4df587e68043031a42f2c5ee" alt="CloudFront &#x22;Create distribution&#x22; page showing &#x22;acme.mintlify.site&#x22; as the origin domain." width="1495" height="1036" data-path="images/cloudfront/origin-name.png" />
</Frame>

4. For "Web Application Firewall (WAF)," enable security protections.

<Frame>
  <img src="https://mintcdn.com/tomee-mintlify-99ed5a6d/lvphfaR5JRO8wLLv/images/cloudfront/enable-security-protections.png?fit=max&auto=format&n=lvphfaR5JRO8wLLv&q=85&s=309109e029a0c54788d4abb465c04dd2" alt="Web Application Firewall (WAF) options with &#x22;Enable security protections&#x22; selected." width="1482" height="877" data-path="images/cloudfront/enable-security-protections.png" />
</Frame>

<Note>
  WAF rules can block the `POST` requests that Mintlify uses for analytics and other interactive features. If analytics stop appearing in your dashboard after enabling WAF, check your WAF logs for blocked requests to paths under `/docs/_mintlify/`.
</Note>

5. The remaining settings should be default.
6. Click **Create distribution**.

## Add default origin

1. After creating the distribution, navigate to the "Origins" tab.

<Frame>
  <img src="https://mintcdn.com/tomee-mintlify-99ed5a6d/lvphfaR5JRO8wLLv/images/cloudfront/origins.png?fit=max&auto=format&n=lvphfaR5JRO8wLLv&q=85&s=add83cfbd1ca7e83f4a016dcf8254fec" alt="A CloudFront distribution with the &#x22;Origins&#x22; tab highlighted." width="3024" height="1466" data-path="images/cloudfront/origins.png" />
</Frame>

2. Find your staging URL that mirrors the main domain. This varies depending on your landing page host. For example, the Mintlify staging URL is [mintlify-landing-page.vercel.app](https://mintlify-landing-page.vercel.app).

<Info>
  If Webflow hosts your landing page, use Webflow's staging URL. It would look like `.webflow.io`.

  If you use Vercel, use the `.vercel.app` domain available for every project.
</Info>

3. Create a new Origin and add your staging URL as the "Origin domain."

<Frame>
  <img src="https://mintcdn.com/tomee-mintlify-99ed5a6d/lvphfaR5JRO8wLLv/images/cloudfront/default-origin.png?fit=max&auto=format&n=lvphfaR5JRO8wLLv&q=85&s=9f60a4658d7607ba2d642ca92097d2e8" alt="CloudFront &#x22;Create origin&#x22; page with a &#x22;Origin domain&#x22; input field highlighted." width="3024" height="1332" data-path="images/cloudfront/default-origin.png" />
</Frame>

You should now have two Origins: one with `[SUBDOMAIN].mintlify.site` and another with your staging URL.

<Frame>
  <img src="https://mintcdn.com/tomee-mintlify-99ed5a6d/lvphfaR5JRO8wLLv/images/cloudfront/final-origins.png?fit=max&auto=format&n=lvphfaR5JRO8wLLv&q=85&s=b27a039c300fd24b4135ea72bbf69388" alt="CloudFront &#x22;Origins&#x22; page with two origins: One for mintlify and another for mintlify-landing-page." width="1230" height="690" data-path="images/cloudfront/final-origins.png" />
</Frame>

## Set behaviors

Behaviors in CloudFront enable control over the subpath logic. At a high level, you create the following logic:

* **If a user lands on your custom subpath**, go to `[SUBDOMAIN].mintlify.site`.
* **If a user lands on any other page**, go to the current landing page.

1. Navigate to the "Behaviors" tab of your CloudFront distribution.

<Frame>
  <img src="https://mintcdn.com/tomee-mintlify-99ed5a6d/lvphfaR5JRO8wLLv/images/cloudfront/behaviors.png?fit=max&auto=format&n=lvphfaR5JRO8wLLv&q=85&s=b52f2f24bf61346c7d51af0462b7e876" alt="CloudFront &#x22;Behaviors&#x22; tab highlighted." width="3024" height="1384" data-path="images/cloudfront/behaviors.png" />
</Frame>

2. Click the **Create behavior** button and create the following behaviors.

### `/.well-known/*`

Create behaviors for Vercel domain verification paths with a **Path pattern** of `/.well-known/*` and set **Origin and origin groups** to your docs URL.

For "Cache policy," select **CachingDisabled** to ensure these verification requests pass through without caching.

<Frame>
  <img src="https://mintcdn.com/tomee-mintlify-99ed5a6d/lvphfaR5JRO8wLLv/images/cloudfront/well-known-policy.png?fit=max&auto=format&n=lvphfaR5JRO8wLLv&q=85&s=1d1c724d4a48ca851b67133b3c50e833" alt="CloudFront &#x22;Create behavior&#x22; page with a &#x22;Path pattern&#x22; of &#x22;/.well-known/*&#x22; and &#x22;Origin and origin groups&#x22; pointing to the staging URL." width="1413" height="1098" data-path="images/cloudfront/well-known-policy.png" />
</Frame>

<Info>
  If `.well-known/*` is too generic, you can narrow it down to 2 behaviors at a minimum for Vercel:

  * `/.well-known/vercel/*` - Required for Vercel domain verification
  * `/.well-known/acme-challenge/*` - Required for Let's Encrypt certificate verification
</Info>

### Your subpath

Create a behavior with a **Path pattern** of your chosen subpath, for example `/docs`, with **Origin and origin groups** pointing to the `.mintlify.site` URL (for example, `acme.mintlify.site`).

* Set "Cache policy" to **CachingDisabled**.
* Set "Origin request policy" to **AllViewerExceptHostHeader**.
* Set "Viewer protocol policy" to **Redirect HTTP to HTTPS**.
* Set "Allowed HTTP methods" to **GET, HEAD, OPTIONS, PUT, POST, PATCH, DELETE**.

<Warning>
  CloudFront only allows `GET` and `HEAD` requests by default. If you don't allow all HTTP methods, CloudFront rejects the `POST` requests that Mintlify uses for analytics, and your dashboard won't show any page views even though your docs load normally.
</Warning>

<Frame>
  <img src="https://mintcdn.com/tomee-mintlify-99ed5a6d/lvphfaR5JRO8wLLv/images/cloudfront/behavior-1.png?fit=max&auto=format&n=lvphfaR5JRO8wLLv&q=85&s=5b9ed1d00c4eff9a8f58e22b625810f5" alt="CloudFront &#x22;Create behavior&#x22; page with a &#x22;Path pattern&#x22; of &#x22;/docs/*&#x22; and &#x22;Origin and origin groups&#x22; pointing to the acme.mintlify.site URL." width="1520" height="1117" data-path="images/cloudfront/behavior-1.png" />
</Frame>

### Your subpath with wildcard

Create a behavior with a **Path pattern** of your chosen subpath followed by `/*`, for example `/docs/*`, and **Origin and origin groups** pointing to the same `.mintlify.site` URL.

These settings should exactly match your base subpath behavior, with the exception of the **Path pattern**.

* Set "Cache policy" to **CachingDisabled**.
* Set "Origin request policy" to **AllViewerExceptHostHeader**.
* Set "Viewer protocol policy" to **Redirect HTTP to HTTPS**.
* Set "Allowed HTTP methods" to **GET, HEAD, OPTIONS, PUT, POST, PATCH, DELETE**.

### `/mintlify-assets/_next/static/*`

* Set "Cache policy" to **CachingOptimized**.
* Set "Origin request policy" to **AllViewerExceptHostHeader**.
* Set "Viewer protocol policy" to **Redirect HTTP to HTTPS**.

### `Default (*)`

Edit the `Default (*)` behavior.

<Frame>
  <img src="https://mintcdn.com/tomee-mintlify-99ed5a6d/lvphfaR5JRO8wLLv/images/cloudfront/default-behavior-1.png?fit=max&auto=format&n=lvphfaR5JRO8wLLv&q=85&s=c637af54cb0f3bbea496335fcef7c600" alt="A CloudFront distribution with the &#x22;Default (*)&#x22; behavior selected and the Edit button emphasized." width="3024" height="1406" data-path="images/cloudfront/default-behavior-1.png" />
</Frame>

1. Change the default behavior's **Origin and origin groups** to the staging URL (for example, `mintlify-landing-page.vercel.app`).

<Frame>
  <img src="https://mintcdn.com/tomee-mintlify-99ed5a6d/lvphfaR5JRO8wLLv/images/cloudfront/default-behavior-2.png?fit=max&auto=format&n=lvphfaR5JRO8wLLv&q=85&s=fc13562fc98085c241356b92a7358c36" alt="CloudFront &#x22;Edit behavior&#x22; page with the &#x22;Origin and origin groups&#x22; input field highlighted." width="3024" height="1298" data-path="images/cloudfront/default-behavior-2.png" />
</Frame>

2. Click **Save changes**.

### Check that you set up behaviors correctly

If you follow the preceding steps, your behaviors should look like this:

<Frame>
  <img src="https://mintcdn.com/tomee-mintlify-99ed5a6d/lvphfaR5JRO8wLLv/images/cloudfront/all-behaviors.png?fit=max&auto=format&n=lvphfaR5JRO8wLLv&q=85&s=b29520998557de1b44f6de9ec42c55d9" alt="CloudFront &#x22;Behaviors&#x22; page with 4 behaviors: /docs/*, /docs, Default, and /.well-known/*." width="1603" height="365" data-path="images/cloudfront/all-behaviors.png" />
</Frame>

## Preview distribution

To test your distribution, go to the "General" tab and visit the **Distribution domain name** URL.

<Frame>
  <img src="https://mintcdn.com/tomee-mintlify-99ed5a6d/lvphfaR5JRO8wLLv/images/cloudfront/preview-distribution.png?fit=max&auto=format&n=lvphfaR5JRO8wLLv&q=85&s=ee5bd21e662a02be2dd7c09dc81ab988" alt="CloudFront &#x22;General&#x22; tab with the &#x22;Distribution domain name&#x22; URL highlighted." width="3024" height="1394" data-path="images/cloudfront/preview-distribution.png" />
</Frame>

All pages should route to your main landing page. When you append your chosen subpath, for example `/docs`, the URL should serve your Mintlify documentation.

## Connect with Route 53

Next, connect the CloudFront distribution to your primary domain.

<Note>
  For this section, you can also refer to AWS's official guide on [Configuring
  Amazon Route 53 to route traffic to a CloudFront
  distribution](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/routing-to-cloudfront-distribution.html#routing-to-cloudfront-distribution-config).
</Note>

1. Navigate to [Route53](https://aws.amazon.com/route53) inside the AWS console.
2. Navigate to the "Hosted zone" for your primary domain.
3. Click **Create record**.

<Frame>
  <img src="https://mintcdn.com/tomee-mintlify-99ed5a6d/lvphfaR5JRO8wLLv/images/cloudfront/route53-create-record.png?fit=max&auto=format&n=lvphfaR5JRO8wLLv&q=85&s=7b01a2d93f85e6eb8bec13b1af49b68a" alt="Route 53 &#x22;Records&#x22; page with the &#x22;Create record&#x22; button emphasized." width="1540" height="1238" data-path="images/cloudfront/route53-create-record.png" />
</Frame>

4. Toggle `Alias` and then **Route traffic to** the `Alias to CloudFront distribution` option.

<Frame>
  <img src="https://mintcdn.com/tomee-mintlify-99ed5a6d/lvphfaR5JRO8wLLv/images/cloudfront/create-record-alias.png?fit=max&auto=format&n=lvphfaR5JRO8wLLv&q=85&s=1e287136dde3981a07cec9097a9dfcf3" alt="Route 53 &#x22;Create record&#x22; page with the &#x22;Alias&#x22; toggle and the &#x22;Route traffic to&#x22; menu highlighted." width="3024" height="1494" data-path="images/cloudfront/create-record-alias.png" />
</Frame>

5. Click **Create records**.

<Note>
  You may need to remove the existing A record if one currently exists.
</Note>

Your documentation is now live at your chosen subpath for your primary domain.

<Note>
  After you deploy your changes, your documentation is usually available at your subpath within a few minutes. If your setup includes DNS changes, propagation can take 1-4 hours, and in rare cases up to 48 hours. If your documentation is not immediately available, wait before troubleshooting.
</Note>
