There's tons of guides out there on either how to set up Apache httpd as a reverse proxy, or how to enable (disk) caching for content being served.
The web has surprisingly little information on how to combine both in a working manner, and to have Apache cache content that's being retrieved from a proxied backend.
Just using the default configuration and then dropping something like a
With debug logging you see either nothing at all or maybe a quick succession of
So what's up? Likely your configuration is entirely correct, but you're missing one statement:
It seems that with the default of CacheQuickHandler being enabled, proxied content never hits the quick handler phase that allows it to be processed for caching.
When CacheQuickHandler is disabled, everything just drops into place, though some fine tuning might be required.
The current configuration for my use case of caching media for my Mastodon instance that's being retrieved from a horribly sluggish Minio backend looks like this:
...and then:
The web has surprisingly little information on how to combine both in a working manner, and to have Apache cache content that's being retrieved from a proxied backend.
Just using the default configuration and then dropping something like a
CacheEnable disk
into the <Location ...>
that holds your proxy rules will not work: Nothing ever is written to the cache directory.With debug logging you see either nothing at all or maybe a quick succession of
AH00750: Adding CACHE_SAVE filter ..
and AH00751: Adding CACHE_REMOVE_URL filter ...
messages in the error.logSo what's up? Likely your configuration is entirely correct, but you're missing one statement:
CacheQuickHandler off
It seems that with the default of CacheQuickHandler being enabled, proxied content never hits the quick handler phase that allows it to be processed for caching.
When CacheQuickHandler is disabled, everything just drops into place, though some fine tuning might be required.
The current configuration for my use case of caching media for my Mastodon instance that's being retrieved from a horribly sluggish Minio backend looks like this:
<IfModule mod_cache_disk.c> CacheQuickHandler off CacheRoot /var/cache/apache2/mod_cache_disk CacheMaxFileSize 10000000 CacheDirLevels 2 CacheDirLength 1 CacheLock off CacheIgnoreCacheControl On CacheIgnoreQueryString On CacheStoreNoStore On CacheIgnoreHeaders Set-Cookie X-Amz-Request-Id </IfModule>
...and then:
<Location "/"> Require all granted ProxyPass http://<backend-address>:9000/ ProxyPassReverse http://<backend-address>:9000/ <IfModule mod_cache_disk.c> CacheEnable disk </IfModule> </Location>