arka uç kapalı ise nginx proxy önbelleğini kullan


11

Nginx proxy kullanmak önbellek backend sunucusu aşağı ise:

bu benim yapılandırmam. ama nginx kontrol arka uç sunucusu olmadan önbellek kullanmak gibi görünüyor.

http {

  # ...

  proxy_set_header Host $host;
  proxy_set_header X-Real-IP $remote_addr;
  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  proxy_cache_path /tmp/nginx levels=1:2 keys_zone=tmpzone:10m inactive=60m;
  proxy_cache_key "$scheme$request_method$host$request_uri";


  server {
    server_name _;

    location / {
      proxy_connect_timeout 5s;
      proxy_read_timeout 5s;
      proxy_cache tmpzone;
      proxy_cache_valid      200 304 1d;
      proxy_cache_use_stale  error timeout invalid_header updating http_500 http_502 http_503 http_504;
      proxy_set_header X-Real-IP  $remote_addr;
      proxy_set_header X-Forwarded-For $remote_addr;
      proxy_set_header Host 'www.example.com';
      proxy_pass http://www.example.com;
    }
  }
}

Soru, arka uç sunucusu çalışıyorsa proxy önbelleğini nasıl atlayabilirim? Ve arka uç sunucusu bittiğinde proxy sunucum hiç önbellek kullanmıyor.


Soru tam olarak nedir?
Jenny D

Soru, arka uç sunucusu çalışıyorsa proxy önbelleğini nasıl atlayabilirim?
sweb

Kutudan çıktığı çözümlerden biri, biri önbellek, diğeri önbellek olmak üzere 2 "sunucuya" sahip olmak ve nginx.org/en/docs/http/ngx_http_upstream_module.html akış yukarı modülünü kullanmak olabilir mi? En iyi çözüm muhtemelen arka uç orada olup olmadığını bir kontrol ile proxy_cache_bypass kullanabilmek için ... gerçi bu çalışma almak için hiçbir fikrim yok ... ilginç bir durum.
SvennD

Bu bir XY Sorunu örneğine çözümler , SO
Dayo

Yanıtlar:


8

Bunun bir kopyası görünüyor:

/programming/16756271/how-to-configure-nginx-to-serve-cached-content-only-when-backend-is-down-5xx-re

Kısacası proxy_cache_use_stale kullanın

Bir güncelleme olarak, bunu test ve iyi çalışıyor. Testi yaptığım iş istasyonumda yaptım (tamlık için):

Fedora 23 nginx 1.8.1, ssl sonlandırıcı + önbellek + ters proxy olarak yapılandırıldı Apache 2.4.18, bağlantı noktası 80'de dinlemek üzere yapılandırıldı

Apache akış yukarı hareket gibi sadece statik bir dosya hizmet ile ben bu testi yaptım:

  1. Apache yukarı, nginx yukarı, tarayıcıyı nginx tarafından sunulan ters proxy URL'ye yönlendirerek Apache'nin proxy içeriğini görüyorum. Bu noktada nginx bunu önbellekte tutar.
  2. Apache durdu
  3. nginx'e bağlanma, daha önce Apache tarafından sunulan önbellek dosyasını görüyorum.

Kullanılan nginx yapılandırma (sadece ilginç parçalar):

nginx.conf:

http {
[...]
location
    proxy_cache_path        /var/lib/nginx/tmp/proxy/ levels=1:2 keys_zone=STATIC:10m inactive=24h max_size=1g;
    include /etc/nginx/conf.d/*.conf;
}

/etc/nginx/conf.d/local.conf:

upstream localhost {
    server 127.0.0.1:80;
[...]
}


server {
    listen       127.0.0.1:443 ssl;

[...]

    location /be/ {
        proxy_pass              http://localhost;
        proxy_cache             STATIC;
        proxy_cache_valid       200 1d;
        proxy_cache_use_stale   error;
}

Hiç çalışmıyor.
sweb

Eğer bir hatayı nginx ekibine bildirmelisiniz. Btw'da ne denedin? Eğer onu çoğaltmak için çalışacağım
Fredi

Tamam, bir test yaptım ve işe yaradı. Cevabım test detayları ile güncellendi.
Fredi

Sweb'in orijinal sorusunu okuduğumda, hem Apache hem de nginx durumunda, tüm isteklerin Apache arka ucuna geçmesi gerekti . Apache'nin kapalı olması durumunda isteklerin yalnızca NginX önbelleğinden sunulması gerekir
abhishekmukherg

@abhishekmukherg, söylediklerini yapabilirsin, ama neden? Her ikisi de bittiğinde ve dosyalar statik olduğunda (jpg / css / html olduğunu düşünün) gerçek bir ön ucunuz olduğunda neden daha fazla ağ / cpu / ecc kaynağı kullanarak arka uca gitmelisiniz? BTW bu başka bir soru için bir sorun olsa da
Fredi

0

Önbelleğe almanın etkinleştirildiği bir sunucu için proxy_intercept_errors ve proxy 500'leri kullanın.

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.