Lighttpd

即使在磁碟上進行了修改,如何防止 lighttpd 記憶體靜態文件?

  • April 1, 2013

我正在使用 lighttpd 來提供靜態文件。我在我定期更新的目錄中有一堆圖像。這將更改文件內容(和文件大小)以及修改日期,但不會更改文件名。

當我通過 http 訪問文件時,更新不會被考慮在內,並且會為舊文件提供服務。我可以手動將文件重命名為不同的名稱,然後 lighttpd 將返回 404 錯誤,如果我重命名我的文件,我將獲得正確的更新版本。似乎 lightty 正在使用自己的某種記憶體機制(這很好)來返回靜態文件。不幸的是,當文件被修改時,這種機制似乎不會自我更新。

我通過 Wireshark 進行了檢查,我的瀏覽器確實在對文件進行請求,這不是瀏覽器記憶體問題。當從空記憶體請求它時,它返回 200 OK,否則返回 304 Not Modified,如預期的那樣。但是該文件返回的 Last-Modified 標頭錯誤,該標頭不反映真正的最後修改日期。

也許有一些我不知道的配置指令?

我希望 lighty 返回的文件能夠直接反映在磁碟上所做的更改,或者至少能夠使其記憶體無效。

關注此問題的任何人的更新:我找到了罪魁禍首。如果我更新靜態文件,Lighty 不會返回新內容,但會在其標題中返回新的 Content-Length,從而導致顯示垃圾。如果我使用 mod_compress 壓縮文件,問題就會消失,因為 mod_compress 使用自己的記憶體系統。不幸的是,我無法壓縮所有文件(例如圖像文件)。所以這只是部分修復,但我稍後會回來並希望找到解決方案。

我終於找到了問題所在。它來自 VirtualBox。

在主機 (Win) 中編輯文件時,來賓 (Linux) 中的 lighttpd 不會正確更新文件內容(但會正確更新文件大小),從而返回裁剪或亂碼的內容。

解除安裝我的共享驅動器並重新安裝它們,或者直接在來賓中編輯文件,解決了這個問題。

我花了 6 個月的時間才最終弄清楚這一點。

你沒有提到你是否安裝了 mod_cache ?此模組在安裝時預設為“啟用”。

我不願意建議,但打開 Etags 有幫助嗎?

引用自:https://serverfault.com/questions/282624