質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Apache

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

Q&A

解決済

3回答

7700閲覧

301 Moved Permanently 時の転送先がIPアドレスになる

Fujihara

総合スコア7

Apache

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

0グッド

0クリップ

投稿2016/11/29 02:10

一般的にWEBアクセス時のURLでディレクトリの最後のスラッシュをつけないでアクセスした際、自動的にスラッシュ付のURLに転送されるようになっていると思います。

自動転送時に発生しているレスポンスを見たところ、以下のようになっていました。

HTTP/1.1 301 Moved Permanently Date: Tue, 29 Nov 2016 01:48:58 GMT Server: Apache Location: http://www.xxxxxxxx.com/news/ Content-Length: 236 Content-Type: text/html; charset=iso-8859-1 Keep-Alive: timeout=15, max=100 Connection: Keep-Alive <!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://aaa.bbb.ccc.ddd:80/news/">here</a>.</p> </body></html>

httpd.conf の ServerNameディレクティブには www.xxxxxxxx.com を設定してあって、ヘッダ部の Location では正しくホスト名が表示されているのですが、本文内の転送先URLがIPで表示されてしまっている状況です。

いろいろ他の設定を見てみましたが、なぜこのように出るのか、どこの設定で修正できるか教えていただけませんでしょうか。
Server version: Apache/2.2.xx (CentOS)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

IPアドレスaaa.bbb.ccc.dddは間違いなく www.xxxxxxxx.comのものなのでしょうか?
ReverseProxyで別のサーバーが返していたりしませんか?
で、Locationヘッダーはきちんとケアされwww.xxxxxxxx.comになるが 301のresponse bodyはケアされずそのままとか。

強引ですが、www.xxxxxxxx.comの httpd.conf で SubStituteモジュールを使用しresponce bodyの//aaa.bbb.ccc.ddd///www.xxxxxxxx.com/に置き換えることが可能です。
(ただし置換処理が常に入るので使用しない場合に比べてサーバーリソースを食います)

Substitute s|//aaa.bbb.ccc.ddd/|//www.xxxxxxxx.com/|f

ただし問答無用で置き換えるので//aaa.bbb.ccc.ddd/という文字列をレスポンスとして返したい場合でも置き換えられてしまいます。

投稿2016/11/29 03:46

編集2016/11/29 04:04
Y.H.

総合スコア7914

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Fujihara

2016/11/29 03:51

今、サーバを確認していたところ、どうやらリバースプロキシが存在しているようです。 このあたり、、、リバースプロキシ以下のサーバの場合、どうすればいいんだろう。。。 何となく調べる手立てがありそうな気がしてきました!
Fujihara

2016/11/29 04:36

SubStituteモジュールって見たことなかったです。 んー、なかなか強引な気もしますし、悩むところです。 表示されてるIPはサーバ内部のローカルIP(10.xx.?)なのか、判断がつかないようなIPでした。ルータとかで変換してるのかなぁ・・・ そもそも、このIPを出してる仕組みが分かれば対処できそうにも思えるのですが、このレベルになるとapache側でどうこうできる問題ではないような気がしてきました。。。
Y.H.

2016/11/29 04:46

「このIPを出してる仕組み」(httpステータス 3xx/4xx/5xx の既定のresponse body)はapacheの実装レベル(ソースファイル)で持っていて ServerNameディレクティブ(またはそれに準じるもの ServerAliasなど)を当て込んでいるようです。
Fujihara

2016/11/29 05:00

ServerNameディレクティブは確認済みでした。それがヘッダ部の Location: に表れてました。 しかしボディ側はどうやら異なるみたいです。
Y.H.

2016/11/29 05:05 編集

「ServerNameディレクティブ」はReverseProxyしている先のwebサーバー(apache?)の設定ですよ? IPアドレスの response bodyを出力しているのはReverseProxyしている先のwebサーバーなので。
Fujihara

2016/11/29 05:14

失礼しました! となりますと、やはりリバースプロキシサーバ側に依頼するしかないということですね... ありがとうございました。リバースプロキシの方は触る権限を持っていないので、一旦対応できるか依頼してみようと思います。 とても詳細にご確認いただき助かりました。 ありがとうございました。
guest

0

Apache は分かりませんが、IIS では終了スラッシュのないフォルダが要求されると自動的にリダイレクトされます。

[IIS] 終了スラッシュのないフォルダが要求されると自動的にリダイレクトされる
https://support.microsoft.com/ja-jp/kb/298408

Apache も同じことではないかと・・・

何にせよブラウザは関係なくて、Web サーバーの仕様・設定によるはずです。

ちなみに IIS7 では、例えば、http://surferonwww.info/BlogEngine(BlogEngine はフォルダ)という要求をかけると 301 応答が返ってきて、ヘッダの Locaton、コンテンツの a 要素の href 属性とも IP ではなく、以下の通りホスト名になります。

HTTP/1.1 301 Moved Permanently Content-Type: text/html; charset=UTF-8 Location: http://surferonwww.info/BlogEngine/ X-Powered-By: ASP.NET Date: Tue, 29 Nov 2016 03:25:18 GMT Content-Length: 236 <head> <title>ドキュメント移動</title> </head> <body> <h1>オブジェクトは移動しました</h1> このドキュメントは<a HREF="http://surferonwww.info/BlogEngine/">ここ</a>で見つかる可能性があります </body>

質問者さんの Web サーバーの場合、何故コンテンツの a 要素の href 属性が IP アドレスになるのかは分かりませんが、ブラウザは 301 応答を受けると直ちにヘッダの Location に指定された URL を GET 要求に行くので、そのままで実害はなさそうですが?

投稿2016/11/29 03:37

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Fujihara

2016/11/29 03:49

ありがとうございます! やはりWebサーバー仕様ですよね... もちろん、現状でも正常動作しており実害があるわけではないのですが、サーバーの内部IPが外部に出てしまうのが嫌でセキュリティ上隠したいということなのです。 これは、Apacheではなく OS側の設定もしくはNetwork攻勢を疑った方がいいのか判断がつかず。。。 ただ、IISでの出方も基本的には同じようなので、やはりWebサーバプログラムかな、、、と。 apacheだとmod_dirモジュールがこれを処理してるようなのですが、これに関する設定方法等に関するドキュメントが見つけられません。 簡単に言えば、301のレスポンスになっているテンプレートが分かれば。。。というところかも知れません。
guest

0

301のレスポンスが返ってくるということは、サーバ側で301 Moved Permanentlyの設定がされているという事です。
それと「WEBアクセス時のURLでディレクトリの最後のスラッシュをつけない」と言うのは、直接関係しません。

301を返してきたURLについて、ブラウザは転送先(次にアクセスするときに使うURL)の情報を保存します。
そして、同じURLへのアクセスがあった場合には、保存しておいた情報を用いて転送先に直接アクセスします。
ブラウザで保存している情報がホスト名ではなくIPアドレスになっているのは、何度もホスト名からIPアドレスへの変換をしなくて済む(その分、アクセスにかかる時間を短縮できる)ためだと思います。このあたりはブラウザの設計思想や実装に関わるところなので、ブラウザの種類やバージョンによって違いがあるだろうと思います。
ブラウザで起こる事ですから、サーバの設定であるhttpd.confは直接関係しません。(httpd.confに書かれた通りの転送先URLが301のレスポンスとしてブラウザに届いているはず。でも、それをブラウザがどう扱うかをhttpd.confで制御する事は無理)

投稿2016/11/29 02:47

coco_bauer

総合スコア6915

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Fujihara

2016/11/29 03:01 編集

ご回答・ご説明ありがとうございます。 おおよそ理解はできるのですが、このサーバ以外で同様のレスポンスを見たところでは、Locationに記されたものと同じbodyが出力されております。 サーバからのレスポンスを見てますのでブラウザは関係ないかと。。。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問