Ich möchte Apache und Tomcat auf einem RHEL 5-Server ausführen, wobei Apache die Ruby on Rails-Apps (über mod_rails/Passenger) und Tomcat die Java-Apps verwaltet.
Unter Apache verfügt jede Rails-App über eine URL und einen virtuellen Host. Die URLs sind in unserem DNS-Server bereits so konfiguriert, dass sie auf die Maschine verweisen.
Unter Tomcat hat jede Java-App eine URL wie diese: ourserver.ourcompany.com/app1
, ourserver.ourcompany.com/app2
, usw.
Der Server ist bereits einsatzbereit, Tomcat 6 läuft auf Port 80 und stellt mehrere Java-Apps bereit. Ich möchte Apache hinzufügen und neu konfigurieren. Ich weiß, wie man einen einzelnen Apache-Server konfiguriert, um RoR-Apps mit Passenger zu hosten. Ich weiß nur nicht, wie ich Apache und Tomcat dazu bringe, so zusammenzuarbeiten.
Ich habe durch Googeln verschiedene Ressourcen und Diskussionen gefunden (zum BeispielDieses hier), aber sie sind oft etwas skizzenhaft und unvollständig oder scheinen nicht wirklich zu dem zu passen, was ich versuche. Die von mir verlinkte scheint dafür gedacht zu sein, wenn Sie alle Anfragen an Tomcat senden möchten, nicht nur bestimmte, und die anderen von Apache bearbeiten lassen möchten.
Könnte jemand eine Beispielkonfiguration für server.xml
und vorschlagen httpd.conf
oder mich vielleicht auf einige detailliertere Ressourcen verweisen?
Antwort1
Sie müssen keine Änderungen vornehmen, server.xml
außer Tomcat auf die Standardports zurückzusetzen, damit Apache Port 80 verarbeiten kann. Der Großteil der Arbeit wird über die Apache-Konfigurationsdateien erledigt. Normalerweise lasse ich diese außerhalb httpd.conf
und füge sie stattdessen in kleinere Konfigurationsausschnitte im <ServerRoot>/conf.d/
Unterverzeichnis ein.
Angesichts Ihres ourserver.ourcompany.com/app1
& -Beispiels ourserver.ourcompany.com/app2
würde ich etwa folgende Konfiguration annehmen:
<VirtualHost *:80>
ServerName ourserver.ourcompany.com
ErrorLog ...
CustomLog ...
[other VHost configurations]
ProxyPass /app1 ajp://tomcat_hostname:8009/app1
ProxyPassReverse /app1 ajp://tomcat_hostname:8009/app1
ProxyPass /app2 ajp://tomcat_hostname:8009/app2
ProxyPassReverse /app2 ajp://tomcat_hostname:8009/app2
</VirtualHost>
Wenn Sie mehrere Tomcat-Server im Hintergrund haben, sollten Sie mod_balancer einrichten und ajp://
diemod_balancer BalancerMember
und ersetzen Sie durch die balancer://
URL, die auf die Balancer-Konfiguration verweist.
Antwort2
Ich persönlich mag mod_proxy_ajp nicht; wenn ich Tomcat unter Apache ausführe, installiere ich sofort mod_jk (das Modul von Tomcat-Programmierern), um die AJP-Verbindung bereitzustellen. Sie können mod_jk auf fünf verschiedene Arten optimieren, um die Leistung Ihrer Apps zu verbessern (Threads, Timeouts, Knocks usw.).
- Stellen Sie sicher, dass httpd-devel installiert ist
- Entpacken Sie das echte JDK in einen Pfad wie /usr/local/jdk1.6.0_18/
Holen Sie sich die Quelle „tomcat-connectors“ von tomcat.apache.org und kompilieren Sie sie
cd tomcat-connectors-1.2.28-src/native
./configure --with-apxs=/usr/sbin/apxs --with-java=/usr/local/jdk1.6.0_18 --enable-prefork
machen
cp apache-2.0/mod_jk.so /usr/local/lib/
Jetzt müssen Sie es in Ihre Apache-Konfiguration im Allgemeinen und dann in jeden virtuellen Host entsprechend einfügen. In der Gesamtkonfiguration fügen Sie etwas wie Folgendes hinzu:
LoadModule jk_module /usr/local/lib/mod_jk.so
JkWorkersFile /usr/local/tomcat/conf/workers.properties
JkShmFile /var/log/httpd/mod_jk.shm
JkLogFile /var/log/httpd/mod_jk.log
JkLogLevel error
Sie müssen die grundlegende Datei worker.properties erstellen. Hier sind die Dokumente:http://tomcat.apache.org/connectors-doc/reference/workers.htmlEin ganz einfaches Beispiel könnte so aussehen:
workers.tomcat_home=/usr/local/tomcat
workers.java_home=/usr/local/jdk1.6.0_18
ps=/
worker.list=ajp13
worker.maintain=60
worker.ajp13.port=8009
worker.ajp13.host=localhost
worker.ajp13.type=ajp13
worker.loadbalancer.type=lb
worker.loadbalancer.balance_workers=ajp13
Dabei wird die Standardkonfiguration für Port 8009 aus server.xml verwendet. Hier gibt es eine Million Knöpfe, an denen Sie drehen können, um die Leistung endlos zu optimieren. Anschließend „mounten“ Sie in jedem virtuellen Host die gewünschten Apps:
<VirtualHost *:80>
ServerName foo.bar.com
...other options ...
JkMount /app1/* ajp13
<Location "/app1/WEB-INF/">
deny from all
</Location>
JkMount /app2/* ajp13
<Location "/app2/WEB-INF/">
deny from all
</Location>
</VirtualHost>
Wie Sie unten sehen, vergessen Sie nicht ein wenig Sicherheit und verweigern Sie jeglichen Zugriff auf Ihren WEB-INF-Ordner – die meisten Webanwendungen haben ihren Datenbank-DSN mit dem Passwort web.xml, wenn sie als Warball bereitgestellt werden.