Jak skonfigurować proxy Apache Webserver przed Apache Tomcat na Red Hat Linux

Jak skonfigurować proxy Apache Webserver przed Apache Tomcat na Red Hat Linux

Cel

Naszym celem jest skonfigurowanie Apache HTTPD do pracy jako proxy przed kontenerem aplikacji Apache Tomcat.

Wersje systemu operacyjnego i oprogramowania

  • System operacyjny: Red Hat Enterprise Linux 7.5
  • Oprogramowanie: Apache Httpd, Apache Tomcat

Wymagania

Uprzywilejowany dostęp do systemu

Trudność

ŁATWY

Konwencje

  • # - Wymaga, aby podane polecenia Linux są wykonywane z uprawnieniami root bezpośrednio jako użytkownik root lub za pomocą sudo Komenda
  • $ - Biorąc pod uwagę polecenia Linux, które mają być wykonywane jako zwykły użytkownik niepewny

Wstęp

Używanie Apache HTTPD jako serwera proxy do kontenera aplikacji Apache Tomcat jest powszechną konfiguracją. Ma wiele przypadków użycia, najbardziej trywialnym jest obsługa treści statycznej z httpd, zapewniając usługi wdrażające ciężką logikę biznesową z aplikacji napisanej w Javie, która znajduje się w kontenerze Tomcat.

Tworząc serwer proxy, możemy utworzyć rodzaj front-end do warstwy aplikacji, w której możemy wprowadzić środki bezpieczeństwa w serwisie internetowym, zastosować równoważenie obciążenia, używać przekierowania warunkowego lub użyć innych funkcji dostarczanych przez WebServer. W ten sposób nie musimy wdrażać żadnej z tych funkcji w naszej aplikacji i możemy skupić swoje możliwości samej usługi. Będziemy mieli w pełni funkcjonalny serwer internetowy dla użytkowników, niektóre adresy URL przekazywane cicho do kontenera aplikacji, które mogą być same w sobie nieorządne. Odpowiedzi aplikacji są przekazywane z powrotem do klientów, którzy nie będą wiedzieć, że mówili cokolwiek innego oprócz serwera internetowego - to znaczy, jeśli uważamy, że nie ujawniamy żadnych informacji (takich jak nieobsługiwane komunikaty o błędach) z aplikacji, która może sprawić, że domyślnie się, że jest więcej niż jedna warstwy.

Użyjemy protokołu AJP, który można użyć między serwisami internetowymi a kontenerami aplikacji opartymi na Javie, aby zapewnić możliwość zrównoważenia obciążenia między wieloma serwerami aplikacji - jednak w celu skonfigurowania równoważenia obciążenia jest poza zasięgiem tego samouczka.

Skonfigurujemy naszą konfigurację na Red Hat Linux 7.5, ale serwer Webserver Apache, moduł AJP i kontener aplikacji Apache Tomcat są dostępne wszędzie, a zatem ta konfiguracja jest przenośna z małymi korektami, takimi jak ścieżki systemu plików lub nazwy usług.



Instalowanie wymaganego oprogramowania

Najpierw musimy zainstalować usługi, których będziemy korzystać. W zrównoważonej konfiguracji serwera Tomcat może znajdować się na różnych maszyna.

# Yum Zainstaluj httpd Tomcat Tomcat-Webapps

Instalujemy Tomcat-Webapps Do celów testowych w tym pakiecie jest przykłady aplikacji internetowej wdrożonej na naszym serwerze Tomcat podczas instalacji. Użyjemy tej aplikacji, aby przetestować, że nasza konfiguracja działa zgodnie z przeznaczeniem.

Teraz możemy włączyć i uruchomić nasz serwer Tomcat:

# Systemctl Włącz Tomcat
# Systemctl start tomcat

I nasz WebServer:

# Systemctl Włącz HTTPD
# Systemctl start httpd

Domyślny httpd Instalacja zawiera moduły proxy, których potrzebujemy. Aby sprawdzić, że tak jest, możemy zapytać o serwer sieciowy Apachectl:

# apachectl -m | GREP AJP proxy_ajp_module (udostępniony) 
Kopiuj

Notatka 1.x Użyj wersji Apache mod_jk moduł zamiast proxy_ajp.

Konfiguracja HTTPD

Przykłady aplikacji internetowej wdrożona w Tomcat są publikowane po instalacji domyślnie serwer-URL: 8080/Przykłady. Będziemy żądania proxy do portu serwera 80 (domyślny port HTTP), żądając czegoś z Serwer-URL/przykłady do obsługi przykłady Aplikacja internetowa wdrożona w Tomcat. Żądania przychodzące do dowolnego innego adresu URL na serwerze będą obsługiwane przez serwer WWW. Skonfigurujemy statyczną treść, aby pokazać tę funkcjonalność.

W naszym przykładzie serwer jest wywoływany WS.foobar.com. Aby proxy działał, utwórz plik tekstowy z ulubionym edytorem w katalogu konfiguracyjnym WebServer, czyli /etc/httpd/conf.D na smaku Red Hat, z rozszerzeniem .conf. Nasza konfiguracja nie wymaga, aby tomcat był bezpośrednio osiągalny, więc używamy Lokalny Gospodarz jako host cel w /etc/httpd/conf.d/example_proxy.conf plik:

 Servername WS.foobar.Com ProxyRequests Off proxypass/Przykłady AJP: // Localhost: 8009/Przykłady ProxYpassreverse/Przykłady AJP: // LocalHost: 8009/Przykłady  
Kopiuj

Aby być po bezpiecznej stronie, możemy sprawdzić, czy nasza konfiguracja jest poprawna Apachectl:

# APACHECTL CONFIGTEST Składnia OK 
Kopiuj

Jeśli test konfiguracji zwraca błąd, taki jak następujący:

Nie można rozwiązać nazwy hosta WS.foobar.com - ignorowanie!

Jeśli oznacza, że ​​nasz Nazwa serwera Dyrektywa jest nieprawidłowa, ponieważ nie można jej rozwiązać. Albo musimy go zarejestrować w (lokalnym lub globalnym) DN, albo podać linię w /etc/hosts Plik zawierający publiczny adres IP hosta, a następnie nazwa, którą podaliśmy w powyższej konfiguracji. Jeśli plik hostów zawiera już adres IP o innej nazwie (być może prawdziwa nazwa hosta), możemy dodać Servername po nazwie hosta w tej samej linii, konfiguracja będzie działać.

Po pomyślnym testie musimy zastosować nową konfigurację, ponownie uruchamiając WebServer:

# Systemctl restart httpd


Konfiguracja Tomcat

Z domyślną instalacją kontener Tomcat będzie słuchać żądań AJP na wszystkich interfejsach na porcie 8009. Można to zweryfikować w głównym pliku konfiguracyjnym:

# Widok/usr/share/tomcat/conf/serwer.xml […]   […] 
Kopiuj

Jeśli nie potrzebujemy kontenera Tomcat i aplikacji w środku, aby można było samodzielnie osiągnąć, możemy ustawić każdy złącze do słuchania tylko na LocalHost:

Adres złącza = "127.0.0.1 "port =…"

Aby złożyć wniosek, możemy ponownie uruchomić Tomcat z:

# Systemctl restart tomcat

Na naszym komputerze laboratoryjnym tego nie zrobi, ponieważ musimy zobaczyć, że podajemy tę samą treść w obu portach 80 I 8080.

Testowanie

Nasza minimalna konfiguracja proxy AJP jest kompletna, możemy to przetestować. Z wiersza poleceń możemy wywołać przykłady Aplikacja bezpośrednio na porcie 8080:

$ wget http: // wS.foobar.Com: 8080/Przykłady-2018-09-13 11: 00: 58-- http: // WS.foobar.COM: 8080/Przykłady rozwiązywania WS.foobar.com (WS.foobar.com)… . 10.104.1.165 Łączenie z WS.foobar.com (WS.foobar.com) | 10.104.1.165 |: 8080… . połączony. Wysłany prośba HTTP, czekając na odpowiedź… . 302 Znaleziono Lokalizacja:/przykłady/[Następujące]-2018-09-13 11: 00: 58-- http: // WS.foobar.COM: 8080/ Przykłady/ ponowne wykorzystanie istniejącego połączenia z WS.foobar.com: 8080. Wysłany prośba HTTP, czekając na odpowiedź… . 200 OK Długość: 1253 (1.2K) [tekst/html] Zapisanie na: „przykłady” 100%[====================================== ================================================== ================================================== ==================================>] 1253 --.-K/S w 0S 2018-09-13 11:00:58 (102 MB/s)-„Zatrzymane przykłady” [1253/1253]
Kopiuj

I zobacz dostarczoną zawartość:

$ Przykłady ogona 

Przykłady Apache Tomcat

  • Przykłady serwletów
  • Przykłady JSP
  • Przykłady WebSocket (JSR356)
  • Przykłady WebSocket przy użyciu deprecjonowanego zastrzeżonego API Apache Tomcat
Kopiuj

A jeśli zadzwonimy do tej samej aplikacji naszą proxy AJP, powinniśmy również uzyskać odpowiedź, podczas gdy nie ma żadnych treści w dokumencie WebServer:

$ wget http: // wS.foobar.com/Przykłady-2018-09-13 11: 01: 09-- http: // WS.foobar.com/przykłady rozwiązywania WS.foobar.com (WS.foobar.com)… . 10.104.1.165 Łączenie z WS.foobar.com (WS.foobar.com) | 10.104.1.165 |: 80… . połączony. Wysłany prośba HTTP, czekając na odpowiedź… . 302 Znaleziono lokalizację:/przykłady/[Następujące]-2018-09-13 11: 01: 09-- http: // WS.foobar.com/ przykłady/ ponowne wykorzystanie istniejącego połączenia z WS.foobar.com: 80. Wysłany prośba HTTP, czekając na odpowiedź… . 200 OK Długość: 1253 (1.2K) [Text/html] Zapisanie na: „Przykłady.1 '100%[============================================================ ================================================== ================================================== ========================>] 1 253 --.-K/s w 0S 2018-09-13 11:01:09 (101 MB/s)-„Przykłady.1 'uratowany [1253/1253]
Kopiuj

Jeśli wszystkie prace, otrzymamy odpowiedź o tej samej zawartości, ponieważ ostateczna odpowiedź jest dostarczana przez tę samą aplikację w kontenerze:

$ Przykłady ogona.1 

Przykłady Apache Tomcat

[… .]
Kopiuj

Możemy również przetestować naszą konfigurację za pomocą przeglądarki. Musimy wywołać wszystkie adresy URL o nazwie serwera jako hosta (przynajmniej ten, który jest serdeczny). W tym celu komputer z przeglądarką musi być w stanie rozwiązać nazwę serwera za pomocą pliku DNS lub hostów.

W naszym środowisku laboratoryjnym nie wyłączyliśmy słuchania Tomcat na interfejsie publicznym, więc możemy zobaczyć, co jest dostarczone, zapytane bezpośrednio w porcie 8080:



Tomcat dostarcza aplikacji przykładów

Możemy otrzymać tę samą zawartość, co proxy AJP dostarczany przez WebServer w porcie 80:

HTTPD Dostarczanie przykładów aplikacji z proxy AJP

Podczas działania jako proxy, httpd może obsługiwać dowolną inną treść. Możemy tworzyć treści statyczne, które można osiągnąć na innym adresie URL na tym samym serwerze:

# mkdir/var/www/html/static_content # echo „treść statyczna”>/var/www/html/static_content/static.html
Kopiuj

Wskazując naszą przeglądarkę na ten nowy zasób, mamy nową treść statyczną.

Treść statyczna dostarczona przez HTTPD

Gdyby pojemnik Tomcat nie byłby dostępny, nie znalibyśmy odpowiedzi przybycia gdzieś inaczej niż serwer Web. Ponieważ zaskarżyliśmy tylko określoną aplikację, domyślna aplikacja kontenera nie jest osiągalna przez proxy, a zatem ukrytą przed wszystkim poza serwisem internetowym.

Wniosek

Apache Webserver jest wysoce rozszerzony za pomocą modułów, jednym z nich jest moduł proxy AJP. Powyższy przewodnik używa jednej maszyny i ujawnia jedną aplikację z proxy, ale ten sam serwer Web.

W połączeniu z innymi modułami, takimi jak mod_security, Możemy dodać wiele funkcji do naszej usługi bez potrzeby opracowania ich w aplikacji, a jeśli potrzeba, przekieruj proxy do innego punktu końcowego za pomocą pojedynczej edycji pliku konfiguracyjnego i przeładowania serwera internetowego, co czyni migrację lub migrację Wprowadzenie nowej wersji aplikacji A KASTROŚCI. To samo przeładowanie może doprowadzić gościa do strony wyjaśniającej planowane przestoje, podczas gdy konserwacja jest wykonywana na serwerach aplikacji - przypadki użycia proxy AJP są ograniczone jedynie wyobraźnią personelu informatycznego.

Powiązane samouczki Linux:

  • Ubuntu 20.04 Instalacja Tomcat
  • Rzeczy do zainstalowania na Ubuntu 20.04
  • Rzeczy do zrobienia po zainstalowaniu Ubuntu 20.04 Focal Fossa Linux
  • Linux Pliki konfiguracyjne: Top 30 Najważniejsze
  • Pobierz Linux
  • Czy Linux może uzyskać wirusy? Badanie podatności Linuksa…
  • Samouczek konfiguracji proxy Squid na Linux
  • Najlepszy Linux Distro dla programistów
  • GNU/Linux Ogólne Przewodnik po rozwiązywaniu problemów dla początkujących
  • Rzeczy do zrobienia po zainstalowaniu Ubuntu 22.04 JAMMY Jellyfish…