8. Хранение в облаке S3
По умолчанию готовые копии лежат на вашем сервере в папке wa-data/public/shop/responsiveimages/. Если нужно, их можно хранить в облачном хранилище, совместимом с протоколом S3. Для этого посетители получают картинки напрямую из облака.
Облако не обязательно: многим магазинам достаточно хранения на сервере. Облако имеет смысл, если не хватает места на хостинге или картинки нужно отдавать с отдельного хранилища.
Что проверено, а что нет
| Хранилище | Статус |
|---|---|
| Yandex Object Storage | Проверено на реальном сервисе: подключение, запись, публичное чтение, заголовки, оба стиля адресов |
| Amazon S3 | Не проверялось. Если загрузка завершается ошибкой AccessControlListNotSupported («Bucket owner enforced»), включите настройку «Не отправлять ACL» и откройте файлы политикой бакета |
| Другие совместимые с S3 сервисы (Cloudflare R2, MinIO, Selectel, Timeweb, DigitalOcean, Backblaze, Wasabi и др.) | Работоспособность не заявляется. Те же правила про ACL |
| CDN перед бакетом | Не проверялось |
| S3 вместе с плагином SuperCache | Не заявляется, не проверялось |
При использовании S3 плагину по-прежнему нужны временные файлы на сервере на время обработки. Готовые копии хранятся в облаке.
Общий порядок настройки
- Выберите провайдера и создайте аккаунт. Ссылки на документацию популярных провайдеров есть на вкладке «Хранилище» вверху.
- Создайте бакет. Имя — только латинские буквы, цифры и дефисы, регистр важен; плагин рекомендует вид
ваш-домен-images, напримерmyshop-images. Один бакет — на одну витрину. - Создайте ключ доступа: получите Key ID и Secret key и запомните код региона. Секретный ключ обычно показывается один раз при создании — сохраните его. Ключ должен иметь право записывать, читать и удалять объекты в этом бакете. Лучше выпустить ключ, ограниченный одним бакетом (плагин такой ключ поддерживает).
- Сделайте файлы доступными для чтения посетителям (см. ниже «ACL и политика бакета»).
- На вкладке «Хранилище» заполните поля: «URL хранилища», «Bucket», «Key ID», «Secret key», «Код региона»; выберите «Endpoint Style».
- Нажмите «Проверить подключение» — результат показывается под кнопкой.
- Включите переключатель «Включить» и нажмите «Сохранить».
- Откройте страницу витрины без входа в администрирование и убедитесь, что картинки адаптивной версии загружаются из облака.
Включение S3 не переносит уже созданные файлы с сервера автоматически: в облако пойдут только новые. Чтобы пересоздать копии в облаке, используйте «Удалить все созданные изображения» (картинки создадутся заново).
Пример: Yandex Object Storage
| Поле | Значение |
|---|---|
| URL хранилища | https://storage.yandexcloud.net |
| Код региона | ru-central1 |
| Endpoint Style | Path-стиль |
| Bucket | имя вашего бакета |
| Key ID / Secret key | статический ключ доступа сервисного аккаунта (раздел «Сервисные аккаунты» → статические ключи доступа) |
Сервисному аккаунту нужна роль, дающая запись и удаление объектов в бакете (например, storage.editor).
Примеры адресов для других провайдеров
Подсказки в настройках приводят: Amazon S3 — https://s3.amazonaws.com, Selectel — https://s3.storage.selcloud.ru. Конкретные адреса и регионы всегда берите из документации вашего провайдера. Адрес принимается по структуре (схема и хост), в имени необязательно должно быть «s3».
Endpoint Style: какой выбрать
- Path-стиль — адрес вида
https://хост/бакет/файл.jpg. Рекомендуется для большинства S3-совместимых сервисов (по подсказке плагина: Yandex, Selectel, MinIO, DigitalOcean, Backblaze B2, Wasabi, FirstVDS). - Виртуально-хостинговый стиль —
https://бакет.хост/файл.jpg. Подсказка плагина советует его для Amazon S3, Cloudflare R2 и Google Cloud Storage.
Если не уверены — начните с Path-стиля.
ACL и политика бакета
Посетители загружают картинки без подписи и входа, поэтому файлы должны быть публично доступны для чтения. Есть два способа:
-
ACL «public-read» (по умолчанию). Плагин сам отправляет каждый файл с этим признаком. Подходит для хранилищ, которые разрешают ACL (например, Yandex Object Storage, если на бакете разрешён публичный доступ).
-
Политика бакета — если хранилище не принимает ACL (Amazon S3 с «Bucket owner enforced», Cloudflare R2 и подобные). Включите настройку «Не отправлять ACL» и откройте чтение политикой бакета. В общем виде политика (формат зависит от провайдера, сверьтесь с его документацией) разрешает всем читать объекты бакета:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": "*", "Action": "s3:GetObject", "Resource": "arn:aws:s3:::ИМЯ-БАКЕТА/*" } ] }Это пример общего вида. Разрешайте только чтение (
GetObject); запись и удаление не открывайте.
Не настраивайте на бакете правило удаления по возрасту. Рабочие файлы того же возраста, что и старые: правило удалит нужные картинки. Старые версии плагин удаляет сам (только свои файлы).
Кнопка «Проверить подключение»
Находится на вкладке «Хранилище». Она делает три шага:
- проверяет доступ к бакету («шаг 1 из 3, headBucket»);
- записывает тестовый файл («шаг 2 из 3, putObject»);
- удаляет тестовый файл («шаг 3 из 3, deleteObject»).
Между 2 и 3 шагом плагин пробует прочитать тестовый файл без подписи, как это сделает посетитель. Результат:
- Зелёное сообщение «Подключение и доступ к бакету успешно проверены» — всё в порядке, публичное чтение работает.
- Предупреждение (жёлтое) «тестовый объект не читается без подписи… Изображения из этого хранилища у посетителей не загрузятся» — запись работает, но файлы не открыты для публичного чтения. Откройте бакет политикой или, если хранилище поддерживает ACL, выключите «Не отправлять ACL».
- Предупреждение «публичное чтение тестового объекта проверить не удалось» — получен редирект, ошибка сервера или неожиданный ответ. Откройте адрес любой картинки с витрины без входа в систему, чтобы убедиться, что она загружается.
- Красное сообщение с шагом («Проверка доступа к бакету не прошла (шаг 1 из 3…)») — не сработал указанный шаг: неверный адрес, имя бакета, ключ, регион или нет прав.
- Красное сообщение про ACL — бакет не принимает ACL: включите «Не отправлять ACL».
- Если тестовый файл не удалился («шаг 3 из 3»), сообщение называет его имя: удалите его в консоли провайдера.


Кнопку нельзя нажимать слишком часто: после нескольких попыток подряд показывается «Слишком много попыток. Попробуйте позже». Если вы меняли адрес хранилища, а секретный ключ уже сохранён, его нужно ввести заново: сохранённый ключ работает только с тем адресом, с которым он сохранён.

Один бакет на витрину
Ключ файла в бакете строится из пути оригинала и не содержит витрину. Две витрины с разными настройками, записывающие в один бакет, могут перезаписывать одни и те же файлы. Две витрины на одном бакете не поддерживаются: заведите отдельный бакет (или отдельный аккаунт у провайдера) для каждой витрины с S3. Бакет — ещё и единица управления доступом и очисткой.
Если вы используете SuperCache и он тоже хранит что-то в S3, заведите отдельный бакет и для него: SuperCache требует закрытый бакет, а Images PRO — открытый.
Что учесть
- Cache-Control файлов. Для файлов с версией в имени плагин сам отправляет
Cache-Control: public, max-age=31536000, immutable(поле можно изменить или очистить). Что именно вернёт ваш провайдер — зависит от него; проверено только на Yandex. - Статистика на странице настроек показывает отдельно файлы «на сервере» и «в облаке».
- Удаление. Кнопка «Удалить все созданные изображения» удаляет и файлы в облаке, но только те, что создал плагин.
- Ключи. Секретный ключ после сохранения на страницу настроек не передаётся: вы увидите «Ключ задан» и кнопки «Заменить ключ» и «Очистить ключ».
- Проблемы с S3 — Решение проблем.