AWS S3 получает изображения через Proxy - PHP

У меня есть ведро на S3, где я загрузил изображения. Теперь я получаю изображения с помощью AWS - SDK. Теперь я хочу обойти изображение через Proxy

$client = new Aws\S3\S3Client([
            'version'     => 'latest',
            'region'      => 'us-east-1',
            'debug'       => TRUE, // enable debug info
            'stats'       => TRUE, // enable stats
            '@http'  => [
            'proxy' => 'http://192.168.16.1:10'
            ],
            'credentials' => [
                'key'    => base64_decode(KEY),
                'secret' => base64_decode(SECRET)
            ]
        ]);

Вот мои настройки в bucket, и когда я сделал wirehark, он все еще показывает AWS ip-адрес в запросе.

Может ли кто-нибудь сказать мне, как обходить изображения S3 с помощью прокси.

Ответ 1

Если вы правильно поняли, что хотите настроить резервный прокси для своих изображений EG, ваша система загрузит изображения в браузер, чтобы они могли их отображать, и вы не хотите, чтобы пользователи знали ваш путь/вы не хотите, чтобы общественность доступ на чтение на вашем ковше.

Если это так, вы можете использовать следующий код для загрузки файла через

$result = $client->getObject(array(
    'Bucket' => $bucket,
    'Key'    => $keyname
));

header("Content-Type: {$result['ContentType']}");
echo $result['Body'];

это можно затем настроить на определенном URL-адресе с ключом в качестве параметра или если ваше ведро правильно защищено, вы можете просто использовать имя ключа через GET EG URL image.php?key=some/key/on/aws.jpg и используйте $keyname = $_GET['key'] внутри вашего файла.

Если вы используете таблицу MySQL для использования поиска, это будет $id = $_GET['id']; и создайте функцию, которая защищает от SQL Injection и возвращает столбец key затем использовать это для вашего $keyname таблица будет $keyname и которая может быть задана таблицей базы данных сопоставления EG

CREATE TABLE 'proxy_map'(
   'id' INT(11) NOT NULL PRIMARY KEY,
   'key' TEXT NOT NULL
)

Если вы хотите ограничить его, чтобы использовать только этот конкретный сайт, вы можете использовать проверку реферера

$url = parse_url($_SERVER['HTTP_REFERER'] , PHP_URL_HOST);
if($url !== $_SERVER[HTTP_HOST]){ // assuming that the images are only loaded on the same site as this php script
    http_response_code(404);
    echo "<h1>File Not Found</h1><p>Sorry the file you were looking for could not be found</p>";
}

Если вы хотите разрешить изображения с набора сайтов EG, у вас есть настройка субдомена, которую вы можете использовать.

$url = parse_url($_SERVER['HTTP_REFERER'] , PHP_URL_HOST);
$allowedDomains = array(
    $_SERVER[HTTP_HOST],
    "www.example.com"
);
if(!in_array($url, $allowdDomains))