Apache Reverse Proxy to narzędzie, które działa jako pośrednik między klientami a serwerami backendowymi, takimi jak serwery internetowe lub serwery aplikacji. W przeciwieństwie do tradycyjnego forward proxy, które znajduje się pomiędzy klientami a Internetem, reverse proxy znajduje się pomiędzy klientami a jednym lub większą liczbą serwerów.
Gdy klient wysyła żądanie, serwer reverse proxy przekazuje to żądanie do odpowiedniego serwera backendowego w imieniu klienta. Następnie pobiera odpowiedź z serwera i wysyła ją z powrotem do klienta. Proces ten skutecznie ukrywa przed klientami tożsamość i wewnętrzną strukturę serwera.
Reverse proxy oferują kilka korzyści, w tym zwiększone bezpieczeństwo poprzez ochronę serwerów przed bezpośrednim kontaktem z Internetem, równoważenie obciążenia w celu dystrybucji żądań klientów na wiele serwerów oraz buforowanie w celu poprawy wydajności poprzez udostępnianie klientom zawartości z pamięci podręcznej.
Rozróżnienie między forward proxy i reverse proxy
- Kierunek proxy:
- Forward Proxy: obsługuje żądania klientów dotyczące dostępu do zasobów w Internecie. Znajduje się pomiędzy klientami a Internetem i przekazuje żądania klientów do serwerów zewnętrznych.
- Reverse Proxy: zarządza żądaniami klientów dotyczącymi dostępu do zasobów w sieci organizacji. Znajduje się pomiędzy klientami i serwerami backendowymi, przekazując żądania klientów do odpowiedniego serwera.
- Perspektywa klienta:
- Forward Proxy: Klienci zazwyczaj nie są świadomi istnienia forward proxy. Żądanie klienta jest wysyłane do serwera proxy, a serwer docelowy odbiera żądanie tak, jakby pochodziło bezpośrednio od klienta.
- Odwrotny serwer proxy: klienci wysyłają żądania bezpośrednio do zwrotnego serwera proxy, a nie do serwerów zaplecza. Odwrotny serwer proxy następnie przekazuje żądania do serwerów zaplecza w imieniu klientów.
- Używany w celu:
- Forward Proxy: Często używany do filtrowania treści, kontroli dostępu i anonimizacji żądań klientów poprzez ukrywanie adresów IP klientów.
- Reverse Proxy : Używany głównie do równoważenia obciążenia, kończenia protokołu SSL, buforowania i zapewniania bezpiecznej bramy do usług backendowych.
- Perspektywa serwera:
- Forward Proxy : serwer docelowy widzi żądanie pochodzące od forward proxy, a nie oryginalnego klienta. Nie ma informacji o faktycznym kliencie składającym żądanie.
- Odwrotny serwer proxy: serwery backendowe postrzegają reverse proxy serwer jako klienta wysyłającego żądanie. Nie są świadomi istnienia prawdziwych klientów składających pierwotne żądanie.
- Implikacje dotyczące bezpieczeństwa:
- Forward Proxy: Zwiększa prywatność klientów poprzez maskowanie adresów IP klientów. Może także zapewnić dodatkowe warstwy zabezpieczeń, filtrując złośliwą zawartość, zanim dotrze ona do klientów.
- Reverse Proxy: Działa jako tarcza dla serwerów backendowych, ukrywając ich wewnętrzną strukturę przed klientami zewnętrznymi. Pomaga chronić przed bezpośrednim kontaktem z Internetem i potencjalnymi atakami.
- Miejsce wdrożenia:
- Forward Proxy: wdrażany w sieci klienta lub na urządzeniu klienta w celu kontrolowania wychodzącego dostępu do Internetu.
- Reverse Proxy: Wdrożony na brzegu sieci organizacji, pomiędzy Internetem a serwerami backendowymi, zarządzający przychodzącymi żądaniami klientów.
Różne przypadki użycia serwerów reverse proxy
Reverse proxy oferuje szeroką gamę zastosowań, które zwiększają wydajność, bezpieczeństwo i skalowalność aplikacji i usług internetowych.
Niektóre z kluczowych przypadków użycia odwrotnych serwerów proxy obejmują
- Równoważenie obciążenia: Serwery reverse proxy mogą dystrybuować przychodzące żądania klientów na wiele serwerów zaplecza. Pomaga to w rozłożeniu obciążenia, zapobiega przeciążeniu serwera i zapewnia lepsze wykorzystanie zasobów. Równoważenie obciążenia zwiększa ogólną wydajność i responsywność aplikacji.
- Zakończenie SSL : Reverse proxy mogą obsługiwać szyfrowanie i deszyfrowanie SSL/TLS w imieniu serwerów zaplecza. Odciąża to wymagające dużej ilości zasobów przetwarzanie SSL z serwerów zaplecza, zmniejszając ich obciążenie i upraszczając zarządzanie certyfikatami.
- Buforowanie: Serwery reverse proxy mogą przechowywać często żądane zasoby w pamięci podręcznej. Gdy klienci żądają tych samych zasobów, reverse proxy bezpośrednio udostępnia zawartość z pamięci podręcznej, zmniejszając obciążenie serwera i skracając czas odpowiedzi.
- Przyspieszenie sieci Web: buforując zawartość statyczną i kompresując dane, reverse proxy może przyspieszyć ładowanie stron internetowych dla klientów, co zapewnia płynniejszą obsługę użytkownika.
- Bezpieczeństwo i ochrona przed atakami DDoS: Reverse proxy działają jak bariera ochronna między Internetem a serwerami backendowymi. Mogą filtrować i blokować złośliwy ruch, chronić przed atakami typu Distributed Denial of Service (DDoS) i ukrywać prawdziwy adres IP serwera backendowego, aby zapobiec bezpośrednim atakom.
- Zapora aplikacji sieci Web (WAF) : Serwery reverse proxy mogą działać jako WAF, sprawdzając ruch przychodzący pod kątem potencjalnych zagrożeń, takich jak SQL Injection, skrypty między witrynami (XSS) i inne złośliwe działania. Pomagają w ochronie aplikacji internetowych przed typowymi lukami w zabezpieczeniach.
- Pojedynczy punkt wejścia: Serwery reverse proxy zapewniają klientom zewnętrznym pojedynczy punkt wejścia, umożliwiający dostęp do wielu serwerów zaplecza. Upraszcza to architekturę sieci oraz pozwala na łatwiejsze zarządzanie i skalowanie usług.
- Konwersja protokołu: Serwery reverse proxy mogą tłumaczyć żądania z jednego protokołu na inny. Na przykład mogą konwertować żądania HTTP na protokół WebSocket lub inne protokoły specyficzne dla aplikacji, ułatwiając komunikację między klientami i serwerami.
- Kompresja i optymalizacja treści: Serwery reverse proxy mogą kompresować treść wychodzącą przed wysłaniem jej do klientów, zmniejszając rozmiar przesyłanych danych i skracając czas ładowania strony.
Krok 1 – Zainstaluj Apache
W tym przykładzie jako systemu operacyjnego użyjemy Ubuntu Server 22.04 LTS. Łączmy się do serwera przez SSH i aktualizujemy system:
ssh remote_username@remote_host
sudo apt update -y && sudo apt upgrade -y
Teraz, aby zainstalować Apache na systemie Ubuntu, wprowadź poniższe polecenie:
sudo apt install -y apache2
Po instalacji możesz sprawdzić wersję Apache za pomocą komendy:
apache2 -version
Masz również możliwość sprawdzenia statusu Apache2 za pomocą poniższego polecenia. Pomaga to szybko określić, czy serwer działa i czy występują jakieś problemy wymagające uwagi.
sudo systemctl status apache2
Aby usługa Apache włączała się razem ze startem systemu, użyj polecenia:
sudo systemctl enable apache2
Podstawowe komendy do zarządzania usługą Apache (start/stop/restart) są następujące:
sudo systemctl start apache2
sudo systemctl stop apache2
sudo systemctl restart apache2
Krok 2 – Włącz moduły Apache dla Reverse Proxy
Aby efektywnie wykorzystać reverse proxy w serwerze Apache Web Server, należy włączyć określone moduły Apache, które są niezbędne do obsługi dodatkowej funkcjonalności wymaganej przez serwery reverse proxy.
mod_proxy : Służąc jako główny moduł proxy dla Apache, mod_proxy skutecznie obsługuje połączenia i przekierowania. Umożliwia Apache działanie jako brama do bazowych serwerów backendowych, co czyni go niezbędnym modułem dla wszystkich konfiguracji reverse proxy.
mod_proxy_http : Moduł ten opiera się na mod_proxy i jest niezbędny do obsługi żądań HTTP i HTTPS w środowisku serwera proxy. Umożliwia Apache sprawną obsługę proxy aplikacji internetowych przy użyciu protokołów HTTP/HTTPS .
mod_ssl: Zapewniając niezbędną funkcjonalność, mod_ssl wyposaża serwer Apache HTTP w obsługę protokołów SSL v3 i TLS v1.x. Moduł ten ma kluczowe znaczenie dla nawiązywania bezpiecznych, szyfrowanych połączeń, zapewnienia integralności danych i zwiększenia bezpieczeństwa serwera WWW.
Teraz aktywujemy te moduły za pomocą polecenia a2enmod :
sudo a2enmod proxy
sudo a2enmod proxy_http
sudo a2enmod ssl
Po włączeniu nowych modułów Apache konieczne jest, aby nie przeoczyć kluczowego kroku, jakim jest ponowne uruchomienie serwera Apache2 . Ten krok zapewnia, że zmiany odniosą skutek i umożliwi pełną integrację nowo aktywowanych modułów z konfiguracją serwera Apache.
sudo systemctl restart apache2
Możesz potwierdzić aktywny status tych modułów za pomocą następującego polecenia:
sudo apachectl -M
Krok 3 – Konfiguracja serwera reverse proxy Apache
Teraz skonfigurujemy reverse proxy Apache , aby akceptować żądania z Internetu i skutecznie przekazywać je do wybranego zasobu.
Na początek wyłączymy domyślny plik konfiguracyjny wirtualnego hosta Apache. Można to osiągnąć za pomocą następującego polecenia:
sudo a2dissite 000-default.conf
Utworzenie nowego pliku konfiguracyjnego virtual hosta jest podstawowym krokiem w dostosowywaniu Apache do obsługi różnych aplikacji internetowych lub witryn internetowych na tym samym serwerze. Host wirtualny pozwala Apache zarządzać wieloma domenami lub subdomenami, każda z własną unikalną konfiguracją i ustawieniami.
Aby utworzyć nowy plik konfiguracyjny hosta wirtualnego, wykonamy następujące kroki:
Wybierz nazwę : wybierz opisową nazwę pliku hosta wirtualnego, zwykle kończącą się rozszerzeniem „.conf”. Na przykład „example.com.conf” lub „bluestack.conf”.
Przejdź do katalogu konfiguracyjnego Apache: W większości dystrybucji Linuksa pliki konfiguracyjne Apache są przechowywane w katalogu „/etc/apache2/sites-available/” . Na przykład:
cd /etc/apache2/sites-available/
Użyjemy edytora tekstu, takiego jak nano lub vi, aby utworzyć nowy plik konfiguracyjny. Na przykład:
sudo nano example.com.conf
W pliku użyjemy dyrektywy <VirtualHost> , aby zdefiniować adres IP i port w celu akceptowania żądań dla określonego hosta wirtualnego. Aby uzyskać podstawową funkcjonalność, zezwalający na wszystkie adresy IP na domyślnym porcie HTTP (port 80) , użyjemy następującej konfiguracji:
<VirtualHost *:80>
ServerName site1.com
ServerAlias www.site1.com
ServerAdmin [email protected]
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
ProxyPass / http://127.0.0.1:8080/
ProxyPassReverse / http://127.0.0.1:8080/
ProxyRequests Off
</VirtualHost>
Proces konfiguracji rozpoczynamy od zdefiniowania wirtualnego hosta za pomocą komendy <VirtualHost> , podając akceptowany adres IP i numer portu dla Apache. W tym przypadku zastosowano znak wieloznaczny *, umożliwiający akceptację wszystkich adresów IP, podczas gdy numer portu jest ustawiony na 80 , reprezentujący domyślny port HTTP. Następnie konfiguracja obejmuje ponadto następujące elementy:
- ServerName : Ta dyrektywa określa nazwę domeny powiązaną z serwerem.
- ServerAlias: Za pomocą ServerAlias możesz zdefiniować dodatkowe nazwy akceptowane przez serwer.
- ServerAdmin : Dyrektywa ServerAdmin ustawia kontaktowy adres e-mail, który serwer uwzględnia w komunikatach o błędach zwracanych klientom.
- ErrorLog : ErrorLog ustawia nazwę pliku, w którym Apache przechowuje napotkane błędy.
- CustomLog: CustomLog ustawia nazwę pliku, w którym Apache rejestruje żądania klientów kierowane do serwera.
- ProxyPass: ProxyPass mapuje zdalne serwery w przestrzeń lokalnego serwera i definiuje adres docelowy dla przekierowania ruchu. Umożliwia Apache działanie jako reverse proxy, przekazywanie żądań do serwerów backendowych i zwiększanie wydajności aplikacji oraz rozkładu obciążenia.
- ProxyPassReverse: ProxyPassReverse jest niezbędny dla serwera proxy, ponieważ zapisuje oryginalną lokalizację, lokalizację zawartości i nagłowki odpowiedzi HTTP URI serwera backendowego z informacjami o serwerze proxy. Dzięki temu reverse proxy prawidłowo obsługuje odpowiedzi i zapobiega narażeniu serwerów backendowych na bezpośredni dostęp do Internetu.
- ProxyRequests: ProxyRequests zapobiegają używaniu serwera Apache HTTP jako proxy przekazującego dalej, zwiększając bezpieczeństwo. Zwykle powinno być ustawione na „wyłączone” podczas korzystania z ProxyPass, aby uniknąć niewłaściwego wykorzystania serwera jako otwartego serwera proxy i chronić przed potencjalnymi zagrożeniami bezpieczeństwa.
Zapisz zmiany i wyjdź z edytora tekstu.
Użyj komendy a2ensite, aby włączyć nową konfigurację hosta wirtualnego:
sudo a2ensite example.com.conf
Aby zastosować zmiany, załaduj ponownie Apache i aktywuj nowy host wirtualny:
sudo systemctl reload apache2
Po wykonaniu tych kroków nowy host wirtualny jest teraz aktywny i gotowy do obsługi wyznaczonej witryny internetowej lub aplikacji. Należy pamiętać, że zmiany zaczną obowiązywać dopiero po włączeniu hosta wirtualnego i ponownym załadowaniu Apache. Dodatkowo możesz umieścić pliki swojej witryny w katalogu określonym przez dyrektywę „DocumentRoot”, aby mieć pewność, że Apache poprawnie obsługuje zawartość dla tego konkretnego wirtualnego hosta.
Upewnij się, że konfiguracja reverse proxy działa zgodnie z oczekiwaniami. Odwiedź wyznaczoną nazwę domeny (np. „reverse-proxy.example.com”) w przeglądarce internetowej, a Apache powinien prawidłowo przekazywać żądania do serwera zaplecza.
Pamiętaj, że może być konieczne skonfigurowanie dodatkowych ustawień w zależności od konkretnych przypadków użycia, takich jak obsługa certyfikatów SSL, równoważenie obciążenia lub proxy WebSocket . Regularnie monitoruj wydajność i bezpieczeństwo serwera, aby zapewnić jego płynne działanie.