404 hatasıyla HAProxy URL'yi yeniden yazma


9

İlk dosyayı eksik olduğunda HAProxy nasıl farklı bir arka uca yeniden yazılır? İhtiyacım olan şey errorlocyeniden yönlendirme yerine yeniden yazma yapmaktır, bu nedenle istemci yeniden yönlendirmenin farkında değildir.

Hem yük dengeleme ters proxy'si hem de statik dosyalar için web sunucusu olan NginX'i düşünerek bir uygulama geliştirdik. Uygulama, hem NginX hem de HAproxy tarafından desteklenen çerezlere dayalı yapışkan oturumlar gerektiren Opa çerçevesine dayanmaktadır. Sorun yaşadığımız uygulama özelliği dinamik içerik üretmektir. İsteğe bağlı görüntüler üretir, ancak oluşturulduktan sonra diske kaydedilir ve deterministik yolla statik olarak erişilebilir.

NginX ile sorun kolayca çözüldü - yerel dosyayı okumaya ve sadece dosya eksikse (henüz oluşturulmadı) yük dengeli arka ucu kullanmaya çalışır:

server {
  server_name wkaliszu.pl;
  location /thumb {
    root /path_on_disk/to_cached_content;
    expires 7d;
    # try to access already generated content
    try_files $uri @wkaliszu;
  }
  location / {
    # reverse proxy to the application
    [...]
  }
  location @wkaliszu {
    # reverse proxy to the application
    [...]
  }
}

Sunucu taşındı ve artık yük dengeleme için web sunucusu olmayan ve bu özelliği desteklemeyen HAPproxy kullanıyor. Artık, istemci kaynağa her erişmeye çalıştığında, çok daha yavaş olan ve kaynakları boşa harcayan dinamik yazılım üretimi gerçekleştirilir. İlk (statik dosyalar için basit önbellek web sunucusu) 404 hatasıyla başarısız olsaydı, sonraki arka ucu kullanabiliyorsa iyi olurdu, ancak basit bir şekilde yapmanın bir yolunu bulamıyorum. Yönlendirme /thumbYeni HTTP başlığıyla HAProxy statik dosyayı okumaya çalışır ve tekrar yeniden yazar Nginx, sadece aklıma geliyor, ama ben daha iyisini bulmak istiyoruz.


Uygulama sunucularını hangi uygulama yığınını kullanıyorsunuz?
jeffatrackaid

Yanıtlar:


1

HAProxy'nin arka uçları yukarı veya aşağı (veya yukarı / aşağı olma yolunda).

Bir arka ucun sağlığını kontrol etmenin çeşitli yolları vardır, ancak istek başına izleme sağlayan herhangi birinin farkında değilim. Bir istek başarısız olduğunda, bu arka uç aşağı olarak işaretlenir veya başarısız olur (dikkate alınma yolunda).

Bu, istek başına istek bazında yönlendirme yapan Nginx kurulumunuzdan çok farklı bir mantıktır.

Burada birkaç seçenek görüyorum:

  • Önbellek Proxy Olarak Nginx
  • Statik İçerik için Uygulama Sunucularını Kullanma
  • CDN kullanın

Önbellek Proxy

HAProxy'de, statik içerik isteklerini belirli bir arka uca yönlendirmek için ACL'leri kullanırsınız. Bu arka uç düğümleri önbelleğe alma proxy'si ile nginx çalıştırır. Eğer nginx dosyayı önbelleğe alsaydı, sadece ona hizmet ederdi. Değilse, arka ucunuzu çağırır.

Statik İçerik için Uygulama Sunucularını Kullanma

Uygulama sunucularınız statik içerik sunma konusunda verimli ise, isteği haproxy'ye bölmeniz gerekmeyebilir. Tüm istekleri uygulama arka uçlarınıza göndermeniz yeterlidir. Varsa statik içeriği sunmak ve istemiyorsa isteği arka uca göndermek için bunlara mantık oluşturun.

CDN Seçeneği

Statik içerik için özel bir etki alanı kullanabiliyorsanız, bir CDN kullanabilirsiniz. CDN'de, sadece uygulama düğümlerinize kaynak URL'yi işaret ediyorsunuz. Daha sonra CDN düzeyinde önbelleğe almayı kontrol edebilirsiniz. Bu, NNNX önbelleğe benzer, ancak CDN sağlayıcısı bunu sizin için halleder.

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.