Как прикрыть доступ личерам под апачем, я уже говорил. А теперь поговорим как заблокировать доступ к ресурсам используя nginx.
Разберем пример, на основе домена yapro.ru
1. Откройте конфигурационный файл вашего виртуального хоста, например: /etc/nginx/nginx.conf
2. Найдите там блок настроек виртуального хоста:
server {
...
}
3. Найдите в блоке настроек строку вида:
root /var/www/yapro.ru;
и добавьте после этой строки следующее:
location ~* ^.+\.(txt|ico|jpg|jpeg|gif|png|svg|js|css|mp3|ogg|mpe?g|avi|zip|gz|bz2?|rar|swf)$ {
access_log /var/log/nginx/yapro.ru.files;
location ~* ^.+\.(ico|jpg|jpeg|gif|png|svg|js|css|mp3|ogg|mpe?g|avi|zip|gz|bz2?|rar|swf)$ {
valid_referers
none
yapro.ru *.yapro.ru
~(.+)\.(yandex|google|yahoo|bing|facebook|subscribe|feedburner|mail|rambler|nigma|ask|qip|bing)\.([a-z]+)$
~^(yandex|google|yahoo|bing|facebook|subscribe|feedburner|mail|rambler|nigma|ask|qip|bing)\.([a-z]+)$
;
if ($invalid_referer = 1) {
return 403;
}
# ... ниже можно еще добавить правил
}
}
Все готово, осталось только сохранить конфиг-файл и перезапустить nginx.
Синтаксис: valid_referers none | blocked | server_names | строка ...;
$invalid_referer по-умолчанию равен 1, но значение будет равно пустой строке, если:
Указав none я разрешаю доступ к файлам для запросов без рефереров, чтобы поисковые боты могли читать файлы.
Директива valid_referers предполагает, что Вы просто перечислите дружественные домены, поэтому после none, в строке перечисляю все валидные рефереры
Значение blocked и server_names я не указывал, т.к. у меня все возможные домены указаны в строке.
Обратите внимание, я вложил один location в другой (во втором исключил расширение файла txt), вам такое вложение может быть не нужным.
Когда срабатывает условие if ($invalid_referer = 1) { и выполняется return 403; то в лог-файл ничего не попадает (не забывайте про это).
Надеюсь помог, удачки!