Amazonは最近、SNI(サーバー名表示)を使用して無料でカスタムSSL証明書をサポートするCloudFrontの新機能を展開しました。
StartSSLから無料のClass 1証明書を使用してディストリビューションをセットアップしましたが、サイトが展開されてからすぐにダウンすることに気づいたときにすべてが機能していました。 SSL Checker を実行すると、証明書が正常に機能していることが返されます。
しかし、その後、HTTPS経由でサイトにアクセスしようとすると、このエラーページにヒットします(最初のリクエストで機能し、その後の接続試行でダウンします)。
Sslを使用してアクセスする場合の詳細な出力を次に示します(インデックスで成功):
$ curl -I -v -ssl https://wikichen.is
* Adding handle: conn: 0x7f9f82804000
* Adding handle: send: 0
* Adding handle: recv: 0
* Curl_addHandleToPipeline: length: 1
* - Conn 0 (0x7f9f82804000) send_pipe: 1, recv_pipe: 0
* About to connect() to wikichen.is port 443 (#0)
* Trying 54.230.141.222...
* Connected to wikichen.is (54.230.141.222) port 443 (#0)
* TLS 1.2 connection using TLS_RSA_WITH_RC4_128_MD5
* Server certificate: www.wikichen.is (6w984WNu7vM5OrdU)
* Server certificate: StartCom Class 1 Primary Intermediate Server CA
* Server certificate: StartCom Certification Authority
> HEAD / HTTP/1.1
> User-Agent: curl/7.30.0
> Host: wikichen.is
> Accept: */*
>
< HTTP/1.1 200 OK
HTTP/1.1 200 OK
< Content-Type: text/html; charset=utf-8
Content-Type: text/html; charset=utf-8
< Content-Length: 1153
Content-Length: 1153
< Connection: keep-alive
Connection: keep-alive
< Date: Sun, 09 Mar 2014 16:09:54 GMT
Date: Sun, 09 Mar 2014 16:09:54 GMT
< Cache-Control: max-age=120
Cache-Control: max-age=120
< Content-Encoding: gzip
Content-Encoding: gzip
< Last-Modified: Wed, 05 Mar 2014 20:40:48 GMT
Last-Modified: Wed, 05 Mar 2014 20:40:48 GMT
< ETag: "34685bc45353d1030d3a515ddba78f3e"
ETag: "34685bc45353d1030d3a515ddba78f3e"
* Server AmazonS3 is not blacklisted
< Server: AmazonS3
Server: AmazonS3
< Age: 4244
Age: 4244
< X-Cache: Hit from cloudfront
X-Cache: Hit from cloudfront
< Via: 1.1 4f672256eaca5524999342dc8678cdd2.cloudfront.net (CloudFront)
Via: 1.1 4f672256eaca5524999342dc8678cdd2.cloudfront.net (CloudFront)
< X-Amz-Cf-Id: h4TEULH44TCi7m2lL42A8lO-5-Gmx8iY2M2C1AOmRlK543zFN6jCtQ==
X-Amz-Cf-Id: h4TEULH44TCi7m2lL42A8lO-5-Gmx8iY2M2C1AOmRlK543zFN6jCtQ==
<
* Connection #0 to Host wikichen.is left intact
その後、他のページで失敗します:
$ curl -i -v https://wikichen.is/writing/index.html
* Adding handle: conn: 0x7fa153804000
* Adding handle: send: 0
* Adding handle: recv: 0
* Curl_addHandleToPipeline: length: 1
* - Conn 0 (0x7fa153804000) send_pipe: 1, recv_pipe: 0
* About to connect() to wikichen.is port 443 (#0)
* Trying 54.230.140.160...
* Connected to wikichen.is (54.230.140.160) port 443 (#0)
* TLS 1.2 connection using TLS_RSA_WITH_RC4_128_MD5
* Server certificate: www.wikichen.is (6w984WNu7vM5OrdU)
* Server certificate: StartCom Class 1 Primary Intermediate Server CA
* Server certificate: StartCom Certification Authority
> GET /writing/index.html HTTP/1.1
> User-Agent: curl/7.30.0
> Host: wikichen.is
> Accept: */*
>
< HTTP/1.1 502 Bad Gateway
HTTP/1.1 502 Bad Gateway
< Content-Type: text/html
Content-Type: text/html
< Content-Length: 472
Content-Length: 472
< Connection: keep-alive
Connection: keep-alive
* Server CloudFront is not blacklisted
< Server: CloudFront
Server: CloudFront
< Date: Sun, 09 Mar 2014 17:54:41 GMT
Date: Sun, 09 Mar 2014 17:54:41 GMT
< Age: 6
Age: 6
< X-Cache: Error from cloudfront
X-Cache: Error from cloudfront
< Via: 1.1 9096435f28f91f92bacdf76122de09ee.cloudfront.net (CloudFront)
Via: 1.1 9096435f28f91f92bacdf76122de09ee.cloudfront.net (CloudFront)
< X-Amz-Cf-Id: iAUOQbP8O4A0pI9KGvVz0VgBT1TW-j0yVDa7vdSvIAuxnKOyQghtnw==
X-Amz-Cf-Id: iAUOQbP8O4A0pI9KGvVz0VgBT1TW-j0yVDa7vdSvIAuxnKOyQghtnw==
<
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<HTML><HEAD><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
<TITLE>ERROR: The request could not be satisfied</TITLE>
</HEAD><BODY>
<H1>ERROR</H1>
<H2>The request could not be satisfied.</H2>
<HR noshade size="1px">
</BODY></HTML>
<BR clear="all">
<HR noshade size="1px">
<ADDRESS>
Generated by cloudfront (CloudFront)
</ADDRESS>
* Connection #0 to Host wikichen.is left intact
</BODY></HTML>%
トラブルシューティングを開始する場所についてのポインタが必要です。
AWS CloudFrontフォーラムのAlastair @ AWSという名前の親切な担当者がこれを解決してくれました。
CloudFrontディストリビューションと、このディストリビューションのオリジンとして機能するS3バケットを特定しました。
受信している断続的な「502 Bad Gateway」応答を再作成して説明できます。
この応答は、現在CloudFrontによってキャッシュされていないHTTPSプロトコルを使用してURLにアクセスしようとしたときにCloudFrontによって返されます。このエラーの理由は、CloudFrontがHTTPSプロトコルを使用してオリジンに接続しようとしているため、これが失敗しているためです。
この失敗の理由は、OriginをS3バケットとして設定しているが、「Custom Origin」タイプを使用しており、このバケットのS3 WebサイトURLにリダイレクトしているためです。 HTTPSを使用してS3 WebサイトのURLにアクセスしようとすると、これは機能しません。 S3 Webサイトホスティングは、HTTPプロトコル( http://docs.aws.Amazon.com/AmazonS3/latest/dev/WebsiteEndpoints.html#WebsiteRestEndpointDiff )を使用したコンテンツの提供のみをサポートしています。
現在、表示されている断続的なページ読み込み動作は、CloudFrontが現在キャッシュに保持しているページを返すためです。このシナリオを次のように再作成できるはずです。
- HTTPSを使用してサイトのページにアクセスします。 「502 Bad Gateway」エラーが返されるはずです。
- HTTPを使用して同じページにアクセスします。ページが表示されます。
- HTTPSを使用してページをもう一度ヒットします。 CFは、Originへの接続を試みるのではなく、キャッシュからコンテンツを提供しているため、期待どおりの結果が得られるはずです。
この問題を解決するには、次を試してください。
- CloudFront管理コンソールを開き、ディストリビューションを開きます。
- Originsタブに移動し、Originを選択して「編集」をクリックします
- 「Origin Protocol Policy」を「HTTP Only」に変更します。
- 変更を保存し、変更が有効になるまで約15分待ちます。
- テスト
これにより、CloudFrontがHTTPのみを使用してOriginに接続するようになります。これをS3 Webサイトでホストされたバケットを使用して環境でテストし、HTTPとHTTPSの両方を介してコンテンツを正常にロードできます。
元のフォーラムスレッドへのリンク です。
これに似た問題があり、@ Michael-sqlbotが示唆したように、カスタムOriginからS3に切り替えました。それだけでは、問題は解決しませんでした。
Originの切り替えに加えて、AWSサポートのAndrewは、エイリアスはCNAMEよりも優れていると述べました。私はCNAMEを使用していました。エイリアス(IPv4用とIPv6用)に切り替えたとき、機能しました。 CloudFrontのRoute 53ドキュメント は、CloudFrontのエイリアスをセットアップする方法を示しています。
独自のSSL証明書で適切なセットアップを行うことに少し苦労していましたが、この記事は最も役に立ちました。詳細に注意してください:
https://docs.aws.Amazon.com/Route53/latest/DeveloperGuide/tutorial-redirecting-dns-queries.html