Apacheのmod_expiresは、既にレスポンスにExpiresヘッダが存在すると、それを変更しないので。そこで強制的に上書きできる様、patchをあててみた。

--- httpd-2.2.17.orig/modules/metadata/mod_expires.c    2008-11-12 04:59:22.000000000 +0900
+++ httpd-2.2.17/modules/metadata/mod_expires.c 2011-01-20 11:47:03.000000000 +0900
@@ -472,6 +472,11 @@
         expiry = apr_table_get(r->headers_out, "Expires");
         t = r->headers_out;
     }
+    if ( apr_table_get(r->subprocess_env, "override_expires") ) {
+        expiry = NULL;
+        apr_table_unset(t,"Expires");
+        apr_table_unset(t,"Cache-Control");
+    }
     if (expiry == NULL) {
         /*
          * No expiration has been set, so we can apply any managed by

override_expiresという環境変数をセットすると強制上書きモードになります

SetEnv override_expires 1
ExpiresActive On
ExpiresByType text/html "access plus 1 days"

これでReverseProxyで利用している時など、後ろからへっぽこなExpiresとCache-Controlが来たとき(例えば後ろがSquidだったとき)に上書きしてレスポンスすることができます。強制上書きモードでは、Cache-Controlのprivateやpublicなどのmax-age以外のオプションは消えてしまうので必要な場合はmod_headersモジュールなどで適宜追加するといいかと思います

nginxのHttpHeadersModuleでは、特にチェック無く上書きしてしまうようだ。RFC的にはExpiresを保持するのが正しいのかな

このブログ記事について

このページは、Masahiro Naganoが2011年1月20日 12:30に書いたブログ記事です。

ひとつ前のブログ記事は「SQLを書くプロジェクトのためのDBIx::Sunnyってのを書いている」です。

次のブログ記事は「再掲: mod_proxyのretryを2段階にするpatch 」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

ウェブページ

OpenID対応しています OpenIDについて
Powered by Movable Type 4.27-ja