by slogsdon

A Plug based, reverse proxy server written in Elixir.

132 Stars 33 Forks Last release: Not found MIT License 43 Commits 3 Releases

Available items

No Items, yet!

The developer of this repository has not created any items for sale yet. Need a bug fixed? Help with integration? A different license? Create a request here:


Build Status Coverage Status

A Plug based, reverse proxy server.

can act as a standalone service or as part of a plug pipeline in an existing application.

From Wikipedia:

In computer networks, a reverse proxy is a type of proxy server that retrieves resources on behalf of a client from one or more servers. These resources are then returned to the client as though they originated from the proxy server itself. While a forward proxy acts as an intermediary for its associated clients to contact any server, a reverse proxy acts as an intermediary for its associated servers to be contacted by any client.


  • Domain based proxying
  • Path based proxying
  • Proxy cache
  • SSL/TLS termination


  • Replace production reverse proxy solutions



Upstream servers can be listed per-domain in the following forms:

  • List of remote nodes, e.g.
    ["http://host:4000", "http://host:4001"]
  • A
    {plug, options}
    tuple, useful for umbrella applications

Note: This structure may change in the future as the project progresses.

config :reverse_proxy,
  # ...
  upstreams: %{ "foobar.localhost" => ["http://www.example.com"],
                "api." => ["http://localhost:4000"],
                "slogsdon.com" => ["http://localhost:4001"] }

You might need to create

foobar.localhost in
/etc/hosts` and replace example.com with an actual site.


Enables the caching of the responses from the upstream server.

Note: This feature has not yet been built to completion. The current implementation treats all requests as hit misses.

config :reverse_proxy,
  # ...
  cache: false


plug_adapter = Plug.Adapters.Cowboy
options = []
adapter_options = []

plug_adapter.http ReverseProxy.Router, options, adapter_options


can be embedded into an existing Plug application to proxy requests to required resources in cases where CORS or JSONP are unavailable.

Note: This feature has not been thoroughly flushed out, so it might not yet act as described.

The following code leverages

to pass requests to the
path to
defmodule PlugReverseProxy.Router do
  use Plug.Router

plug :match plug :dispatch

forward "/google", to: ReverseProxy, upstream: ["google.com"] end


ReverseProxy is released under the MIT License.

See LICENSE for details.

We use cookies. If you continue to browse the site, you agree to the use of cookies. For more information on our use of cookies please see our Privacy Policy.