(I sent this initially to the apache mailing list, but nobody has replied... so I am hoping that someone who is using mod_perl has seen this problem and knows the solution...)
Hi, I have set up my server to use mod_proxy as a reverse proxy front end for mod_perl. There are two builds of apache, both on the same machine. Setup: RedHat 7.3, fully updated. Single machine, with two servers: Front end: Apache/1.3.27 (Unix) mod_ssl/2.8.14 OpenSSL/0.9.6b Back end: Apache/1.3.27 (Unix) mod_gzip/1.3.19.1a mod_perl/1.27 The purpose is to relieve load on the mod_perl server. The front end serves all images and static pages, the mod_perl apache serves all dynamic html pages. This is working just fine at the moment, but I have never been able to get mod_proxy to cache any pages served from the mod_perl server. I have set up all the variables specified in the mod_proxy documentation (i.e. CacheRoot), but html pages do not get cached. I have tried turning off mod_gzip, and made sure that the mod_perl server is generating correct ContentLength and Expires headers. But nothing ever gets cached. The reason I would like this is that some of the pages on my sites are dynamic, but don't change much. They would benefit from being cached at least for a while, so that the mod_perl server doesn't have to regenerate them each and every time. This takes load off the SQL server too, which also gets hit every time. The proxy setup uses mod_rewrite to do the proxying: RewriteEngine On RewriteOptions 'inherit' RewriteRule \.(gif|jpg|png|ico|htm|cgi)$ - [last] RewriteRule ^/(.*)$ http://localhost:8080/$1 [proxy] ProxyReceiveBufferSize 131072 # Reverse proxy cache does not work! CacheRoot "/www/vhosts/www.neilgunton.com/cache" CacheSize 1024 The mod_perl server then has the VirtualHost set up to catch the forwarded requests. As I said, everything works perfectly except that mod_proxy never caches anything. The one clue I have is this: I have noticed during experimentation that if I use a separate machine for the front end proxy, and forward the mod_perl requests to the other machine, then it does seem to cache. So does mod_proxy never cache anything that is coming from the same machine (i.e. localhost)? If so then this looks like an oversight, since it can be very useful to cache even local content if it is being dynamically generated. I know that there is a new caching module for Apache 2.0, but I am not ready to upgrade yet and am otherwise quite satisfied with 1.3.x currently. I am just wondering if there is some magic switch I can throw for mod_proxy to cache mod_perl content coming from localhost. I have tried changing the redirect to use the fully specified domain instead of localhost, but that doesn't seem to work at all (I get a 404 error). Any clues much appreciated. Thanks in advance, -Neil