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

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

ただいまの
回答率

89.97%

複数のサブドメインから同じドキュメントルートのWebコンテンツを使用したい

解決済

回答 3

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 1,145

sujico.net

score 437

実現したいこと

取得済みのドメイン"example.com"にサブドメインを2つ("www1"、"www2")を設定し、
example.com、www1.example.com、www2.example.comの3ドメインのアクセスに対応したい

困っていること

Amazon Route53の設定を行い、それぞれのドメインの名前解決が出来る状態になっています。
ただ、いざブラウザからアクセスしようとすると

http://example.com の場合はWebコンテンツが表示され、
http://www1.example.comとhttp://www2.example.comでは404エラー(NotFound)が返ってしまいます。

VirtualHostを使用しており、virtualhostの設定ファイルも作成しています。(仮にvhost.confとします)
ただ、負荷分散の為にDocumentRootは3ドメイン同じパスを指定したいのですが、これは可能なのでしょうか?

vhost.confやApacheの設定ファイル(httpd.conf)で色々書き換えを試していますが、
404エラーのまま変わらないので恐らく的外れな検証をしているのかもしれません。

解決したいこと

http://www1.example.comとhttp://www2.example.comでの404エラーを解消したいです。
また、3つのドメイン全てに同じDocumentRootのWebコンテンツを指定したいです。
そして、これらが実現しない原因を突き止めたいです。

vhost.conf

NameVirtualHost *:80

<VirtualHost *:80>
  ServerName example.com
  ServerAlias xxxxxxxxx.cloudfront.net
  VirtualDocumentRoot /var/www/html/example.com/public_html/
</VirtualHost>

<VirtualHost *:80>
  ServerName www1.example.com
  ServerAlias yyyyyyyyy.cloudfront.net
  VirtualDocumentRoot /var/www/html/example.com/public_html/
</VirtualHost>

<VirtualHost *:80>
  ServerName www2.example.com
  ServerAlias zzzzzzzzz.cloudfront.net
  VirtualDocumentRoot /var/www/html/example.com/public_html/
</VirtualHost>


※httpd.confでServerNameはコメントアウト済です
※CloudFrontが別なので3つに分けています

現在何が原因でエラーが発生しているのか、
特定出来ていない状況です。

現在も当方で調査中なのですが、現状まだ見当がついていない状態です。
もし「これが原因では?」等お心当たりがあるかたがいらっしゃいましたら、
何卒ご教示頂けますと幸いです。

恐縮ですが、何卒宜しくお願い致します。
 
 
また、不足する情報がございましたら、
可能な範囲内で追記させて頂きます。

追記

初歩的な部分が確認できていないようですので、初心者マークをつけさせていただきました。

検証結果

・VirtualDocumentRootをDocumentRootに変更 → 効果はありませんでした
・DocumentRootを別々のパスに変更しました → 効果はありませんでした
・CloudFrontのOriginの先頭一文字が大文字と小文字で差異があったため、揃えました → 効果なし
・アクセス可能なドメインとそうではないドメインでは、ログに差があります。
アクセス不可能なドメインの方ではNot Found時にアクセスログがありません
メッセージも「Apache/2.x.xx (Amazon) Server at testalb.xxxx.elb.amazonaws.com Port 80」とあります。
(アクセス可能なほうでは「Apache/2.x.xx (Amazon) Server at example.com Port 80」とあります)

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • yukky1201

    2018/10/19 16:30

    各URLへアクセスしたときのaccessログとerrorログを提示ください。www1.example.comにアクセスしたときに/var/www/html/example.com/public_html/ディレクトリを参照できているか?など確認できます

    キャンセル

  • sujico.net

    2018/10/19 16:45

    エラーログとアクセスログの状況を追記いたしました。何かエラーログが常に出ているのが引っかかります…。

    キャンセル

回答 3

check解決した方法

+1

CloudFrontでHostヘッダが転送されていない状況だったのが原因
ビヘイビアからHostヘッダを転送する設定に変更を加えたところ、接続可能となった

Based on Selected Request Headers → All

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

VirtualHostを分けるのであれば  VirtualDocumentRootDocumentRootにするのが正しいような。

今回のケースでは関係なかったので取り消し。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/10/19 16:14 編集

    ご回答いただきありがとうございます。
    わたしもhttps://www.softel.co.jp/blogs/tech/archives/2189 こちらを先ほど見て
    確かにVirtualDocumentRootはおかしいと思い修正しました。

    今回の問題の解決に直結する訳ではありませんが、こういうのは正しく書かないといけませんよね
    ご指摘いただきありがとうございます。

    キャンセル

  • 2018/10/19 16:24

    確かに、%0を使っていないのであんまり関係なかったですね。すみません。
    アクセスログを見て、実際にアクセスがあるか、ある場合どのパスを見て404を返しているか確認してみて下さい。

    キャンセル

  • 2018/10/19 16:27

    とんでもございません。
    むしろ%0を使用していないのにVirtualDocumentRootを使用していたこと自体が不適切でしたので、ありがたいご指摘でした。

    なるほど、アクセスログを見れば実際にどのパスを見に行っているかが分かるのですね。
    初歩的で申し訳ありません、早速確認してみます。

    キャンセル

  • 2018/10/22 12:03 編集

    >アクセスログを見て、実際にアクセスがあるか、ある場合どのパスを見て404を返しているか確認してみて下さい。

    www1とwww2においては、アクセス時にaccess_logもerror_logもなかったので、
    到達していない可能性があるかも知れないことが分かりました。

    また、
    アクセス可能なドメインの方でのブラウザ上での404メッセージは、
    Apache/2.x.xx (Amazon) Server at example.com Port 80  ですが、

    アクセス出来ないほうでのブラウザ上でのメッセージは
    Apache/2.x.xx (Amazon) Server at testalb.xxxx.elb.amazonaws.com Port 80 でした。

    キャンセル

0

まず、そのサブドメインでIPを引いてみて、ドメインと同じものかをチェックしてみましょう

そして、
.htaccess とかで、ドメイン以外のアクセスを拒否してるとかはないでしょうか。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/10/19 16:15

    なるほど、ご回答いただきありがとうございます。
    さっそく確認してみたいと思います。

    キャンセル

  • 2018/10/19 16:25

    > サブドメインでIPを引いてみて、ドメインと同じものか
    サーバの前にキャッシュサーバ(Amazon CloudFront)を配置している為、
    外部アクセスの場合IPアドレスは異なりますがドメインとキャッシュサーバは一致しています。
    (という確認で合っておりますでしょうか?)

    .htaccessに関しては、ファイルが存在しませんでした。

    キャンセル

  • 2018/10/19 16:28

    それらのIPアドレスで見てみたらどうなります?

    キャンセル

  • 2018/10/19 16:32

    キャッシュサーバのIPアドレスで確認してみたところ、
    403エラーが返ってきました。

    --
    403 ERROR
    The request could not be satisfied.
    Bad request.
    Generated by cloudfront (CloudFront)
    Request ID: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

    キャンセル

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

  • ただいまの回答率 89.97%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる