Hi,
We’ve an application that uses url_for in controllers and views. In
views, url_for generates a relative url (as if :only_path where used).
All is fine there.
However, in controllers, url_for generates a full url, with the host
name. This causes problems when we have a chain of Apache proxy
servers:
My Browser —> Proxy 1 ----> Proxy 2 ----> Phusion Deployment Server.
In this scenario, the request header item HTTP_X_FORWARDED_HOST
contains the following:
proxy1:81, proxy2
Rails extracts the host by splitting this string and getting the last
item:
(actionpack-2.3.2\lib\action_controller\request.rb line 271)
def raw_host_with_port
if forwarded = env["HTTP_X_FORWARDED_HOST"]
forwarded.split(/,\s?/).last
else
env['HTTP_HOST'] || "#{env['SERVER_NAME'] || env
[‘SERVER_ADDR’]}:#{env[‘SERVER_PORT’]}"
end
end
What happens is that we get proxy2 as the host.
Shouldn’t it be trying to get the first item instead -
forwarded.split(/,\s?/).first
giving us proxy1:81 instead?
Is this a bug? If not, is there reasoning behind this?
Derek.