説明
Alibaba Cloud CDN を使用してウェブサイトへのアクセスを高速化すると、クライアントリクエストはまず第1層ポイントオブプレゼンス (POP) に送信され、次に第2層 POP に送信され、最終的にオリジンサーバーに転送されます。この複数レベルのネットワークパスのいずれかの段階で問題が発生すると、アクセス障害が発生する可能性があります。Alibaba Cloud CDN がバックツーオリジンリクエスト中にオリジンサーバーからコンテンツの取得に失敗した場合、502 Bad Gateway、503 Service Temporarily Unavailable、504 Gateway Time-out などの 5xx エラーが発生することがあります。
原因
Alibaba Cloud CDN が処理するリクエストで 5xx エラーが発生した場合、レスポンスヘッダーの X-Swift-Error フィールドに、forward retry timeout や orig response 5xx error などの特定のエラーメッセージが含まれることがよくあります。同時に、cURL またはブラウザーの開発者ツール (ネットワークタブ) を使用して、リクエストの所要時間を確認してください。
すべてのリクエストで 5xx エラーが発生する場合、原因は通常、Alibaba Cloud CDN の設定ミスまたはオリジンサーバーの問題です。バックツーオリジンに失敗する一般的な理由は次のとおりです:
オリジンサーバーにアクセスできない、またはそのドメイン名を名前解決できない。
Alibaba Cloud CDN で HTTPS 経由のバックツーオリジンルーティングが設定されているが、オリジンサーバーが HTTPS をサポートしていない。
オリジンサーバーで Server Name Indication (SNI) が有効になっているが、Alibaba Cloud CDN では有効になっていない。
このエラーが時折、または特定のリージョンでのみ発生する場合、オリジンサーバーのネットワーク状態や、次のような他の要因が原因である可能性があります:
オリジンサーバーで設定されたセキュリティポリシーが POP の IP アドレスをブロックしている。
オリジンサーバーへのネットワーク接続が不安定、バックツーオリジンルートが不安定、または動的インターフェイスの応答速度が不安定である。
ソリューション
Alibaba Cloud CDN は、世界中に分散された POP のグローバルネットワークです。Alibaba Cloud CDN は、オリジンサーバー上のリソースを POP にキャッシュしてアクセスを高速化します。リソースへの初回アクセスリクエスト、または POP にキャッシュされた期限切れのリソースへのアクセスリクエストが送信されると、リクエストはオリジンサーバーにリダイレクトされます。オリジンサーバーの応答時間と最初のバイトまでの時間 (TTFB) は、バックツーオリジンルーティングプロセスにとって非常に重要です。バックツーオリジンルーティングで 5xx エラーが報告された場合は、次の方法を使用してエラーのトラブルシューティングを行ってください:
シナリオ1:オリジンサーバーがローカルホストまたは Elastic Compute Service (ECS) インスタンスである場合
オリジンサーバーがローカルホストまたは Elastic Compute Service (ECS) インスタンスである場合は、次の手順を実行してください:
ステップ1:HTTPレスポンスヘッダーの取得
cURL または Wget を使用して HTTP レスポンスヘッダーを取得してください。次の例は、curl コマンドを使用して HTTP レスポンスヘッダーを取得する方法を示しています。
また、F12 キーを押してブラウザーの開発者ツールを開き、[ネットワーク] タブに移動して 5xx エラーが発生した URL を特定することもできます。
curl -vo [$File_Name] [$IP][$File_Name]:現在のディレクトリに作成されるファイルの名前。リクエストに対する応答がこのファイルに記録されます。
[$IP]:リクエスト先のウェブサイトのIPアドレス。
レスポンスの X-Swift-Error フィールドの値が "orig response 5xx error" または同様の値である場合、バックツーオリジンルーティングがタイムアウトしたか、オリジンサーバーでのリクエスト処理がタイムアウトしたことを示します。
取得した HTTP レスポンスに基づき、次の項目を確認してください。
ステップ2:影響を受けるリージョンに応じたネットワークパフォーマンスのテストと分析
Networkbench または 17CE を使用して、POP のネットワークパフォーマンスを確認してください。エラーが発生するリージョンに応じて、異なるトラブルシューティング方法を使用してください:
単一リージョン:エラーの原因は POP とオリジンサーバー間の接続に関連している可能性があります。ネットワークテストを数回実行して、ネットワーク接続が回復するかどうかを確認してください。このエラーが重大な結果を引き起こす場合は、レスポンスヘッダーを記録し、Alibaba Cloud テクニカルサポートにお問い合わせください。
複数リージョン:次のコマンドを実行して、クライアントとオリジンサーバー間、およびクライアントと POP 間の接続品質をテストしてください。
time telnet [$Test_IP] [$Test_Port] ping [$Test_IP]説明最初のコマンドは、
telnetコマンドの実行にかかった時間を照会します。2番目のコマンドは、ネットワーク接続をテストします。
[$Test_IP]:IPアドレス。オリジンサーバーの IP アドレスまたは POP の IP アドレスを指定できます。
[$Test_Port]:ポート番号。オリジンサーバーのポート番号または POP のポート番号を指定できます。
ステップ3:ドメイン名の帯域幅とQPSの確認
次の手順を使用して、ドメイン名の帯域幅と QPS を確認してください。
Alibaba Cloud CDN コンソールにログインします。
左側のナビゲーションペインで、[コンテンツ配信] > [分析] > [リアルタイム監視] を選択し、最近のバックツーオリジン帯域幅と QPS を確認します。帯域幅または QPS の急増は、オリジンサーバーの応答タイムアウトを引き起こす可能性があります。
バックツーオリジン帯域幅の急増が発生した場合、オリジンサーバーに新しいリソースが追加されたか、または頻繁にアクセスされるリソースにキャッシュルールが設定されているかを確認します。お客様のビジネスで大量のゲームデータや画像が扱われる場合は、バックツーオリジンルーティング帯域幅の急増によるオリジンサーバーのパフォーマンスボトルネックを防ぐために、プリフェッチ機能を使用して事前にリソースを Alibaba Cloud CDN にデプロイすることを推奨します。また、頻繁にアクセスされるリソースには、長いキャッシュの有効期間 (TTL) を設定することを推奨します。
Alibaba Cloud CDN とオリジンサーバーでキャッシュルールが設定されているかを確認します。オリジンサーバーに no-cache レスポンスヘッダーが設定されている場合、Alibaba Cloud CDN のキャッシュ設定よりも優先されます。オリジンサーバーと Alibaba Cloud CDN POP にキャッシュルールが設定されていない場合、デフォルトの TTL は 10〜3,600 秒です。詳細については、「キャッシュの概要」をご参照ください。
Alibaba Cloud CDN の新規ユーザーであるか、Alibaba Cloud CDN のキャッシュに慣れていない場合は、ディレクトリに最長の TTL を設定し、キャッシュが不要なリソースには別のポリシーを設定することを推奨します。その後、優先順位を指定してマッチングを制御できます。詳細については、「CDNキャッシュ有効期間の設定」をご参照ください。
ステップ4:オリジンサーバーの接続性とドメイン名の名前解決の確認
Alibaba Cloud CDN POP はインターネット上にあります。バックツーオリジンルーティングを成功させるには、オリジンサーバーがインターネットに接続されている必要があります。オリジンサーバーに設定された IP アドレスがインターネット経由でアクセスできない場合、オリジンサーバーのポートにアクセスできない場合、またはオリジンサーバーのドメイン名が名前解決されない場合、5xx エラーが発生します。
ping コマンドを実行して、オリジンサーバーの接続性をテストします。
ping [$IP]説明[$IP] はオリジンサーバーの IP アドレスです。
オリジンサーバーで設定されたポートにアクセスできない場合や、オリジンサーバーが直接 5xx エラーを返す場合があります。telnet を使用したポートテストでは、
Connection timed outエラーが返されることがあります。オリジンサーバーでポート 80 が設定されている場合は、次のコマンドを実行してポートの状態をテストします。
telnet [$IP] 80オリジンサーバーでポート 443 またはカスタムポートが設定されている場合は、ポート 443 またはカスタムポートにアクセスできるかどうかをテストします。
Alibaba Cloud CDN コンソールでオリジンサーバーの IP アドレスとポート設定を取得し、ローカルの hosts ファイルを使用して IP アドレスをオリジンサーバーにマッピングします。レイヤー 7 テストを実行して、オリジンサーバーが応答に失敗するか、直接 5xx エラーを返すかを確認します。または、
curlを実行してオリジンサーバーのポートの状態をテストします。オリジンサーバーのポートが 80 の場合は、
curl -voa http://[$Domain] -x [$IP]:80を実行します。説明[$Domain] は CDN ドメイン名です。
オリジンサーバーのポートが 443 の場合は、
curl -voa https://[$Domain] --resolve [$Domain]:443:[$IP]を実行します。
Alibaba Cloud CDN でオリジンサーバーのドメイン名が設定されているものの、ドメイン名が名前解決できない場合、バックツーオリジンルーティングは失敗します。
pingまたはnslookupを使用して、オリジンサーバーのドメイン名が正常に名前解決されるかどうかをテストできます。たとえば、オリジンサーバーのドメイン名 example.aliyundoc.com に ping を実行してunknown hostエラーが返されるか、nslookup コマンドを実行してオリジンサーバーのドメイン名の名前解決レコードを照会してserver can't find example.aliyundoc.com: NXDOMAINが返される場合、オリジンサーバーのドメイン名は名前解決できません。ドメイン名の名前解決の設定方法の詳細については、「CNAMEレコードの設定」をご参照ください。
ステップ5:バックツーオリジンの設定の確認
Alibaba Cloud CDN で HTTPS 経由のバックツーオリジンルーティングが設定されているが、オリジンサーバーが HTTPS をサポートしていない場合、バックツーオリジンルーティングで 5xx エラーが発生します。ビジネスシナリオに基づいて、次の方法を使用してエラーのトラブルシューティングを行ってください。
オリジンサーバーでポート 443 が設定されているが、オリジンサーバーが HTTPS をサポートしていない場合:Alibaba Cloud CDN コンソールのバックツーオリジンページでオリジンサーバーのポートが 443 の場合、バックツーオリジンルーティングはポート 443 経で HTTPS を使用します。オリジンサーバーでポート 443 を開く必要があり、オリジンサーバーには HTTPS 証明書が必要です。
オリジンサーバーが HTTPS をサポートしていない場合、5xx エラーが返され、バックツーオリジンルーティングに失敗します。この場合、バックツーオリジンポートをポート 80 に変更する必要があります。
ビジネスでポート 443 経由のバックツーオリジンルーティングが必要な場合は、オリジンサーバーに HTTPS 証明書を設定します。
バックツーオリジンルーティングが クライアントが使用するプロトコルに追従する ように設定されているが、オリジンサーバーが HTTPS をサポートしていない場合:バックツーオリジンルーティングが [HTTPS] を使用するように設定されている場合、Alibaba Cloud CDN はバックツーオリジンルーティングに HTTPS を使用します。バックツーオリジンルーティングのプロトコルが [追従] に設定されていて、クライアントが HTTPS を使用してリソースをリクエストする場合、Alibaba Cloud CDN はバックツーオリジンルーティングに HTTPS を使用します。オリジンサーバーが HTTPS をサポートしていない場合、アクセス障害が発生します。この場合、プロトコル追従のバックツーオリジンルーティングを無効にするか、バックツーオリジンルーティングのプロトコルとして HTTP を使用してください。
curlコマンドを使用して、オリジンサーバーのアクセシビリティをテストしてください。curl -voa https://[$Domain] --resolve [$Domain]:443:[$IP]また、ローカルの hosts ファイルを変更してオリジンサーバーにマッピングし、ブラウザーを使用して HTTPS リクエストを開始し、オリジンサーバーのアクセシビリティをテストすることもできます。
Your connection is not privateエラーが返された場合、オリジンサーバーは HTTPS 経由のアクセスをサポートしていません。
シナリオ2:Alibaba Cloud CDN と Object Storage Service (OSS) を組み合わせて使用している場合
Alibaba Cloud CDN と Object Storage Service (OSS) を組み合わせて使用している場合は、次の手順でエラーのトラブルシューティングを行ってください:
ossutil ツールの
--probe-itemオプションを使用して、アウトバウンド帯域幅が 10 Gbit/s を超えるか、QPS が 10,000 を超えるかを確認してください。制限を超えると、OSS のトラフィックスロットリングがトリガーされ、制限を超えたバックツーオリジンリクエストの処理が遅延します。トラフィックスロットリングの詳細については、「制限とパフォーマンスメトリクス」をご参照ください。説明ossutil での
--probe-itemオプションの使用方法の詳細については、「オプションの表示」をご参照ください。OSS のトラフィックスロットリングが発生した場合に送信されるバックツーオリジンリクエストは、利用不可エラーを返しません。これらは遅延して処理されます。
Alibaba Cloud CDN のアウトバウンドトラフィックがオリジンサーバーの帯域幅制限を超えていないか確認してください。オリジンサーバーが最大帯域幅に達すると、ネットワークおよびアプリケーション層で問題が発生します。
説明iperf ツールを使用して、2つの POP 間のトラフィックを確認できます。
Netstat ツールを使用して、ネットワーク接続数を確認できます。
オリジンサーバーにファイアウォール制限があるかどうかを確認してください。具体的には、オリジンサーバーがバックツーオリジンリクエストの速度または IP アドレスを制限しているかどうかを確認してください。
以前のトラブルシューティング手順で問題が見つからない場合は、オリジンサーバーの Web エラーログで 5xx エラーメッセージを確認してください。アプリケーション層のログファイルにエラーが記録されていない場合は、オリジンサーバーから POP への接続をテストして、ネットワークのジッターによる 5xx エラーがないか確認してください。この確認プロセスは、実際のエラー頻度とビジネスの状況によって異なります。
説明一般に、オリジンサーバーが最大帯域幅に達しやすい場合や、パケットロスやパケット遅延が定期的に発生する場合は、nginx.conf ファイルの
send timeoutまたはread timeoutパラメーターの値を増やすことを推奨します。