- PR -

URL のスラッシュ補完が動作しない

投稿者投稿内容
kozu
常連さん
会議室デビュー日: 2007/04/28
投稿数: 21
投稿日時: 2007-05-23 15:17
引用:


最初に聞けばよかったのですが、リバプロの上からスラッシュをつけないURLで
アクセスした場合、どのような画面が表示されます。




実は気になって調べておりました。
ただしパケットの中身を見て Location がどうなっているのかを確認する手立てに見当がつかず、苦慮している状況です。

○検証1
クライアントからIEを利用してリバプロにアクセスし、www2のコンテンツをGETする。

・NW図
CL → WAN → www1 → www2

・結果
http://www.xxxx.net/modules/news/ は表示できる。

www2 のアクセスログ
[23/May/2007:14:53:08 +0900] "GET /modules/news/ HTTP/1.1" 200 20199 "

http://www.xxxx.net/modules/news は表示できない。
クライアントのブラウズには ページを表示できません が表示される。
ただしwww2のログを確認すると、301は返っているようだ。

www2 のアクセスログ
[23/May/2007:14:53:13 +0900] "GET /modules/news HTTP/1.1" 301 243 "



恐らく、リバプロ (www1) の eth1 (Outside) or eth0 (Inside) で tcpdump -w を実施し、Ethereal を通したら見れるのかな?と試しておりましたが、Location がどうなっているのかまでは確認できていない状況です。

引き続き私の方でも調査を行いますが、アドバイスを頂ければ幸いです。


それでは、よろしくお願いします。

[ メッセージ編集済み 編集者: kozu 編集日時 2007-05-23 15:33 ]

[ メッセージ編集済み 編集者: kozu 編集日時 2007-05-23 15:37 ]
ゆうじゅん
ぬし
会議室デビュー日: 2004/01/16
投稿数: 347
投稿日時: 2007-05-23 15:46
引用:

恐らく、リバプロ (www1) の eth1 (Outside) or eth0 (Inside) で tcpdump -w を実施し、Ethereal を通したら見れるのかな?と試しておりましたが、Location がどうなっているのかまでは確認できていない状況です。



「tcpdump -w ファイル名」でファイルに出力した上で、Etherealで読み込めばHTTPヘッダ情報が確認できますよ

あとIEのエラー画面はどのような情報が出力されていますか?
kozu
常連さん
会議室デビュー日: 2007/04/28
投稿数: 21
投稿日時: 2007-05-23 15:57
引用:


「tcpdump -w ファイル名」でファイルに出力した上で、Etherealで読み込めばHTTPヘッダ情報が確認できますよ




ご指摘の通り、tcpdump -w で下記の情報を得る事が出来ました。

HTTP/1 .1 301 Moved Per manently

ただし、body部は見れないんですね。。
Location が実際にはどうなっているのかを確認したかったのですが。


引用:

あとIEのエラー画面はどのような情報が出力されていますか?



IEには ページが表示できません と返されます。

「ページが表示できません」と返されるのは何かがおかしいですね。。。

もしかして、クライアントからリバプロに対して2度目の GET は実施されていないのでしょうか?

あくまでも仮定ですが、Location は http://172.16.1.16/modules/news/ となってる事は考えられますかね?


ゆうじゅん
ぬし
会議室デビュー日: 2004/01/16
投稿数: 347
投稿日時: 2007-05-23 16:10
引用:

ご指摘の通り、tcpdump -w で下記の情報を得る事が出来ました。

HTTP/1 .1 301 Moved Per manently

ただし、body部は見れないんですね。。
Location が実際にはどうなっているのかを確認したかったのですが。



申し訳ない「tcpdump -s 1600 -w ファイル名」でキャプチャすればbody部も見れるはずです。
kozu
常連さん
会議室デビュー日: 2007/04/28
投稿数: 21
投稿日時: 2007-05-23 16:13
body 部の確認方法ありがとうございます。



仮定は確信に変わりました orz


一時的にグローバルからの telnet http://www.xxxx.net 80 を www2 へリダイレクトするように設定を変更し、GET /modules/news HTTP/1.0 を実施してみました。

その結果、Location は BalancerMember で指定したローカル IPで記録されておりました。

Location: http://172.16.1.16/modules/news/

次に BalancerMember http://172.16.1.16http://www.xxxx.net に変更した所、正常にアクセスが行えるようになりました。
※hosts で http://www.xxxx.net = 172.16.1.16 となるように一時的に修正済

対策としては、グローバルから参照できるバックエンドサーバ用のFQDNを2つ追加し、BalancerMember ではローカルIPではなくFQDNで指定するといった所でしょうか。


参りました^^;


対策として、何か良いアイディアはありそうでしょうか?

[ メッセージ編集済み 編集者: kozu 編集日時 2007-05-23 16:18 ]
ゆうじゅん
ぬし
会議室デビュー日: 2004/01/16
投稿数: 347
投稿日時: 2007-05-23 16:47
mod_proxy_balancerは使用したことがないのでなんとも言えませんが
よく見たら、ProxyPassReverseが記述されていないので、それが原因
ではないでしょうか?

ProxyPassReverse / balancer://WebCluster/

を記載したらどうなりますか?

[修正]
ちょっと調べてみましたが、以下のように記載しないとだめそうです。
ProxyPassReverse / http://172.16.1.15
ProxyPassReverse / http://172.16.1.16

[ メッセージ編集済み 編集者: ゆうじゅん 編集日時 2007-05-23 17:19 ]
kozu
常連さん
会議室デビュー日: 2007/04/28
投稿数: 21
投稿日時: 2007-05-24 10:15
引用:

よく見たら、ProxyPassReverseが記述されていないので、それが原因ではないでしょうか?

ProxyPassReverse / http://172.16.1.15
ProxyPassReverse / http://172.16.1.16



ゆうじゅん様のクリティカルヒット的なアドバイスで改善する事が出来ました!
本当にありがとうございました!


ProxyPassReverse が必要だったとは、迂闊でした。
mod_proxy_balancer は mod_proxy と関わりの深いモジュールである事を考えれば素直に納得です。


動作報告は下記の通りです。

○動作報告
最終的に、www1 の http.conf を下記のように書き換える。

<VirtualHost 192.168.10.3:80>
ServerName www.xxxx.net
ServerAdmin xxxx@xxxx.net
DirectorySlash On

CustomLog /var/log/apache2/access_log_www common
ErrorLog /var/log/apache2/error_log_www

ProxyRequests Off
ProxyPass / balancer://WebCluster/ timeout=2 lbmethod=bytraffic
<Proxy balancer://WebCluster>
BalancerMember http://172.16.1.15 loadfactor=10
BalancerMember http://172.16.1.16 loadfactor=10
</Proxy>
ProxyPassReverse / http://172.16.1.15/
ProxyPassReverse / http://172.16.1.16/

</VirtualHost>


※注意事項
ProxyPassReverse は http://172.16.1.16/ にしないと、Location に余計なスラッシュが含まれてしまうようです

ProxyPassReverse / http://172.16.1.16 の場合、
Location: http://www.xxxx.net//modules/news/ となり、
余計なスラッシュが付加される。

一方で。。。

ProxyPassReverse / http://172.16.1.16/ の場合、
Location: http://www.xxxx.net/modules/news/ となり、
意図した通りの挙動となる。




数日に渡りアドバイスを賜り、本当にありがとうございました。
また何かございましたらご相談させて頂きますので、その際にはよろしくお願い致します。

スキルアップ/キャリアアップ(JOB@IT)