You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用AWS官方PHP SDK连接S3报错:连接被拒绝

排查PHP AWS SDK连接S3时的"Connection refused"错误

可能的原因及解决方法

1. 代理配置缺失

C# SDK可能自动读取了系统代理设置,但PHP SDK默认不会。如果你的环境需要通过代理访问外网,需要在S3Client配置中添加代理参数:

$s3Client = new S3Client([
    'version' => '2006-03-01', // 建议指定具体版本而非latest
    'region' => 'us-east-1',
    'credentials' => [
        'key' => 'your-access-key',
        'secret' => 'your-secret-key',
    ],
    'http' => [
        'proxy' => 'http://your-proxy-host:port',
        // 如果代理需要认证,添加以下两行
        'proxy_user' => 'proxy-username',
        'proxy_pass' => 'proxy-password',
    ],
]);

2. PHP cURL扩展问题

  • 检查cURL扩展是否开启:在PHP代码中执行var_dump(extension_loaded('curl'));,返回bool(true)才是正常。如果未开启,修改php.ini启用extension=curl。
  • 检查cURL是否支持TLS 1.2+:执行curl -V查看输出,确保SSL版本包含TLSv1.2或更高。S3要求使用TLS 1.2及以上版本,旧版cURL可能无法建立连接。

3. 指定具体的SDK版本

使用'version' => 'latest'可能引入兼容性问题,AWS官方建议指定具体的API版本,比如S3常用的2006-03-01,替换代码中的latest即可。

4. 显式指定S3端点

虽然us-east-1的默认端点是s3.amazonaws.com,但可以显式指定端点来排除区域配置问题:

$s3Client = new S3Client([
    'version' => '2006-03-01',
    'region' => 'us-east-1',
    'credentials' => [
        'key' => 'your-access-key',
        'secret' => 'your-secret-key',
    ],
    'endpoint' => 'https://s3.us-east-1.amazonaws.com',
]);

5. 防火墙或安全软件拦截

检查本地防火墙、杀毒软件或企业安全策略是否阻止了PHP进程访问s3.amazonaws.com。可以尝试在命令行用PHP执行简单的curl请求测试:

<?php
$ch = curl_init('https://s3.amazonaws.com');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
if(curl_errno($ch)) {
    echo 'Curl error: ' . curl_error($ch);
}
curl_close($ch);

如果命令行返回连接拒绝,说明是网络拦截问题,需要调整安全软件规则或联系管理员。

6. 验证凭证正确性

虽然C#能正常连接,但还是要确认PHP代码中填写的Access Key和Secret Key是否正确,避免复制粘贴时出现空格或特殊字符。

内容的提问来源于stack exchange,提问作者Stiven Diplet

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 12:51:17