proxygen

Generate a local development proxy in minutes.

Usage no npm install needed!

<script type="module">
  import proxygen from 'https://cdn.skypack.dev/proxygen';
</script>

README

proxygen

Generate a local development proxy in minutes.

This tool will allow you to easily create a proxy to connect various services you might be using during development, while allowing you to use a secure connection / SSL in your browser.

Installation

npm install -g proxygen

Usage

Launch proxygen:

proxygen proxygen.json

Configuration

Create a proxy configuration file named proxygen.json.

For each proxy, you can configure conditions and an action:

{
  "hosts": ["www.sample.dev"],
  "proxies": [{
    "conditions": [{ "target": "host", "type": "equals", "value": "www.sample.dev", "then": "pass" }],
    "action": { "type": "proxy", "host": "www.sample.com" }
  }]
}

Make sure to create hosts file entries for the hosts you have specified:

127.0.0.1 www.sample.dev

SSL Certificates

proxygen will automatically create SSL certificates for the domains specified. When you start proxygen the first time, a CA certificate will be installed in ~/.proxygen/proxygen.ca.cert.pem. Make sure to 'trust' this certificate in your keychain settings.

Use Cases

You might have a setup similar to this:

  • Website running on http://localhost:8080/
  • API Server running on http://localhost:9000/
  • GraphQL Server running on http://localhost:9001/graphql/
  • Cloud Storage running in production on https://cdn.awesome.com/

Using proxygen, you can easily set up the following routing:

Example Configuration:

{
  "hosts": ["www.awesome.dev"],
  "proxies": [{
    "name": "APIServer",
    "conditions": [{ "target": "path", "type": "matches", "value": "^/api/", "then": "pass" }],
    "action": { "type": "proxy", "host": "127.0.0.1", "port": 9000 }
  }, {
    "name": "GraphQLServer",
    "conditions": [{ "target": "path", "type": "matches", "value": "^/graphql/", "then": "pass" }],
    "action": { "type": "proxy", "host": "127.0.0.1", "port": 9001 }
  }, {
    "name": "CloudStorage",
    "conditions": [{ "target": "path", "type": "matches", "value": "^/cdn/", "then": "pass" }],
    "action": { "type": "cache", "protocol": "https:", "host": "cdn.awesome.com", "root": "/tmp/cdn" }
  }, {
    "name": "Website",
    "action": { "type": "proxy", "host": "127.0.0.1", "port": "8080" }
  }]
}

Run as Service

Install forever:

npm install -g forever

Start service:

forever start (which proxygen)

License

MIT