Nginx proxy_cache_path yönergesini anlama


30

Bu nginx yapılandırma dosyasına sahip olduğumu varsayalım

proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=myCache:8m max_size=100m inactive=1h;
  • Ne anlama keys_zone=myCache:8mgeliyor? Belgelerde söylenecek fazla bir şey yok:

Ayrıca, tüm aktif anahtarlar ve veriler hakkındaki bilgiler, adı ve boyutu keys_zone parametresi tarafından yapılandırılan paylaşılan bir hafıza bölgesinde saklanır.

  • proxy_cache_valid( 12h) İçinde belirtilen inactivedeğerden ( 1h) yüksekse ne olur proxy_cache_path? Hangi kuralı takip edecek? Örneğin

    proxy_cache_valid 200 302 12h;
    proxy_cache_valid 404 302 1h;
    

Teşekkürler!

Yanıtlar:


39

Keys_zone = myCache: 8m ne anlama geliyor?

Gibi belgeler söyledi , nginx tutacak verinin depolandığı hakkında tüm aktif anahtarları ve bilgiler olan bir paylaşılan bellek bölgesi, içinde nameve sizekeys_zone parametresi tarafından yapılandırılır. Bir bütünlük meselesi olarak, parça başına parçalanmaya izin verir

  • /var/cache/nginxgerçek önbelleğin depolandığı yerdir. Klasörün içinde, önbellek dosyası ikili dosyadaydı ancak içindeki html etiketini kolayca tespit edebilirsiniz.
  • levels=1:2 Düzeyler parametresi önbellekteki alt dizin düzeylerinin sayısını ayarlar.
  • keys_zone=myCache:8men fazla 8 MB boyutunda myCache adlı paylaşılan bellek bölgesini tanımlıyordu. Önbelleğin tüm aktif anahtarlarını ve meta verilerini tutar . Bu nedenle, nginx bir sayfanın önbelleğe alındığını kontrol ettiğinde, önce paylaşılan bellek bölgesine danışır, ardından önbellek /var/cache/nginxvarsa gerçek önbellek konumunu arar .
  • max_sizeMaksimum önbellek büyüklüğündeydi, örneğin dosya büyüklüğü /var/cache/nginx.
  • inactive=1hmaksimum etkin olmayan zaman önbelleğinin saklanabileceğini belirtin. inactiveParametre tarafından belirtilen sürede erişilmeyen önbelleğe alınmış veriler , tazeliğinden bağımsız olarak önbellekten kaldırılır.

Önbellek doğrulama ve silme nasıl çalışır?

Nginx posta listelerinden alınmış

  • Yönerge proxy_cache_valid geçerli sayılacak (ve arka uçta istekler olmaksızın iade edilecektir) ne kadar tepki belirtir. Bu süreden sonra yanıt "bayat" olarak değerlendirilir ve iade edilmez veya proxy_cache_use_stale ayarına bağlı olarak değişir .

  • Proxy_cache_path etkisiz argümanı , son kullanımdan sonra yanıtın önbellekte ne kadar süre saklanacağını belirtir. Eskiden gelen yanıtların bile, talepler halinde son zamanlarda kullanılmaya başlanacağını unutmayın.

Anladığım kadarıyla burada sözde kod nginx'in nasıl çalıştığını

İstek geldiğinde

if cache.exist AND (now() - cache.first_retrieved) < proxy_cache_valid:
    use it
else:
    retrieve from backend
    replace the old ones

Diğer süreçte, önbellek yöneticisi bu mantığı gerçekleştirir

if (now() - cache.last_used) > inactive:
    del cache

if all-cache.size > max-size:
    del *the most inactive cache* until size < max-size

Proxy_cache_valid (12h), proxy_cache_path'ta belirtilen etkin olmayan değerden (1h) daha yüksekse ne olur?

İstek ve belirli önbelleğe eriştiği sürece, bu önbellek nesnesi, önbellek konulduktan 12 saat sonra da geçerli olacaktır. Bundan sonra, önbellek geçersiz sayıldı, bu nedenle nginx arka uçtan getirecek ve geçerli zamanlayıcıyı sıfırlayacaktır. Ancak eğer nesne aktif değilse (erişilmezse) bir saatten fazla - 12 saat geçerli önbellek döneminde - nginx parametre nedeniyle onu silecektirinactive .


"Bundan sonra, önbellek geçersiz sayıldı, bu nedenle nginx arka uçtan getirecek ve geçerli zamanlayıcıyı sıfırlayacaktır." - ilginç. Öyleyse nginx, hiçbir kullanıcı almasa bile isteği alır? Öyleyse, eğer etkin değilse 365dve geçerliyse, 1dnginx, hiç kimse bu isteği yapmasa bile, bir yıl boyunca her gün önbellekteki istekleri alır?
Martin Thoma

1
Güzel cevap, ancak bu parametrelerden bazılarıyla kullandığımız ölçü birimleri hakkında herhangi bir belge bulamıyorum. Mesela, inactiveparamlar zaman değerlerini alır , fakat hangi değerleri kullanabileceğimi göremiyorum h(yaklaşık 1 ay ya da 1 gün? Vb.) Ve ne ile belirtmeliyiz max_size? Bayt? 1 megabayt için 1M kullanabilir miyim?
Sunil D.

4
@SunilD. - işte başlıyorsunuz
adamczi
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.