Nginx, HAProxy'nin önünde mi yoksa karşısında mı olmalıdır?


11

Web sitesi altyapı mimarisi tasarımı konusunda çok az tecrübem var. Duruma özel olabileceğini biliyorum. Web sitesi:

1) Bazı sayfalar için HTTPS desteğine ihtiyaç duyarsınız (ör. Giriş sayfası), diğerleri sadece HTTP sayfasıdır.

2) Bazı yük dengeleme işlemleri için birden fazla web sunucusuna ihtiyaç vardır.

3) Performansı artırmak için HTTP önbellekleme ve sıkıştırma gerekir.

4) Bazı istekler (örn. Resim yükleme) özel arka uç sunucularına yönlendirilmelidir. Bu nedenle, URL tabanlı dengeleme gerekir.

NginX ve HAProxy'nin güzel açık kaynaklı Ters Proxy ve / veya Yük Dengeleyici olduğunu biliyorum. HAProxy SSL'yi desteklemediğinden, Nginx yük dengelemesi HAProxy kadar iyi değildir. İkisini de alacağım.

Peki, Nginx'i (ters proxy olarak) HAProxy'nin önüne (yük dengeleyici olarak) veya tersine mi koymalıyım?

Teşekkürler

Yanıtlar:


7

Her web sunucusunun HTTPS üzerinden kullanılabilir olmasını planlıyorsanız , Nginx'i HAProxy'nin önüne yüklemeniz gerekir. Bu yapılandırma ile Nginx'iniz tüm SSL işlerini halledecek ve şifresi çözülen HTTP trafiğini doğrudan HAProxy ön ucuna gönderecek ve daha sonra belirttiğiniz kurallara göre web sunucularınıza denge dengesi talep edecektir.

Womble tarafından belirtildiği gibi LVS kullanma fikri, web sunucunuz ve siteye erişen istemci arasında bir bağlantıya sahip olmadığı için biraz daha az müdahaleci olmasıdır. Öte yandan, LVS size sadece basit yük dengeleme sağlar ve dosya uzantısına, istenen URL'ye, üstbilgilere vb. Dayalı istekleri iletmenize izin vermez. Bu nedenle HAProxy birçok durumda kullanılır.

Yalnızca bir sunucuda (yük dengelemesiz) SSL'ye ihtiyacınız varsa, Nginx kullanmadan her şey için HAProxy kullanmak güvenlidir. Öte yandan, istemcinin kaynak IP adresini web sunucusunun HTTPS günlüklerinde görememekle ilgili bir sorun yaşarsınız (çünkü HAProxy bu adresi yeniden yazar). Yine de etkinleştirirseniz IP HAProxy günlüklerinde olacaktır;)


Teşekkürler. çünkü "Bazı istekler (ör. resim yükleme) özel arka uç sunucularına yönlendirilmelidir. Dolayısıyla, URL tabanlı dengeleme gerekir." (soruyu güncellediğim gibi). LVS gereksinimlerimi karşılamayabilir.
Morgan Cheng

BTW, IP adresinin HAProxy tarafından gizlenmesi sadece HTTPS veya HTTP için mi?
Morgan Cheng

@Morgan, ip gizleme sadece HTTPS içindir.

Yalnızca TCP modu arka uçları içindir, bu nedenle HTTP olmayan herhangi bir şey bir HTTP Üstbilgisi (X-Forwarded-For) olarak gönderildiği için IP adresini görmez.

Tam olarak değil. Haproxy, istemcinin IP adresini kullanarak sunucuya bağlanabilir, ancak çekirdek işbirliği gerektirir (örn: TPROXY özelliği). Ancak mümkün olan yerlerde bu durumdan kaçınılmalıdır.
Willy Tarreau


1

Sadece nginx kullanmalısınız, bir ön uç web sunucusu olarak ihtiyacınız olan her şeyi yapar. Ön uç yük dengelemeye ihtiyacınız varsa, Linux Sanal Sunucusu gibi bir L3 yük dengeleyici kullanın , çünkü HAproxy gibi engel olmaz. Sahne arkası yük dengeleme yapmak için gerekirse arka uç işçilerinin bir havuzuna dengeleme talepleri gibi HAproxy kullanın.


2
NginX yük dengelemenin basit, sadece yuvarlak robin yaklaşımı olduğu söylenir. HAProxy'yi dikkate almamın nedeni budur.
Morgan Cheng

1
Doğru söylenir; Ben kendim söyledim. Bu yüzden nginx'i bir yük dengeleyici olarak kullanmanızı önermiyorum ve nginx'i bu (veya başka bir) cevabımda bir yük dengeleyici olarak kullandığınızdan bahsetmeyeceksiniz.
womble

Bu sadece derlemenizi kaynaktan (veya FreeBSD üzerindeki bağlantı noktalarından) kullanmaktan korkuyorsanız. Yük dengelemeyi geliştiren birden fazla 3. taraf modülü vardır: wiki.nginx.org/3rdPartyModules
Martin Fjordvald

2
Geliştir, evet. Yeterli olun, hayır. Bununla ilgili düşüncelerimi hezmatt.org/~mpalmer/blog/2011/07/24/… adresinde bulabilirsiniz ("hoş değil" araması).
womble
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.