---
title: "Проксирование S3-хранилища через Nginx — Timeweb Cloud"
description: "Как настроить проксирование S3-бакета через Nginx: ограничение доступа по IP через политику бакета, базовая конфигурация прокси с кэшированием и установка SSL-сертификата через Certbot."
---

> Полный индекс документации для ИИ-агентов: [llms.txt](https://timeweb.cloud/llms.txt).

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

## Установка Nginx

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

```shell
sudo apt update
sudo apt install nginx
```

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

```shell
sudo systemctl status nginx
```

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

```shell
sudo systemctl start nginx
sudo systemctl enable nginx
```

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

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

Чтобы открыть доступ к бакету с IP сервера, задайте политику бакета с помощью [AWS CLI](https://timeweb.cloud/docs/s3-storage/tools/aws-cli). Для этого создайте файл `bucket-policy.json` с содержимым:

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

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

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

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

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

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

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

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

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

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

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

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

```shell
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`:

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

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

```shell
sudo nginx -t
```

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

```shell
sudo systemctl restart nginx
```

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

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

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

```shell
sudo apt install certbot python3-certbot-nginx
```

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

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

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