Go to file
James Hu af0c398309 Bump version and add CHANGELOG 2022-02-07 18:09:07 -08:00
lib Merge pull request #27 from kylewlacy/passthrough-compression 2022-02-07 17:49:19 -08: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 Update ruby dev version 2022-02-07 18:06:28 -08:00
CHANGELOG.md Bump version and add CHANGELOG 2022-02-07 18:09:07 -08:00
Gemfile Use newer version of nokogiri in development for arm64 systems 2022-02-07 18:07:48 -08:00
Gemfile.lock Use newer version of nokogiri in development for arm64 systems 2022-02-07 18:07:48 -08: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 Bump version and add CHANGELOG 2022-02-07 18:09:07 -08:00
rails-reverse-proxy.gemspec Bump version to 0.10.1 for good measure 2021-03-24 13:54:45 -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!