Как можно настроить NGINX так, чтобы запретить доступ к файлу напрямую, но разрешить доступ только с определенного домена?

Как настроить конфигурацию NGINX на первом сайте (site1.com), чтобы запретить прямой доступ к файлу site1.com/files/file.tpl, но при этом разрешить доступ к этому файлу с домена site2.com? Скрипт, который я пробовал, закрывает прямой доступ, но также блокирует доступ с другого сайта. Нужно найти решение, которое позволит разрешить доступ к файлу с site2.com, но запретить его напрямую с site1.com.
  • 19 января 2024 г. 10:11
Ответы на вопрос 2
Вы можете настроить NGINX, чтобы разрешить доступ к определенному файлу только в том случае, если запрос приходит от определенного домена (site2.com), и запретить прямой доступ. Чтобы сделать это, вам понадобится использовать модуль `ngx_http_referer_module` для проверки заголовка `Referer` в HTTP запросе.

Для начала откройте конфигурационный файл NGINX для сайта (обычно находится в `/etc/nginx/conf.d/` или `/etc/nginx/sites-available/`), и добавьте следующую директиву внутри `server` блока для site1.com:

```nginx
server {
    # ... Прочие настройки сервера ...

    location /files/ {
        # Запретить все запросы, где заголовок Referer не соответствует site2.com
        if ($http_referer !~* ^(http://|https://)site2.com) {
            return 403;
        }

        # ... здесь могут быть другие настройки для обработки файлов...
    }

    # ... Прочие настройки сервера ...
}
```

В этой конфигурации все запросы к `/files/` будут проверяться на то, содержит ли заголовок `Referer` домен `site2.com`. Если нет, доступ будет заблокирован с HTTP статусом 403 Forbidden.

Обратите внимание, что проверка заголовка `Referer` не является надежным средством защиты, поскольку этот заголовок может быть подделан. Также, некоторые пользователи или прокси-серверы могут полностью убирать этот заголовок из запросов.

Если вам нужен более надежный способ контроля доступа, вы можете использовать токены аутентификации, cookies или другой метод, который будет устанавливать и проверять ваш сервер приложений или скрипт, и только после этого предоставляет доступ к файлам.

Не забывайте также перезагрузить NGINX после изменения его конфигурации, чтобы применить изменения:

```bash
sudo nginx -t    # проверить конфигурацию на наличие ошибок
sudo systemctl reload nginx  # перезагрузить NGINX, если на предыдущем шаге ошибок не было
```

Также стоит помнить, что изменение настроек NGINX должно быть продуманным и осторожным, чтобы не застревать в ошибках конфигурации или не создавать незапланированных брешей в безопасности вашего сервера.
Для запрета напрямую доступа к файлу кроме запросов с определенного домена вам необходимо использовать директиву valid_referers в блоке location . 

Вот пример конфигурации:


В данном примере, example.com является разрешенным доменом, с которого разрешены запросы к файлу по указанному пути /path/to/file. Если запрос идет с другого домена или напрямую, то сервер возвращает код состояния 403 "Forbidden".

Обратите внимание на необходимость добавления модуля ngx_http_referer_module при сборке NGINX, так как эта директива зависит от него.
Похожие вопросы