🦖 Portzilla

The Skinny

Proxy traffic from any URL on your domain to a service listening on another port. You can even send headers along with each request.

Say you want to connect your docs server to your website.

Use Portzilla to proxy traffic from docs.yoursite.com to your docs server listening on port 4080.

curl docs.yoursite.com → yoursite.com:4080

You would normally need NGINX or Apache for this. Instead, Portzilla proxies your traffic without all of the complex configuration and overhead.

graph LR; A[Browser] --> |request to
docs.yoursite.com| B{Portzilla} style B fill:#5EE5FB,stroke:#333,stroke-width:3px B --> |response| A B --> DD(GET yoursite.com:4080) style DD fill:#FFF,stroke:#333,stroke-width:1px DD --> B

How to Install

Powered by Cloudflare

Portzilla is powered by Cloudflare. If you're already using Cloudflare, click here to install Portzilla.


Cloudflare offers DDoS protection, a global CDN, SSL certificates, and a lot more cool stuff for free. You should probably use it.

Network Policies

Services that Portzilla proxies must allow incoming network requests. You may need to adjust your network policy to ensure each proxied port is accepting traffic. Refer to your network policy documentation to learn how to open ports on your platform.


If you open a port on your Cloudflare-enabled site, your service won't automatically respond on http://www.yoursite.com:<PORT>. Portzilla does this for you.

To test your service, install Portzilla and set up a route to the port its listening on. If you get an Error Page when your visit the Route URL, you probably need to tweak your network policy.

Getting Started

After installation, activate Portzilla by clicking the link in the email we sent you.

Next, visit our tutorials to get started with various platforms. Learn more about Portzilla and troubleshooting in the following sections:

Have a Twitter account? Extend your free trial!

Visit portzilla.networkchimp.com/extend for more details.


Check out these tutorials to see Portzilla in action:


Portzilla is easy to set up once you get your ports open! The instructions on the installation page are fairly self explanatory, but we'll go into a little more detail here.

The following Route Configuration is available for each route Portzilla should handle.

These Advanced Options are also available:

Route Configuration

Route Name

You should name your route something to remember it by. The following is another informative table.

Route Name Result
muh route 🤮
docs to vuepress server 🎉
(blank) 🤮
swagger ui 🎉


Don't put any sensitive information in Route Name. You should find a better place to put that.

Route URL

Traffic to this URL will be proxied to Target Port below. This can be any URL on your domain and can include subdomains. It is important that a full URL is specified here. Portzilla won't like it if you supply a path like /store here. It requires a URL like yoursite.com/store to work right. Here's some more examples in an informative table.

Route URL Result
/sad/path 🤮
yoursite.com/cool-beans 🎉
blog.yoursite.com 🎉

Portzilla will automatically proxy all requests to any subfolders of Route URL. In the table above, traffic to blog.yoursite.com/topics will also go to Target Port.

Target Port

All traffic from Route URL and any of its subfolders will be proxied to the service running on this port. Any non-reserved Target Port is allowed.

Target Location

All traffic from Route URL and any of its subfolders will be proxied to the service running at this web address.

Target Redirect

All traffic from Route URL will redirect to this location.

Redirect Status Code

Traffic from Route URL will redirect with this 300-level status code.

Target Resources

If you're proxying to a static page or framework like a React site or Ghost blog, you'll definitely want to read this section.

When a service loads, it might fetch Resources like Javascript or CSS files from a local server. You'll need to whitelist those Resources here.

For example, let's say you want to show off your brand new create-react-app project to the world. Find its Resources in the Network tab of your browser's DevTools.

Resources In DevTools

You'll notice that localhost:3000 serves a few Resources under the /static directory, a favicon.ico and a manifest.json. These Resources need to be whitelisted because we want to proxy localhost:3000 with Portzilla.

Target Resources:


Notice that full URL's like www.yoursite.com/static are required here. Portzilla won't work if you only specify /static.

The above configuration tells Portzilla to forward requests for favicon.ico, manifest.json and any files in /static and any subdirectory of /static.

Notice the potential for collisions here, but rest assured that Portzilla minimizes them. If you have more than one route that contains /static Resources, Portzilla will try to fetch requested resources from each one. This will normally ensure the Resource is retrieved. However, you'll need to create unique names for common files like favicon.ico because there is no way to avoid a collision between the favicons of the proxied and main pages.


If you visit your proxied page and get 500 errors or notice it looking funny, you probably need to whitelist more Resources.

Request Headers

You can specify any number of headers to pass along with requests sent to the service running on Target Port. Each header should be new-line separated. In other words, hit enter after each header you type. Here's what request headers might look like in your Portzilla configuration.

X-Forwarded-From: blog
Some-Other-Header: hey lol
athirdheader: you get the point

Custom Error Page

An HTML template to show if your service on Target Port is unresponsive. If you don't add a template, Portzilla will use its default error page.


Portzilla will render it's default Error Page unless you specify your own template in Custom Error Page.

The Error Page will appear after the number of seconds configured in Fetch Timeout.


Enable Advanced Options > Debug Mode to display Portzilla's Debug Page instead. This is useful if you're having trouble connecting to your service on Target Port.


If traffic to Route URL is using https, the proxied request will also use https. Enable this to use http instead.

Single Page App Mode

When routing to a Single Page App like React, Vue, Angular, etc...etc...etc., enable this to ensure that subroutes are handled appropriately.


SPAs often have a base parameter that should be set if the app is running on a subpath. For example, if you are running Vuepress on www.yoursite.com/docs, set base: '/docs' in your config.js. Refer to your SPAs documentation for specific instructions.

Enable Cache

Pages that hit Portzilla are not cached by default. This enables caching of any request made to this route.

Advanced Options

Fetch Timeout

This is the number of seconds Portzilla will wait for a response from the service listening on Target Port before giving up and rendering the Error Page. The default value is 5 seconds.


If your service takes a while to spin up or is otherwise slow, increase Fetch Timeout.

Disable Portzilla

If you want to temporarily disable Portzilla and all your routes, this is your option.

Debug Mode

This is useful if you're having trouble connecting to your service on Target Port. When Debug Mode is active, the Portzilla Debug Page will appear after a failed request.


In Debug Mode, Fetch Timeout is set very high so the request will complete.

Known Issues

  1. Portzilla cannot proxy from your domain root. For example, you can proxy to www.yoursite.com/service but you cannot proxy to www.yoursite.com.


  1. Portzilla isn't working right. What should I do?

    • First, ensure you're on the latest version! We've added several features and bug fixes in more recent versions. If you still see an issue, let us know and we'll take a look as soon as possible!
  2. I updated my Portzilla configuration but my website still reflects the old configuration.

    • Cloudflare may still be propagating your changes. Usually, it only takes a few seconds, but sometimes, it can take a few minutes for changes to take effect.
    • Your browser may be caching the results of your old configuration. This often happens with redirects. Try viewing your website in a different browser to ensure you aren't seeing cached results.
  3. Is Portzilla compatible with WordPress?

    • WordPress is not currently compatible. We're working on a solution and will have a tutorial soon!
  4. My single page app is not behaving correctly with Portzilla.

    • Enable Single Page App Mode and refer to the tip about setting your base url.

    • If you're experiencing 404's when fetching various files, ensure your Target Resources are correctly set.

  5. My POST requests are registering as GET requests.

    • Cloudflare's Always Use HTTPS feature rejects insecure POST requests that use http: instead of https:. If possible, modify your request to use https:, or as an alternative, disable Always Use HTTPS.
  6. I'm trying to proxy to a Target Location, but I am redirected to the website when I visit the Route URL!

    • You may be running into a redirect. Try changing the protocol of your Target Location from http: to https:.
  7. I'm trying to use Portzilla with a Javascript front-end framework but its not working!

    • Ensure that Single Page App Mode is enabled.

    • If your app is mounted on a subdirectory like /my-app, ensure the Base URL is set accordingly. Visit this answer for more information.

Connection Troubleshooting

  1. Help! I cannot connect to my service with Portzilla!

    • Confirm that your API is open to the internet. You should be able to curl your service directly. For example, if your API is on port 3000 on an EC2 instance, your api should respond to:
curl -I <your-subdomain>.amazonaws.com:3000

# If you don't get a response, open  the port its running on to allow incoming traffic.
  1. My API is open to the internet. I can visit it but I still can't connect with Portzilla!

    • Do you have a DNS record pointing at your service? Ensure your CNAME or A record is correctly mapping your service to a subdomain.
portzilla dns configuration
  1. My DNS records are correctly set but I still can't connect!

    • Is your API HTTP only? If your domain is HTTPS, enable the Use HTTP option and try again.


Is your service running on the machine you think it is? Is it possible the service is running on a different machine? (this happened to me 🤣)


The Custom Error Page logo was designed by Kiranshastry at FlatIcon.