Skip to content

Commit e65083c

Browse files
committed
Merge pull request jaswope#26 from aderouineau/x_forwarded_for
Added X-Forwarded-For header in RoundTrip::set_forwarded_host()
2 parents b683d9a + 3051dd3 commit e65083c

File tree

3 files changed

+27
-6
lines changed

3 files changed

+27
-6
lines changed

lib/rack_reverse_proxy/middleware.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ def initialize(app = nil, &b)
1313
@rules = []
1414
@global_options = {
1515
:preserve_host => true,
16-
:x_forwarded_host => true,
16+
:x_forwarded_headers => true,
1717
:matching => :all,
1818
:replace_response_host => false
1919
}

lib/rack_reverse_proxy/roundtrip.rb

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -89,8 +89,8 @@ def host_header
8989
"#{uri.host}:#{uri.port}"
9090
end
9191

92-
def set_forwarded_host
93-
return unless options[:x_forwarded_host]
92+
def set_forwarded_headers
93+
return unless options[:x_forwarded_headers]
9494
target_request_headers["X-Forwarded-Host"] = source_request.host
9595
target_request_headers["X-Forwarded-Port"] = source_request.port.to_s
9696
end
@@ -178,7 +178,7 @@ def need_replace_location?
178178

179179
def setup_request
180180
preserve_host
181-
set_forwarded_host
181+
set_forwarded_headers
182182
initialize_http_header
183183
set_basic_auth
184184
setup_body

spec/rack/reverse_proxy_spec.rb

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,16 @@ def app
9292
).to have_been_made
9393
end
9494

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+
95105
it "does not produce headers with a Status key" do
96106
stub_request(:get, "http://example.com/2test").to_return(
97107
:status => 301, :headers => { :status => "301 Moved Permanently" }
@@ -176,10 +186,10 @@ def app
176186
end
177187
end
178188

179-
describe "with x_forwarded_host turned off" do
189+
describe "with x_forwarded_headers turned off" do
180190
def app
181191
Rack::ReverseProxy.new(dummy_app) do
182-
reverse_proxy_options :x_forwarded_host => false
192+
reverse_proxy_options :x_forwarded_headers => false
183193
reverse_proxy "/test", "http://example.com/"
184194
end
185195
end
@@ -194,6 +204,17 @@ def app
194204
).not_to have_been_made
195205
expect(a_request(:get, "http://example.com/test/stuff")).to have_been_made
196206
end
207+
208+
it "does not set the X-Forwarded-Port header to the proxying port" do
209+
stub_request(:any, "example.com/test/stuff")
210+
get "/test/stuff"
211+
expect(
212+
a_request(:get, "http://example.com/test/stuff").with(
213+
:headers => { "X-Forwarded-Port" => "80" }
214+
)
215+
).not_to have_been_made
216+
expect(a_request(:get, "http://example.com/test/stuff")).to have_been_made
217+
end
197218
end
198219

199220
describe "with timeout configuration" do

0 commit comments

Comments
 (0)