プロキシサーバは、クライアントとサーバとの間で要求を中継する中間サーバとして機能します。 プロキシサーバは、すべてのクライアントとサーバとのやり取りを追跡し、TCP 通信全体のログを出力します。 これにより、メインサーバーにアクセスしなくても、何が起こっているかを正確に監視できます。
プロキシサーバーは、適切なインストールフォルダーにあります。
プロキシサーバーを使用すると、基になる通信プロトコルに関係なく、クライアントとサーバーの間のすべてのやり取りを監視できます。 例えば、次のプロトコルを監視できます。
例えば、TCP/IP ネットワークを介して通信する 2 つのアプリケーション (Web ブラウザーとAEMなど ) 間にプロキシサーバーを配置できます。 これにより、AEMページをリクエストしたときの動作を正確に監視できます。
このツールは、AEM インストール環境の /opt/helpers フォルダーにあります。このツールを起動するには、次のように入力します。
java -jar proxy.jar <host> <remoteport> <localport> [options]
次のシナリオは、プロキシサーバーツールの用途の一部を示しています。
Cookie とその値の確認
次のログエントリの例は、プロキシの開始後に開かれた 6 番目の接続でクライアントが送信したすべての cookie とその値を示しています。
C-6-#000635 -> [Cookie: cq3session=7e39bc51-ac72-3f48-88a9-ed80dbac0693; Show=ShowMode; JSESSIONID=68d78874-cabf-9444-84a4-538d43f5064d ]
ヘッダーとその値の確認 次のログエントリの例は、サーバーがキープアライブ接続を確立でき、コンテンツの長さのヘッダーが正しく設定されたことを示しています。
S-7-#000017 -> [Connection: Keep-Alive ]
...
S-7-#000107 -> [Content-Length: 124 ]
キープアライブが機能するかどうかの確認
キープアライブ とは、クライアントがサーバーへの接続を再利用して、複数のファイル(ページコード、画像、スタイルシートなど)を転送することを意味します。 キープアライブを使用しない場合、クライアントはリクエストごとに新しい接続を確立する必要があります。
キープアライブが機能するかどうかを確認するには:
失われたリクエストの検索
複雑なサーバー設定(ファイアウォールや Dispatcher を使用している場合など)でリクエストが失われた場合、プロキシサーバーを使用して、リクエストが失われた場所を特定できます。 ファイアウォールがある場合:
要求のハング
リクエストが時々ハングする場合:
proxy.jar によって生成されるログエントリは、すべて次の形式になります。
[timestamp (optional)] [<b>C</b>lient|<b>S</b>erver]-[ConnectionNumber]-[BytePosition] ->[Character Stream]
例えば、Web ページのリクエストは次のようになります。
C-0-#000000 -> [GET /author/prox.html?CFC_cK=1102938422341 HTTP/1.1 ]
接続を閉じると、次の情報がログに記録されます。
C-6-Finished: 758 bytes (1.0 kb/s)
S-6-Finished: 665 bytes (1.0 kb/s)
これは、6 番目の接続で、平均速度でクライアントとサーバーの間で渡されたバイト数を示します。
要求された場合に次のコードを生成する簡単なテンプレートを確認します。
<html>
<head>
<title>Welcome</title>
</head>
<body>
Welcome to Playground<br>
<img src="/logo.gif">
</body>
</html>
AEMが localhost:4303 で実行されている場合は、次のようにプロキシサーバーを起動します。
java -jar proxy.jar localhost 4303 4444 -logfile test.log
サーバーにアクセスできます (localhost:4303
) を使用しますが、 localhost:4444
に設定すると、プロキシサーバーは通信をログに記録します。 ブラウザーを開き、上記のテンプレートを使用して作成されたページにアクセスしてください。その後、ログファイルを確認します。
proxy.jar バージョン 1.14 までは、1 つの接続のログエントリは同期されません。つまり、1 つのクライアント/サーバー接続のログエントリが正しい順序で必要ないことを意味します。 プロキシサーバーの新しいバージョン (>=1.14) には、この問題はありません。
起動時に、次の情報がログに書き込まれます。
starting proxy for localhost:4303 on port 4444
using logfile: C:\CQUnify355default\opt\helpers\test.log
メイン接続ページをリクエストする最初の接続 (0) の開始時に、次のヘッダーフィールドがHTMLされます。
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 ]
クライアントはキープアライブ接続を要求するので、サーバーは同じ接続を介して複数のファイルを送信できます。
C-0-#000369 -> [Connection: Keep-Alive ]
プロキシサーバーは、Cookie が正しく設定されているかどうかを確認するのに適したツールです。 ここでは、次の情報が表示されます。
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 ]
要求後、サーバーは接続 0 を閉じます。 リクエストに疑問符が含まれているので、キープアライブはできません。 つまり、サーバーはキャッシュされたバージョンを返せないので、この時点でのコンテンツの長さを判断できません。これはキープアライブ接続に必要です。
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 -> [ ]
ここでは、サーバーが接続 0 でHTMLコードの送信を開始します。
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>]
接続 0 は、HTML・ファイルが提供された直後に閉じます。
C-0-Finished: 516 bytes (0.0 kb/s)
S-0-Finished: 374 bytes (0.0 kb/s)
これで、接続 1 の出力が開始し、接続コードに含まれる画像がダウンロードされます。HTML1:
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 ]
この場合も、クライアントはキープアライブ接続を要求します。
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 ]
接続 1 では、画像が静的なのでコンテンツの長さがわかるので、サーバーはキープアライブを提供できます。
S-1-#000017 -> [Connection: Keep-Alive ]
S-1-#000041 -> [Server: Communique Servlet Engine/3.5.5 ]
S-1-#000082 -> [Content-Type: image/gif ]
サーバーが接続 1 の画像のコンテンツ長を返します。
S-1-#000107 -> [Content-Length: 124 ]
S-1-#000128 -> [Date: Tue, 14 Dec 2004 09:46:44 GMT ]
S-1-#000165 -> [ ]
コンテンツの長さが確立されたので、サーバーは接続 1 で画像データを送信します。
S-1-#000167 -> [GIF87a..........................,.......
...I....0.A..8......YDA.W...1..`i.`..6...Z...$@.F..)`..f..A.....iu.........$..;]
キープアライブタイムアウトに達すると、接続 1 も閉じます。
S-1-Finished: 291 bytes (0.0 kb/s)
C-1-Finished: 403 bytes (0.0 kb/s)
上記の例は、2 つの接続が順番に発生するので、比較的簡単です。
実際には、ページは、画像、スタイルシート、JavaScript ファイルなどに対して、多数の並列リクエストを生成する場合があります。 つまり、ログには、並列オープン接続の重複するエントリが存在します。 この場合、Adobeでは、読みやすさを向上させるために —i オプションを使用することをお勧めします。