web-dev-qa-db-ja.com

mod_cacheが機能しない

私はPHPサイトに動的に生成された多くのページがあります。ほとんどの場合、コンテンツは特定の日に変更されないため、パフォーマンスを向上させるためにmod_cacheに切り替えようとしています。

Apache.orgのmod_cacheページ を含むWeb上の例に従って、可能な限りmod_cacheを構成しました。 LogLevel debugを設定すると、キャッシングに関する少しの情報が表示されます。このような行のペアはたくさんあります:

[Fri Jun 01 17:28:18 2012] [debug] mod_cache.c(141): Adding CACHE_SAVE filter for /foo/bar
[Fri Jun 01 17:28:18 2012] [debug] mod_cache.c(148): Adding CACHE_REMOVE_URL filter for /foo/bar

CacheEnable disk /fooを設定して、/ fooの下にあるすべてのものをキャッシュしたいことを示しているので、これは問題ありません。私はmod_cacheの初心者ですが、これらの行についての私の理解は、URLがキャッシュされることになっていることをmod_cacheが確認したことを意味しますが、キャッシュにデータを保存していることを示す行がさらにあるはずですその後、同じURLへの後続のヒットでそれらを取得します。

F5の更新の有無にかかわらず、または別のブラウザーや別のコンピューターで、顔が青くなるまで同じURLにアクセスできます。ログに表示されるのは常にその行のペアであり、他には何も表示されません。

CacheEnable disk /を設定すると、さらに多くのアクティビティが表示されます。しかし、サイト全体をキャッシュしたくはありません。また、サイトには非常に多くの異なるサブパスがあるため、必要なすべての場所にno-cacheヘッダーを設定するためにコードを変更する必要はありません。

ここではmod_rewriteが使用されており、/ foo/barをindex.php?baz=/foo/barなどに書き換えていますが、私の理解では、mod_cacheは書き換え後のURLではなく書き換え前のURLを使用しています。

私の知る限り、応答ヘッダーがキャッシュの邪魔にならないようにしています。 1つのヒットの例を次に示します。

Cache-Control:must-revalidate, max-age=3600
Connection:Keep-Alive
Content-Encoding:gzip
Content-Length:16790
Content-Type:text/html
Date:Fri, 01 Jun 2012 21:43:09 GMT
Expires:Fri,  1 Jun 2012 18:43:09 -0400
Keep-Alive:timeout=15, max=100
Pragma:
Server:Apache
Vary:Accept-Encoding

mod_cacheの設定は次のとおりです。

CacheRoot   /var/cache/Apache2/
CacheDirLevels 3
CacheDirLength 2
CacheEnable disk /foo

Mod_cacheがキャッシングの仕事を邪魔しているのは何ですか?

5
Pistos

マップしようとして同じ問題に直面していました

CacheEnable Disk /api

機能した唯一のマッピングは

CacheEnable Disk / 

すべてをキャッシュしました。

ドキュメントには、mod_cacheはurl-rewriteの後に実行されると記載されていますが、実行されませんでした。それを機能させるために、私はそれをに変更しました

CacheEnable Disk /index.php/api
1
Niclas

これは私の構成であり、正常に動作します。

<IfModule mod_disk_cache.c>
    CacheEnable disk /
    CacheRoot /var/cache/Apache2/mod_disk_cache
    CacheIgnoreCacheControl On
    CacheMaxFileSize 2500000
    CacheIgnoreURLSessionIdentifiers jsessionid
    CacheIgnoreHeaders Set-Cookie
</IfModule>

あなたのニーズに合ったCacheIgnoreURLSessionIdentifiersが必要なので、おそらくPHP

CacheIgnoreURLSessionIdentifiers PHPSESSID

ジャニングに関して

1
Janning