2015-06-05 02:24:05 +00:00
# rails-reverse-proxy
2018-03-11 18:50:40 +00:00
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*
2015-06-05 03:54:26 +00:00
2015-06-05 02:24:05 +00:00
## Installation
2018-03-11 18:50:40 +00:00
You know the drill. In your Gemfile
2015-06-05 03:54:26 +00:00
```ruby
gem 'rails-reverse-proxy'
```
Then (you guessed it!)
```
2022-08-23 18:00:27 +00:00
$ bundle install
2015-06-05 03:54:26 +00:00
```
## Usage
2018-03-11 18:50:40 +00:00
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
2015-06-05 03:54:26 +00:00
```ruby
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
2017-06-23 15:00:20 +00:00
# - on_connect
2015-06-05 03:54:26 +00:00
# - 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
```ruby
match 'blog/*path' => 'wordpress#index', via: [:get, :post, :put, :patch, :delete]
2015-06-05 02:24:05 +00:00
```
2015-06-05 03:54:26 +00:00
You can also pass options into `reverse_proxy`
```ruby
reverse_proxy "http://localhost:8000", path: "custom-path", headers: { 'X-Foo' => "Bar" }
2015-06-05 02:24:05 +00:00
```
2016-10-12 05:11:08 +00:00
If you'd like to bypass SSL verification
```ruby
reverse_proxy "http://localhost:8000", verify_ssl: false
```
2018-03-11 18:50:40 +00:00
If you'd like to customize options passed into the underlying [`Net:HTTP` ](https://ruby-doc.org/stdlib-2.4.0/libdoc/net/http/rdoc/Net/HTTP.html#start-method ) object
2017-02-28 13:59:56 +00:00
```ruby
2017-03-12 06:50:36 +00:00
reverse_proxy "http://localhost:8000", http: { read_timeout: 20, open_timeout: 100 }
2017-02-28 13:59:56 +00:00
```
2022-02-08 02:16:26 +00:00
If you'd like to reset the `Accept-Encoding` header in order to disable compression or other server-side encodings
```ruby
reverse_proxy "http://localhost:8000", reset_accept_encoding: true
```
2018-03-11 18:50:40 +00:00
Determine what version you're using
2016-10-05 20:14:21 +00:00
```ruby
ReverseProxy.version
```
Feel free to open an issue!
2015-06-05 03:54:26 +00:00
## Contributing
All pull requests will become first class citizens.
2018-03-11 18:50:40 +00:00
## Contributors
2015-08-28 06:27:42 +00:00
2018-03-11 18:50:40 +00:00
Special thanks to our contributors!
2015-08-28 06:27:42 +00:00
2022-02-08 02:16:26 +00:00
- [aardvarkk ](https://github.com/aardvarkk )
2023-03-02 15:37:53 +00:00
- [Arjeno ](https://github.com/Arjeno )
2017-03-12 06:52:06 +00:00
- [avinashkoulavkar ](https://github.com/avinashkoulavkar )
2022-02-08 02:16:26 +00:00
- [bapirex ](https://github.com/bapirex )
2017-06-23 16:43:15 +00:00
- [jcs ](https://github.com/jcs )
2022-02-08 02:16:26 +00:00
- [kylewlacy ](https://github.com/kylewlacy )
- [marcosbeirigo ](https://github.com/marcosbeirigo )
- [mediafinger ](https://github.com/mediafinger )
- [miyukki ](https://github.com/miyukki )