A simple yet extensible python wrapper script for templating a proxy nginx configuration
that functions as host mapped reverse proxy container.
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/apiandlocalhost:5000/buywill be routed to the backendlocalhost:4000localhost:5000/will be routed to the frontendlocalhost:8080
pip install proxybootstrap # using pipNote: You will need docker for running the proxy container
Start the proxy server with your configuration
proxybootstrap \
--port 5000 \
/api@http://127.0.0.1:4000 /buy@http://127.0.0.1:4000 /@http://127.0.0.1:8080| 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:
proxybootstrap \
-my_var1 Test1 \
--my_var2 Test2 \
--port 5000 \
/@http://127.0.0.1:8080can be accessed in a template with
{{ my_var1 }}
{{ my_var2 }}
- Write a custom proxy configuration for
nginxor other proxy servers liketrafik,envoyorhaproxy - 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
If you do not have pipx and pipenv, install with
python3 -m pip install --user pipx
python3 -m pipx ensurepath
pipx install pipenvInstall all dependencies with
pipenv install --devTo 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)
This configuration is very minimal and intended for development use only.