Jak skonfigurować Apache jako Reverse Proxy

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.

    Leave a Comment

    Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *