Skip to content
This repository was archived by the owner on Apr 12, 2023. It is now read-only.

patientsknowbest/regproxy

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

regproxy

An http reverse proxy with a dynamic list of upstreams.

Requests are forwarded to all upstreams in parallel and all are expected to be successful. Only one response is returned to the client.

Use cases:

It can be used to implement a control plane for a dynamic set of services, where commands are synchronous and errors must be highlighted to the caller rather than ignored.

Prerequisites

  • docker

Instructions

To build:

docker build . -t regproxy

To run:

docker run --rm -it --network=host regproxy

For command line options see:

docker run --rm -it --network=host regproxy --help

To test:

  • start the proxy
  • start up 2 http servers on different ports
  • register both those servers with the reverse proxy
  • make a request to the proxy
docker run -d --rm -it --network=host regproxy
python -m http.server 3000&
python -m http.server 3001&
curl -X PUT http://localhost:9876/register -d '{"name": "upstream-1", "callback": "http://localhost:3000"}'
curl -X PUT http://localhost:9876/register -d '{"name": "upstream-2", "callback": "http://localhost:3001"}'
curl http://localhost:9877/

Then you can stop one upstream, and see requests will now fail

kill %1                     # kill the first python server
curl http://localhost:9877/ # Should fail

Extensions:

  • Allow deregistration of upstreams
  • Upstreams can register for specific URLs only
  • Replace the in-memory list with a service discovery system e.g. netflix eureka

About

A dynamic reverse proxy forwarding to multiple backends simultaneously

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors