Skip to main content

A simple python wrapper script for bootstrapping a reverse proxy inside a docker container.

Project description

Build Status PyPI License PyPI Version PyPI Python versions

A simple yet extensible python wrapper script for templating a proxy nginx configuration that functions as host mapped reverse proxy container.

Why and when to use?

Modern browsers enforce CORS policy and won’t let you make requests from your frontend running on localhost:8080 to your backend at localhost:4000. To solve this problem, start a proxy at localhost:5000 (or any other spare port) and proxy requests based on paths:

  • localhost:5000/api and localhost:5000/buy will be routed to the backend localhost:4000

  • localhost:5000/ will be routed to the frontend localhost:8080

Installation and usage

Note: You need to have docker installed

After you cloned the repository, install dependencies with

pip install proxybootstrap # using pip
pipx install proxybootstrap # using pipx

Start the proxy server with your configuration

python start.py \
    --port 5000 \
    /api@http://127.0.0.1:4000 /buy@http://127.0.0.1:4000 /@http://127.0.0.1:8080

Customization

Option

Description

Default

locations

service locations to proxy.

None

-c / -config

nginx config template file

./config/default.conf

--port

listening port for the reverse proxy

5000

--verbose

enable verbose output

False

--sync

force synchronous communication with the proxy

False

--tag

docker tag for the reverse proxy container

dev/cors-reverse-proxy

--dockerfile

dockerfile for building the container

./Dockerfile

Under the hood, configuration options are applied to the --config template file and rendered using jinja2. If you wish, you can pass additional arguments and use them in the config template. Example:

python start.py \
    -my_var1 Test1 \
    --my_var2 Test2 \
    --port 5000 \
    /@http://127.0.0.1:8080

can be accessed in a template with

{{ my_var1 }}
{{ my_var2 }}

Alternatives

  • Write a custom proxy configuration for nginx or other proxy servers like trafik, envoy or haproxy

  • When using webpack or another popular tool there might be some plugins like devserver-proxy for vuejs

  • Mess around with headers to allow specific CORS requests

Development

If you do not have pipx and pipenv, install with

python3 -m pip install --user pipx
python3 -m pipx ensurepath
pipx install pipenv

Install all dependencies with

pipenv install --dev

To format, sort imports and check PEP8 conformity, run

pipenv run black .
pipenv run isort
pipenv run flake8

(These are also configured as a git pre commit hook)

Notice

This configuration is very minimal and intended for development use only.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

proxybootstrap-0.1.1.tar.gz (5.3 kB view hashes)

Uploaded Source

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page