Trình duyệt web không thực hiện cache nội dung tĩnh như chỉ thị của Nginx sau khi sử dụng module PageSpeed

Vấn đề: Trình duyệt web không thực hiện chỉ thị cache từ Nginx

Trong ví dụ dưới đây, Nginx cấu hình cache 30 ngày. Tuy nhiên, trình duyệt web lại không thực hiện chỉ thị này. Thay vào đó, trình duyệt web không thực hiện cache các thành phần tĩnh (max-age = 0). 

location ~* \.(ico|css|js|gif|jpeg|jpg|png|woff|ttf|otf|svg|woff2|eot)$ {
root
/var/app/current/app/dist/client/; #if i comment this out it, my css and js files are not found...
expires
30d;
access_log off
;
log_not_found off
;
add_header
Pragma "public";
add_header
Cache-Control "public";
}


Nguyên nhân: Module Pagespeed can thiệp chỉ thị ‘Expires’ directive với các file tĩnh

Bởi vì PageSpeed tải file trực tiếp từ hệ thống nên các chỉ thị tùy biên sẽ không được thêm vào header.

Ví dụ của một chỉ thị được thiết lập trong module PageSpeed tích hợp vào Nginx:

pagespeed LoadFromFile "http://www.example.com/static/" "/var/www/static/";

Chỉ thị này yêu cầu PageSpeed tải các tài nguyên có địa chỉ URL bắt đầu bằng http://www.example.com/static/  từ thư mục có địa chỉ /var/www/static/. For example, http://www.example.com/static/images/foo.png will be loaded from the file /var/www/static/images/foo.png. Do vậy, file có địa chỉ http://www.example.com/bar.jpg will still be fetched using HTTP. If you have resources that need to be served with custom headers, such as Cache-Control: private, you need to exclude them from LoadFromFile. For resources PageSpeed rewrites in-place it will set a 5-minute cache lifetime by default, which you can adjust by changing LoadFromFileCacheTtlMs.

Giải pháp: Thêm setting to the domain.conf – file cấu hình domain:

pagespeed LoadFromFile "http://example.com" "/var/www"
pagespeed LoadFromFileCacheTtlMs 31556926000;

Source: https://github.com/apache/incubator-pagespeed-ngx/issues/1418

Ghi chú: File cấu hình domain.conf thường sẽ nằm trong /etc/nginx/conf.d