elixir-reverse-proxy

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:

ReverseProxy

Build Status Coverage Status

A Plug based, reverse proxy server.

ReverseProxy
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.

Goals

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

Non-goals

  • Replace production reverse proxy solutions

Configuration

:upstreams

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.

:cache

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

Running

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

plug_adapter.http ReverseProxy.Router, options, adapter_options

Embedding

ReverseProxy
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

Plug.Router.forward/2
to pass requests to the
/google
path to
ReverseProxy
:
defmodule PlugReverseProxy.Router do
  use Plug.Router

plug :match plug :dispatch

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

License

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.