JT Smith wrote: > I'd like to write a handler that would serve big files out of a local > cache but proxy everything else through to another server. The situation > is that there is an extranet in the US, but a lot of folks in New > Zealand need access to the file downloads. I don't want to replicate the > whole installation in NZ, but instead, give them a seperate server with > mod_proxy set up so that when they request most pages it proxies them > through from the main server, but when they ask for a really big file in > the /uploads path that it can pull it out of local cache. > > Here's what I have so far: > > package CacheHandler; > > use Apache2::Request; > use Apache2::Const; > > sub handler { > my $r = shift; > if ($r->uri =~ m/^\/uploads/) { > my $path = "/data/cache".$r->uri; > if (-f $path) { > # make it serve up this local file since it exists > } > } else { my $real_url = $r->unparsed_uri; $r->proxyreq(1); $r->uri($real_url); $r->filename("proxy:$real_url"); $r->handler('proxy-server'); } > return Apache2::Const::DECLINED; > } > > 1;
And then you don't need ProxyPass anymore. See http://perl.apache.org/docs/2.0/api/Apache2/RequestRec.html#C_proxyreq_ for more details > And here's the virtual host I've set up: > > <VirtualHost *:80> > ServerName extranet > SSLProxyEngine on > DocumentRoot "/data/cache" > ProxyPass / https://example.com/ > PerlModule CacheHandler > PerlInitHandler CacheHandler > </VirtualHost> > > What can I add into my handler to make it circumvent the ProxyPass > directive? Or if I can't do that, how can I tell it to enable ProxyPass > on any request where I don't pass those other conditions? > > Thanks for any assistance you can provide in advance. -------------------------------------------------------------------------------- Philippe M. Chiasson m/gozer\@(apache|cpan|ectoplasm)\.org/ GPG KeyID : 88C3A5A5 http://gozer.ectoplasm.org/ F9BF E0C2 480E 7680 1AE5 3631 CB32 A107 88C3A5A5
signature.asc
Description: OpenPGP digital signature