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

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

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

HTTP(Hypertext Transfer Protocol)とはweb上でHTML等のコンテンツを交換するために使われるアプリケーション層の通信プロトコルです。

HTTPヘッダー

Hypertext Transfer Protocol(HTTP)の中のHTTPヘッダフィールドはHTTPの要求やレスポンスの機能しているパラメーターが含まれます。その要求もしくはレスポンスライン(メッセージの最初の一行)でメッセージヘッダを作ります。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

Q&A

解決済

1回答

6932閲覧

route53→cloudfront→ELB→EC2でのリダイレクト

ruuusaamarki

総合スコア468

HTTP

HTTP(Hypertext Transfer Protocol)とはweb上でHTML等のコンテンツを交換するために使われるアプリケーション層の通信プロトコルです。

HTTPヘッダー

Hypertext Transfer Protocol(HTTP)の中のHTTPヘッダフィールドはHTTPの要求やレスポンスの機能しているパラメーターが含まれます。その要求もしくはレスポンスライン(メッセージの最初の一行)でメッセージヘッダを作ります。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

0グッド

1クリップ

投稿2017/03/06 01:50

###前提・実現したいこと
route53→cloudfront→ELB→EC2(wordpress on nginx)の環境で
wwwなしのURLをありにリダイレクトさせたい。

###発生している問題・エラーメッセージ

ブラウザでexample.comにアクセスしたときのエラー

ERROR The request could not be satisfied. Bad request. Generated by cloudfront (CloudFront) デベロッパーツールのコンソールを確認すると 403 Forbidden とでています。

###現在の設定

◆route53設定 ●example.com ●A-IPv4 address ●Alias Target:www.example.com. ●www.example.com ●A-IPv4 address ●Alias Target:xxxxxxxxxxx.cloudfront.net.
◆cloudfront設定 Alternate Domain Names (CNAMEs): *.example.com
◆nginx confファイル設定 server { listen 80; server_name _;
◆wordpress設定 homeurl:www.example.com siteurl:www.example.com wp-config.phpの最上部に $_SERVER['HTTP_HOST'] = $_SERVER['HTTP_X_FORWARDED_HOST']; $_SERVER['REMOTE_ADDR'] = $_SERVER['HTTP_X_FORWARDED_FOR'];

###現在できていること
上記の設定でwww.example.comは表示できています。
X-Cache:Hit from cloudfrontも確認できております。
またAレコードの設定を以下のようにすることでexample.comでもアクセスができています。
●example.com ●A-IPv4 address
●Alias Target:elbのアドレス
example.comでのアクセスはヘッダ情報にX-Cacheが表示されておりませんので
当然ながらelbに直接アクセスしている状態だと思います。

###試したこと
route53でリダイレクト、もしくはcloudfrontでリダイレクトをさせたいと思い

cloudfrontで試した設定 Cache Behavior SettingsのWhitelist Headersに 「host」「example.com」等を加えてみました

がブラウザで確認すると上記のエラーが出ておりました。
また妥協案としてexample.comにアクセスが来た場合は
オリジン(nginx)からリダイレクトさせようとnginxに以下の設定をしてみました。

◆nbinx confファイル server { listen 80; server_name example.com; return 301 http://www.example.com$request_uri; }

結果はリダイレクトループが発生してしまいます。
example.com,www.example.com共にエラーになりました。

###現在の疑問点
・色々調べている時にroute53→s3の構成でs3でリダイレクトさせるという情報がいろいろ出てきましたがroute53でのリダイレクトはできないということでしょうか。
・cloudfrontでリダイレクトする情報も検索している時にhttp://www.example.comとhttp://example.comとhttps://example.comをhttps://www.example.comにリダイレクトするのはcloudfront設定画面のViewer Protocol PolicyのRedirect HTTP to HTTPSを選択すればできそうなこと(←できるのでしょうか?体験談などお聞かせいただければ嬉しいです。)は分かりましたが今回のようにhttpsが絡まないリダイレクトはどのように設定すればできるのでしょうか。

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

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

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

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

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

guest

回答1

0

ベストアンサー

まず、Route53はDNSのサービスなのでHTTPリダイレクトする機能はありません。
CloudFrontの「HTTP to HTTPS」は https 通信を強制するためのもので ご希望のものとは違うきがします。

というわけで、オリジンの nginx でリダイレクトするのが良いでしょう。
※より AWS っぽくやるなら S3 で リダイレクトするのもアリだと思いますよ。

リダイレクトループは正しく設定すれば回避できると思います。
次のようにバーチャルホストを2つ記述すればどうでしょうか。

nginx.conf

1# nginx.conf 2server { 3 listen 80; 4 server_name example.com; 5 return 301 http://www.example.com$request_uri; 6} 7 8server { 9 listen 80; 10 server_name www.example.com; 11 ... 12}

つぎに、CloudFrontのAlternate Domain Name にワイルドカードを使って書いてますが、サブドメインの無い example.com はマッチしないんじゃないでしょうか。 example.com を追加してみるとどうでしょう。

*.example.com example.com ←追加

投稿2017/03/06 11:30

take88

総合スコア1351

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

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

ruuusaamarki

2017/03/07 01:55 編集

コメントありがとうございます! CloudFrontのAlternate Domain Nameは複数指定できるんですね。 こちらは調査不足でした。申し訳ありません。 CloudFrontのAlternate Domain Nameを設定しs3のバケットを作成し リダイレクト設定をしたところ無事example.com→www.example.comへの リダイレクトとサイト表示ができました。以下ヘッダ情報になります。 Request URL:http://example.com.com/ Status Code:301 Moved Permanently (from disk cache) Location:http://www.example.com.com/ Server:AmazonS3 ここで一つ疑問なのですが X-Cache:RefreshHit from cloudfront の記述がありませんでしたが example.comへアクセスした際 example.com→route53→s3→cloudfrontからコンテンツを返す となっているのでしょうか。 ブラウザのアドレスバーはwww.example.comに変わっています。 追記 ------------------------------------------------------ デベロッパーツールnetworkのnameにwww.example.comがあり その中にX-Cache:Hit from cloudfrontがありました。 ------------------------------------------------------ またこの状態でphpファイルを使用する動的ページ 検索窓やフォームなどの場合オリジンec2に問い合わせをし 動的ページを動作させることは可能なのでしょうか。 上記設定での間違い、SEO的な悪影響などもありましたら 突っ込んでいただけたら嬉しいです。 上記設定と別にいただきましたnginxのconfigファイルも 変更し、route53の設定を以下のようにしてみましたが ●example.com ●A-IPv4 address ●Alias Target:elbのアドレス elbがoutofserviceになり、ブラウザからアクセスしても503エラーになってしまいました。 ここでわからないのがexample.comの設定を変えただけなのに www.example.comに直接アクセスしてもエラー(outofservice503)になってしまうことです。 重ねての質問で恐縮ですがよろしければご教授いただけましたらうれしいです。
take88

2017/03/10 04:34

すみません立て込んでてざっとしか読んでませんが、取り急ぎコメントいたしますと、 elb が outofservice になるのは health check が失敗したのでしょうね。elbからec2へのHealth check アクセスを nginxがどのバーチャルホストで受け取っているか、nginxのアクセスログ、エラーログで確認してみると何か分かるかもしれません。直感で書きますと、明示的に www.example.com のバーチャルホストに default server の設定を追加すると解決するかもしれません。
ruuusaamarki

2017/03/11 07:46

お忙しいところありがとうございます! nginxでのリダイレクト構成もまたテストしてみたいと思います。 数日運用している感じでは現状でも問題なさそうなので とりあえずはs3でのリダイレクトで運用してみます。 ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問