Add option to pass through compressed responses

This commit is contained in:
Kyle Lacy 2018-01-29 15:38:05 -08:00
parent c9336a23d3
commit 5662cc2bde
2 changed files with 23 additions and 11 deletions

View File

@ -65,6 +65,14 @@ If you'd like to bypass SSL verification
reverse_proxy "http://localhost:8000", verify_ssl: false
```
If you'd like to allow the proxy to request compressed resources by forwarding the `Accept-Encoding` header
```ruby
reverse_proxy "http://localhost:8000", compression: :passthrough
# Note that your controller's response will only be compressed
# if the original response from localhost:8000 is compressed!
```
If you'd like to customize the options passed into the [HTTP session](https://ruby-doc.org/stdlib-2.4.0/libdoc/net/http/rdoc/Net/HTTP.html#start-method)
```ruby

View File

@ -38,12 +38,13 @@ module ReverseProxy
def request(env, options = {}, &block)
options.reverse_merge!(
headers: {},
http: {},
path: nil,
username: nil,
password: nil,
verify_ssl: true
headers: {},
http: {},
path: nil,
username: nil,
password: nil,
verify_ssl: true,
compression: :disabled
)
source_request = Rack::Request.new(env)
@ -73,11 +74,14 @@ module ReverseProxy
# Hold the response here
target_response = nil
# Don't encode response/support compression which was
# causing content length not match the actual content
# length of the response which ended up causing issues
# within Varnish (503)
target_request['Accept-Encoding'] = nil
case options[:compression]
when :passthrough
# Pass along the "Accept-Encoding" header from the source request as-is,
# so we don't need to change anything
when :disabled, false, nil
# Remove the "Accept-Encoding" header if compression is disabled
target_request['Accept-Encoding'] = nil
end
http_options = {}
http_options[:use_ssl] = (uri.scheme == "https")