Nginx: запретить прямой доступ к статическим файлам

#nginx

#nginx

Вопрос:

Я некоторое время искал, но не смог найти ничего, что соответствовало бы моим потребностям. Мне не нужна защита от горячих ссылок, как бы мне ни хотелось запретить людям напрямую обращаться к моим файлам. Допустим:

Мои website.com запросы website.com/assets/custom.js , это сработало бы, но я бы хотел, чтобы посетители, которые напрямую посещают этот файл, получали 403 status code или что-то в этом роде. Я действительно понятия не имею, возможно ли это, и у меня нет никаких логических шагов в голове..

С уважением!

Комментарии:

1. Покажите вашу конфигурацию nginx (часть server { server_name website.com ...} )

2. @mr_tron это очень, очень просто , конфигурация по умолчанию, это статический поддомен, поэтому в нем есть root и server_name !

3. Я не совсем понимаю, чего вы хотите. У вас есть некоторый статический файл без динамического генерирующего содержимого (например: index.html, main.css and logo.png ) и вы хотите, чтобы люди могли загружать файлы, main.css и logo.png только если они открыты index.html в браузере и в этом файле попробуйте получить main.css и logo.png ?

4. Да, я хочу, чтобы они могли видеть файл «logo.png» через index.html , но не путем прямого доступа static/logo.png

Ответ №1:

Вы можете использовать модуль nginx refererer:http://nginx.org/en/docs/http/ngx_http_referer_module.html. Что-то вроде этого:

 server {
    listen 80;
    server_name website.com;
    root /var/www/website.com/html ;
    location /assets/ {
        valid_referers website.com/ website.com/index.html website.com/some_other_good_page.html ;
        if ($invalid_referer) {
            deny all;
        }
    }
}
  

Эта конфигурация защищает assets каталог. Но помните, что это не гарантировано и работает только для браузера — любое тело может эмулировать действительный запрос с помощью curl или telnet. Для истинной безопасности вам необходимо использовать динамические сгенерированные страницы с динамическими сгенерированными ссылками.

Вам не нужно создавать переменную $invalid_referer, поскольку она устанавливается модулем nginx.

Комментарии:

1. Я ничего не знаю о nginx, но разве вам не нужно где-то определять переменную $invalid_referer?

2. @MichaelRogers это устанавливается модулем refererer

3. это хорошее решение, но я думаю, что что-то могло измениться. Вместо deny all; которого выдается ошибка, я использовал return 403; , и это работает.

Ответ №2:

Если ваши экземпляры для разработки на базе nginx отображаются в результатах поиска Google, есть быстрый и простой способ запретить поисковым системам обходить ваш сайт. Добавьте следующую строку в блок location вашего файла конфигурации virtualhost для блока, который вы хотите предотвратить обходом.

 add_header  X-Robots-Tag "noindex, nofollow, nosnippet, noarchive";
  

Ответ №3:

Вы можете просто запретить доступ к любой папке или файлу, просто поместив эти строки рядом с названием ваших папок

 location ~ /(no_access_folder|folder_2)
{
     deny all;
     return 403;
}
  

Комментарии:

1. Но это также ограничивает запрос, выполняемый веб-приложением.

2. Есть ли какой-либо способ, с помощью которого я могу воспроизводить видео на веб-сайте, но также ограничить прямой доступ к ним?

3. @vivekascoder В вопросе задается вопрос о предотвращении прямого доступа. Таким образом, это заблокирует прямой доступ к файлам, но вместо этого разработчик может получить доступ и направить запрос с помощью php и htaccess.

4. @vivekascoder да, вы можете сделать это с помощью PHP или Node и т.д. Вы можете перенаправить запрос и отправить пользовательский ответ с помощью php, содержащий ваше видео в виде фрагмента или навалом