Bill Moseley wrote:
On Tue, Jul 03, 2007 at 11:24:34AM +0100, Richard Jones wrote:
1) There is definitely no $c->request->header('X-Forwarded-Host')
Check if you have X-Forwarded-For.
Nope, no X-Forwarded-Anything! But I *do* see it in a dump of Apache's
headers if I request the base url (ie http://server.ip.address/myapp),
which generates the 'Welcome to Catalyst' default page, as I don't have
anything on that url. If I request a genuine page eg
http://server.ip.address/myapp/search, then all X-Forwarded-* entries
disappear from $self->apache->headers_in and $c->request->headers.
Let's see, I have not looked at this in a while but in apache2 I
have:
LoadModule proxy_module /usr/lib/apache2/modules/mod_proxy.so
LoadModule proxy_http_module
/usr/lib/apache2/modules/mod_proxy_http.so
It looks like the way I installed the backend Apache was to use
statically-linked modules, as a) there no list of LoadModules like in my
front-end httpd.conf, and b) I get them all displayed if I do:
/usr/local/apache2/bin/httpd -l eg mod_proxy.c
ProxyVia On ProxyReceiveBufferSize 16384
I don't have either of those set.
I guess I'm using mod_rewrite to figure out what does or doesn't need
to be sent to the back end -- so after all my rewrite rules and
conditions I have:
# Proxy everything else RewriteRule (.+) http://127.0.0.1:10085$1
[proxy]
After that I guess you are stuck figuring out why you are not getting
that header.
I don't use RewriteRule - my understanding is that with Apache 2.2.x
mod_rewrite is not needed, just mod_proxy, though as you will have
guessed, I'm not Apache expert!
2) In Catalyst::Engine::Apache::prepare_path, $host = the IP
address of the server (not localhost or 127.0.0.1), and $port = 81.
Did you see this code?
PROXY_CHECK: { my $headers = $self->apache->headers_in; unless (
$c->config->{using_frontend_proxy} ) { last PROXY_CHECK if
$c->request->address ne '127.0.0.1'; last PROXY_CHECK if
$c->config->{ignore_frontend_proxy}; } last PROXY_CHECK unless
$headers->{'X-Forwarded-For'};
# If we are running as a backend server, the user will always appear
# as 127.0.0.1. Select the most recent upstream IP (last in the list)
my ($ip) = $headers->{'X-Forwarded-For'} =~ /([^,\s]+)$/;
$c->request->address( $ip ); }
If your address isn't 127.0.0.1 then it's not going to check for a
proxy unless "using_frontend_proxy" is set.
Yes I saw that, and realised that it would 'last PROXY_CHECK' as the
address wasn't localhost. Basically if I 'trick' the system by manually
setting $c->request->header('X-Forwarded-Host' =>
'ip.address.of.frontend') and $host to 'localhost' then I get the
desired effect in the Catalyst app's URL's.
But it sounds like this is an Apache setup issue rather than Catalyst,
and though I am most grateful for your help, perhaps I should ask on an
Apache forum? (I only subscribe to the mod_perl mailing list though).
--
Richard Jones
_______________________________________________
List: [email protected]
Listinfo: http://lists.rawmode.org/mailman/listinfo/catalyst
Searchable archive: http://www.mail-archive.com/[email protected]/
Dev site: http://dev.catalyst.perl.org/