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.