Go to file
James Hu 16bda3f5c7 Lock development ruby version to 2.4.2 for jeweler 2021-03-24 13:53:26 -07:00
lib Remove unused 'rack-proxy' dependency 2021-03-24 19:09:23 +01:00
.document Initial commit to rails-reverse-proxy. 2015-06-04 19:22:09 -07:00
.gitignore Ignore local vendor bundle 2018-04-20 08:43:44 -07:00
.ruby-version Lock development ruby version to 2.4.2 for jeweler 2021-03-24 13:53:26 -07:00
Gemfile Remove unused 'rack-proxy' dependency 2021-03-24 19:09:23 +01:00
Gemfile.lock Remove unused 'rack-proxy' dependency 2021-03-24 19:09:23 +01:00
LICENSE Add MIT License 2016-10-05 00:10:31 -07:00
README.md Clean up release for 0.10.0 2021-03-24 13:30:25 -07:00
Rakefile We don't use test and rdoc 2015-06-04 20:36:20 -07:00
VERSION Clean up release for 0.10.0 2021-03-24 13:30:25 -07:00
rails-reverse-proxy.gemspec Regenerate gemspec for version 0.10.0 2021-03-24 13:30:37 -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!