Задать вопрос
Cheizer
@Cheizer

Как в конфиге NGINX запретить напрямую доступ к файлу кроме запросов с определенного домена?

Есть сайт site1.com, на нем в папке files лежит файл file.tpl, есть еще и второй сайт site2.com, на котором я вывожу содержимое файла site1.com/files/file.tpl.

Как на первом сайте в конфиге NGINX запретить обращаться напрямую к файлу site1.com/files/file.tpl, но при этом разрешить обращаться к этому файлу с домена site2.com?

Пробовал так:

location ~* ^.+\.(?!html|php)[^.]+$ {
   if ($http_referer !~* (site2\.com)) {
       return 403;
    }
}

Закрывает обращение к файлу напрямую, но и закрывает от второго сайта, проверка не работает. Пробовал и другие варианты, ничего не работает.
  • Вопрос задан
  • 291 просмотр
Подписаться 1 Сложный Комментировать
Решения вопроса 1
@Kypidon4ik
Фрилансер, Wordpress developer
Для запрета напрямую доступа к файлу кроме запросов с определенного домена вам необходимо использовать директиву valid_referers в блоке location.

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

nginx
server {
    listen 80;
    server_name example.com;

    location /path/to/file {
        valid_referers none blocked example.com;
        if ($invalid_referer) {
            return 403;
        }
        
        # Дополнительная конфигурация для доступа к файлу
    }

    # Другая конфигурация сервера
}


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

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

Войдите, чтобы написать ответ

Похожие вопросы