Jawaban:
Saya lebih suka melakukan header cache yang lebih lengkap, selain beberapa ekstensi file lagi. '?' awalan adalah tanda 'tidak menangkap', nginx tidak akan menghasilkan $ 1. Ini membantu mengurangi beban yang tidak perlu.
location ~* \.(?:ico|css|js|gif|jpe?g|png)$ {
expires 30d;
add_header Pragma public;
add_header Cache-Control "public";
}
root
set, dalam hal ini Anda harus menambahkan arahan ke blok itu. (Saya tahu ini sudah terlambat, tetapi untuk warga negara masa depan)
Saya tidak memiliki reputasi yang cukup untuk mengomentari mengapa jawaban yang diterima akan menyebabkan file tidak lagi muncul, tetapi saya menemukan jawabannya dan ingin membantu!
Versi pendek:
Pastikan Anda memiliki direktori root yang ditentukan untuk blok lokasi Anda pada gambar jika Anda tidak memiliki satu set global!
Versi panjang di bawah ini:
Pertama-tama, metode saya untuk mengimplementasikan solusi ini sangat mirip dengan jawaban ini , di mana Anda menulis aturan (seperti pada jawaban yang diterima):
location ~* \.(?:ico|css|js|gif|jpe?g|png)$ {
expires 30d;
add_header Pragma public;
add_header Cache-Control "public";
}
ke dalam file img-cache.conf
dan kemudian sertakan file itu ke dalam server {...}
arahan Anda .
Contoh saya tentang somesite.com di folder yang tersedia di situs saya:
#Image Caching
include /etc/nginx/conf/img-cache.conf;
Dengan begitu Anda bisa menambahkan blok lokasi caching gambar ke beberapa situs yang mungkin Anda jalankan.
Kedua, saya memiliki situasi di mana / var / www / saya berisi dua folder yang saya izinkan sebagai public_html - aman dan pelatihan, jadi saya harus membuat blok lokasi spesifik dalam arahan server situs saya yang memilih folder-folder ini.
Karena itu, saya tidak memiliki set direktori root global .
Jadi, ketika Anda membuat blok lokasi gambar Anda , Anda mungkin tidak menyediakan mereka dengan direktori root untuk mencari gambar di dalamnya!
Solusi saya adalah untuk:
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
. Folder yang sesuai di nginx/1.14.0 (Ubuntu)
tampaknya /etc/nginx/snippets/
.
Anda juga dapat mengatur kadaluarsa ke maksimum. Berikut adalah arahan yang saya gunakan untuk css dan js.
# Set css and js to expire in a very long time
location ~* ^.+\.(css|js)$ {
access_log off;
expires max;
}
Semua solusi yang disebutkan di atas akan menyangkal kemungkinan untuk memiliki alias yang berbeda untuk jalur yang berbeda. Demi memiliki semua kedaluwarsa cache yang berbeda di satu tempat, Anda harus menggunakan peta nginx dengan cara berikut.
...
# 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
Menonaktifkan caching, epoch
(untuk masa unix) menghasilkan sumber daya yang selalu diambil ulang, max
menetapkan tanggal ke nilai maksimal peramban.
~ Gambar / cocok dengan semua jenis gambar.
Lebih lanjut tentang peta nginx di http://nginx.org/en/docs/http/ngx_http_map_module.html .
$sent_http_content_type
adalah "text/css;charset=UTF-8"
ekspresi di atas akan gagal.
Jika Anda memiliki satu tempat yang merupakan rumah bagi semua file statis Anda, sesuatu seperti ini ...
location /static {
your/location/to/static/files/static;
expires 30d;
add_header Cache-Control "public";
}
Jawaban yang diterima menyebabkan nginx tidak menemukan file statis saya. Tidak begitu yakin mengapa, tetapi ini adalah alternatif sederhana.
/static
folder (apa pun yang Anda atur di lokasi) di akhir alias (tepat setelah .../files
dalam contoh).
Karena ini adalah utas yang sangat lama, dan saya menemukan tutorial yang luar biasa.
Mungkin Anda ingin memeriksanya
Cara Menerapkan Caching Browser dengan Modul header Nginx di Ubuntu 16.04