web-dev-qa-db-ja.com

ディスク上で変更された場合でも、lighttpdが静的ファイルをキャッシュしないようにするにはどうすればよいですか?

静的ファイルを提供するためにlighttpdを使用しています。定期的に更新するディレクトリにたくさんの画像があります。これにより、ファイルの内容(およびファイルサイズ)と変更日が変更されますが、ファイル名は変更されません。

Httpを介してファイルにアクセスすると、更新は考慮されず、古いファイルが軽く処理されます。ファイルの名前を手動で別の名前に変更すると、lighttpdは404エラーを返します。ファイルの名前を元に戻すと、正しい更新バージョンが表示されます。 lighttyは独自のキャッシュメカニズム(これで問題ありません)を使用して静的ファイルを返すようです。残念ながら、ファイルが変更されても、このメカニズムは自動更新されないようです。

Wiresharkで確認したところ、ブラウザが実際にファイルへのリクエストを実行していますが、これはブラウザのキャッシュの問題ではありません。空のキャッシュから要求すると200 OKを返し、そうでなければ304 Not Modifiedを返します。しかし、実際の最終更新日を反映していない誤ったLast-Modifiedヘッダーでファイルが返されます。

多分私が知らないいくつかのconfigディレクティブがありますか?

Lightyによって返されるファイルに、ディスクに直接加えられた変更を反映させるか、少なくともそのキャッシュを無効にできるようにしたいと思います。

この質問をフォローしている人のための更新:犯人を見つけました。静的ファイルを更新すると、Lightyは新しいコンテンツを返しませんが、ヘッダーに新しいContent-Lengthを返します。その結果、ガベージが表示されます。 mod_compressを使用してファイルを圧縮すると、mod_compressが独自のキャッシングシステムを使用するため、問題はなくなります。残念ながら、すべてのファイル(たとえば画像ファイル)を圧縮することはできません。ですから、これは部分的な修正にすぎませんが、後で戻ってきて、途方もなく解決策を見つけます。

10
Pixelastic

ようやく問題が見つかりました。そしてそれはVirtualBoxから来ています。

ホスト(Win)でファイルを編集するとき、ゲスト(Linux)のlighttpdはファイルコンテンツを正しく更新しません(ただし、ファイルサイズは正しく更新します)。そのため、トリミングまたは文字化けしたコンテンツが返されます。

共有ドライブをマウント解除して再マウントするか、ゲストでファイルを直接編集すると、問題が解決しました。

最終的にそれを理解するのに6か月かかりました。

6
Pixelastic

Mod_cacheがインストールされているかどうかは言及していませんか?このモジュールをインストールすると、デフォルトで「有効」になります。

私はそれを提案するのが嫌ですが、Etagsをオンにすることは役立ちますか?

3
agy

統計エンジンのキャッシュを「無効」に設定してみてください:

server.stat-cache-engine = "disable'
2
Aleksey Korzun

このlighttpdオプションは私にとってうまくいきました

server.network-backend = "writev" 
2
danelips

これらのetagエントリを試して、役立つかどうかを確認してください。

lighthttpdのキャッシュ制御ルール

1
Jodie C