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


10

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

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

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

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

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

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

回答:


6

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

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

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

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


3

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

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


mod_cacheがインストールされていません。ETagが有効になっています(ただし、inodeはETagの生成に使用されません)。iノードを有効にするかETagを無効にしてみましたが、役に立ちませんでした。
Pixelastic

2

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

server.stat-cache-engine = "disable'

おかげで、これは効果がありません。しかし、私はその指令を知りませんでした、そしてそれは後で役に立つかもしれません。
Pixelastic

あなたとサーバーの間に仲介者プロキシがあるかもしれませんか?サーバーを再起動して、同じファイルにアクセスしてみてください。mod_compressを使用していますか?
Aleksey Korzun、2011年

Windows 7ホストでUbuntu VMを実行しています。LightyはVM内にあります。ここにプロキシの問題があるとは思いません。サーバーを再起動しましたが、軽量のキャッシュがクリアされません。私はmod_compressを使用していますが、それらのファイルでは使用していません。VM全体を再起動し、mod_compressを無効にして、変更があるかどうかを確認します。アイデアをありがとう。
Pixelastic

うーん、ここに何かあるかもしれません。ファイルを小さいファイルに変更すると(ただし、名前は同じまま)、ファイルの上半分しか取得できません。古いファイルは現在のファイルのコンテンツ長で表示されているようです。大きなファイルに置き換えると、(古い)ファイル全体が表示されます。ファイルサイズの変更は考慮されているようですが、ファイルの内容は考慮されていません。
Pixelastic

コメントをスパムして申し訳ありません。mod_compressを無効にしても何も変更されず、VM全体が再起動されません。
Pixelastic

2

このlighttpdオプションは私のために働きました

server.network-backend = "writev" 

Debianデスクトップ上のDebian VMで、私にとって魅力のように動作しました、ありがとう!
Yvan

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.