Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
A very simple routing reverse proxy built on Goliath.
Ruby
Branch: master

Fetching latest commit…

Cannot retrieve the latest commit at this time

Failed to load latest commit information.
bin
example
lib
.gitignore
Gemfile
LICENSE
README.md
Rakefile
rrproxy.gemspec

README.md

rrproxy

rrproxy ("routing reverse proxy" or "rockin' ruby proxy" -- you pick) is a very simple reverse proxy server that can route requests to different servers based on simple pattern-matching rules against the requests. It is intended for use in a development environment as a substitute for 'real' proxies (nginx/HAProxy/whatever) that you use in production.

Installation

$ gem install rrproxy

rrproxy requires Ruby 1.9 (because it's based on Goliath).

Usage

rrproxy takes a very simple Ruby configuration file.

[
  ["/styles/screen.css", "localhost:8000"],
  ["", "example.com"]
]

As you can probably guess, this will redirect requests for example.com's css file to a local server (while passing all other requests through normally).

Run it like this:

$ rrproxy config.rb

Here's a more complicated example (it's also in examples/example_config.rb):

[
  ["/foo/bar?special=true", "localhost:1234"], # Route this specific request to a local server
  [%r{^(/foo).*}, "google.com", ""],           # You can use a regex, and also replace the match with a third arg
  ["", "amazon.com"]                           # Empty string matches everything
]

You will provide an array of tuples, where each one is of the form

[pattern, target_host, <optional replacement string>]

For each request, rrproxy will examine each routing rule in order, checking for a prefix match (if the pattern is a string) or a regex match. The first match found will be used, and the host for the request will be changed to the corresponding target host. If a replacement is provided, it will be used as a substitute for the first regex matching group (if the pattern is a regex) or the whole pattern (if the pattern is a string).

You can pass a couple of options to rrproxy:

$ rrproxy -a 127.0.0.1 -p 4444 your_config.rb

Credits

  • @tobert for the idea to use Goliath
  • The PostRank folks for a kickass server framework
Something went wrong with that request. Please try again.