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.
Den Proxyserver in Ihrer AEM-Installation finden Sie hier:
crx-quickstart/opt/helpers/proxy-2.1.jar
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 CQ-Seite anfragen.
Starten Sie den Server über eine Befehlszeile:
java -jar proxy-2.1.jar <host> <remoteport> <localport> [options]
Parameter
<host>
Hierbei handelt es sich um die Hostadresse der CRX-Instanz, zu der Sie eine Verbindung aufbauen möchten. Wenn sich die Instanz auf Ihrem lokalen Computer befindet, lautet sie localhost
.
<remoteport>
Hierbei handelt es sich um den Port der CRX-Zielinstanz. Der Standardport für eine neue AEM-Installation lautet zum Beispiel 4502
und der Standardport für eine neue AEM-Erstellungsinstanz 4502
.
<localport>
Dies ist der Port auf Ihrem lokalen Computer, zu dem Sie eine Verbindung aufbauen, um über den Proxy auf die CRX-Instanz zuzugreifen.
Optionen
-q
(leiser Modus)
Die Ausgabe wird nicht in das Konsolenfenster geschrieben. Verwenden Sie die Option, wenn Sie die Verbindung entlasten möchten oder wenn Sie die Ausgabe in einer Datei protokollieren (siehe Option „-logfile“).
-b
(binärer Modus)
Aktivieren Sie den binären Modus, wenn Sie nach bestimmten Bytekombinationen im Datenverkehr suchen. Die Ausgabe enthält anschließend die Hexadezimal- und Zeichenausgabe.
-t
(Zeitstempel für Protokolleinträge)
Fügt jedem Eintrag im Protokoll einen Zeitstempel hinzu. Der Zeitstempel wird in Sekunden angegeben, weshalb er möglicherweise nicht zur Prüfung einzelner Anfragen geeignet ist. Verwenden Sie die Option, um Ereignisse ausfindig zu machen, die zu einem bestimmten Zeitpunkt erfolgt sind, wenn Sie den Proxyserver über einen längeren Zeitraum nutzen.
-logfile <filename>
(Schreiben in Protokolldatei)
Schreibt die Interaktionen zwischen Client und Server in eine Protokolldatei. Dieser Parameter kann auch im stillen Modus genutzt werden.
-i <numIndentions>
(Einzug hinzufügen)
Die einzelnen Verbindungen werden für eine bessere Lesbarkeit eingezogen. Der Standardwert beträgt 16 Ebenen. Diese Funktion wurde mit proxy.jar version 1.16
eingeführt.
Die von proxy-2.1.jar erstellten Protokolleinträge haben das folgende Format:
[timestamp (optional)] [Client|Server]-[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 ]
[GET <?>]
ist der Inhalt der Anfrage, im Beispiel eine der HTTP-Kopfzeilen (URL).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 (C
) und dem Server (S
) bei der 6. Verbindung übertragen wurden, und die durchschnittliche Geschwindigkeit angegeben.
Beispiel für eine Protokollausgabe
Stellen Sie sich als Beispiel eine Seite vor, die bei einer Anfrage den folgenden Code ausgibt:
Stellen Sie sich als Beispiel ein sehr einfaches HTML-Dokument vor, das sich im Repository unter
/content/test.html
befindet, zusammen mit einer Bilddatei unter
/content/test.jpg
Der Inhalt von test.html
ist:
<html>
<head>
<title>Test</title>
</head>
<body>
Test<br>
<img src="test.jpg">
</body>
</html>
Wenn wir davon ausgehen, dass die AEM-Instanz auf localhost:4502
ausgeführt wird, starten wir den Proxy wie folgt:
java -jar proxy.jar localhost 4502 4444 -logfile test.log
Auf die CQ-/CRX-Instanz kann nun über den Proxy unter localhost:4444
zugegriffen werden und sämtliche Kommunikation über diesen Port wird im Protokoll test.log
erfasst.
Wenn Sie sich nun die Ausgabe des Proxys ansehen, können Sie die Interaktion zwischen dem Browser und der AEM-Instanz beobachten.
Beim Start erfolgt die folgende Ausgabe über den Proxy:
starting proxy for localhost:4502 on port 4444
using logfile: <some-dir>/crx-quickstart/opt/helpers/test.log
Wenn Sie anschließend einen Browser öffnen und auf die Testseite unter
http://localhost:4444/content/test.html
zugreifen, sehen Sie, dass der Browser eine GET
-Anfrage für die folgende Seite tätigt:
C-0-#000000 -> [GET /content/test.html HTTP/1.1 ]
C-0-#000033 -> [Host: localhost:4444 ]
C-0-#000055 -> [Connection: keep-alive ]
C-0-#000079 -> [User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_4) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.57 Safari/536.11 ]
C-0-#000212 -> [Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 ]
C-0-#000285 -> [Accept-Encoding: gzip,deflate,sdch ]
C-0-#000321 -> [Accept-Language: en-US,en;q=0.8 ]
C-0-#000354 -> [Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3 ]
C-0-#000402 -> [Cookie: login-token=179ba6bd-e0a7-4909-a965-e11c7f2bc2fc%3a618bd8a8-fbaf-43c5-827d-c84c62248c5e_22ee860cc9036fee%3acrx.default%3b21148fb0-eb6c]
C-0-#000543 -> [-43c9-a2b9-c8d40618d8ae%3ad87a3d1a-5e9a-4d5a-bab1-0ee60ad6d8df_d0e4ddce0fcd84b6%3acrx.default%3b5cb95227-ea51-47bf-850b-68ad1dfd7297%3af3bbb6]
C-0-#000684 -> [59-7913-4285-8857-832c087bafd5_c484727d3b3665ad%3acrx.default; ys-cq-siteadmin-tree=o%3Awidth%3Dn%253A240%5EselectedPath%3Ds%253A/content ]
C-0-#000824 -> [ ]
Die AEM-Instanz antwortet mit den Inhalten der Datei test.html
:
S-0-#000000 -> [HTTP/1.1 200 OK ]
S-0-#000017 -> [Connection: Keep-Alive ]
S-0-#000041 -> [Server: Day-Servlet-Engine/4.1.24 ]
S-0-#000077 -> [Content-Type: text/html;charset=utf-8 ]
S-0-#000116 -> [Content-Length: 104 ]
S-0-#000137 -> [Date: Mon, 16 Jul 2012 11:23:38 GMT ]
S-0-#000174 -> [Last-Modified: Mon, 16 Jul 2012 11:19:27 GMT ]
S-0-#000220 -> [ ]
S-0-#000222 -> [<html>]
S-0-#000229 -> [<head>]
S-0-#000236 -> [ <title>Test</title>]
S-0-#000260 -> [</head> ]
S-0-#000269 -> [<body>]
S-0-#000276 -> [ Test<br>]
S-0-#000286 -> [ <img src="test.jpg">]
S-0-#000311 -> [</body>]
S-0-#000319 -> [</html>]
In den folgenden Szenarien werden einige Einsatzzwecke für die Proxyserver demonstriert:
Ü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 ist eine Funktion von HTTP, die es einem Client ermöglicht, eine TCP-Verbindung zum Server wiederzuverwenden, um mehrere Anfragen zu tätigen (für 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: