Ein Proxyserver fungiert als zwischengeschalteter Server, der Anfragen zwischen einem Client und einem Server weiterreicht. Der Proxyserver speichert alle Interaktionen zwischen Client und Server und erstellt ein Protokoll der gesamten TCP-Kommunikation. So können Sie sämtliche Aktivitäten genau überwachen und müssen nicht auf den Hauptserver zugreifen.
Sie finden den Proxyserver im entsprechenden Installationsordner:
Sie können den Proxyserver verwenden, um alle Interaktionen zwischen Client und Server zu überwachen, unabhängig vom zugrunde liegenden Kommunikationsprotokoll. So können Sie beispielsweise die folgenden Protokolle überwachen:
Sie können den Proxyserver zum Beispiel zwischen zwei Anwendungen schalten, die über ein TCP/IP-Netzwerk kommunizieren, etwa einem Webbrowser und AEM. So können Sie genau überprüfen, was passiert, wenn Sie eine AEM-Seite anfordern.
Das Tool befindet sich im Ordner /opt/helpers Ihrer AEM-Installation. Geben Sie Folgendes ein, um es zu starten:
java -jar proxy.jar <host> <remoteport> <localport> [options]
In den folgenden Szenarien werden ein paar Einsatzzwecke demonstriert, für die das Proxyserver-Tool eingesetzt werden können:
Überprüfen von Cookies und ihren Werten
Der folgende beispielhafte Protokolleintrag enthält alle Cookies, die vom Client bei der sechsten Verbindung seit Proxystart gesendet wurden, und ihre Werte:
C-6-#000635 -> [Cookie: cq3session=7e39bc51-ac72-3f48-88a9-ed80dbac0693; Show=ShowMode; JSESSIONID=68d78874-cabf-9444-84a4-538d43f5064d ]
Überprüfen von Kopfzeilen und ihren Werten Der folgende beispielhafte Protokolleintrag zeigt, dass der Server eine „Keep-Alive“-Verbindung herstellen kann und die „Content-Length“-Kopfzeile richtig festgelegt wurde:
S-7-#000017 -> [Connection: Keep-Alive ]
...
S-7-#000107 -> [Content-Length: 124 ]
Überprüfen der Funktionsfähigkeit von Keep-Alive
Keep-Alive bedeutet, dass ein Client die Verbindung zum Server wiederverwendet, um mehrere Dateien zu transportieren (den Seiten-Code, Bilder, Stylesheets usw.). Ohne Keep-Alive muss der Client für jede Anfrage eine neue Verbindung aufbauen.
So überprüfen Sie, ob Keep-Alive funktioniert:
Finden verlorener Anfragen
Sollten Anfragen in einer komplexen Serverumgebung, zum Beispiel einer mit Firewall und Dispatcher, verloren gehen, können Sie den Proxyserver verwenden, um herauszufinden, wo die Anfrage verloren ging. In Fällen mit Firewall:
Hängende Anfragen
Gehen Sie wie folgt vor, wenn gelegentlich hängende Anfragen auftreten:
Die von proxy.jar erstellten Protokolleinträge haben das folgende Format:
[timestamp (optional)] [<b>C</b>lient|<b>S</b>erver]-[ConnectionNumber]-[BytePosition] ->[Character Stream]
So kann eine Web-Seitenanfrage zum Beispiel wie folgt aussehen:
C-0-#000000 -> [GET /author/prox.html?CFC_cK=1102938422341 HTTP/1.1 ]
Wenn eine Verbindung geschlossen wird, werden die folgenden Informationen protokolliert:
C-6-Finished: 758 bytes (1.0 kb/s)
S-6-Finished: 665 bytes (1.0 kb/s)
Hier werden die Anzahl der Bytes, die zwischen dem Client und dem Server bei der 6. Verbindung übertragen wurden, und die durchschnittliche Geschwindigkeit angegeben.
Lassen Sie uns eine einfache Vorlage durchgehen, die bei Anforderung folgenden Code erzeugt:
<html>
<head>
<title>Welcome</title>
</head>
<body>
Welcome to Playground<br>
<img src="/logo.gif">
</body>
</html>
Wenn AEM auf dem „localhost:4303“ ausgeführt wird, starten Sie den Server wie folgt:
java -jar proxy.jar localhost 4303 4444 -logfile test.log
Sie können ohne den Proxyserver auf den Server zugreifen (localhost:4303
), wenn Sie jedoch über localhost:4444
auf ihn zugreifen, protokolliert der Proxyserver die Kommunikation. Öffnen Sie einen Browser und rufen Sie eine Seite auf, die mit der vorherigen Vorlage erstellt wurde. Betrachten Sie anschließend die Protokolldatei.
Bis zur proxy.jar-Version 1.14 werden die Protokolleinträge einer Verbindung nicht synchronisiert, was bedeutet, dass die Protokolleinträge einer Client-/Server-Verbindung nicht zwangsläufig in der sequenziellen Reihenfolge angegeben sind. Bei neueren Versionen (ab 1.14) des Proxyservers tritt dieses Problem nicht auf.
Beim Starten werden die folgenden Informationen in das Protokoll geschrieben:
starting proxy for localhost:4303 on port 4444
using logfile: C:\CQUnify355default\opt\helpers\test.log
Die folgenden Kopfzeilenfelder werden beim Start der ersten Verbindung (0) aufgeführt, bei der die HTML-Hauptseite angefordert wird:
C-0-#000000 -> [GET /author/prox.html?CFC_cK=1102936796533 HTTP/1.1 ]
C-0-#000053 -> [Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, appl]
C-0-#000194 -> [ication/x-shockwave-flash, */* ]
C-0-#000227 -> [Accept-Language: de-ch ]
C-0-#000251 -> [Accept-Encoding: gzip, deflate ]
C-0-#000283 -> [User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) ]
C-0-#000347 -> [Host: localhost:4444 ]
Der Client fordert eine Keep-Alive-Verbindung an, damit der Server mehrere Dateien über dieselbe Verbindung senden kann:
C-0-#000369 -> [Connection: Keep-Alive ]
Der Proxyserver ist ein geeignetes Tool, um zu überprüfen, ob Cookies richtig eingestellt sind oder nicht. Nachfolgend können wir Folgendes sehen:
C-0-#000393 -> [Cookie: Show=ShowMode; cq3session=3bce15cf-1575-1b4e-8ea6-0d1a0c64738e; JSESSIONID=4161a56b-f193-d748-88a5-e09c5ff7ef2a ]
C-0-#000514 -> [ ]
S-0-#000000 -> [HTTP/1.0 200 OK ]
Der Server schließt die Verbindung 0 nach der Anforderung. Eine Keep-Alive-Verbindung ist nicht möglich, da die Anforderung ein Fragezeichen enthält. Dies bedeutet, dass der Server keine Cache-gespeicherte Version zurückgeben und deshalb an diesem Punkt auch nicht die Länge des Inhalts bestimmen kann. Dies ist jedoch für eine Keep-Alive-Verbindung erforderlich.
S-0-#000017 -> [Connection: Close ]
S-0-#000036 -> [Server: Communique Servlet Engine/3.5.5 ]
S-0-#000077 -> [Content-Type: text/html;charset=iso-8859-1 ]
S-0-#000121 -> [Date: Tue, 14 Dec 2004 09:46:44 GMT ]
S-0-#000158 -> [Set-Cookie: JSESSIONID=4161a56b-f193-d8-88a5-e09c5ff7ef2a;Path=/author ]
S-0-#000232 -> [ ]
Hier beginnt der Server, den HTML-Code über die Verbindung 0 zu senden:
S-0-#000234 -> [<html> ]
S-0-#000242 -> [.<head> ]
S-0-#000251 -> [..<title>Welcome</title> ]
S-0-#000277 -> [.</head> ]
S-0-#000287 -> [.<body> ]
S-0-#000296 -> [..Welcome to Playground<br> ]
S-0-#000325 -> [..<img src="/author/logo.gif"> ]
S-0-#000357 -> [.</body> ]
S-0-#000367 -> [</html>]
Die Verbindung 0 wird unmittelbar nach der Bereitstellung der HTML-Datei geschlossen:
C-0-Finished: 516 bytes (0.0 kb/s)
S-0-Finished: 374 bytes (0.0 kb/s)
Nun wird die Ausgabe für die Verbindung 1 gestartet, wobei das im HTML-Code enthaltene Bild heruntergeladen wird:
C-1-#000000 -> [GET /author/logo.gif HTTP/1.1 ]
C-1-#000031 -> [Accept: */* ]
C-1-#000044 -> [Referer: http://localhost:4444/author/prox.html?CFC_cK=1102936796533 ]
C-1-#000114 -> [Accept-Language: de-ch ]
C-1-#000138 -> [Accept-Encoding: gzip, deflate ]
C-1-#000170 -> [User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) ]
C-1-#000234 -> [Host: localhost:4444 ]
Der Client fordert erneut eine Keep-Alive-Verbindung an:
C-1-#000256 -> [Connection: Keep-Alive ]
C-1-#000280 -> [Cookie: Show=ShowMode; cq3session=3bce15cf-1575-1b4e-8ea6-0d1a0c64738e; JSESSIONID=4161a56b-f193-d748-88a5-e09c5ff7ef2a ]
C-1-#000401 -> [ ]
S-1-#000000 -> [HTTP/1.0 200 OK ]
Für die Verbindung 1 kann der Server eine Keep-Alive-Verbindung bereitstellen, da das Bild statisch und somit die Länge des Inhalts bekannt ist.
S-1-#000017 -> [Connection: Keep-Alive ]
S-1-#000041 -> [Server: Communique Servlet Engine/3.5.5 ]
S-1-#000082 -> [Content-Type: image/gif ]
Der Server gibt die Länge des Inhalts des Bilds über die Verbindung 1 zurück:
S-1-#000107 -> [Content-Length: 124 ]
S-1-#000128 -> [Date: Tue, 14 Dec 2004 09:46:44 GMT ]
S-1-#000165 -> [ ]
Nun da die Länge des Inhalts festgelegt ist, sendet der Server die Bilddaten über die Verbindung 1:
S-1-#000167 -> [GIF87a..........................,.......
...I....0.A..8......YDA.W...1..`i.`..6...Z...$@.F..)`..f..A.....iu.........$..;]
Nach Erreichen des Keep-Alive-Timeouts wird die Verbindung 1 ebenfalls geschlossen:
S-1-Finished: 291 bytes (0.0 kb/s)
C-1-Finished: 403 bytes (0.0 kb/s)
Das obige Beispiel ist verhältnismäßig einfach, da die beiden Verbindungen nacheinander aufgebaut werden:
In der Praxis generiert eine Seite möglicherweise viele parallele Anforderungen für Bilder, Stylesheets, JavaScript-Dateien usw. Dies bedeutet, dass die Protokolle sich überlappende Einträge von parallel geöffneten Verbindungen haben. In diesem Fall empfehlen wir der Lesbarkeit halber, die Option „-i“ zu verwenden.