rack-reverse-proxy 0.10.0 → 0.11.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +2 -0
- data/lib/rack_reverse_proxy/middleware.rb +2 -1
- data/lib/rack_reverse_proxy/roundtrip.rb +9 -3
- data/lib/rack_reverse_proxy/version.rb +1 -1
- data/spec/rack/reverse_proxy_spec.rb +66 -2
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5006b032a51816d16876f3a92b9a1e0435483832
|
4
|
+
data.tar.gz: 8c5b31b2cff31606543f2d216bc2937178926b1f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 20c79748659c8c1e0e52294322b7470a7f31cd4ac6c32e83f9d035044badb02f2c9ea5db1b97839c12e629643e26b6ecabced99f7ad6afdc80eccee015e87b38
|
7
|
+
data.tar.gz: 5990b64a3e455ecfc80f67d5c6059fc48fc1fb0eb94c266653d511459628f118e3158c40612dd7dfe0e2da887916cff8ab4a1ce07e8159d907de7fd35e03c033
|
data/README.md
CHANGED
@@ -53,6 +53,8 @@ run app
|
|
53
53
|
* `:timeout` seconds to timout the requests
|
54
54
|
* `:force_ssl` redirects to ssl version, if not already using it (requires `:replace_response_host`). Default: false.
|
55
55
|
* `:verify_mode` the `OpenSSL::SSL` verify mode passed to Net::HTTP. Default: `OpenSSL::SSL::VERIFY_PEER`.
|
56
|
+
* `:x_forwarded_headers` sets up proper `X-Forwarded-*` headers. Default: true.
|
57
|
+
* `:preserve_encoding` Set to true to pass Accept-Encoding header to proxy server. Default: false.
|
56
58
|
|
57
59
|
### Sample usage in a Ruby on Rails app
|
58
60
|
|
@@ -84,13 +84,18 @@ module RackReverseProxy
|
|
84
84
|
target_request_headers["HOST"] = host_header
|
85
85
|
end
|
86
86
|
|
87
|
+
def preserve_encoding
|
88
|
+
return if options[:preserve_encoding]
|
89
|
+
target_request_headers.delete("Accept-Encoding")
|
90
|
+
end
|
91
|
+
|
87
92
|
def host_header
|
88
93
|
return uri.host if uri.port == uri.default_port
|
89
94
|
"#{uri.host}:#{uri.port}"
|
90
95
|
end
|
91
96
|
|
92
|
-
def
|
93
|
-
return unless options[:
|
97
|
+
def set_forwarded_headers
|
98
|
+
return unless options[:x_forwarded_headers]
|
94
99
|
target_request_headers["X-Forwarded-Host"] = source_request.host
|
95
100
|
target_request_headers["X-Forwarded-Port"] = source_request.port.to_s
|
96
101
|
end
|
@@ -178,7 +183,8 @@ module RackReverseProxy
|
|
178
183
|
|
179
184
|
def setup_request
|
180
185
|
preserve_host
|
181
|
-
|
186
|
+
preserve_encoding
|
187
|
+
set_forwarded_headers
|
182
188
|
initialize_http_header
|
183
189
|
set_basic_auth
|
184
190
|
setup_body
|
@@ -63,6 +63,15 @@ RSpec.describe Rack::ReverseProxy do
|
|
63
63
|
expect(last_response.body).to eq("Proxied App2")
|
64
64
|
end
|
65
65
|
|
66
|
+
it "returns headers from proxied app as strings" do
|
67
|
+
stub_request(:get, "http://example.com/test").to_return(
|
68
|
+
:body => "Proxied App",
|
69
|
+
:headers => { "Proxied-Header" => "TestValue" }
|
70
|
+
)
|
71
|
+
get "/test"
|
72
|
+
expect(last_response.headers["Proxied-Header"]).to eq("TestValue")
|
73
|
+
end
|
74
|
+
|
66
75
|
it "sets the Host header w/o default port" do
|
67
76
|
stub_request(:any, "example.com/test/stuff")
|
68
77
|
get "/test/stuff"
|
@@ -83,6 +92,16 @@ RSpec.describe Rack::ReverseProxy do
|
|
83
92
|
).to have_been_made
|
84
93
|
end
|
85
94
|
|
95
|
+
it "sets the X-Forwarded-Port header to the proxying port by default" do
|
96
|
+
stub_request(:any, "example.com/test/stuff")
|
97
|
+
get "/test/stuff"
|
98
|
+
expect(
|
99
|
+
a_request(:get, "http://example.com/test/stuff").with(
|
100
|
+
:headers => { "X-Forwarded-Port" => "80" }
|
101
|
+
)
|
102
|
+
).to have_been_made
|
103
|
+
end
|
104
|
+
|
86
105
|
it "does not produce headers with a Status key" do
|
87
106
|
stub_request(:get, "http://example.com/2test").to_return(
|
88
107
|
:status => 301, :headers => { :status => "301 Moved Permanently" }
|
@@ -128,6 +147,20 @@ RSpec.describe Rack::ReverseProxy do
|
|
128
147
|
expect(last_response.headers["Content-Length"]).to eq(body.length.to_s)
|
129
148
|
end
|
130
149
|
|
150
|
+
it "does not include Accept-Encoding header" do
|
151
|
+
stub_request(:any, "http://example.com/test")
|
152
|
+
|
153
|
+
get "/test", {}, "HTTP_ACCEPT_ENCODING" => "gzip, deflate"
|
154
|
+
|
155
|
+
expect(
|
156
|
+
a_request(:get, "http://example.com/test").with(
|
157
|
+
:headers => { "Accept-Encoding" => "gzip, deflate" }
|
158
|
+
)
|
159
|
+
).not_to have_been_made
|
160
|
+
|
161
|
+
expect(a_request(:get, "http://example.com/test")).to have_been_made
|
162
|
+
end
|
163
|
+
|
131
164
|
describe "with non-default port" do
|
132
165
|
def app
|
133
166
|
Rack::ReverseProxy.new(dummy_app) do
|
@@ -167,10 +200,30 @@ RSpec.describe Rack::ReverseProxy do
|
|
167
200
|
end
|
168
201
|
end
|
169
202
|
|
170
|
-
describe "with
|
203
|
+
describe "with preserve encoding turned on" do
|
204
|
+
def app
|
205
|
+
Rack::ReverseProxy.new(dummy_app) do
|
206
|
+
reverse_proxy "/test", "http://example.com/", :preserve_encoding => true
|
207
|
+
end
|
208
|
+
end
|
209
|
+
|
210
|
+
it "sets the Accept-Encoding header" do
|
211
|
+
stub_request(:any, "http://example.com/test")
|
212
|
+
|
213
|
+
get "/test", {}, "HTTP_ACCEPT_ENCODING" => "gzip, deflate"
|
214
|
+
|
215
|
+
expect(
|
216
|
+
a_request(:get, "http://example.com/test").with(
|
217
|
+
:headers => { "Accept-Encoding" => "gzip, deflate" }
|
218
|
+
)
|
219
|
+
).to have_been_made
|
220
|
+
end
|
221
|
+
end
|
222
|
+
|
223
|
+
describe "with x_forwarded_headers turned off" do
|
171
224
|
def app
|
172
225
|
Rack::ReverseProxy.new(dummy_app) do
|
173
|
-
reverse_proxy_options :
|
226
|
+
reverse_proxy_options :x_forwarded_headers => false
|
174
227
|
reverse_proxy "/test", "http://example.com/"
|
175
228
|
end
|
176
229
|
end
|
@@ -185,6 +238,17 @@ RSpec.describe Rack::ReverseProxy do
|
|
185
238
|
).not_to have_been_made
|
186
239
|
expect(a_request(:get, "http://example.com/test/stuff")).to have_been_made
|
187
240
|
end
|
241
|
+
|
242
|
+
it "does not set the X-Forwarded-Port header to the proxying port" do
|
243
|
+
stub_request(:any, "example.com/test/stuff")
|
244
|
+
get "/test/stuff"
|
245
|
+
expect(
|
246
|
+
a_request(:get, "http://example.com/test/stuff").with(
|
247
|
+
:headers => { "X-Forwarded-Port" => "80" }
|
248
|
+
)
|
249
|
+
).not_to have_been_made
|
250
|
+
expect(a_request(:get, "http://example.com/test/stuff")).to have_been_made
|
251
|
+
end
|
188
252
|
end
|
189
253
|
|
190
254
|
describe "with timeout configuration" do
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rack-reverse-proxy
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.11.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jon Swope
|
@@ -11,7 +11,7 @@ authors:
|
|
11
11
|
autorequire:
|
12
12
|
bindir: bin
|
13
13
|
cert_chain: []
|
14
|
-
date: 2016-02
|
14
|
+
date: 2016-03-02 00:00:00.000000000 Z
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
17
17
|
name: rack
|