OSS Java SDK を使用している際に、次のようなエラーが表示されることがあります。
Connection to http://buname.oss-cn-hangzhou-internal.aliyuncs.com refused
[RequestId]: Unknown
at com.aliyun.oss.common.utils.ExceptionFactory.createNetworkException(ExceptionFactory.java:31)
at com.aliyun.oss.common.comm.DefaultServiceClient.sendRequestCore(DefaultServiceClient.java:57)
at com.aliyun.oss.common.comm.ServiceClient.sendRequestImpl(ServiceClient.java:191)
at com.aliyun.oss.common.comm.ServiceClient.sendRequest(ServiceClient.java:151)
at com.aliyun.oss.internal.OSSOperation.send(OSSOperation.java:71)
at com.aliyun.oss.internal.OSSObjectOperation.putObject(OSSObjectOperation.java:92)
at com.aliyun.oss.OSSClient.putObject(OSSClient.java:394)
at osscs1.OSSPutObjectSample.uploadFile(OSSPutObjectSample.java:82)
at osscs1.OSSPutObjectSample.main(OSSPutObjectSample.java:46)原因
このエラーには主に 2 つの原因があります。対処を進める前に、ご利用の環境に該当する原因を確認してください。
原因 1:内部ネットワーク外から内部エンドポイントを使用している
内部エンドポイントの URL には -internal が含まれています(例:oss-cn-hangzhou-internal.aliyuncs.com)。これらのエンドポイントは、OSS バケットと同じリージョンの内部ネットワーク内にあるクライアントからのみアクセス可能です。クライアントが同じリージョンの内部ネットワークにない場合、接続は拒否されます。
この原因の特定方法: SDK の構成に設定されているエンドポイントに -internal が含まれているか確認します。含まれており、かつクライアントが OSS バケットと同じリージョンの内部ネットワークにない場合は、これが原因です。
原因 2:ポート 80 または 443 がブロックされている
クライアントと OSS が同じリージョンにあっても、ファイアウォールルールやセキュリティグループ設定などのネットワークポリシーにより、ポート 80 または 443 がブロックされている可能性があります。その場合、SDK が OSS に到達できなくなります。
この原因の特定方法: 次のセクションで説明するように、telnet を使用してポートをテストします。
問題の診断
原因を特定するために、クライアントマシン上で次のコマンドを実行します。
手順 1:PING による基本的な接続性のテスト
ping oss-cn-hangzhou.aliyuncs.com次のような応答が返された場合、基本的なネットワーク接続および DNS 解決が正常に機能しています。
PING oss-cn-hangzhou.aliyuncs.com (x.x.x.x): 56 data bytes
64 bytes from x.x.x.x: icmp_seq=0 ttl=xx time=x.xxx msコマンドがタイムアウトするかエラーが返された場合は、ご利用のマシンから OSS のパブリックエンドポイントに到達できません。ネットワーク構成を確認するか、ネットワーク管理者に連絡してください。
手順 2:telnet によるポート可用性のテスト
telnet oss-cn-hangzhou.aliyuncs.com 80ポート 80 が開いている場合、空白画面または次のような Connected メッセージが表示されます。
Trying x.x.x.x...
Connected to oss-cn-hangzhou.aliyuncs.com.Connection refused と表示されるか、コマンドがタイムアウトする場合は、ご利用のネットワークでポート 80 がブロックされています。ポート 443 も同様にテストしてください。
telnet oss-cn-hangzhou.aliyuncs.com 443注: oss-cn-hangzhou.aliyuncs.com は、ご利用のリージョンに対応するパブリックエンドポイントに置き換えてください。エンドポイントの完全な一覧については、「アクセス用ドメイン名とデータセンター」をご参照ください。ソリューション
パブリックエンドポイントに切り替え、SDK の構成を更新します。
private static final String OSS_ENDPOINT = "http://oss-cn-hangzhou.aliyuncs.com/";
OSSClient client = new OSSClient(OSS_ENDPOINT, ACCESS_ID, ACCESS_KEY);telnet でポート 80 および 443 の両方がブロックされていることが確認された場合は、エンドポイントを切り替える前に、ネットワーク管理者と協力して必要なポートを開いてください。
次のステップ
ドメイン名とデータセンターへのアクセス — お使いのリージョンのパブリックエンドポイントを確認します