2017-01-07 13 views
1

私はサイトexample.comを持っています。そのホスト名へのすべてのリクエストをhttps://www.example.comに向けたいと思っています。現在、Elastic Beanstalkのノードで実行されています。AWS Elastic Beanstalk:HTTPS経由でホスト名をリダイレクト

私はリダイレクトするための次のソリューションを持っているが、ステップ3を実行する方法について不明な点:

また、これは物事を行うための最善の方法である(以下を達成するために、一般的に良い方法はありますか?)

1)http://example.com - >https://www.example.com(DONE - S3バケットへのAレコード経由 - example here)。

2)http://www.example.com - >https://www.example.com(DONE - expressJS-example hereのHTTPSリダイレクト経由)。

3)https://example.com - >https://www.example.com(これはどうすればよいですか) - この電流はERR_CONNECTION_TIMED_OUTを与えます。

+0

どのDNSサービスを使用していますか? Route53? –

+0

私はElgin Beanstalk上でlookとNodeJSアプリケーションをnginxプロキシの背後で実行しました。あなたのhttp => httpsと!www => wwwのリダイレクトは、ノードではなくnginxを使って実装するのが少し洗練されています。 .ebextensionsでこれを行うことができます:http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/create_deploy_nodejs.container.html#nodejs-platform-proxy –

答えて

2

おそらくwwwサブドメインと裸の頂点を別々に扱いたいと思うでしょう。

1)http://example.com - >https://www.example.com

裸(頂点)ドメインを処理するための最も簡単なルートはリダイレクトS3バケットターゲットにエイリアスレコードを使用するための頂点をRoute53に行くと、セットアップすることです。 S3バケットでは、「すべてのリクエストを別のドメインにリダイレクトする」を有効にしてhttps://www.example.comにリダイレクトすることができます。

このソリューションは、https要求でSSLを終了しないため、HTTP要求ではなくhttpsでのみ機能します。 httpとhttpsの両方で動作するソリューションについては、#3を参照してください。

2)http://www.example.com - >https://www.example.com

あなたが同じドメインWWWのhttp => httpsのアプリケーションでX-Forwarded-Proto HTTPヘッダーを使用してリダイレクトを行うことができます。値はhttpまたはhttpsのいずれかになります。 httpを受け取った場合はhttpsにリダイレクトできます。あなたは、CloudFrontのと、フロント、

if ($http_x_forwarded_proto != "https") { 
    rewrite ^(.*)$ https://$server_name$1 permanent; 
} 

を代わりにあなたのElastic Beanstalkでアプリケーションをことができて、http =を実装:

RewriteEngine On 
RewriteCond %{HTTP:X-Forwarded-Proto} =http 
RewriteRule . https://%{HTTP:Host}%{REQUEST_URI} [L,R=permanent] 

nginxの例は次のようになります。

apacheの例は次のようになります。 > httpsがそこにリダイレクトされます。 「動作設定」では、「HTTPをHTTPSにリダイレクトする」ラジオボタンをチェックすることができます。

3)https://example.com - >https://www.example.com

あなたはexample.comとwww.example.comをカバーするサブジェクト代替名を持つSSL証明書を必要とします。 AWS Certificate Managerで無料で入手できます。 * .example.comとexample.comを1つの証明書に含めることができる「名前を追加する」ことができます。証明書マネージャはCloudfrontと完全に統合されているので、いい選択です。

CloudFrontのオプション:

CloudFrontのは、ここではかなり良いオプションです - あなたは前に全体のアプリ(頂点とWWWを)それを使用する場合は特に。

「代替ドメイン名(CNAME)」のCloudfront内では、example.comとwww.example.comの両方を追加する必要があります(これらをカンマまたは改行で区切ります)。両方のドメインをカバーするデジタル証明書も指定します。

Elastic Beanstalkでオプション:!

あなたはCloudFrontのを使用したくない場合は、頂点とWWWの両方の代わりに、弾性ロードバランサでSSLを終了し、あなたのアプリケーション層を使用して、同じWWWのリダイレクトを実装することができます。httpサービス(apache、nginxなど)。両方のドメイン(apexとwwwサブドメイン)をカバーするSSL証明書を追加するだけです。あなたはhttps://example.comは、Elastic Beanstalkでに戻ってあなたのオリジンサーバへ行くための要求を得るでしょう、しかし、あなたは指示301を返却する必要があります終了オプションのいずれかで

は非WWWのリダイレクトを実装しますブラウザをアプリケーション層のhttps://www.example.comに変更します。

apacheの例:

RewriteCond %{HTTP_HOST} !^www\. [NC] 
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L] 

nginxの例:アペックスのため

server { 
    server_name "~^(?!www\.).*" ; 
    return 301 $scheme://www.$host$request_uri; 
} 

Route53エイリアスレコード:

溶液のいずれかを使用すると、Route53 Aエイリアスレコードが必要でしょうCNAMEレコードは頂点(裸の)ドメインではサポートされていないため、頂点でこの作業を行う必要があります。 Elastic BeanstalkターゲットまたはCloudfrontターゲットを指定します。

関連する問題