- PR -

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

投稿者投稿内容
kozu
常連さん
会議室デビュー日: 2007/04/28
投稿数: 21
投稿日時: 2007-05-22 16:28
○質問内容
mo_dir で提供されるはずの機能である URL のスラッシュ補完が動作しません。

http://www.xxxx.net/testdir

http://www.xxxx.net/testdir/
※上記のようにならない。

恐らく mod_proxy_balancer を介している為に mod_dir が稼動しないのではないか?と仮定しておりますが、合っておりますでしょうか?
その場合、mod_rewrite での URL 書き換えが必要かと考えておりますが、他に良いアイディアはございますでしょうか。
皆様のお知恵を拝借したく投稿させて頂きました。
よろしくお願いします。


○利用環境
・www1
Debian sarge 3.1r5
kernel/2.6.8
Apache/2.2.4 (ソースからコンパイルでインストール)

・www2
vine4.1
kernel/2.6.16
Apache/2.2.3 (apt 経由でインストール)

・NW構成図
rooter
|
www1 (リバースプロキシとして稼動)
|
www2 (コンテンツを返すサーバとして稼動)


○設定について
・www1 の httpd.conf 抜粋

<VirtualHost 192.168.10.3:80>
ServerName www.xxxx.net
ServerAdmin xxx@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>
</VirtualHost>


・www2 の httpd.conf
DirectorySlash On は追加済
ゆうじゅん
ぬし
会議室デビュー日: 2004/01/16
投稿数: 347
投稿日時: 2007-05-22 16:51
www1サーバのアクセスログにはどのようなログが残っていますか?

また、www2サーバのhttpd.confのServerを以下のように設定したらどうなりますか?
ServerName www.xxxx.net

kozu
常連さん
会議室デビュー日: 2007/04/28
投稿数: 21
投稿日時: 2007-05-22 17:05
早速のご回答ありがとうございます。

引用:

ゆうじゅんさんの書き込み (2007-05-22 16:51) より:
www1サーバのアクセスログにはどのようなログが残っていますか?


・301 が返されます。
GET しているのは本当に存在するディレクトリではありますけれども、リクエストが返されません。
なお、http://www.xxxx.net/modules/news/ というように、最後にスラッシュをつけると正常に応答が得られます。

[22/May/2007:16:16:59 +0900] "GET /modules/news HTTP/1.1" 301 243

引用:

また、www2サーバのhttpd.confのServerを以下のように設定したらどうなりますか?
ServerName http://www.xxxx.net



既に設定済です。
正しくは下記のように設定しております。

・www2 に追加してある設定
ServerName www.xxxx.net:80


以上、よろしくお願いします。

[ メッセージ編集済み 編集者: kozu 編集日時 2007-05-22 17:07 ]
ゆうじゅん
ぬし
会議室デビュー日: 2004/01/16
投稿数: 347
投稿日時: 2007-05-22 17:56
www2サーバに対して直接スラッシュなしのURLでアクセスしたらどうなりますか?

また、telnetで接続して「GET /modules/news HTTP/1.0」を発行したら
どんな結果が返ってきますか?
kozu
常連さん
会議室デビュー日: 2007/04/28
投稿数: 21
投稿日時: 2007-05-22 20:23
今までグローバル経由でしかアクセスできない環境におりましたが、
先ほどローカル環境からアクセスできる場所に移動してまいりました。

さて、本題の回答です。


引用:

www2サーバに対して直接スラッシュなしのURLでアクセスしたらどうなりますか?


意図したとおりに mod_dir が稼動し、スラッシュが補完されてアクセスが行えます。

なお、適当なクライアントからIEを使用し、下記URLへアクセスして検証いたしました。
http://172.16.1.15/module/news


引用:

また、telnetで接続して「GET /modules/news HTTP/1.0」を発行したら
どんな結果が返ってきますか?



・localhost に対して GET /modules/news HTTP/1.0 を実行した結果
補完されず、301 のエラーコードが返ります。

・localhost に対して GET /modules/news/ HTTP/1.0 を実行した結果
意図したとおりのコンテンツをGETしてきます。


さて、とりあえず試しましたが、そろそろ意図をお伺いできると幸いです。

以上、よろしくお願いします。

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

>さて、とりあえず試しましたが、そろそろ意図をお伺いできると幸いです。
以前、同じような現象があったのですが、その時はスラッシュの補完はされて
いたのですが、locationヘッダに変な情報が設定されていたため、301のエラー
が発生していましたので、同様の原因ではないかと思い、原因の切り分けするため
にいろいろお願いいたしました。

気になるのが、

>localhost に対して GET /modules/news HTTP/1.0 を実行した結果
>補完されず、301 のエラーコードが返ります。

これは、www2サーバで実行したのでしょうか?
もし実行したのであれば、実行結果にHTTPヘッダが表示されているはずなので
その結果を教えていただけないでしょうか

kozu
常連さん
会議室デビュー日: 2007/04/28
投稿数: 21
投稿日時: 2007-05-23 13:26
ご回答ありがとうございます。

引用:


>localhost に対して GET /modules/news HTTP/1.0 を実行した結果
>補完されず、301 のエラーコードが返ります。

これは、www2サーバで実行したのでしょうか?
もし実行したのであれば、実行結果にHTTPヘッダが表示されているはずなので
その結果を教えていただけないでしょうか




www2 サーバ上で実行いたしました。
よくよく確認すると、301 + Location でスラッシュが付加されておりました。

# telnet localhost 80
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
GET /modules/news HTTP/1.0

HTTP/1.1 301 Moved Permanently
Date: Wed, 23 May 2007 02:49:24 GMT
Server: Apache
Location: http://www.xxxx.net/modules/news/
Content-Length: 243
Connection: close
Content-Type: text/html; charset=iso-8859-1

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>301 Moved Permanently</title>
</head><body>
<h1>Moved Permanently</h1>
<p>The document has moved <a href="http://www.xxxx.net/modules/news/">here</a>.</p>
</body></html>
Connection closed by foreign host.


残る問題と言えば、リバースプロキシを介してスラッシュの付加が行なえる為にはどうすればいいかという事でしょうか。
ゆうじゅん
ぬし
会議室デビュー日: 2004/01/16
投稿数: 347
投稿日時: 2007-05-23 14:12
すみません、もう1点だけ確認させてください。
最初に聞けばよかったのですが、リバプロの上からスラッシュをつけないURLで
アクセスした場合、どのような画面が表示されます。

おそらくステータス301のエラーが表示されていると思いますが、Location には
何が設定されていますでしょうか?

アクセスログでステータス301が返っているので、スラッシュの補完自体は動作
しているとは思います。

ちなみに、こちらではLBで負荷分散したリバプロを通して、スラッシュの補完
が動作しているのは確認しています。

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