<div><img src="https://top-fwz1.mail.ru/counter?id=3548135;js=na" style="position:absolute;left:-9999px;" alt="Top.Mail.Ru" /></div>
Бесплатный перенос IT-инфраструктуры в облако
На главную
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.timeweb.cloud

Если нужно разрешить доступ нескольким 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.timeweb.cloud/имя_бакета/;
        proxy_set_header Host s3.timeweb.cloud;
        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 активирует сертификат, и прокси начнёт работать через защищённое соединение.

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