Câu trả lời:
Tôi thích làm một tiêu đề bộ đệm hoàn chỉnh hơn, ngoài ra một số phần mở rộng tệp. Các '?' tiền tố là nhãn hiệu 'không bắt giữ', nginx sẽ không tạo $ 1. Nó giúp giảm tải không cần thiết.
location ~* \.(?:ico|css|js|gif|jpe?g|png)$ {
expires 30d;
add_header Pragma public;
add_header Cache-Control "public";
}
root
tập hợp, trong trường hợp đó bạn nên thêm các lệnh vào khối đó. (Tôi biết điều này muộn 2 năm, nhưng đối với những công dân tương lai)
Tôi không đủ uy tín để bình luận về lý do tại sao câu trả lời được chấp nhận sẽ khiến các tệp không còn hiển thị nữa, nhưng tôi đã tìm ra nó và muốn giúp đỡ!
Phiên bản ngắn:
Đảm bảo rằng bạn có một thư mục gốc được chỉ định cho khối vị trí của bạn trên hình ảnh nếu bạn không có bộ toàn cầu!
Phiên bản dài dưới đây:
Trước hết, phương pháp thực hiện giải pháp này của tôi thực sự giống với câu trả lời này , trong đó bạn viết quy tắc (như trong câu trả lời được chấp nhận):
location ~* \.(?:ico|css|js|gif|jpe?g|png)$ {
expires 30d;
add_header Pragma public;
add_header Cache-Control "public";
}
vào một tập tin img-cache.conf
và sau đó bao gồm tập tin đó vào server {...}
chỉ thị của bạn .
Ví dụ của tôi về somesite.com trong thư mục trang web có sẵn của tôi:
#Image Caching
include /etc/nginx/conf/img-cache.conf;
Bằng cách đó, bạn có thể thêm khối vị trí bộ nhớ đệm hình ảnh vào nhiều trang web bạn có thể đang chạy.
Thứ hai, tôi có một tình huống trong đó / var / www / của tôi chứa hai thư mục mà tôi cho phép là public_html - an toàn và đào tạo, vì vậy tôi phải tạo các khối vị trí cụ thể trong máy chủ của trang web của mình chỉ ra các thư mục này.
Như vậy, tôi không có một bộ thư mục gốc toàn cầu .
Vì vậy, khi bạn tạo khối vị trí hình ảnh của mình, bạn có thể không cung cấp cho họ thư mục gốc để tìm hình ảnh trong đó!
Giải pháp của tôi là:
location ~ ^/training.+\.(?:ico|css|js|gif|jpe?g|png)$ {
root /var/www/;
expires 7d;
add_header Pragma public;
add_header Cache-Control "public";
try_files $uri 404;
}
location ~ ^/.+\.(?:ico|css|js|gif|jpe?g|png)$ {
root /var/www/secure;
expires 7d;
add_header Pragma public;
add_header Cache-Control "public";
try_files $uri 404;
}
.conf
. Các thư mục thích hợp trong nginx/1.14.0 (Ubuntu)
dường như là /etc/nginx/snippets/
.
Bạn cũng có thể đặt hết hạn tối đa. Đây là chỉ thị tôi sử dụng cho css và js.
# Set css and js to expire in a very long time
location ~* ^.+\.(css|js)$ {
access_log off;
expires max;
}
Tất cả các giải pháp đã nói ở trên sẽ từ chối khả năng có các bí danh khác nhau cho các đường dẫn khác nhau. Ngoài ra, để có tất cả các lần hết hạn bộ nhớ cache khác nhau của bạn ở một nơi, bạn nên sử dụng bản đồ nginx theo cách sau.
...
# Expires mappings
map $sent_http_content_type $expires {
default off;
text/html epoch;
text/css max;
application/javascript 7d;
~image/ max;
}
...
server {
listen ...;
expires $expires;
location /assets/ {
# It is now possible to serve some resources from different path
alias /var/www/my_other_path/
}
# and have them all have same expirations
location / {
try_files $uri $uri/ /index.html;
}
...
}
Off
vô hiệu hóa bộ nhớ đệm, epoch
(cho unix epoch) dẫn đến tài nguyên luôn được tải lại, max
đặt ngày thành giá trị tối đa của trình duyệt.
~ Hình ảnh / phù hợp với bất kỳ loại hình ảnh.
Tìm hiểu thêm về bản đồ nginx tại http://nginx.org/en/docs/http/ngx_http_map_module.html .
$sent_http_content_type
là "text/css;charset=UTF-8"
biểu thức trên sẽ thất bại.
Nếu bạn có một nơi chứa tất cả các tệp tĩnh của mình, một cái gì đó như thế này sẽ làm ...
location /static {
your/location/to/static/files/static;
expires 30d;
add_header Cache-Control "public";
}
Câu trả lời được chấp nhận khiến nginx không tìm thấy bất kỳ tệp tĩnh nào của tôi. Không thực sự chắc chắn tại sao, nhưng đây là một thay thế đơn giản.
/static
thư mục (bất cứ thứ gì bạn đặt ở vị trí) vào cuối bí danh (ngay sau .../files
ví dụ).
Vì đây là một chủ đề rất cũ, và tôi đã tìm thấy một hướng dẫn tuyệt vời cập nhật.
Có lẽ bạn muốn kiểm tra nó
Cách triển khai Bộ đệm ẩn trình duyệt với Mô đun tiêu đề của Nginx trên Ubuntu 16.04