- - PR -
URL のスラッシュ補完が動作しない
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 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 は追加済 | ||||||||
|
投稿日時: 2007-05-22 16:51
www1サーバのアクセスログにはどのようなログが残っていますか?
また、www2サーバのhttpd.confのServerを以下のように設定したらどうなりますか? ServerName www.xxxx.net | ||||||||
|
投稿日時: 2007-05-22 17:05
早速のご回答ありがとうございます。
・301 が返されます。 GET しているのは本当に存在するディレクトリではありますけれども、リクエストが返されません。 なお、http://www.xxxx.net/modules/news/ というように、最後にスラッシュをつけると正常に応答が得られます。 [22/May/2007:16:16:59 +0900] "GET /modules/news HTTP/1.1" 301 243
既に設定済です。 正しくは下記のように設定しております。 ・www2 に追加してある設定 ServerName www.xxxx.net:80 以上、よろしくお願いします。 [ メッセージ編集済み 編集者: kozu 編集日時 2007-05-22 17:07 ] | ||||||||
|
投稿日時: 2007-05-22 17:56
www2サーバに対して直接スラッシュなしのURLでアクセスしたらどうなりますか?
また、telnetで接続して「GET /modules/news HTTP/1.0」を発行したら どんな結果が返ってきますか? | ||||||||
|
投稿日時: 2007-05-22 20:23
今までグローバル経由でしかアクセスできない環境におりましたが、
先ほどローカル環境からアクセスできる場所に移動してまいりました。 さて、本題の回答です。
意図したとおりに mod_dir が稼動し、スラッシュが補完されてアクセスが行えます。 なお、適当なクライアントからIEを使用し、下記URLへアクセスして検証いたしました。 http://172.16.1.15/module/news
・localhost に対して GET /modules/news HTTP/1.0 を実行した結果 補完されず、301 のエラーコードが返ります。 ・localhost に対して GET /modules/news/ HTTP/1.0 を実行した結果 意図したとおりのコンテンツをGETしてきます。 さて、とりあえず試しましたが、そろそろ意図をお伺いできると幸いです。 以上、よろしくお願いします。 [ メッセージ編集済み 編集者: kozu 編集日時 2007-05-22 20:33 ] | ||||||||
|
投稿日時: 2007-05-23 10:07
>さて、とりあえず試しましたが、そろそろ意図をお伺いできると幸いです。 以前、同じような現象があったのですが、その時はスラッシュの補完はされて いたのですが、locationヘッダに変な情報が設定されていたため、301のエラー が発生していましたので、同様の原因ではないかと思い、原因の切り分けするため にいろいろお願いいたしました。 気になるのが、 >localhost に対して GET /modules/news HTTP/1.0 を実行した結果 >補完されず、301 のエラーコードが返ります。 これは、www2サーバで実行したのでしょうか? もし実行したのであれば、実行結果にHTTPヘッダが表示されているはずなので その結果を教えていただけないでしょうか | ||||||||
|
投稿日時: 2007-05-23 13:26
ご回答ありがとうございます。
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. 残る問題と言えば、リバースプロキシを介してスラッシュの付加が行なえる為にはどうすればいいかという事でしょうか。 | ||||||||
|
投稿日時: 2007-05-23 14:12
すみません、もう1点だけ確認させてください。
最初に聞けばよかったのですが、リバプロの上からスラッシュをつけないURLで アクセスした場合、どのような画面が表示されます。 おそらくステータス301のエラーが表示されていると思いますが、Location には 何が設定されていますでしょうか? アクセスログでステータス301が返っているので、スラッシュの補完自体は動作 しているとは思います。 ちなみに、こちらではLBで負荷分散したリバプロを通して、スラッシュの補完 が動作しているのは確認しています。 |