web-dev-qa-db-ja.com

AmazonS3-ネイキッドURLをルーティングするためのオプション

問題

カスタムドメインを使用して、AmazonS3で静的index.htmlをホストしています。それはすべて私のドメインで正常に機能します:site.com。ただし、www.site.comにアクセスすると、エラーが発生します。私が理解していることから、wwwURLをネイキッドURLに301リダイレクトする必要があります。

これを行うにはいくつかの方法があるようですが、DNSについての私の理解は限られており、これらのオプションの多くはお勧めできないようです。

オプション

  1. 1つはwwwあり、もう1つはなしの2つのAレコードがあります。どうやらこれはグーグルが重複コンテンツとしてそれを取るので、SEOの問題を引き起こす可能性があります。

  2. すべてがルーティングされる単一のリダイレクトバケットを用意します。これにより、クラウドフロントで問題が発生する可能性があります。 https://stackoverflow.com/questions/10115799/set-up-dns-based-url-forwarding-in-Amazon-route5

  3. PTRレコードを使用してリダイレクトします-しかし、明らかにこれはお勧めできません。 Route53でwwwをwww以外にリダイレクトするにはどうすればよいですか?

  4. 私の名前はgodaddyであるため、godaddyを使用してリダイレクトします: https://support.google.com/blogger/answer/58317?hl=en

  5. Wwwizerのような無料サービスを使用する http://wwwizer.com/naked-domain-redirect

  6. アマゾンバケットリダイレクトを使用します。これにより、ドメインごとに2つのバケットが必要になるという大きな問題が発生します。つまり、100個ではなく50個のドメインしか持てません。これは私にとって問題です。 http://i.stack.imgur.com/lqict.png

私は知っているすべてのオプションをリストしようとしました。ドメインとDNSをよく理解している人が、パフォーマンス、信頼性、SEOを考慮して、ダウンするのに最適なルートを決定するのを手伝ってくれませんか。

5
Jimmy

オプション1は、S3がホストするWebサイトでは機能しません。これは、S3がHost:着信HTTPリクエストのヘッダー必須バケットの名前と正確に一致し、重複するレコードを設定しても問題は解決しません。

オプション2は、同じ理由で機能しません。バケットの実際の名前に向けられたリクエストを除いて、リクエストはリダイレクトルールを含むバケットに到着しません。リンクした答えは、オプション6を実行する「難しい方法」にすぎず、ホスト名ごとに1つのバケットが必要です。

オプション3は、PTRレコードがブラウザのリダイレクトを引き起こさないため、役に立ちません。通常、逆引きDNSに使用されますが、PTRレコードはこのコンテキストでは適用されません。

オプション4Go Daddyには「ドメイン転送」と「サブドメイン転送」と呼ばれるオプションがありますが、これは、ドメインを登録するだけでなく、DNSをGo Daddyでホストする必要があることを意味します(これらは2つの異なるものであり、必ずしもそうとは限りません。一緒に行く)。これが現在の場合は、「www」サブドメイン(www.example.com)を頂点(example.com)に「転送」できます。これは、Go Daddyがwww.example.comのAまたはCNAMEレコードを作成することで実現します。これは、HTTP 301または302リダイレクトを生成する独自のWebサーバーを指します http://example.com 。 DNSがルート53ではなくGoDaddyでホストされている場合、これはおそらく最も簡単なオプションですが、DNSがGo Daddyでホストされていない場合、このオプションは使用できません。ドメインの頂点をS3のWebサイトとして使用しているため、DNSはRoute 53でホストされていると想定しています。これは、これが機能しないことを意味します。

オプション5は、方程式に不要なサードパーティを導入するという悪い考えのように見えますが、さらに重要なことに、間違った問題を解決します。 www.example.comをexample.comにリダイレクトするのではなく、example.comをwww.example.comにリダイレクトします。

オプション6は、各AWSアカウントで使用できるバケットの数が限られているという点で、前述の欠点はありますが、適切な選択です。


非常に多くの異なるドメインがある場合、別のオプションはEC2にElastic IPアドレスを割り当てることです(変更されない静的エンドポイントIPアドレスを持つように)、そのIPアドレスにバインドされたマイクロインスタンスを起動し、インストール HAProxy 。 HAProxyは、実際には実際のWebサーバーをフロントエンドし、外部からサーバーへのトラフィックを負荷分散するように設計されていますが、リダイレクトを生成する機能もあります。構成はそれほど複雑ではなく、HAProxyはCPUで非常に効率的であるため、Microから多くの作業が得られると思いますが、トラフィックによって必要になった場合は、いつでもより大きなインスタンスにスケールアップできます。

ポート80でフロントエンドリスナーを構成します。

frontend main
    bind *:80

次に、ドメインごとにアクセス制御リスト(acl)を作成して、「Host」httpヘッダーにそのホスト名を含む要求を監視します。

    acl www.example.com hdr(Host) -i www.example.com

...次に、目的のホスト名への301を生成するようにリダイレクトを構成します。

    redirect prefix http://example.com if www.example.com

DNSでは、このMicroインスタンスのパブリックElasticIPアドレスを指すAレコードを使用してwww.example.comを構成します。

この構成では、パスが保持されるため、任意のパスに送信されるリクエストは、 http://www.example.com/foo/bar としてsushされ、HTTP301リダイレクトで満たされます。 http://example.com/foo/bar など、他のドメインのまったく同じパス。

NginxやApacheなどのマシンで実行されている実際のWebサーバーでも同様のことができますが、HAProxyは非常に頑丈でありながら軽量のツールであり、このようなタスクには非常に適しているようで、このようなリダイレクトを生成します。これは、私が業務で使用しているものの1つです。

1