Linux中國

如何在 nginx 中緩存靜態文件

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 指令中使用以下的時間設置:

  • offExpiresCache-Control 頭部不能被更改。
  • epochExpires 頭部設置成 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 就是指今後的一年)

4 鏈接

nginx 的 Http 頭部模塊(HttpHeadersModule): http://wiki.nginx.org/HttpHeadersModule

via: https://www.howtoforge.com/tutorial/how-to-cache-static-files-on-nginx/

作者:Falko Timme 譯者:GitFuture 校對:wxy

本文由 LCTT 原創編譯,Linux中國 榮譽推出


本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive

對這篇文章感覺如何?

太棒了
0
不錯
0
愛死了
0
不太好
0
感覺很糟
0
雨落清風。心向陽

    You may also like

    Leave a reply

    您的電子郵箱地址不會被公開。 必填項已用 * 標註

    此站點使用Akismet來減少垃圾評論。了解我們如何處理您的評論數據

    More in:Linux中國