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/

Reply via email to