Cách lưu trữ đệm các tệp tĩnh trên nginx

theanh

Administrator
Nhân viên
Hướng dẫn này giải thích cách bạn có thể cấu hình nginx để đặt tiêu đề HTTP Expires và chỉ thị max-age của tiêu đề HTTP Cache-Control của các tệp tĩnh (như hình ảnh, tệp CSS và Javascript) thành một ngày trong tương lai để các tệp này sẽ được lưu vào bộ nhớ đệm bởi trình duyệt của khách truy cập.Điều này giúp tiết kiệm băng thông và giúp trang web của bạn hiển thị nhanh hơn (nếu người dùng truy cập trang web của bạn lần thứ hai, các tệp tĩnh sẽ được lấy từ bộ nhớ đệm của trình duyệt).

1 Lưu ý sơ bộ​

Tôi cho rằng bạn có thiết lập nginx đang hoạt động, ví dụ: như được hiển thị trong hướng dẫn này:Cài đặt Nginx với PHP 7 và MySQL 5.7 (LEMP) trên Ubuntu 16.04 LTS

2 Cấu hình nginx​

Tiêu đề HTTP Expires có thể được thiết lập với sự trợ giúp của lệnh expires có thể được đặt bên trong http {}, server {}, location {} hoặc một câu lệnh if bên trong khối location {}. Thông thường, bạn sẽ sử dụng nó trong khối location cho các tệp tĩnh của mình, ví dụ: như sau:
Mã:
location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
 expires 365d;
}
Trong ví dụ trên, tất cả các tệp .jpg, .jpeg, .png, .gif, .ico, .css và .js đều có tiêu đề Expires với ngày là 365 ngày trong tương lai kể từ thời điểm truy cập trình duyệt. Do đó, bạn nên đảm bảo rằng khối location {} thực sự chỉ chứa các tệp tĩnh có thể được lưu vào bộ nhớ đệm bởi trình duyệt.

Tải lại nginx sau khi bạn thay đổi:
Mã:
/etc/init.d/nginx reload
Bạn có thể sử dụng các thiết lập thời gian sau với lệnh expires:
  • off để các tiêu đề Expires và Cache-Control không bị sửa đổi.
  • epoch đặt tiêu đề Expires thành ngày 1 tháng 1 năm 1970 00:00:01 GMT.
  • max đặt tiêu đề Expires thành ngày 31 tháng 12 năm 2037 23:59:59 GMT, và Cache-Control max-age là 10 năm.
  • Thời gian không có tiền tố @ có nghĩa là thời gian hết hạn liên quan đến thời gian truy cập trình duyệt. Có thể chỉ định thời gian âm, thời gian này đặt tiêu đề Cache-Control thành no-cache. Ví dụ: hết hạn sau 10 ngày; hoặc hết hạn sau 14 tuần 3 ngày;
  • Thời gian có tiền tố @ chỉ định thời gian hết hạn tuyệt đối trong ngày, được viết dưới dạng Hh hoặc Hh:Mm, trong đó H nằm trong khoảng từ 0 đến 24 và M nằm trong khoảng từ 0 đến 59. Ví dụ: hết hạn lúc 15:34;
Bạn có thể sử dụng các đơn vị thời gian sau:
  • ms: mili giây
  • s: giây
  • m: phút
  • h: giờ
  • d: ngày
  • w: tuần
  • M: tháng (30 ngày)
  • y: năm (365 ngày)
Ví dụ: 1h30m là một giờ ba mươi phút, 1y6M là một năm sáu tháng.

Ngoài ra, lưu ý rằng nếu bạn sử dụng tiêu đề Expires trong tương lai xa, bạn phải thay đổi tên tệp của thành phần bất cứ khi nào thành phần thay đổi. Do đó, bạn nên tạo phiên bản cho tệp của mình. Ví dụ, nếu bạn có tệp javascript.js và muốn sửa đổi tệp đó, bạn nên thêm số phiên bản vào tên tệp của tệp đã sửa đổi (ví dụ: javascript-1.1.js) để trình duyệt phải tải xuống tệp đó. Nếu bạn không thay đổi tên tệp, trình duyệt sẽ tải tệp (cũ) từ bộ nhớ đệm của chúng.

Thay vì dựa tiêu đề Hết hạn vào thời gian truy cập của trình duyệt (ví dụ: hết hạn sau 10 ngày;), bạn cũng có thể dựa vào ngày sửa đổi của tệp (xin lưu ý rằng điều này chỉ hiệu quả với các tệp thực được lưu trữ trên ổ cứng!) bằng cách sử dụng từ khóa modified đứng trước thời gian:
Mã:
hết hạn sau 10 ngày;

3 Kiểm tra​

Để kiểm tra xem cấu hình của bạn có hoạt động không, bạn có thể sử dụng chức năng Phân tích mạng của Công cụ dành cho nhà phát triển trong Trình duyệt Firefox và truy cập tệp tĩnh thông qua Firefox (ví dụ: hình ảnh). Trong đầu ra của Header, bây giờ bạn sẽ thấy một tiêu đề Expires và một tiêu đề Cache-Control với lệnh max-age (max-age chứa giá trị tính bằng giây, ví dụ 31536000 là một năm trong tương lai):


4 Liên kết​



Giới thiệu về tác giả

data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%2250%22%20height=%2250%22%3E%3C/svg%3E

Falko Timme là chủ sở hữu của
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%2298%22%20height=%2230%22%3E%3C/svg%3E
Timme Hosting
(lưu trữ web nginx cực nhanh). Ông là người bảo trì chính của HowtoForge (từ năm 2005) và là một trong những nhà phát triển cốt lõi của ISPConfig (từ năm 2000). Ông cũng đã đóng góp cho cuốn sách "Linux System Administration" của O'Reilly.
 
Back
Bên trên