|
Strona główna Zbieranina Serwisy Porady Projekty Humor sektora IT TODO Nowości Ostatnie zmiany Kontakt Find pages
Set your name in
UserPreferences Referenced by
JSPWiki v2.2.33
|
Apache/Tomcat - bezbolesna integracja serwerów Apache 2.2 i Tomcat 5.5W sieci można znaleźć wiele rozpaczliwych pytań w rodzaju jak połączyć Tomcata z Apachem?. A rozwiązanie jest banalnie proste: Apache 2.2 i Tomcat 5.5 mogą być połączone bez żadnego problemu, bez większych problemów mogą być też skonfigurowane do pracy jako klaster serwerów. Pytanie: po co dokonywać takiej integracji? Tomcat może być sam serwerem www. Może, ale:
Table of Contents
PoczątekNa początek należy oczywiście pobrać potrzebne aplikacje. Serwer www Apache 2.2.x jest do pobrania ze strony http://httpd.apache.org Początkowa konfiguracja serwera ApacheInstalujemy oprogramowanie. Czy to kompilujemy ze źródeł, czy instalujemy gotowe paczki. Istotne jest to, aby dostępne były moduły mod_rewrite, mod_proxy oraz mod_proxy_ajp, one są kluczowe do integracji. Zakładam, mamy skonfigurowane wirtualnego hosta, którego chcemy udostępnić dla aplikacji Tomcata. Czyli np. skonfigurowaliśmy apacha aby udostępniał nam vhosta tomcat.example.com. Można to osiągnąć następującą konfiguracją:
<VirtualHost *>
ServerName tomcat.example.com
</VirtualHost>
Początkowa konfiguracja serwera TomcatTomcat, po instalacji "z pudełka" jest gotów do pracy i czeka na połączenia na porcie 8080. Po domyślnej instalacji jego strona główna jest dostępna pod adresem http://localhost:8080 Poniższy fragment pliku conf/server.xml określa Connectora pracującego jako serwer www na porcie 8080. Dzięki niemu do Tomcata można podłączyć się za pomocą przeglądarki www.
<Connector port="8080" maxHttpHeaderSize="8192"
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" redirectPort="8443" acceptCount="100"
connectionTimeout="20000" disableUploadTimeout="true" />
Poniższy wpis uruchamia z kolei Connectora pozwalającego na podłączenie się do Tomcata z poziomu serwera Apache. Nim się będziemy zajmować w dalszej kolejności.
<Connector port="8009"
enableLookups="false" redirectPort="8443" protocol="AJP/1.3" />
Konfiguracja serwera Apache - rozwiązanie dla biednychGdy nie zależy nam na niczym szczególnym, nie potrzebujemy klastrów, chcemy tylko szybko udostępnić serwisy Tomcata to możemy posłużyć się dyrektywą ProxyPass. Ustawiamy więc konfigurację wirtualnego hosta w apaczu:
<VirtualHost *>
ServerName tomcat.example.com
ProxyPass / http://localhost:8080/
ProxyPassReverse / http://localhost:8080/
</VirtualHost>
Konfiguracja ta przekierowuje wszystkie żądania przychodzące do danego hosta, na wskazany adres. W tym przypadku na HTTP Connectora skonfigurowanego w Tomcacie. Aby całość dokończyć należy jeszcze powiedzieć Tomcatowi jaka jest jego "zewnętrzna" nazwa hosta - po to, aby poprawnie wykonywał on przekierowania. Należy zmodyfikować konfigurację Connectora w następujący sposób:
<Connector port="8080" maxHttpHeaderSize="8192"
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" redirectPort="8443" acceptCount="100"
proxyName="tomcat.example.com" proxyPort="80"
connectionTimeout="20000" disableUploadTimeout="true" />
Minusem takiego podejścia jest to, że wszystkie odwołania do Tomcata widoczne są jak odwołania z adresu 127.0.0.1, są to wywołania sztucznie wykonywane przez apacza. A dokładniej rzecz biorąc, wywołanie metody HttpServletRequest.getRemoteAddr() będzie zawsze zwracać wartość 127.0.0.1. Nie zawsze jest to pożądane.
Konfiguracja serwera Apache - rozwiązanie właściweAby pozbyć się problemów opisanych powyżej należy skorzystać z funkcjonalności oferowanej przez moduł mod_proxy_ajp. Jego konfiguracja w najprostrzej wersji jest równie trywialna jak ww sposób. Edytujemy wpis wirtualnego hosta w apaczu:
<VirtualHost *>
ServerName tomcat.example.com
ProxyPass / ajp://localhost:8009/
ProxyPassReverse / ajp://localhost:8009/
</VirtualHost>
Używamy tym samym AJP Connectora i jeśli chcemy, to można wyłączyć HTTP Connectora. Tomcat jest teraz dostępny poprzez specjalny, dedykowany protokoł. Automatycznie przenoszona jest informacja o nazwie wirtualnego hosta w apaczu, o adresie użytkownika oraz wszystkie inne często potrzebne dane.
Udostępnienie wybranej aplikacji z TomcataCzęsto zachodzi potrzeba udostępnienia jednej bądź kilku aplikacji Tomcata, a dawanie dostępu do niego całego nie jest dopuszczalne. Nie można wtedy zastosować ww rozwiązania, gdyż ono udostępnia całą zawartość Tomcata. Załómy, że chcemy udostępnić tylko jedną aplikację app. W tym calu konfigurujemy naszego wirtualnego hosta:
<VirtualHost *>
ServerName tomcat.example.com
ProxyPass /app ajp://localhost:8009/app
ProxyPassReverse /app ajp://localhost:8009/app
</VirtualHost>
I tyle. Pozostałe odwołania (nie pasujące do URLa /app) są obsługiwane przez apacha i są przekierowywane np. do plikow HTML, PHP, itd. Gdybyśmy chcieli udostępnić więcej aplikacji to należy odpowiednio powtorzyć dyrektywy ProxyPass.
Udostępnienie wybranej aplikacji z Tomcata pod inną nazwąPowyższe rozwiązanie ma potencjalną wadę: URI pod którym jest widoczna w apaczu aplikacja jest identyczny z tym, jaki jest w Tomcacie. Nie zawsze jest to pożądane. Poniższy przykład pokazuje jak można udostępnić aplikację /app jako /apps/enterprise.
<VirtualHost *>
ServerName tomcat.example.com
ProxyPass /apps/enterprise/ ajp://localhost:8009/app/
ProxyPassReverse /apps/enterprise/ ajp://localhost:8009/app/
ProxyPassReverseCookiePath /app /apps/enterprise/
</VirtualHost>
Oczywiście jeśli aplikacja sama generuje bezwzględne adresy do swoich składników (adresy podstron, linki do grafik czy arkuszy styli) to mogą pojawić się problemy. Aplikacja pracująca w Tomcacie "nie wie", że zewnętrzny użytkownik widzi ją dostępną pod inną ścieżką. Można wtedy radzić sobie różnymi kombinacjami modułu mod_rewrite, tylko czy jest sens?
ZakończenieWszystkioe ww przykłady zakładają, że zarówno Apache jak i Tomcat pracują na tej samej maszynie. Nic nie stoi na przeszkodzie aby były one na odrębnych maszynach. Należy jednak w takim wypadku użyć dodatkowej dyrektywy ProxyPassReverseCookieDomain aby poprawnie przepisywać ewentualne domeny określone w Cookies. ProxyPassReverseCookieDomain domena.tomcata tomcat.example.com
|
||||||