Skip to content
Merged
Show file tree
Hide file tree
Changes from 19 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 4 additions & 3 deletions docs.json
Original file line number Diff line number Diff line change
Expand Up @@ -154,17 +154,18 @@
"settings/custom-404-page",
"guides/monorepo",
{
"group": "Custom Subdirectory",
"group": "Custom subdirectory",
"icon": "folder",
"pages": [
"advanced/subpath/cloudflare",
"advanced/subpath/route53-cloudfront",
"advanced/subpath/vercel",
"guides/reverse-proxy",
"guides/csp-configuration"
]
},
{
"group": "Dashboard Access",
"group": "Dashboard access",
"icon": "gauge",
"pages": [
"advanced/dashboard/sso",
Expand Down Expand Up @@ -551,4 +552,4 @@
"publicApiKey": "pk_76a6caa274e800f3ceff0b2bc6b9b9d82ab8"
}
}
}
}
116 changes: 116 additions & 0 deletions guides/reverse-proxy.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,116 @@
---
title: "Reverse proxy"
description: "Configure a custom reverse proxy to serve your documentation"
---

<Note>
Reverse proxy configurations are only supported for [Custom plans](https://mintlify.com/pricing?ref=reverse-proxy).
</Note>

To serve your documentation through a custom reverse proxy, you must configure routing rules, caching policies, and header forwarding.

## Routing configuration

Proxy these paths to your Mintlify subdomain with the specified caching policies:

| Path | Destination | Caching |
|------|-------------|---------|
| `/.well-known/acme-challenge/*` | `<your-subdomain>.mintlify.app` | No cache |
| `/.well-known/vercel/*` | `<your-subdomain>.mintlify.app` | No cache |
| `/*` | `<your-subdomain>.mintlify.app` | No cache |
| `/` | `<your-subdomain>.mintlify.app` | No cache |
| `/mintlify-assets/_next/static/*` | `<your-subdomain>.mintlify.app/mintlify-assets/_next/static/` | Cache enabled |

## Required header configuration

Configure your reverse proxy with these header requirements:

- **Origin**: Set to `<your-subdomain>.mintlify.app`
- **X-Forwarded-For**: Preserve client IP information
- **X-Forwarded-Proto**: Preserve original protocol (HTTP/HTTPS)
- **X-Real-IP**: Forward the real client IP address

<Warning>
Ensure that the `Host` header is not forwarded
</Warning>

## Example nginx configuration

Check warning on line 37 in guides/reverse-proxy.mdx

View check run for this annotation

Mintlify / Mintlify Validation (mintlify) - vale-spellcheck

guides/reverse-proxy.mdx#L37

Did you really mean 'nginx'?

```nginx
server {
listen 80;
server_name <your-domain>.com;

# Let's Encrypt and Vercel verification paths
location ~ ^/\.well-known/(acme-challenge|vercel)/ {
proxy_pass https://<your-subdomain>.mintlify.app;
proxy_set_header Origin <your-subdomain>.mintlify.app;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;

# Disable caching for verification paths
proxy_cache off;
add_header Cache-Control "no-cache, no-store, must-revalidate";
}

# Static assets with caching
location ~ ^/mintlify-assets/_next/static/ {
proxy_pass https://<your-subdomain>.mintlify.app;
proxy_set_header Origin <your-subdomain>.mintlify.app;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;

# Enable caching for static assets
proxy_cache_valid 200 1d;
add_header Cache-Control "public, max-age=86400";
}

# All other documentation paths
location / {
proxy_pass https://<your-subdomain>.mintlify.app/;
proxy_set_header Origin <your-subdomain>.mintlify.app;
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Bug: Nginx Config Errors: Missing HTTPS, Inconsistent Slashes

The nginx configuration examples have two issues: the Origin header is missing the https:// protocol scheme, which can affect CORS validation and other origin-based security checks. Additionally, proxy_pass URLs show inconsistent trailing slashes, potentially causing unexpected URL rewriting behavior and broken asset paths.

Fix in Cursor Fix in Web

proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;

# Disable caching for dynamic content
proxy_cache off;
add_header Cache-Control "no-cache, no-store, must-revalidate";
}
}
```

## Common issues and troubleshooting

### 404 error

**Symptoms**: Documentation loads but features don't work, API calls fail

**Cause**: Host header is being forwarded or Origin header is missing

**Solution**:

- Remove `Host` header forwarding
- Set `Origin` header to `<your-subdomain>.mintlify.app`

### Performance issues

**Symptoms**: Slow page loads and layout shifts.

**Cause**: Incorrect caching configuration

**Solution**: Enable caching only for `/mintlify-assets/_next/static/*` paths

## Support limitations

<Warning>
Reverse proxy configurations are only supported for [Custom plans](https://mintlify.com/pricing?ref=reverse-proxy). Common issues include:

- Domain verification failures
- SSL certificate provisioning problems
- Broken authentication flows
- Performance degradation
- Analytics tracking issues
</Warning>