Go to file
James Hu 934523e3f3 Regenerate gemspec for version 0.9.2 2018-04-18 15:44:14 -07:00
lib Don't copy HTTP_VERSION from the source to the target request 2018-04-18 15:25:14 -07:00
.document Initial commit to rails-reverse-proxy. 2015-06-04 19:22:09 -07:00
.gitignore Initial commit to rails-reverse-proxy. 2015-06-04 19:22:09 -07:00
Gemfile Update jeweler 2017-03-11 23:01:21 -08:00
Gemfile.lock Update jeweler 2017-03-11 23:01:21 -08:00
LICENSE Add MIT License 2016-10-05 00:10:31 -07:00
README.md Update version to 0.9.2 2018-04-18 15:44:10 -07:00
Rakefile We don't use test and rdoc 2015-06-04 20:36:20 -07:00
VERSION Update version to 0.9.2 2018-04-18 15:44:10 -07:00
rails-reverse-proxy.gemspec Regenerate gemspec for version 0.9.2 2018-04-18 15:44:14 -07:00

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 (c) 2016-2018 James Hu. See LICENSE for further details.