108 lines
2.5 KiB
Markdown
108 lines
2.5 KiB
Markdown
# 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
|
|
|
|
```ruby
|
|
gem 'rails-reverse-proxy'
|
|
```
|
|
|
|
Then (you guessed it!)
|
|
|
|
```
|
|
$ bundle install
|
|
```
|
|
|
|
## 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
|
|
|
|
```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
|
|
# - 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
|
|
|
|
```ruby
|
|
match 'blog/*path' => 'wordpress#index', via: [:get, :post, :put, :patch, :delete]
|
|
```
|
|
|
|
You can also pass options into `reverse_proxy`
|
|
|
|
```ruby
|
|
reverse_proxy "http://localhost:8000", path: "custom-path", headers: { 'X-Foo' => "Bar" }
|
|
```
|
|
|
|
If you'd like to bypass SSL verification
|
|
|
|
```ruby
|
|
reverse_proxy "http://localhost:8000", verify_ssl: false
|
|
```
|
|
|
|
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
|
|
|
|
```ruby
|
|
reverse_proxy "http://localhost:8000", http: { read_timeout: 20, open_timeout: 100 }
|
|
```
|
|
|
|
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
|
|
```
|
|
|
|
Determine what version you're using
|
|
|
|
```ruby
|
|
ReverseProxy.version
|
|
```
|
|
|
|
Feel free to open an issue!
|
|
|
|
## Contributing
|
|
|
|
All pull requests will become first class citizens.
|
|
|
|
## Contributors
|
|
|
|
Special thanks to our contributors!
|
|
|
|
- [aardvarkk](https://github.com/aardvarkk)
|
|
- [avinashkoulavkar](https://github.com/avinashkoulavkar)
|
|
- [bapirex](https://github.com/bapirex)
|
|
- [jcs](https://github.com/jcs)
|
|
- [kylewlacy](https://github.com/kylewlacy)
|
|
- [marcosbeirigo](https://github.com/marcosbeirigo)
|
|
- [mediafinger](https://github.com/mediafinger)
|
|
- [miyukki](https://github.com/miyukki)
|