Tencent Cloud EdgeOneを使用してサイトアクセスを加速した後、クライアントのリクエストはEdgeOneノードに送信され、その後オリジンサーバーに転送されます。そのため、アクセス中に問題が発生した場合、複数のネットワーク経路に問題が関係している可能性があります。EdgeOneがオリジンサーバーへの接続に失敗した場合、52xエラーが発生します。本書では、520/524ステータスコードが発生した場合の調査方法について説明します。
以下、524ステータスコードを例に説明します:
定義
524ステータスコードはEdgeOneが独自に定義したステータスコードです。ノードがオリジンサーバーとのTCP接続確立に成功した後、オリジンサーバーにリクエストを送信します。オリジンサーバーが応答しないためノードがタイムアウトした場合、ノードはクライアントに524ステータスコードを返します。その他のステータスコードの意味については、異常ステータスコードリファレンスを参照してください。 現象
考えられる原因
オリジンサーバー自体のサービス異常
オリジンサーバーのセキュリティポリシーが原因です。
通信事業者による制限(HTTP)
調査方法
サードパーティ(CDN、オリジンサーバーを除く)からHTTP/HTTPSリクエストを送信し、オリジンサーバーに対してテストを行います。サードパーティは、個人のPC、サーバー、監視プラットフォームなどです。サーバー上でコマンドラインツールcurlを使用して調査できます。
ステップ1:オリジンサーバー設定情報の確認
特別な設定がない場合は、「ドメイン名管理」で設定したオリジンサーバー、プロトコル、およびポートのみに従います。特別な設定がある場合は、以下の方法を参照して確定できます:
1. オリジンサーバーIP:オリジンサーバーIPは、「ドメイン名管理」で設定されたオリジンサーバー、オリジンサーバーグループ、CLB、およびルールエンジンの「オリジンサーバー変更」の設定に基づいて総合的に決定されます。
2. オリジンサーバープロトコル:オリジンサーバープロトコルは、「ドメイン名管理」、ルールエンジンの「オリジンサーバーHTTPS」、および「オリジンサーバー変更」のオリジンサーバープロトコルに基づいて総合的に決定されます。
3. オリジンサーバーポート:特別な設定がない場合は、80または443です。ルールエンジンの「オリジンサーバー変更」操作でオリジンサーバーポートを変更した場合は、変更後の値が優先されます。
4. オリジンサーバーHost:デフォルトでは加速ドメイン名に従います。ルールエンジンの「Host Header 書き換え」操作で設定した場合は、設定した値が優先されます。
5. オリジンサーバーPath:デフォルトではリクエストURLに従います。ルールエンジンの「オリジンサーバーURL書き換え」操作で変更した場合は、変更した値が優先されます。
ステップ2:オリジンサーバー自体のサービス異常の調査
コマンドラインツールcurlを使用して、サードパーティプラットフォームからオリジンサーバーへHTTP/HTTPSリクエストを送信してテストします。テスト方法は以下の通りです:
curl -vo/dev/null [プロトコル]://[ドメイン名][パス] --resolve [ドメイン名]:[ポート]:[オリジンサーバーip]
注:curlのバージョンは7.21.3以降である必要があります。
オリジンサーバーへのアクセスにHTTPプロトコル、80ポート、オリジンサーバーIP 1.1.1.1、オリジンサーバーHost www.example.com、URLパス /test.jpgを使用すると仮定した場合、テストコマンドは以下の通りです:
curl -vo/dev/null http://www.example.com/test.jpg --resolve www.example.com:80:1.1.1.1
サードパーティクライアントからオリジンサーバーにアクセスします。オリジンサーバーが空の応答を返した場合、オリジンサーバーサービスに問題がある可能性があります。オリジンサーバーサービスに問題がないか自己確認できます。オリジンサーバーが正常な応答を返した場合、またはオリジンサーバーサービスが正常であることを確認した場合は、次のステップに進んで調査を続けます。
ステップ3:オリジンサーバーのセキュリティポリシーによる調査
考えられる原因は以下の通りです:
1. オリジンサーバーにファイアウォールが設定されており、EdgeOneのオリジンサーバーノードIPがIP許可リストに含まれていません。
オリジンサーバー上でパケットキャプチャまたはログを確認して、EdgeOneのオリジンサーバーノードIPがオリジンサーバーのIP許可リストに含まれているかを確認します。または、curlでEO-LOG-UUIDを取得し、Tencent Cloudテクニカルサポートに提出します。テクニカルサポートがEdgeOneのオリジンサーバーノードのIPを確認し、オリジンサーバー側でオリジンサーバーノードIPがオリジンサーバーのIP許可リストに含まれているかを自己確認します。なお、UUIDの取得方法は以下の通りです:
2. オリジンサーバーにアクセス頻度制限が設定されており、EdgeOneのオリジンサーバーアクセス頻度が高すぎます。
オリジンサーバーに対して複数のリクエストを並行して送信し、オリジンサーバーが空の応答やタイムアウトを返す状況を再現できるかどうかを確認できます。再現できる場合は、オリジンサーバーのログから頻繁にオリジンサーバーへアクセスしているリクエスト(発生時刻、EdgeOneのオリジンサーバーノードIP、URLを含む)を調査し、その情報をTencent Cloudテクニカルサポートに連絡して調査を依頼します。
3. EdgeOneがオリジンサーバーアクセス時に送信する標準ヘッダーが、オリジンサーバーのセキュリティポリシーをトリガーします。
EdgeOneはオリジンサーバーアクセス時にデフォルトで特定のHTTPリクエストヘッダーを送信します。curlでオリジンサーバーにアクセスする際にこれらのヘッダーを付与して検証できます。テスト方法は以下の通りです: curl -vo/dev/null [プロトコル]://[ドメイン名][パス] --resolve [ドメイン名]:[ポート]:[オリジンサーバーip] -H "[ヘッダー名]:[ヘッダー値]"
ステップ4:通信事業者によるハイジャックと制限
上記の確認がすべて正常であり、かつドメイン名のオリジンサーバーアクセスプロトコルがHTTPである場合、通信事業者によってハイジャックまたは制限されている可能性があります。オリジンサーバー上でパケットキャプチャを行い、リクエストが正常にオリジンサーバーへ到達しているかを確認する必要があります。確認方法は以下の通りです:
現網でアクセスがない、またはアクセス頻度が低いURLを選び、EdgeOneノード経由でリクエストを送信し、同時にオリジンサーバー上でパケットキャプチャを行います。オリジンサーバー上で該当HTTPリクエストが受信されていない場合、通信事業者によるハイジャックまたは制限が発生していると判断できます。直接通信事業者にフィードバックするか、現象を保持したままTencent Cloudテクニカルサポートを通じて通信事業者にフィードバックします。
クライアントテストコマンド:
curl -vo/dev/null [プロトコル]://[ドメイン名][パス] --resolve [ドメイン名]:[ポート]:[cdn ip]
オリジンサーバーテストコマンド:
tcpflow -cp port 80 -i [ネットワークカード] > src_80.flow
注:オリジンサーバーアクセスがHTTPプロトコルであるため、リクエスト情報は平文形式でsrc_80.flowに保存されます。viまたはvimエディターで開いて、クライアントリクエストのURLが含まれているかを確認できます。
解決方針
524ステータスコードについて、オリジンサーバーの処理に時間がかかることが明確な場合(EdgeOneのデフォルト読み取り/書き込みタイムアウト時間は15秒です)、「HTTP応答タイムアウト時間」の調整を試すことができます。タイムアウト時間の設定は、クライアントのタイムアウト時間を超えないようにすることを推奨します。これにより、EdgeOneのオリジンサーバーアクセスノードがオリジンサーバーの応答を待つ間に、クライアントのタイムアウト切断が発生することを防ぎます。具体的な調整手順は、オリジンサーバーアクセスタイムアウト時間を参照してください。