Как прикрыть доступ личерам под апачем, я уже говорил. А теперь поговорим как заблокировать доступ к ресурсам используя 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; то в лог-файл ничего не попадает (не забывайте про это).
Надеюсь помог, удачки!