Истории успеха наших клиентов — лучшие проекты
Вход/ Регистрация
На главную
25eb9e0a-a5a8-472a-ace7-940b8bd2adf0
Облачные сервисы

Настройка проксирования S3 через Nginx

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

Установка Nginx

Для начала установим Nginx, если он ещё не установлен:

    
sudo apt update sudo apt install nginx

После установки проверьте, что Nginx запущен, с помощью команды:

    
sudo systemctl status nginx

Если сервис не запущен, активируйте его:

    
sudo systemctl start nginx sudo systemctl enable nginx

Настройка доступа к бакету

Для работы проксирования ваш бакет должен быть публичным или иметь настроенный доступ для IP-адреса вашего сервера.

Чтобы открыть доступ к бакету с IP сервера, задайте политику бакета с помощью AWS CLI. Для этого создайте файл bucket-policy.json с содержимым:

    
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": "*", "Action": "s3:GetObject", "Resource": "arn:aws:s3:::имя_бакета/*", "Condition": { "IpAddress": { "aws:SourceIp": "IP_адрес_сервера" } } } ] }

Укажите параметры:

  • имя_бакета — имя вашего бакета.
  • IP_адрес_сервера — внешний IP-адрес вашего сервера.

Примените политику к бакету:

    
aws s3api put-bucket-policy --bucket имя_бакета --policy file://bucket-policy.json --endpoint-url https://s3.twcstorage.ru

Если нужно разрешить доступ нескольким IP-адресам, добавьте их в виде массива в поле IpAddress, например:

    
"IpAddress": { "aws:SourceIp": ["IP_адрес_1", "IP_адрес_2"] }

Теперь ваш бакет будет доступен только для указанных IP-адресов.

Базовая настройка

Создайте конфигурационный файл для проксирования. Например, создадим файл s3_proxy.conf в каталоге /etc/nginx/sites-available:

    
sudo nano /etc/nginx/sites-available/s3_proxy.conf

Настройте конфигурацию следующим образом:

    
server { listen 80; server_name ваш_домен; location / { proxy_pass https://s3.twcstorage.ru/имя_бакета/; proxy_set_header Host s3.twcstorage.ru; proxy_ssl_server_name on; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Authorization ""; proxy_hide_header x-amz-id-2; proxy_hide_header x-amz-request-id; proxy_hide_header Set-Cookie; add_header Cache-Control "public, max-age=3600"; expires 1h; } }

Сохраните файл и создайте символическую ссылку на него в каталоге sites-enabled:

    
sudo ln -s /etc/nginx/sites-available/s3_proxy.conf /etc/nginx/sites-enabled/

Проверьте конфигурацию на наличие ошибок:

    
sudo nginx -t

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

    
sudo systemctl restart nginx

Теперь файлы из бакета будут доступны по адресу http://ваш_домен/имя_файла.

Установка SSL-сертификата для прокси

Для повышения безопасности настройте HTTPS с помощью Certbot. Установите Certbot и плагин для Nginx:

    
sudo apt install certbot python3-certbot-nginx

Сгенерируйте и установите сертификат:

    
sudo certbot --nginx -d ваш_домен

Certbot автоматически обновит конфигурацию Nginx для работы по HTTPS. После успешного выполнения команда certbot активирует сертификат, и прокси начнёт работать через защищённое соединение.

Была ли статья полезна?
Ваша оценка очень важна
Пока нет комментариев