无法通过 php sdk 从 ec2 连接到 s3 - cURL 错误 7
Cannot connect to s3 from ec2 via php sdk - cURL error 7
我的 EC2 实例连接到我们的 S3 存储桶时遇到问题。
在我的 ec2 实例上,我安装了 php、httpd、aws-cli、aws-sdk。我能够到达代码所在的索引页面。凭证文件设置 /usr/share/httpd/.aws/credentials
我使用的代码来自 Getting Started Basic Usage Guide
$sharedConfig = [
'profile' => 'default',
'region' => 'us-west-1',
'version' => 'latest',
'debug' => true
];
// Create an SDK class used to share configuration across clients.
$sdk = new Aws\Sdk($sharedConfig);
// Use an Aws\Sdk class to create the S3Client object.
$s3Client = $sdk->createS3();
// Send a PutObject request and get the result object.
$result = $s3Client->putObject([
'Bucket' => 'my-bucket',
'Key' => 'my-key',
'Body' => 'this is the body!'
]);
使用调试模式会导致大量文本转储。我认为主要错误属于 s3 存储桶拒绝代码连接。
Entering step attempt, name 'ApiCallAttemptMonitoringMiddleware' ------
no changes * Trying IP_ADDRESS... * TCP_NODELAY set * Immediate connect fail for IP_ADDRESS: Permission denied *
Closing connection 0 <- Leaving step attempt, name 'ApiCallAttemptMonitoringMiddleware' --------- error was set to array(13) { ["instance"]=> string(32) "0000000078dd756a0000000053d619cb" ["class"]=> string(28) "Aws\S3\Exception\S3Exception" ["message"]=> string(241) "Error executing "PutObject" on "https://ec2-server-test.s3.us-west-1.amazonaws.com/my-key";
AWS HTTP error: cURL error 7: (see https://curl.haxx.se/libcurl/c/libcurl-errors.html) for https://ec2-server-test.s3.us-west-1.amazonaws.com/my-key" ["file"]=> string(58) "/var/www/vendor/aws/aws-sdk-php/src/WrappedHttpHandler.php" ["line"]=> int(195) ["trace"]=> string(1925) "#0 /var/www/vendor/aws/aws-sdk-php/src/WrappedHttpHandler.php(100)
Curl 错误 7:无法连接 () 到主机或代理。
当通过 SSH 连接到我的实例时,我能够正确地 运行 aws-cli s3 命令并收到正确的响应。
此代码也可以在我通过 xampp 托管的机器上本地运行。
问题是网络服务器 httpd 无法与外部网络通信。这就是为什么我可以从命令行使用 aws cli 和 telnet/ping,但无法从浏览器访问它。
在 运行 命令 setsebool -P httpd_can_network_connect 1
之后,我能够连接到我的 s3 存储桶。
我的 EC2 实例连接到我们的 S3 存储桶时遇到问题。
在我的 ec2 实例上,我安装了 php、httpd、aws-cli、aws-sdk。我能够到达代码所在的索引页面。凭证文件设置 /usr/share/httpd/.aws/credentials
我使用的代码来自 Getting Started Basic Usage Guide
$sharedConfig = [
'profile' => 'default',
'region' => 'us-west-1',
'version' => 'latest',
'debug' => true
];
// Create an SDK class used to share configuration across clients.
$sdk = new Aws\Sdk($sharedConfig);
// Use an Aws\Sdk class to create the S3Client object.
$s3Client = $sdk->createS3();
// Send a PutObject request and get the result object.
$result = $s3Client->putObject([
'Bucket' => 'my-bucket',
'Key' => 'my-key',
'Body' => 'this is the body!'
]);
使用调试模式会导致大量文本转储。我认为主要错误属于 s3 存储桶拒绝代码连接。
Entering step attempt, name 'ApiCallAttemptMonitoringMiddleware' ------
no changes * Trying IP_ADDRESS... * TCP_NODELAY set * Immediate connect fail for IP_ADDRESS: Permission denied *
Closing connection 0 <- Leaving step attempt, name 'ApiCallAttemptMonitoringMiddleware' --------- error was set to array(13) { ["instance"]=> string(32) "0000000078dd756a0000000053d619cb" ["class"]=> string(28) "Aws\S3\Exception\S3Exception" ["message"]=> string(241) "Error executing "PutObject" on "https://ec2-server-test.s3.us-west-1.amazonaws.com/my-key";
AWS HTTP error: cURL error 7: (see https://curl.haxx.se/libcurl/c/libcurl-errors.html) for https://ec2-server-test.s3.us-west-1.amazonaws.com/my-key" ["file"]=> string(58) "/var/www/vendor/aws/aws-sdk-php/src/WrappedHttpHandler.php" ["line"]=> int(195) ["trace"]=> string(1925) "#0 /var/www/vendor/aws/aws-sdk-php/src/WrappedHttpHandler.php(100)
Curl 错误 7:无法连接 () 到主机或代理。
当通过 SSH 连接到我的实例时,我能够正确地 运行 aws-cli s3 命令并收到正确的响应。
此代码也可以在我通过 xampp 托管的机器上本地运行。
问题是网络服务器 httpd 无法与外部网络通信。这就是为什么我可以从命令行使用 aws cli 和 telnet/ping,但无法从浏览器访问它。
在 运行 命令 setsebool -P httpd_can_network_connect 1
之后,我能够连接到我的 s3 存储桶。