Reverse proxy jest technologią szeroko stosowaną we współczesnym internecie. Wiele osób z niej korzysta nie wiedząc nawet o tym, za sprawą popularnej usługi jaką jest cloudflare.com. W tym artykule postaram się przybliżyć tę tematykę na przykładzie serwera http jakim jest nginx.
Na początek musimy sobie jednak wyjaśnić czym jest proxy, czym różni się od wersji „odwróconej”. W najprostszym modelu, gdy użytkownik w swojej przeglądarce internetowej wpisuje jakiś adres domenowy, system operacyjny sprawdza za niego odwzorowanie domeny w DNS, a następnie przeglądarka kieruje się pod wskazany adres. Jest to wciąż bardzo popularny scenariusz z jakim mamy do czynienia na co dzień.
Czym jest proxy?
W prostym tłumaczeniu z języka angielskiego znaczy to tyle co pełnomocnik, w nomenklaturze IT bardziej właściwym terminem będzie pośrednik. Jest to zatem mechanizm, który powoduje, że użytkownik nie łączy się bezpośrednio z wybranym serwerem internetowym. Pomiędzy przeglądarką, a serwerem serwującym stronę internetową pojawia się usługa pośrednicząca, która z natury ukrywa tożsamość klienta.
Tego typu rozwiązania od wielu lat ułatwiają życie osobom, które chcą ukryć swoją tożsamość. Często służą od omijania blokady regionalnej, bądź do posługiwania się różnymi adresami IP. Liczba zastosowań tego mechanizmu jest długa, jednak my dzisiaj się skupimy na pewnej odmianie proxy, która zdobyła ogromną popularność po stronie serwera, a nie klienta.
Reverse proxy
Podobnie jak w klasycznej wersji, tak samo i tutaj mamy do czynienia z mechanizmem pośredniczącym. W tym przypadku proxy jest odwrócone i służy na rzecz serwera. Ta wersja pośredniczenia w połączaniach pomiędzy klientem, a serwerem znalazła szerokie zastosowanie w technologiach wykorzystywanych do utrzymywania infrastruktury webowej.
Zastosowanie tego mechanizmu posiada wiele zalet, z których największe to:
- bezpieczeństwo – bez wątpienia wplecenie dodatkowej usługi przed serwerem http wpływa na zwiększenie poziomu bezpieczeństwa. Dzięki reverse proxy możliwe jest ukrycie przed światem prawdziwej adresacji serwera docelowego. Można ukryć przed klientem praktycznie całą infrastrukturę która jest wykorzystywana przez system. Częstym stosuje się odpowiednie reguły firewalla, które zezwalają na ruch do strony internetowej tylko z wybranego zakresu adresacji. W przypadku cloudflare powinniśmy zadbać o dopuszczenie całej puli adresów cloudflare, również tych pochodzących z IP6.
- cachowanie – istnieją narzędzia, które implementują mechanizmy cachowania na poziomie reverse proxy. Najbardziej znanym rozwiązaniem jest Varnish Cache. Jest to potężne oprogramowanie, które posiada bardzo wiele przydatnych funkcji: modyfikacja treści oraz nagłówków, wsparcie dla ESI(Edge Side Includes), load balancing oraz wiele innych. W domyślnej konfiguracji Varnish nie posiada jedynie wsparcia dla ssl.
- high availbility – wysoką dostępność zapewnia się w dzisiejszym świecie na kilka sposobów, jednak najpopularniejszym rozwiązaniem jest skalowanie horyzontalne. Ta praktyka wymaga posiadania tzw. load balancera. Najpopularniejszymi rozwiązaniami tego typu jest Nginx oraz HAProxy
Nieoczywiste zastosowania
Dzięki swojej elastyczności mechanizm reverse proxy znalazł szereg zastosowań, które na pierwszy rzut oka mogą się wydawać dziwne.
Jedna domena, wiele aplikacji
Czasami zdarza się, że zachodzi konieczność podczas tworzenia aplikacji internetowych wydzielenia jakiegoś podkatalogu domeny, w celu serwowania zupełnie innej strony. W klasycznej konfiguracji serwera HTTP również jest to możliwe, jednak w momencie gdy musimy wydzielić część strony internetowej jako microservice w zupełnie inne miejsce, to pojawia się problem. Wtedy z pomocą przychodzi reverse proxy, które pozwala na przekierowanie ruchu w kilka różnych miejsc docelowych w zależności od żądanego URI.
Poniżej przedstawię konfigurację reverse proxy dla takiego scenariusza na przykładzie Nginx.
Załóżmy że mamy poprawnie zainstalowany serwer nginx, dla którego utworzymy nowego vhosta