Czy Nginx powinien znajdować się z przodu HAProxy czy przeciwnie?

11

Mam niewielkie doświadczenie w projektowaniu architektury infrastruktury witryn internetowych. Wiem, że może to zależeć od konkretnej sytuacji. Witryna ma:

1) Potrzebujesz obsługi HTTPS dla niektórych stron (np. Strony logowania), podczas gdy inne to tylko strony HTTP.

2) Potrzebujesz wielu serwerów WWW, aby wymagane było równoważenie obciążenia.

3) Potrzebujesz buforowania HTTP i kompresji, aby zwiększyć wydajność.

4) Niektóre żądania (np. Przesyłanie obrazu) powinny być kierowane do dedykowanych serwerów zaplecza. Dlatego wymagane jest równoważenie oparte na adresach URL.

Wiem, że NginX i HAProxy są ładnymi otwartymi serwerami proxy i / lub moduł równoważenia obciążenia. Ponieważ HAProxy nie obsługuje SSL, podczas gdy równoważenie obciążenia Nginx nie jest tak dobre jak HAProxy. Wezmę oba.

Czy powinienem więc umieścić Nginx (jako odwrotny serwer proxy) z przodu HAProxy (jako moduł równoważenia obciążenia), czy odwrotnie?

Dzięki

Morgan Cheng
źródło

Odpowiedzi:

7

Jeśli planujesz mieć każdy serwer WWW dostępny przez HTTPS, musisz zainstalować Nginx przed HAProxy. Dzięki tej konfiguracji twój Nginx będzie obsługiwał całą pracę SSL i wyśle ​​odszyfrowany ruch HTTP bezpośrednio do frontonu HAProxy, który następnie wyśle ​​żądania równoważenia obciążenia do twoich serwerów internetowych na podstawie określonych przez ciebie reguł.

Pomysł korzystania z LVS, jak wspomniano womble, polega na tym, że jest on nieco mniej ingerujący, ponieważ nie utrzymuje połączenia między serwerem internetowym a klientem uzyskującym dostęp do witryny. Z drugiej strony LVS zapewni jedynie proste równoważenie obciążenia i nie pozwoli na przekazywanie dalej żądań na podstawie rozszerzenia pliku, żądanego adresu URL, nagłówków itp. Dlatego HAProxy jest używany w wielu sytuacjach.

Jeśli potrzebujesz protokołu SSL tylko na jednym serwerze (bez równoważenia obciążenia), możesz bezpiecznie używać HAProxy do wszystkiego bez użycia Nginx. Z drugiej strony będziesz mieć jeden problem z niemożnością zobaczenia źródłowego adresu IP klienta w dziennikach HTTPS serwera WWW (ponieważ HAProxy przepisuje ten adres). Adres IP będzie w dziennikach HAProxy, jeśli go włączysz;)


źródło
Dzięki. ponieważ „Niektóre żądania (np. przesyłanie obrazu) powinny być kierowane do dedykowanych serwerów zaplecza. Dlatego wymagane jest równoważenie oparte na adresach URL”. (jak zaktualizowałem pytanie). LVS może nie spełniać moich wymagań.
Morgan Cheng,
BTW, ukrywanie adresu IP przez HAProxy dotyczy tylko HTTPS, czy też HTTP?
Morgan Cheng,
@ Organ, ukrywanie ip jest tylko dla HTTPS.
Jest tylko dla backendów trybu TCP, więc wszystko, co nie jest HTTP, nie zobaczy adresu IP, ponieważ jest wysyłany jako nagłówek HTTP (X-Forwarded-For).
Nie dokładnie. Haproxy może łączyć się z serwerem przy użyciu adresu IP klienta, ale wymaga to współpracy jądra (np .: funkcja TPROXY). Należy tego jednak unikać, gdy tylko jest to możliwe.
Willy Tarreau
1

Powinieneś po prostu użyć nginx, robi wszystko, czego potrzebujesz jako serwer frontendowy. Jeśli potrzebujesz równoważenia obciążenia frontonu, użyj modułu równoważenia obciążenia L3, takiego jak Linux Virtual Server , ponieważ nie przeszkadza on tak, jak robi to HAproxy. Użyj HAproxy, jeśli jest to wymagane, aby wykonać równoważenie obciążenia za kulisami, takie jak żądania równoważenia do puli pracowników zaplecza.

womble
źródło
2
Mówi się, że równoważenie obciążenia NginX jest proste, po prostu okrągłe podejście robin. Dlatego biorę pod uwagę HAProxy.
Morgan Cheng
1
Jest powiedziane poprawnie; Sam to powiedziałem. Dlatego nie polecam używania nginx jako modułu równoważenia obciążenia, a nie znajdziesz żadnej wzmianki o używaniu nginx jako modułu równoważenia obciążenia w tej (lub innej) mojej odpowiedzi.
womble
Dzieje się tak tylko wtedy, gdy boisz się korzystać z własnej kompilacji ze źródła (lub portów we FreeBSD). Istnieje wiele modułów 3rd party, które poprawiają równoważenie obciążenia: wiki.nginx.org/3rdPartyModules
Martin Fjordvald
2
Popraw, tak. Zrób odpowiednie, nie. Moje przemyślenia na ten temat można znaleźć w hezmatt.org/~mpalmer/blog/2011/07/24/… (wyszukaj „nie ładnie”).
womble