Donnerstag, 30. Juli 2009

X-Forwarded-For oder Woher kommst Du?

Das Forwarding von HTTP Anfragen aus dem Internet über die DMZ erledigt der Membrane Monitor jetzt problemlos. Das letzte Problem war, dass unsere logfiles alle so aussahen:

127.0.0.1 - - [30/Jul/2009:09:47:27 +0000] "GET /open-source/soap-monitor-howto.htm HTTP/1.1" 200 3178
127.0.0.1 - - [30/Jul/2009:09:47:31 +0000] "GET /open-source/jaxws-client-monitor-howto.htm HTTP/1.1" 200 3968
127.0.0.1 - - [30/Jul/2009:09:47:32 +0000] "GET /membrane-add-rule.png HTTP/1.1" 200 27561
127.0.0.1 - - [30/Jul/2009:09:47:34 +0000] "GET /open-source/ HTTP/1.1" 200 2822
127.0.0.1 - - [30/Jul/2009:09:47:36 +0000] "GET /open-source/soa-registry-repository/ HTTP/1.1" 200 4981

Anstatt der IP Adresse des Rechners auf dem der Browser läuft wird die IP Adresse des reverse Proxy abgespeichert. Für das Durchschleusen der IP Adresse des ursprünglichen Clients haben die Entwickler des Squid caching Proxy Servers das HTTP Header Feld X-Forwarded-For eingeführt. Dabei handelt es sich nicht um einen richtigen Standard sondern nur um einen Defacto Standard, der aber ganz gut akzeptiert ist. Ab der Version 0.9.3 ergänzt Membrane Monitor jetzt weitergeleitete HTTP Anfragen um dieses Feld. Damit Tomcat das Feld in eine Accesslog Datei schreibt mussten wir noch die Konfiguration für das AccessLogValve ändern. Damit die IP Adresse des Clients mit dem Wert von X-Forwarded-For ausgetauscht wird haben wir das Log Pattern combinded mit einzelnen Werten nachgebaut.

<Context>
<Valve className="org.apache.catalina.valves.AccessLogValve"
prefix="praxis-godesberg.de." suffix=".txt"
pattern='%{x-forwarded-for}i %l %u %t "%r" %s %b "%{referer}i" "%{user-agent}i"'/>
</Context>


Jetzt steht dem Betrieb mehrerer Web Server an einer festen IP nichts mehr im Weg. Zeit einen neuen Server zu bestellen :-) .

Mittwoch, 29. Juli 2009

Java Reverse Proxy

Der Prototyp des Java reverse Proxy für den Betrieb mehrere Server an einer festen IP-Adresse hatte zunächst noch ein wenig Performance Probleme. Nach einer Umstellung auf ein lazy on demand Lesen der Nachrichten gibt es durch den Proxy keine messbaren Verzögerungen mehr. Es kommt was über die Leitung geht. Lokal sind sogar ca. 5 MByte pro Sekunde möglich. Schade wir wollten eigentlich mal das Java NIO API ausprobieren. Nachdem die Performance absolut ok ist haben wir festgestellt, dass in den Logfiles jetzt immer 127.0.0.1 steht. Wir würden aber gerne wissen von wo unsere Seiten abgerufen werden. Für die Weitergabe der Requestor Adresse gibt es das X-Forwarded-For http Header Feld. Mal sehen. Ob das Feld von unserem Tomcat aus gelesen wird.

Freitag, 10. Juli 2009

Mehrere IP Adressen mit T-DSL Business?

Wir haben in der Firma einen T-DSL Business mit dem wir äußerst zufrieden sind. Für einen moderaten Preis haben wir ausreichend Konnektivität und können auch einen Server mit fester IP Adresse betreiben. Für den Web Server verwenden wir Apache Tomcat. Tomcat erlaubt viele virtuelle Server mit einer IP Adresse. Neben Tomcat möchten wir jedoch noch weitere Server wie Glassfish, JBoss und Apache HTTPd einsetzen, die jeweils auf einem eigenem Rechner laufen. Der sehr leistungsfähige Speedport W900V Router unterstützt NAT und ermöglicht Anfragen pro Port an einen speziellen Rechner zu senden. Dann läuft aber jeder Web Server auf einem anderen Port. Um jeden Server auf Port 80 betreiben zu können ist pro Server eine feste IP Adresse notwendig. Laut Hotline der Telekom (Gespräch vom 10.7.2009) kann man zu T-DSL aus technischen Gründen keine weiteren IP Adressen zukaufen. Bei Standleitungen ist das möglich. Allerdings ist eine Standleitung für uns noch überdimensioniert. Bis dahin benötigen wir eine Lösung für T-DSL Business. Da wir nur Web Server betreiben möchten, könnte ein HTTP Router Anfragen auf den Rechner mit der festen IP entgegennehmen und dann an andere Server verteilen.
Unser eigener Router unterstützt momentan nur ein Routing über den Pfadanteil einer URL. Über einen Custom Interceptor könnte man diesen jedoch um ein Routing auf der Basis des HTTP Host Headerfeldes erweitern. Nächste Woche werden wir das mal versuchen.