it-swarm.asia

Ayarın süresi, nginx'ten sunulan statik içerik üstbilgilerinin süresi

Statik içeriğimi sunucuya nginx kullanıyorum, belirli bir kurala uyan her dosya için süre sonu başlıklarını ayarlayabileceğim bir yol var mı? Örneğin, '.css' uzantılı tüm dosyalar için sona erme başlığını ayarlayabilir miyim?

101
Unkwntech

Bazı dosya uzantılarına ek olarak daha eksiksiz bir önbellek başlığı yapmayı tercih ederim. '?' öneki 'yakalamayan' bir işarettir, nginx 1 $ oluşturmaz. Gereksiz yükün azaltılmasına yardımcı olur.

location ~* \.(?:ico|css|js|gif|jpe?g|png)$ {
    expires 30d;
    add_header Pragma public;
    add_header Cache-Control "public";
}
135
J. M. Becker
server {
    ...

    location ~* \.css$ {
       expires 30d;
    }
    ...
}

location yönergesi

expires yönergesi

22
Dave Cheney

Kabul edilen cevabın neden dosyaların artık görünmemesine neden olacağı hakkında yorum yapmak için yeterli itibarım yok, ama anladım ve yardım etmek istiyorum!

Kısa versiyon:

Genel bir kümeniz yoksa, görüntülerdeki konum bloğunuz için bir kök dizininizin belirtildiğinden emin olun!

Aşağıdaki uzun versiyon:


Her şeyden önce, bu çözümü uygulama yöntemim, kuralı yazdığınız bu cevap ile gerçekten benzerdi (kabul edilen cevapta olduğu gibi):

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 daha sonra bu dosyayı server {...} yönergesi.

Sitelerim kullanılabilir klasörümdeki somesite.com örneğim:

 #Image Caching
 include /etc/nginx/conf/img-cache.conf;

Bu şekilde, çalıştırabileceğiniz birden çok siteye resim önbellekleme konum bloğu ekleyebilirsiniz.


Her şeyden önce, benim/var/www/benim public_html - güvenli ve eğitim olarak izin verdiğim iki klasör içeren bir durum var, bu yüzden sitemin sunucu yönergesi bu klasörleri singling belirli yer blokları yapmak zorunda.

Bu nedenle, Genel bir kök dizin ayarlı değilim .

Bu nedenle, görüntü konum bloklarınızı oluşturduğunuzda, , onlara resimleri aramak için bir kök dizin sağlamayabilirsiniz!

Benim çözümüm o zaman:

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;
}
19
amurrell

Ayrıca, son kullanma tarihlerini maksimuma 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;
}
9
Jauder Ho

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 tarihlerini tek bir yerde tutmak uğruna 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 yeniden alınmasına neden olur, max tarihi tarayıcı maksimum değerine ayarlar.

~ İmage/görüntü türleriyle eşleşir.

Nginx haritaları hakkında daha fazla bilgi için http://nginx.org/en/docs/http/ngx_http_map_module.html .

4
Pantura

Tüm statik dosyalarınıza ev sahipliği yapan bir yeriniz varsa, bunun gibi bir şey ...

 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 emin değilim, ama bu basit bir alternatif.

2
user161646