In diesem Artikel erkläre ich, wie man mit Linux, dem apache2 Webserver und IPTables basierend auf der Quell IP verschiedene mod_jk Worker anspricht.
Dazu definieren wir im apache2 Webserver verschiedene virtuelle Hosts und verändern mit IPTables die Zielports der jeweiligen Requests
Eine Erklärung, was mod_jk worker sind und wie sie eingerichtet werden, findet ihr unter folgendem Link Tomcat hinter apache2 Webserver
Konfiguration des Webservers
Das prinzipielle Vorgehen, um diese Anforderung umzusetzen, ist, das wir verschiedene virtualhosts auf verschiedenen Ports definieren und über IPTables Zugriffe von bestimmten IP Adressen auf bestimmte Ports umleiten.
Listen 80
Listen 1234
<ifmodule ssl_module>
Listen 443
</ifmodule>
<ifmodule mod_gnutls.c>
Listen 443
</ifmodule>
Die Zeile
Listen 1234
muss der Datei hinzugefügt werden.
Als nächstes erstellen wir eine Datei unter /etc/apache2/sites-available und bennenen sie z.B. als loadbalancer.
<virtualhost *:80>
ServerAdmin webmaster@localhost
<ifmodule jk_module>
JkMount /PATH/* MODJKWORKER1
</ifmodule>
</virtualhost>
<virtualhost *:1234>
ServerAdmin webmaster@localhost
<ifmodule jk_module>
JkMount /PATH/* MODJKWORKER2
</ifmodule>
</virtualhost>
Damit haben wir 2 virtuelle Hosts definiert, der eine läuft auf Port 80, der andere auf Port 1234. Zugriffe über Port 80 werde an den MODJKWORKER1 geleitet, Zugriffe über Port 1234 werden an den MODJKWORKER2 geleitet.
Konfiguration der Firewall Regeln mit IPTables
Jetzt müssen wir noch per IPTables die Regeln erstellen, damit Zugriffe von bestimmten IP's/NET's auf den Port 1234 umgeleitet werden.
Für eine IP folgenden Befehl ausführen
iptables -A PREROUTING -t nat -p tcp -s 1.2.3.4 --dport 80 -j DNAT --to-destination :1234
oder ein Netz, entsprechend seiner Netzmaske. Heise.de – Netzmasken berechnen
iptables -A PREROUTING -t nat -p tcp -s 1.2.2.0/24 --dport 80 -j DNAT --to-destination :1234
Damit wird der Zugriff von der IP 1.2.3.4 und die Zugriffe aus dem Netz 1.2.2.0/255.255.255.0 an den 2. virtuellen Host geleitet, der sie an den entprechenden Worker weiterleitet. Alle anderen Zugriffe gehen über den ersten virtuellen Host.