Inhaltsverzeichnis
Apache HTTP Server ArchLinux - mod_proxy_ajp - Apache Tomcat Kommunikation
Der Apache HTTP Server ist ein Open Source Webserver und der seit 1996 am meisten im Internet eingesetzte Webserver weltweit. Der freie und quell offenen Webserver wird von der Apache Software Foundation zur Verfügung gestellt und weiterentwickelt.
Um den Apache HTTP Server als z.B. Frontend-Server vor eines Apache Tomcat Server zu betreiben, kann als Kommunikationsprotokoll das AJP/1.3-Protokoll zum Einsatz kommen.
Hierbei gibt es zwei Module, die die Kommunikation zwischen dem Apache HTTP Server und dem Apache Tomcat Server über das AJP/1.3-Protokoll bewerkstelligen können:
mod_proxy_ajp
- Federführung bei der Entwicklung Apache HTTP Servermod_jk
- Federführung bei der Entwicklung Apache Tomcat Server- Siehe auch den internen Link: Apache HTTP Server Archlinux - mod_jk - Apache Tomcat Kommunikation
Nachfolgend soll der Einsatz des Moduls - mod_proxy-ajp.so
beschrieben werden.
HINWEIS - Eine Installation des Moduls mod_proxy_ajp.so
ist nicht erforderlich, da es sich um ein Modul handelt, welches standardmässig bei der Installation des pacman
-Paktes - apache
mit installiert wird!
Ab hier werden root
-Rechte zur Ausführung der nachfolgenden Befehle benötigt. Um root
zu werden geben Sie bitte folgenden Befehl ein:
$ su - Password:
Konfiguration
/etc/httpd/conf/httpd.conf
Die Konfigurationsdatei /etc/httpd/conf/httpd.conf
beinhaltet die Aktivierung der Proxy-Module des Apache HTTP Server. Falls nicht alle Proxy-Module zum Einsatz kommen sollen, können die entsprechenden Inhalte auskommentiert belassen werden!
HINWEIS - Die nachfolgenden Anpassungen sind individuell und vom jeweiligen Einsatzzweck abhängig und ggf. den persönlichen Bedürfnissen anzupassen!
Die Anpassungen werden mit einem vorangestellten Kommentar in der Form
# Tachtler
gekennzeichnet.
(Nur relevanter Ausschnitt)
# Tachtler # default: #LoadModule proxy_module modules/mod_proxy.so LoadModule proxy_module modules/mod_proxy.so #LoadModule proxy_connect_module modules/mod_proxy_connect.so #LoadModule proxy_ftp_module modules/mod_proxy_ftp.so #LoadModule proxy_http_module modules/mod_proxy_http.so #LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so #LoadModule proxy_scgi_module modules/mod_proxy_scgi.so #LoadModule proxy_uwsgi_module modules/mod_proxy_uwsgi.so #LoadModule proxy_fdpass_module modules/mod_proxy_fdpass.so #LoadModule proxy_wstunnel_module modules/mod_proxy_wstunnel.so # Tachtler # default: #LoadModule proxy_ajp_module modules/mod_proxy_ajp.so LoadModule proxy_ajp_module modules/mod_proxy_ajp.so #LoadModule proxy_balancer_module modules/mod_proxy_balancer.so #LoadModule proxy_express_module modules/mod_proxy_express.so #LoadModule proxy_hcheck_module modules/mod_proxy_hcheck.so
Nur die Module
proxy_module
–>modules/mod_proxy.so
proxy_ajp_module
–>modules/mod_proxy_ajp.so
sind für die Kommunikation zwischen Apache HTTP Server und dem Apache Tomcat Server über das AJP/1.3-Protokoll notwendig!
/etc/httpd/conf/vhost/vhost.conf
Falls kein virtueller Host definiert ist, können folgende Konfigurationsangaben ebenfalls in der Datei /etc/httpd/conf/httpd.conf
definiert werden.
Nachfolgend ein Beispiel für einen virtuellen Host:
# # tomcat.tachtler.net (Apache Tomcat Applications) # <VirtualHost *:80> ServerAdmin webmaster@tachtler.net ServerName tomcat.tachtler.net ServerAlias www.tomcat.tachtler.net ServerPath / <IfModule alias_module> Alias /docs /var/lib/tomcat9/webapps/docs Alias /host-manager /var/lib/tomcat9/webapps/host-manager Alias /manager /var/lib/tomcat9/webapps/manager </IfModule> DocumentRoot "/var/lib/tomcat9/webapps/ROOT" <Directory "/var/lib/tomcat9/webapps/ROOT"> Options -Indexes +FollowSymLinks # Tachtler (enable for .htaccess file support) # AllowOverride AuthConfig AllowOverride None # Tachtler (enable for unlimited access) Require all granted </Directory> # Protect META-INF-Directory <Directory "/var/lib/tomcat9/webapps/ROOT/META-INF"> AllowOverride None Require all denied </Directory> # Protect WEB-INF-Directory <Directory "/var/lib/tomcat9/webapps/ROOT/WEB-INF"> AllowOverride None Require all denied </Directory> <IfModule proxy_module> <IfModule proxy_ajp_module> ProxyRequests Off ProxyPass /docs ajp://127.0.0.1:8099/docs ProxyPassReverse /docs ajp://127.0.0.1:8089/docs ProxyPass /host-manager ajp://127.0.0.1:8099/host-manager ProxyPassReverse /host-manager ajp://127.0.0.1:8099/host-manager ProxyPass /manager ajp://127.0.0.1:8099/manager ProxyPassReverse /manager ajp://127.0.0.1:8099/manager ProxyPass / ajp://127.0.0.1:8099/ ProxyPassReverse / ajp://127.0.0.1:8099/ </IfModule> </IfModule> DirectoryIndex index.htm index.jsp # ---------------------------------------------------------- # Logging settings # ---------------------------------------------------------- <IfModule log_config_module> ErrorLog /var/log/httpd/tomcat.tachtler.net_error.log SetEnvIf X-Forwarded-For "^.*\..*\..*\..*" forwarded=yes <IfModule logio_module> CustomLog /var/log/httpd/tomcat.tachtler.net_access.log combined_deflate "expr=(reqenv('forwarded') != 'yes' && reqenv('dontlog') != 'yes')" CustomLog /var/log/httpd/tomcat.tachtler.net_access.log combined_deflate_proxypass "expr=(reqenv('forwarded') == 'yes' && reqenv('dontlog') != 'yes')" </IfModule> </IfModule> </VirtualHost>
* Dies ist nur eine Beispielkonfiguration.
Die Bedeutung der einzelnen Befehle kann in der Dokumentation Apache Module mod_proxy detailliert nachgelesen werden.
ProxyRequests Off
Ermöglicht oder Deaktiviert Standard-Forward-Proxy Anfragen. Da hier eine typische Weiterleitung von Anfragen an eine nach gelagertes Back-End-System vorliegt, sollte hier die Funktionalität ausgeschaltet werden.
ProxyPass <URL> ajp://<Back-End-System>:<Port>
Ermöglicht das Zuordnen von URL auf Back-End-Systemen in die Zuständigkeit von Frontend-Systemen. Das Frontend-System agiert hier nicht direkt als konventioneller Proxy oder konventionelles Gateway, sondern ist eher als vorgelagertes System des eigentlichen Servers mit den tatsächlichen Inhalten zu sehen.
ProxyPassReverse <URL> ajp://<Back-End-System>:<Port>
Stellt sicher das auch die Antwort des Back-End-Systems, wie die des Frontend-Systems entsprechend im Header aussieht.