1、準備事項
我想你需要一個正常工作的 nginx 軟體:在ubuntu 16.04 lts 上安裝 nginx,php 7 和 mysql 5.7 (lemp) 。
2 設定nginx
可以參考expires 指令手冊來設定http 頭部過期時間,這個標記可以放在 http {}
、server {}
、location {}
等語句區塊或 location {}
語句區塊中的條件語句中。一般會在location 語句區塊中用 expires
指令控制你的靜態文件,就像下面一樣:
location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ { expires 365d; }
在上面的例子中,所有後綴名是 .jpg
、 .jpeg
、 .png
、 .gif
、 .ico
、 .css
與 .js
的檔案會在瀏覽器存取該檔案之後的365 天後過期。因此你要確保 location {}
語句區塊只包含能被瀏覽器快取的靜態檔案。
然後重新啟動nginx 進程:
/etc/init.d/nginx reload
你可以在 expires
指令中使用以下的時間設定:
off
讓 expires
和 cache-control
頭部不能改變。
epoch
將 expires
頭部設定為 1970 年 1 月 1 日 00:00:01。
max
設定 expires
頭部為2037 年12 月31 日23:59:59,設定 cache-control
的最大存活時間為10 年
沒有 @
前綴的時間表示這是與瀏覽器存取時間有關的過期時間。可以指定一個負值的時間,就會把 cache-control 頭部設定成 no-cache。例如:expires 10d
或 expires 14w3d
。
有 @
前綴的時間指定在一天中的某個時間過期,格式是hh 或hh:mm,h 的範圍是0 到24,m的範圍是0 到59,例如:expires @15:34
。
你可以用以下的時間單位:
ms
: 毫秒
#s
: 秒
m
: 分鐘
h
: 小時
d
: 天
w
: 星期
m
: 月(30 天)
#y
: 年(365 天)
例如:1h30m
表示一小時三十分鐘,1y6m
表示一年六個月。
注意,如果你用一個在將來很久才會過期的頭部,當元件修改時你就要改變元件的檔案名稱。因此給文件指定版本是一個不錯的方法。例如,如果你有個 javascript.js 檔案 並且你要修改它,你可以在修改的檔案名稱後面加上一個版本號碼。這樣瀏覽器就要下載這個文件,如果你沒有更改文件名,瀏覽器將從快取裡面載入(舊的)文件。
除了把基於瀏覽器存取時間設定 expires
頭部(例如 expires 10d
)之外,也可以透過時間前面的 modified
關鍵字,將 expires
頭部的基準設為檔案修改的時間(請注意這僅對儲存在硬碟的實際檔案有效)。
expires modified 10d;
3 測試
要測試你的設定是否有效,可以用火狐瀏覽器的開發者工具中的網路分析功能,然後用火狐存取一個靜態檔案(例如一張圖片)。在輸出的頭部資訊裡,應該可以看到 expires
頭部和有 max-age
標記的 cache-control
頭部(max -age
標記包含了一個以秒為單位的值,例如31536000 是指今後的一年)
以上是怎麼在nginx中設定快取靜態文件的詳細內容。更多資訊請關注PHP中文網其他相關文章!