В Nginx можно ограничить доступ к определенным файлам, скриптам или каталогам, не предназначенным для того чтобы быть в общественном доступе и индексироваться поисковыми системами.
Для одного файла это можно сделать просто указав его имя в директиве location конфигурационного файла Nginx
location /administrator.php {
deny all;
}
Также можно прописать расширения и возвращать при обращению к файлу с одним из расширений ошибку 404.
location ~ \.(js|css|png|psd| crt| key| swf|ico|pdf|mov|fla|zip|rar |sql)$ {
try_files $uri =404;
}
На практике важным является запрет на доступ к файлам с расширением .sql, обозначающему дамп базы данных. Часто при переносе сайтов дампы оставляются в корневом каталоге сайта, откуда они могут быть скачаны роботами или вручную. Добавление расширения в location с запретом позволит избежать кражи данных из базы даже если дамп был оставлен в корне сайта.
Директива limit_req в Nginx
limit_req используется для ограничения доступа (скорости обработки запросов), но не их полного запрета. Директиву можно добавить в секции http и server и location nginx.conf
Чтобы директива работала Nginx должен быть собран с модулем gx_http_limit_req_module
Для limit_req существует две важные опции: zone и rate, а также ряд дополнительных.
- zone — позволяет определить зону разделяемой памяти, имя зоны может быть любым, после двоеточия в ее описании указывается объем, например 10m
- rate — задает максимальный размер всплеска запросов, обычно указывается в запросах в секунду
- burst — указывает максимальное количество запросов, при превышении burst запросы будут завершаться северной ошибкой
Если количество поступающих запросов превышает определяемые директивой пределы их обработка будет задерживаться до тех пор пока не достигнуто значение, указанное в директиве burst (при ее наличии).
nodelay может использоваться вместо rate и будет означать, что задерживать трафик не нужно.
Следующие правила ограничат количество возможных запросов с одного адреса до 30 в секунду.
limit_req_zone $binary_remote_addr zone=flood:10m rate=30r/s;
limit_req zone=flood nodelay
Подробно использование limit_req рассмотрено в документации