A reverse proxy for Ruby on Rails
Branch: master
Clone or download
Latest commit 178b947 Apr 20, 2018
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
lib Don't copy HTTP_VERSION from the source to the target request Apr 18, 2018
.document Initial commit to rails-reverse-proxy. Jun 5, 2015
.gitignore Ignore local vendor bundle Apr 20, 2018
Gemfile Update jeweler Mar 12, 2017
Gemfile.lock
LICENSE
README.md
Rakefile
VERSION Update version to 0.9.2 Apr 18, 2018
rails-reverse-proxy.gemspec

README.md

rails-reverse-proxy

A reverse proxy for Ruby on Rails.

A reverse proxy accepts a request from a client, forwards it to a server that can fulfill it, and returns the server's response to the client

Installation

You know the drill. In your Gemfile

gem 'rails-reverse-proxy'

Then (you guessed it!)

$ bundle

Usage

A use case for this gem is serving WordPress on a path within your Rails application, such as /blog.

To do this, your controller might look like this

class WordpressController < ApplicationController
  include ReverseProxy::Controller

  def index
    # Assuming the WordPress server is being hosted on port 8080
    reverse_proxy "http://localhost:8080" do |config|
      # We got a 404!
      config.on_missing do |code, response|
        redirect_to root_url and return
      end

      # There's also other callbacks:
      # - on_set_cookies
      # - on_connect
      # - on_response
      # - on_set_cookies
      # - on_success
      # - on_redirect
      # - on_missing
      # - on_error
      # - on_complete
    end
  end
end

Then in your routes.rb file, you should have something like

match 'blog/*path' => 'wordpress#index', via: [:get, :post, :put, :patch, :delete]

You can also pass options into reverse_proxy

reverse_proxy "http://localhost:8000", path: "custom-path", headers: { 'X-Foo' => "Bar" }

If you'd like to bypass SSL verification

reverse_proxy "http://localhost:8000", verify_ssl: false

If you'd like to customize options passed into the underlying Net:HTTP object

reverse_proxy "http://localhost:8000", http: { read_timeout: 20, open_timeout: 100 }

Determine what version you're using

ReverseProxy.version

Feel free to open an issue!

Contributing

All pull requests will become first class citizens.

Contributors

Special thanks to our contributors!

Copyright

Copyright (c) 2016-2018 James Hu. See LICENSE for further details.