Soru Ayar, nginx'ten sunulan statik içerik için üstbilgileri sona erdiriyor


Statik içeriğimi sunucuya göndermek için nginx kullanıyorum, belirli bir kurala uyan her dosya için üstbilgileri başlıkları belirleyebileceğim bir yol var mı? Örneğin, '.css' uzantısı olan tüm dosyalar için son kullanma tarihini ayarlayabilir miyim?


85
2018-06-10 07:19


Menşei




Cevaplar:


Daha fazla dosya uzantısına ek olarak daha eksiksiz bir önbellek başlığı kullanmayı tercih ediyorum. '?' önek bir 'yakalama' işareti değil, nginx bir $ 1 oluşturmaz. Gereksiz yükleri azaltmaya yardımcı olur.

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

112
2017-11-25 21:07



Tüm statik dosyaları ekledikten sonra bulunamadı. - Jürgen Paul
@JackSpairow: Bunun nedenini açıklayamıyorum, çünkü her zaman benim için çalıştı. Add_header sağlama modülünü eksik Nginx çalıştırıyor musunuz? Bu tür bir şey gerçekten kapsamı sınırlıdır, başka bir yavaşlamanın kombinasyon halinde bir problem olmadığından emin misiniz? - J. M. Becker
Muhtemelen başka bir blok, root Bu durumda, direktifleri o bloğa eklemelisiniz. (Biliyorum bu geç 2y, ama gelecekteki vatandaşlar için) - aularon
Özellikle gelecekteki araştırmacılar için, özellikle orijinal gönderimden uzun süre sonra ortaya çıktıklarından dolayı, açıklamaları şahsen takdir ediyorum. +1: P - J. M. Becker
Bunu kullanarak wordpress web sitemi tamamen karıştırıyor. css ve görüntüler gösterilmez. başka bir yerde başka bir çatışma var mı? - user1641443


server {
    ...

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

location direktif

expires direktif


21
2018-06-10 07:23





Kabul edilen cevabın dosyaların artık görünmemesine neden sebep olabileceğine dair yorum yapmak için yeterli bir itibarım yok, ama ben bunu anladım ve yardım etmek istiyorum!

Kısa versiyon:

Genel bir kümeniz yoksa, resimlerdeki konum blokunuz için belirtilen bir kök dizininiz olduğundan emin olun!

Aşağıdaki uzun sürüm:


Her şeyden önce, bu çözümü hayata geçirme yöntemim gerçekten benzer bu cevapkuralı yazdığınız yer (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 sonra bu dosyayı sizin server {...} direktif.

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

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

Bu şekilde, görüntü önbellekleme konum bloğunu, çalıştırdığınız birden çok siteye ekleyebilirsiniz.


İkincisi, benim / var / www / adresimin public_html - güvenli ve eğitim olarak izin verdiğim iki klasör içerdiğine dair bir durumum var. Bu nedenle, sitemin bu yönergelerin tek bir tarafına yerleştirilmesi için sitenin sunucu yönergesinde belirli yer blokları oluşturmam gerekiyor.

Haddi zatında, Global bir kök dizini yok.

Yani, görüntü konumunuzu engellediğinizde, onlara bir kök dizini sağlamazsınız resimlerde bakmak için!

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

12
2018-01-31 21:43



Bunu tekrar kullanılabilir hale getirmek için +1 .conf. Uygun klasör nginx/1.14.0 (Ubuntu) gibi görünüyor /etc/nginx/snippets/. - Jan Werkhoven


Son kullanma tarihlerini de maksimum olarak ayarlayabilirsiniz. İşte css ve js için kullandığım yönergedir.

# Set css and js to expire in a very long time
location ~* ^.+\.(css|js)$ {
    access_log off;
    expires max;
}

9
2018-06-10 08:41



Kök yönergesini yalnızca sunucu {} bloğunda kullanırım, alt konumlarda kullanırken beklenmedik sonuçlara yol açar. Molaya ihtiyacın yok; ya da bir {} bloğu yoksa - Dave Cheney
Haklısın. Bunu temizlemeyi unuttum. Bunu yansıtacak şekilde düzenlendi. - Jauder Ho


Yukarıda bahsedilen tüm çözümler farklı yollar için farklı takma adlara sahip olma olasılığını reddedecektir. Ayrıca tüm farklı önbellek kullanım sürelerinizin tek bir yerde olması için 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 dönemi için) kaynak her zaman tekrar edilmekle sonuçlanır, max tarihi tarayıcı maksimum değerine ayarlar.

~ Görüntü / herhangi bir görüntü tipi ile eşleşir.

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


2
2018-01-04 19:58



Eğer varsa $sent_http_content_type olduğu "text/css;charset=UTF-8" Yukarıdaki ifade başarısız olur. - pachanka


Tüm statik dosyalarınızın bulunduğu 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ından hiçbirini bulamamasına neden oldu. Neden olduğundan emin değilim, ama bu basit bir alternatif.


0
2018-02-25 03:12





Bu çok eski bir iş parçacığı olduğundan ve bugüne kadar muhteşem bir eğitici buldum.

Belki de kontrol etmek istersin

Ubuntu'daki Nginx'in başlık modülüyle tarayıcı önbellekleme nasıl gerçekleştirilir 16.04


-1
2018-05-04 04:18



Genel olarak, linkler makalelere bağlanmadıkça ve içerik de dahil olmaksızın kaşlarını çatmıştık, çünkü linkler değişme veya sona ermeye eğilimlidir. - Unkwntech