Yanıtlar:
Bazı dosya uzantılarına ek olarak daha eksiksiz bir önbellek başlığı yapmayı tercih ederim. '?' önek 'yakalamayan' bir işarettir, nginx bir $ 1 oluşturmaz. Gereksiz yükü azaltmaya yardımcı olur.
location ~* \.(?:ico|css|js|gif|jpe?g|png)$ {
expires 30d;
add_header Pragma public;
add_header Cache-Control "public";
}
root
sete sahip statik dosyalar için tanımı vardı , bu durumda bu bloğa yönergeler eklemelisiniz. (Bunun 2y geç olduğunu biliyorum, ancak gelecekteki vatandaşlar için)
Kabul edilen cevabın neden dosyaların artık görünmemesine neden olacağı konusunda yorum yapacak kadar itibarım yok, ancak bunu anladım ve yardım etmek istiyorum!
Kısa versiyon:
Genel bir diziniz yoksa, resimlerdeki konum bloğunuz için belirlenmiş bir kök dizininiz olduğundan emin olun!
Aşağıdaki uzun versiyon:
Her şeyden önce, bu çözümü uygulama yöntemim , kuralı yazdığınız ( bu cevabın kabul edildiği gibi), bu cevaba çok benziyordu :
location ~* \.(?:ico|css|js|gif|jpe?g|png)$ {
expires 30d;
add_header Pragma public;
add_header Cache-Control "public";
}
bir dosyaya img-cache.conf
ve sonra bu dosyayı server {...}
direktifinize ekleyin .
Sitemdeki klasörümdeki somesite.com örneğim:
#Image Caching
include /etc/nginx/conf/img-cache.conf;
Bu şekilde, görüntü önbelleğe alma konum bloğunu, çalıştırmakta olduğunuz birden çok siteye ekleyebilirsiniz.
İkincisi, / var / www / 'nin public_html - güvenli ve eğitime izin verdiğim iki klasör içerdiği bir durum var, bu yüzden sitemin sunucu direktifinde bu klasörleri seçerek belirli yer blokları yapmak zorundayım.
Bu nedenle, genel bir kök dizin kümem yok .
Bu nedenle, görüntü konum bloklarınızı yaptığınızda, görüntülerin aranacağı kök dizini sağlamayabilirsiniz !
Benim çözümüm şuydu:
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
. İçinde uygun klasör nginx/1.14.0 (Ubuntu)
gibi görünüyor /etc/nginx/snippets/
.
Son kullanım tarihini maksimum olarak da ayarlayabilirsiniz. İşte css ve js için kullandığım yönerge.
# Set css and js to expire in a very long time
location ~* ^.+\.(css|js)$ {
access_log off;
expires max;
}
Yukarıda belirtilen tüm çözümler, farklı yollar için farklı takma adlara sahip olma olasılığını inkar edecektir. Ayrıca, tüm farklı önbellek son kullanma sürelerinin tek bir yerde olması adına, nginx haritasını aşağıdaki şekilde kullanmalısınız.
...
# 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
önbelleğe almayı devre dışı bırakır, epoch
(unix epoch için) kaynağın her zaman yenilenmesine neden olur, max
tarihi tarayıcı maksimum değerine ayarlar.
~ Resim / herhangi bir resim türüyle eşleşir.
Http://nginx.org/en/docs/http/ngx_http_map_module.html adresindeki nginx haritaları hakkında daha fazla bilgi .
$sent_http_content_type
olduğunu "text/css;charset=UTF-8"
yukarıdaki ifadesi başarısız olur.
Tüm statik dosyalarınıza ev sahipliği yapan bir yeriniz varsa, böyle bir şey yapacaktır ...
location /static {
your/location/to/static/files/static;
expires 30d;
add_header Cache-Control "public";
}
Kabul edilen cevap, nginx'in statik dosyalarımın hiçbirini bulamamasına neden oldu. Neden olduğundan tam olarak emin değilim, ama bu basit bir alternatif.
/static
takma adın sonuna ( .../files
örnekte sağdan sonra) klasörü (yerine ne koyduysanız) eklediğinizden emin olun .
Bu çok eski bir konu olduğundan ve şaşırtıcı bir öğretici buldum.
Belki de kontrol etmek istersin
Ubuntu 16.04'te Nginx'in başlık Modülü ile Tarayıcı Önbelleğe Alma Nasıl Uygulanır?