Остались вопросы?
Мы с удовольствием вам поможем
Спасибо! Ваша заявка принята.
Ваша заявка принята. Наш менеджер скоро с вами свяжется
Заказать звонок
Спасибо! Ваша заявка принята.
Спасибо за обращение.
Мы обязательно свяжемся с вами

Время работы офиса
Пн-Пт: 8:00 — 18:00
Сб: 10:00 — 16:00
Вс: выходной

Объектное хранилище S3. Настройки кэширования

24.03.2025

Кэширование — временное сохранение файлов в специальной области памяти устройства или программы (кэш-памяти) для быстрого доступа к ним. Это увеличивает скорость работы приложений и операционной системы. Каждый объект в кэше имеет свой ключ – уникальный идентификатор объекта в кэше.

Серверное кэширование выполняется для того, чтобы не тратить ресурсы на обработку однотипных запросов, например не генерировать одну и ту же страницу сайта. Вместо этого, страница генерируется один раз, и результат сохраняется в память. Когда посетитель запросит ту же страницу снова, генерации уже не будет, а клиент получит сохраненную в памяти версию. Регулярно через определенное время (TTL), эта сохраненная версия будет удаляться и генерироваться новая, чтобы поддерживать актуальность данных.

Далее рассмотрим пример настройки кэширования.

Настройка кэширования для объектного S3-хранилища на Nginx

Необходимо настроить веб-сервер Nginx как прокси-сервер, который будет кэшировать содержимое из S3, уменьшая количество запросов к хранилищу и ускоряя доставку данных. Вот пошаговая инструкция:

1. Убедитесь, что у вас есть доступ к S3

У вас должен быть создан бакет S3 с публичным доступом или настроенными IAM-политиками для доступа через Nginx.

Запишите URL вашего бакета (например, https://my-bucket.s3.hoster.by/).

2. Установите Nginx

Если Nginx еще не установлен, установите его на ваш сервер. Например, для Ubuntu команды установки имеют вид:

sudo apt update
sudo apt install nginx

3. Настройте базовую конфигурацию Nginx

Откройте файл конфигурации Nginx (обычно находится в /etc/nginx/nginx.conf или создайте новый файл в /etc/nginx/conf.d/):

sudo nano /etc/nginx/conf.d/s3_cache.conf

Добавьте следующий базовый блок конфигурации:

http {
   ...
# Определение зоны кэширования
proxy_cache_path /var/cache/nginx/s3_cache levels=1:2 keys_zone=s3_cache:10m max_size=1g inactive=60m use_temp_path=off;
server {
    listen 80;
    server_name your_domain.com; # Замените на ваш домен
    location / {
        # Проксирование запросов к S3
        proxy_pass https://my-bucket.s3.hoster.by; # Укажите URL вашего S3 бакета
        proxy_http_version 1.1;
        proxy_set_header Host my-bucket.s3.hoster.by; # Укажите хост S3
        proxy_set_header Connection "";

        # Включение кэширования
        proxy_cache s3_cache;
        proxy_cache_valid 200 24h; # Кэшировать успешные ответы (200) на 24 часа
        proxy_cache_valid 404 1m; # Кэшировать 404 ошибки на 1 минуту
        proxy_cache_use_stale error timeout updating http_500 http_502 http_503 http_504;
        proxy_cache_background_update on; # Обновлять кэш в фоновом режиме
        proxy_cache_lock on; # Предотвращать одновременные запросы к S3 при обновлении кэша

        # Оптимизация работы с кэшем
proxy_cache_revalidate on; # Проверять актуальность кэша
proxy_cache_min_uses 1; # Кэшировать после первого запроса
proxy_cache_lock_timeout 5s; # Таймаут блокировки кэша
 
        # Дополнительные заголовки
        add_header X-Cache-Status $upstream_cache_status; # Для отладки (показывает статус кэша)
 
    }
}

Описание основных директив:

  • proxy_cache_path: указывает путь для хранения кэша (/var/cache/nginx/s3_cache), размер зоны (10m), максимальный размер кэша (1g) и время хранения неактивных объектов (60m).

  • proxy_pass: указывает URL S3 бакета.

  • proxy_cache: активирует кэширование с использованием зоны s3_cache.

  • proxy_cache_valid: устанавливает время кэширования для разных кодов ответа.

  • proxy_cache_use_stale: позволяет использовать устаревший кэш при ошибках или недоступности S3.

  • proxy_cache_background_update: обновляет кэш в фоновом режиме, чтобы пользователи получали старые данные, пока идет обновление.

  • add_header X-Cache-Status: добавляет заголовок для проверки, был ли запрос взят из кэша.

4. Создайте директорию для кэша

Убедитесь, что директория для кэша существует и доступна Nginx:

sudo mkdir -p /var/cache/nginx/s3_cache
sudo chown www-data:www-data /var/cache/nginx/s3_cache
sudo chmod 700 /var/cache/nginx/s3_cache

(Замените www-data на пользователя, под которым работает Nginx, если он отличается.)

6. Проверьте конфигурацию и перезапустите Nginx

Проверьте синтаксис конфигурации:

sudo nginx -t

Если ошибок нет, перезапустите Nginx:

sudo systemctl restart nginx

7. Тестирование

Откройте браузер и перейдите на http://your_domain.com/path/to/file (замените путь на реальный файл в S3). Проверьте заголовок X-Cache-Status:

  • MISS — данные загружены из S3 и помещены в кэш.

  • HIT — данные взяты из кэша.

  • EXPIRED — кэш устарел, идет обновление.

8. Дополнительные улучшения (опционально)

SSL: Настройте HTTPS с помощью Let’s Encrypt или другого сертификата.

Ограничения доступа: добавьте proxy_set_header Authorization с вашим AWS ключом, если доступ к S3 ограничен.

Кэширование по типам файлов: Используйте location-блоки для разных правил кэширования (например, для изображений, видео и т.д.).

Пример для изображений:

location ~* \.(jpg|jpeg|png|gif)$ {
    proxy_pass https://my-bucket.s3.hoster.by;
    proxy_cache s3_cache;
    proxy_cache_valid 200 7d; # Кэшировать изображения на 7 дней
}

Итог

Теперь Nginx будет кэшировать содержимое из S3, снижая нагрузку на хранилище и ускоряя доставку данных. Настройте параметры (max_size, inactive, proxy_cache_valid) в зависимости от ваших потребностей.

Получилось найти ответ?
success image
Спасибо за обратную связь!
Задать вопрос
Уточните, пожалуйста, вопрос, ответ на который вы не нашли на этой странице. Мы подготовим ответ и отправим его на вашу электронную почту.
Спасибо! Ваша заявка принята.
Мы скоро свяжемся с вами
Подпишитесь на email-рассылку!

Будьте в курсе новостей. Отправляем полезные письма каждый месяц.

Пожалуйста, введите адрес электронной почты
Пожалуйста, подтвердите согласие с условиями обработки персональных данных.
article mailing picture
Вы подписались на нашу рассылку!

Скоро вы получите новое письмо.

article mailing picture