# Can I use Vercel as a reverse proxy?

**Author:** Lee Robinson

---

Vercel offers native support for using a reverse proxy through [rewrites](https://vercel.com/docs/routing/rewrites). This guide will show how to set up rewrites to proxy requests to external origins, commonly used as part of an incremental migration to Vercel.

Proxying puts the [Vercel CDN](https://vercel.com/docs/cdn) in front of your backend, improving performance through Vercel's global network and reducing cost with [built-in caching](https://vercel.com/docs/caching). It also adds a layer of security with the [Vercel Firewall](https://vercel.com/docs/vercel-firewall).

## Reverse proxying with rewrites

[Rewrites](https://vercel.com/docs/routing/rewrites) allow you to send users to different URLs without modifying the visible URL. They allow you to change the URL path, query parameters, and headers of the request before it reaches your server.

You can also use them to return different responses depending on the headers of the incoming request (such as `User-Agent`, which contains the type of device and browser that the request originated from).

## Using Vercel rewrites to reverse proxy

Vercel supports [many different frameworks](https://vercel.com/docs/frameworks) which have native support for reverse proxying. For example, with [Next.js](http://nextjs.org/):

`module.exports = { async rewrites() { return [{ source: '/blog', destination: 'https://acme.com/blog', }, ] }, }` If your framework does not support rewrites, you can also define rules in a `vercel.json` file located in the root of your application. This enables you to reverse proxy any project. `{ "rewrites": [ { "source": "/blog", "destination": "https://acme.com/blog" } ] }` ## Using project-level routing rules You can also configure reverse proxying without modifying code using [project-level routing rules](https://vercel.com/docs/routing/project-routing-rules).

These rules are applied at the CDN layer and take effect immediately without redeployment.

To create a rewrite rule with the [Vercel CLI](https://vercel.com/docs/cli/routes), run the following commands:

`vercel routes add "Blog Proxy" \ --src "/blog" \ --src-syntax path-to-regexp \ --action rewrite \ --dest "https://acme.com/blog" \ --yes vercel routes publish --yes`

Project-level routing rules can also be configured through the [Vercel Dashboard](https://vercel.com/d?to=%2F%5Bteam%5D%2F%5Bproject%5D%2Fcdn%2Frouting), [REST API](https://vercel.com/docs/rest-api/project-routes/add-a-routing-rule), or [SDK](https://vercel.com/docs/rest-api/sdk/project-routes/add-a-routing-rule).

## Learn more

Review the following links for more advanced use cases:

- [Rewrites on Vercel](https://vercel.com/docs/routing/rewrites)
  
- [Rewrites with vercel.json](https://vercel.com/docs/project-configuration/vercel-json#rewrites)
  
- [Incremental Migration Guide](https://vercel.com/docs/incremental-migration)

---

[View full KB sitemap](/kb/sitemap.md)
