問題の説明
高速化ドメイン名を使用してリソースにアクセスすると、リクエストはAlibaba Cloud CDNポイントオブプレゼンス (POP) に送信され、キャッシュミスが発生した場合、リクエストはオリジンサーバーにリダイレクトされます。 プロセスでエラーが報告された場合、ネットワークルーティングが原因である可能性があります。 back-to-originルーティング例外が発生すると、5xxエラーが返されます。 一般的な5xxエラーには、502 Bad Gateway
、503 Service Temporarily Unavailable
、504 Gateway Time-out
などがあります。
原因
5xxエラーの詳細については、レスポンスヘッダーのX-Swift-Errorフィールドを確認してください。 X-Swift-Errorフィールドには、forward retry timeout
やorig response 5xx error
などのエラー情報が含まれます。 一方、ブラウザの開発者モードでは、cURLまたはネットワークタブを使用して応答時間を確認します。
グローバルに5xxエラーが発生した場合、一般的な原因は正しくないAlibaba Cloud CDN設定またはオリジンサーバーの例外です。
オリジンサーバーにアクセスできないか、オリジンサーバーのドメイン名を解決できません。
HTTPS経由のBack-to-originルーティングはAlibaba Cloud CDNで設定されていますが、オリジンサーバーはHTTPSをサポートしていません。
サーバー名表示 (SNI) はオリジンサーバーで有効になっていますが、Alibaba Cloud CDNでは有効になっていません。
このエラーが時折発生する場合、または特定のリージョンでのみ発生する場合は、オリジンサーバーのネットワーク状態や、次のようなその他の要因が原因で発生する可能性があります。
配信元サーバーで構成されたセキュリティポリシーは、POPのIPアドレスをブロックします。
オリジンサーバーへのネットワーク接続が不安定であるか、クロスボーダーバックツーオリジンルートが不安定であるか、動的インターフェイスの応答速度が不安定です。
解決策
Alibaba Cloud CDNは、世界中に分散されたPOPのグローバルネットワークです。 Alibaba Cloud CDNは、オリジンサーバー上のリソースをPOPにキャッシュし、アクセスを高速化します。 リソースに初めてアクセスするか、POPにキャッシュされた期限切れのリソースにアクセスするためのリクエストが送信されると、リクエストはオリジンサーバーにリダイレクトされます。 オリジンサーバーの応答時間と最初のバイトまでの時間 (TTFB) は、back-to-originルーティングプロセスにとって非常に重要です。 back-to-originルーティングで5xxエラーが報告された場合は、次の方法でエラーのトラブルシューティングを行います。
シナリオ1: オリジンサーバーがローカルホストまたはECSインスタンスである
オリジンサーバーがローカルホストまたはElastic Compute Service (ECS) インスタンスの場合、次の手順を実行します。
手順1: HTTPレスポンスヘッダーの取得
cURLまたはWgetを使用してHTTP応答ヘッダーを取得します。 次の例は、curlコマンドを使用してHTTPレスポンスヘッダーを取得する方法を示しています。
F12
を押してブラウザの開発者ツールを開き、[ネットワーク] タブに移動して、5xxエラーが返されるURLを見つけることもできます。
curl -vo [$File_Name] [$IP]
[$File_Name]: 現在のディレクトリに作成されたファイルの名前。 リクエストを送信したWebサイトの出力がファイルに記録されます。
[$IP]: リクエストを送信したWebサイトのIPアドレス。
X-Swift-Error
応答フィールドの値が "orig response 5xx error" などの値である場合、back-to-originルーティングがタイムアウトするか、オリジンサーバーでのリクエスト処理がタイムアウトします。
取得したHTTPレスポンスに基づいて、次の内容を確認します。
ステップ2: 影響を受けるリージョンに基づいてネットワークパフォーマンスをテストおよび分析する
POPのネットワークパフォーマンスを確認するには、Networkbenchまたは17CEを使用します。 エラーが発生したリージョンに基づいて、さまざまなトラブルシューティング方法を使用します。
単一リージョン: エラーの原因は、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にリソースをデプロイして、back-to-originルーティング帯域幅の急上昇によるオリジンサーバーのパフォーマンスのボトルネックを防ぐことをお勧めします。 また、頻繁にアクセスされるリソースに対して、長いキャッシュの有効期間 (TTL) を設定することをお勧めします。
Alibaba Cloud CDNとオリジンサーバーでキャッシュルールが設定されているかどうかを確認します。 オリジンサーバーにキャッシュなしレスポンスヘッダーが設定されている場合、Alibaba Cloud CDNのキャッシュ設定よりも優先されます。 オリジンサーバーとAlibaba Cloud CDN POPにキャッシュルールが設定されていない場合、デフォルトのTTLは10〜3,600秒です。 詳細については、「キャッシュの概要」をご参照ください。
Alibaba Cloud CDNの新規ユーザーである場合、またはAlibaba Cloud CDNキャッシュに慣れていない場合は、ディレクトリに最大TTLを設定し、キャッシュを必要としないリソースには別のポリシーを設定することを推奨します。 次に、マッチングを制御する優先順位を指定できます。 詳細については、「リソースのキャッシュルールの作成」をご参照ください。
手順4: オリジンサーバーの接続とドメイン名解決の確認
Alibaba Cloud CDN POPはインターネット上にあります。 back-to-originルーティングを成功させるには、オリジンサーバーをインターネットに接続する必要があります。 オリジンサーバーの設定されたIPアドレスにインターネット経由でアクセスできない場合、オリジンサーバーのポートにアクセスできない場合、またはオリジンサーバーのドメイン名が解決されない場合、オリジンサーバーで5XXエラーが報告されます。
オリジンサーバーにアクセスできません。 pingコマンドを実行して、配信元サーバーの接続をテストできます。
ping [$IP]
説明[$IP] はオリジンサーバーのIPアドレスです。
オリジンサーバーに設定されたポートにアクセスできないか、オリジンサーバーが直接5xxエラーを返します。 telnetを使用したポートテストでは、
Connection timed out
エラーが返されます。オリジンサーバーでポート80が設定されている場合は、次のコマンドを実行してポートのステータスをテストします。
telnet [$IP] 80
ポート443またはカスタムポートがオリジンサーバーで構成されている場合は、ポート443またはカスタムポートにアクセスできるかどうかをテストします。
Alibaba Cloud CDNコンソールでオリジンサーバーのIPアドレスとポート設定を取得し、ローカルホストファイルを使用してIPアドレスをオリジンサーバーにマッピングします。 レイヤー7テストを実行して、オリジンサーバーが応答に失敗したか、5xxエラーを直接返すかどうかを確認します。 または、
curl
を実行して、オリジンサーバーのポートステータスをテストします。オリジンサーバーのポートがポート80の場合、
curl -voa http://[$Domain] -x [$IP]:80
を実行します。説明[$Domain] は、高速化ドメイン名です。
オリジンサーバーのポートがポート443の場合は、
curl -voa https://[$Domain] -- resolve [$Domain]:443:[$IP]
を実行します。
オリジンサーバーのドメイン名がAlibaba Cloud CDNで設定されているが、ドメイン名解決が設定されていない場合、back-to-originルーティングは失敗します。
ping
またはnslookup
を使用して、オリジンサーバーのドメイン名が正常に解決されているかどうかをテストできます。 たとえば、オリジンサーバーのドメイン名e example.aliyundoc.comをpingすると、unknown host
エラーが返された場合、またはnslookupコマンドを実行してオリジンサーバーのドメイン名解決レコードを照会すると、server can't fin d example.aliyundoc.com: NXDOMAIN
が返された場合、オリジンサーバーのドメイン名は解決されません。 ドメイン名解決を設定する方法の詳細については、「ドメイン名のCNAMEレコードの追加」をご参照ください。
ステップ5: back-to-origin設定の確認
Alibaba Cloud CDNでHTTPS経由のback-to-originルーティングが設定されているが、オリジンサーバーがHTTPSをサポートしていない場合、back-to-originルーティングに対して5xxエラーが返されます。 ビジネスシナリオに基づいてエラーをトラブルシューティングするには、次の方法を使用します。
ポート443はオリジンサーバーで構成されていますが、オリジンサーバーはHTTPSをサポートしていません。 オリジンサーバーのポートがAlibaba Cloud CDNコンソールのback-to-originページでポート443されている場合、back-to-originルーティングはポート443経由でHTTPSを使用します。 ポート443はオリジンサーバーで開かれている必要があり、オリジンサーバーはHTTPS証明書を持っている必要があります。
オリジンサーバーがHTTPSをサポートしていない場合、オリジンサーバーは5xxエラーを返します。これは、back-to-originルーティングが失敗したことを示します。 この場合、back-to-originポートをポート80に変更する必要があります。
ビジネスでポート443経由のback-to-originルーティングが必要な場合は、オリジンサーバーのHTTPS証明書を設定します。
Back-to-originルーティングは、クライアントが使用するプロトコルに従うように設定されていますが、オリジンサーバーはHTTPSをサポートしていません。 back-to-originルーティングがHTTPSを使用するように設定されている場合、Alibaba Cloud CDNはback-to-originルーティングにHTTPSを使用します。 back-to-originルーティングのプロトコルがFollowに設定されており、クライアントがHTTPSを使用してリソースをリクエストしている場合、Alibaba Cloud CDNはback-to-originルーティングにHTTPSを使用します。 オリジンサーバーがHTTPSをサポートしていない場合、アクセスエラーが発生します。 この場合、back-to-originルーティングに従うプロトコルを無効にするか、back-to-originルーティングのプロトコルとしてHTTPを使用します。
curl
コマンドを使用して、オリジンサーバーのアクセシビリティをテストします。curl -voa https://[$ドメイン] -- resolve [$ドメイン]:443:[$IP]
ローカルホストファイルを変更してオリジンサーバーにマップし、ブラウザーを使用してHTTPSリクエストを開始し、オリジンサーバーのアクセシビリティをテストすることもできます。
[接続はプライベートではありません]
エラーが返された場合、HTTPSによるアクセスはオリジンサーバーでサポートされていません。
シナリオ2: ビジネスアプリケーションがAlibaba Cloud CDNとOSSの組み合わせを使用
ビジネスアプリケーションがAlibaba Cloud CDNとObject Storage Service (OSS) を組み合わせている場合は、次の手順を実行してエラーをトラブルシューティングします。
ossutilツールの
-- probe-item
オプションを使用して、送信帯域幅が10 Gbit/sを超え、QPSが10,000を超えているかどうかを確認します。 制限を超えると、OSSトラフィックスロットリングがトリガーされ、制限を超えるback-to-originリクエストの処理が遅延します。 トラフィックスロットリングの詳細については、「制限」をご参照ください。説明ossutilで
-- probe-item
オプションを使用する方法の詳細については、「オプションの表示」をご参照ください。OSSトラフィックスロットリングの場合に送信されるBack-to-originリクエストは、可用性エラーを返しません。 それらは遅れて処理されます。
Alibaba Cloud CDNのアウトバウンドトラフィックがオリジンサーバーの帯域幅制限を超えているかどうかを確認します。 オリジンサーバーが最大帯域幅に達すると、ネットワーク層とアプリケーション層の問題が発生します。
説明iperfツールを使用して、2つのPOP間のトラフィックを確認できます。
Netstatツールを使用して、ネットワーク接続数を確認できます。
配信元サーバーにファイアウォールの制限があるかどうかを確認します。 具体的には、オリジンサーバーがback-to-originリクエストの速度またはIPアドレスを制限しているかどうかを確認します。
前のトラブルシューティング手順で例外がない場合は、オリジンサーバーのWebエラーログで5xxエラーメッセージを確認します。 アプリケーション層のログファイルにエラーが記録されていない場合は、オリジンサーバーからPOPへの接続をテストして、ネットワークのジッターによる5xxエラーを確認します。 このチェックプロセスは、実際のエラー頻度とビジネスステータスの影響を受けます。
説明通常、オリジンサーバーが簡単に最大帯域幅に達するか、パケット損失またはパケット遅延が定期的に発生する場合は、nginx.confファイルの
send timeout
またはread timeout
パラメーターの値を大きくすることを推奨します。