nginx open_file_cache指令影響靜態文件更新時間


有這樣的需求,客戶上傳圖片,覆蓋以前的圖片,因為客戶可能會頻繁的換圖片,上傳覆蓋完后,頁面會自動請求剛才的圖片,圖片已經換掉,但是url並沒有換,因為圖片名字沒改。

因為更新的圖要及時顯示所以這個目錄里的圖片過期時間是

location ~ .*\path\.(jpg|png|jpeg)$
{ expires
0; }

但是並沒有出現更新,瀏覽器依然會用本地的緩存。

抓包發現,瀏覽器發現圖片過期並發送了請求帶有If-Modified-Since,得到的是304且Last-Modified時間沒變,也就是說nginx說此圖片沒有更改,瀏覽器就用本地緩存了。但是通過stat命令發現此圖片modify時間已經變化,確實更改了。

超找原因,發現是open_file_cache選項,open_file_cache max=102400 inactive=20s;

open_file_cache 指令會對以下信息進行緩存:
* 打開文件描述符的文件大小和修改時間信息
* 存在的目錄信息
* 搜索文件的錯誤信息:文件不存在無權限讀取等信息

max指定緩存數量   inactive是指經過多長時間文件沒被請求后刪除緩存。我指定了20s,所以等到至少20s不訪問這個文件,相應緩存的這個文件的更改信息才會被刪除。

open_file_cache_valid 30s;

#這個是指多長時間檢查一次緩存的有效信息。也就是說即使我一直訪問這個文件,30s后會檢查此文件的更改信息是否變化,發現變化就更新。

open_file_cache_min_uses 1;

 

#指令中的inactive參數時間內文件的最少使用次數,如果超過這個數字,文件更改信息一直是在緩存中打開的。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM