ネットワーク例外は通常、Object Storage Service (OSS) へのアクセスに誤ったエンドポイントが使用されているか、クライアント側のネットワーク接続が不安定なことが原因で発生します。このトピックでは、OSS におけるネットワーク例外のトラブルシューティング方法について説明します。
背景情報
HTTP ステータスコードが 200 以外であっても、OSS からのレスポンスがあれば、クライアントがサービスに接続されていることを確認できます。このような問題については、OSS レスポンスからリクエスト ID を取得し、OSS セルフサービス診断ツールを使用して問題を診断してください。リクエスト ID の取得方法の詳細については、「リクエスト ID の取得」をご参照ください。
このトピックでは、ネットワーク例外とは、リクエストが OSS に到達する前にドロップされる問題を指します。リクエストが OSS に到達したかどうかを判断するには、リクエスト ID の取得を試みてください。ID を取得できる場合、リクエストは OSS に到達しています。
接続拒否
原因
-
クライアントと OSS バケットが同じリージョンの Alibaba Cloud 内部ネットワークに存在していません。内部エンドポイントを使用して OSS にアクセスできるのは、バケットと同じリージョン内の Alibaba Cloud サービスからのみです。たとえば、中国 (杭州) リージョンにバケットがある場合、中国 (杭州) リージョンの ECS インスタンスから
oss-cn-hangzhou-internal.aliyuncs.comエンドポイントを使用してアクセスできます。エンドポイントの詳細については、「リージョンとエンドポイント」をご参照ください。 クライアントがバケットと同じリージョンにありますが、クライアントの設定がネットワーク例外を引き起こす可能性があります。たとえば、クライアント上で特定のポートが閉じられている場合などです。
-
中国本土外から中国本土内の OSS エンドポイントにアクセスしている、またはその逆の場合です。不安定なクロスボーダーネットワークリンクは、接続タイムアウトまたは拒否を引き起こす可能性があります。
解決策
クライアントに設定されているエンドポイントが内部エンドポイント (「internal」 という単語を含む) かどうかを確認してください。該当する場合は、エンドポイントをパブリックエンドポイントに切り替えてください。パブリックエンドポイント経由でリクエストが正常に送信された場合、クライアントは内部エンドポイントの使用に対応していません。
ping コマンドを使用して、クライアントとバケットが配置されているリージョンのパブリックエンドポイント間のネットワーク接続をテストしてください。たとえば、
ping oss-cn-hangzhou.aliyuncs.comを使用して、クライアントと中国 (杭州) リージョンの OSS 間のネットワーク接続をテストできます。ping が失敗した場合は、telnet コマンドを使用してポート 80 または 443 が利用可能かどうかをテストしてください。-
クロスボーダーでアクセスする場合は、転送アクセラレーションを有効にし、転送アクセラレーションエンドポイント (
oss-accelerate.aliyuncs.com) を使用して OSS にアクセスしてください。これにより、リージョン間のデータ転送の安定性と速度が向上します。詳細については、「転送アクセラレーションを使用した OSS へのアクセス」をご参照ください。
接続タイムアウト
原因
ネットワークがインターネットサービスプロバイダー (ISP) のエッジノードによって管理されており、接続の問題によってリクエストがドロップされます。
大きなオブジェクトのアップロードが設定されたタイムアウト期間内に完了しません。
設定されたタイムアウト期間が短すぎます。
解決策
CDN アクセラレーションを有効にし、CDN POP を使用してデータ転送を高速化してください。これにより、携帯電話や PC のデータ転送品質に対する ISP ネットワークの影響を軽減できます。
-
マルチパートアップロードまたは再開可能なアップロードを使用してください。各パートのサイズを 1 MB 以下に設定してください。詳細については、「マルチパートアップロード」、「再開可能なアップロード (Java SDK V1)」、および「再開可能なアップロード (Python SDK V1)」をご参照ください。
より長いタイムアウト期間を設定し、失敗したアップロードの再試行を有効にしてください。さまざまなプログラミング言語のサンプルコードについては、概要をご参照ください。
ネットワークタイムアウトの処理方法の詳細については、「ネットワークタイムアウトの処理」をご参照ください。
ソケットタイムアウトまたはソケットクローズ
原因
接続がタイムアウトしました。
解決策
タイムアウト期間を延長してください。たとえば、OSS SDK for Java で ClientConfiguration.setSocketTimeout を使用して、ソケットレイヤーでのデータ送信のタイムアウト期間を設定できます。さまざまなプログラミング言語のサンプルコードについては、概要をご参照ください。
接続リセット
原因
クライアント側のネットワーク接続が異常です。
コード内で誤ったエンドポイントが指定されています。
アクセスしようとしているバケットが、攻撃またはコンテンツコンプライアンス違反によりサンドボックスに移動されました。
バケットのドメイン名がハイジャックされています。
解決策
-
クライアント側のネットワーク接続が正常かどうかを確認してください。
影響を受けているデバイスで、
pingコマンドを使用して、対応するリージョンの OSS エンドポイントへの接続をテストしてください。または、Alibaba Cloud DNS 診断ツールを使用してネットワークの異常を確認してください。見つかったネットワークの問題を解決してください。 -
コード内のエンドポイントを確認してください。
クライアント側のネットワークが正常に動作している場合は、
pingコマンドを使用してコード内で指定された OSS エンドポイントをテストして、スペルに誤りがないか確認してください。エンドポイントの詳細については、「リージョンとエンドポイント」をご参照ください。説明コード内のエンドポイントには、プロトコルを含める必要があります。たとえば、
https://oss-cn-hangzhou.aliyuncs.comのように指定します。さまざまなプログラミング言語のサンプルコードについては、概要をご参照ください。
バケットがサンドボックスに移動されているかどうかを確認してください。
バケットがサンドボックスに移動された場合でも、バケットはリクエストに応答できますが、サービス品質が低下します。詳細については、「OSS サンドボックス」をご参照ください。
-
パケットキャプチャを実行してトラブルシューティングを行ってください。
上記の確認で問題が解決しない場合は、Wireshark などのツールを使用してパケットキャプチャを実行し、キャプチャファイルを添付して OSS テクニカルサポートに連絡して、詳細な調査を依頼してください。