Рвем соединение при несуществующей $URI. Nginx

Ко мне очень часто заваливают всякие какеры с запросами вида:

65.75.245.219 - - [25/Apr/2010:19:47:05 +0600] "GET /phpmyadmin/main.php HTTP/1.0" 404 0
65.75.245.219 - - [25/Apr/2010:19:47:06 +0600] "GET /phpMyAdmin/main.php HTTP/1.0" 404 0
65.75.245.219 - - [25/Apr/2010:19:47:06 +0600] "GET /mysql/main.php HTTP/1.0" 404 0
65.75.245.219 - - [25/Apr/2010:19:47:07 +0600] "GET /PMA/main.php HTTP/1.0" 404 0

не надо долго думать над увиденным чтоб понять что такие запросы к серверу генерируются дабы пошукать в базе данных вашего ресурса. У меня не установлен PhpMyAdmin поэтому особо я никогда и не переживал по данному вопросу, но nginx был настроен так что при запросе несуществующей страницы происходил редирект на главную. Для человека перешедшего/набравшего неправильный URI такой редирект конечно более приятен чем 404 Not Found, но есть же наглые боты которые начинают генерировать по 1-5 запросов в секунду и жадно жрать все ту же главную страницу если запрашиваемого документа несуществует на сервере. Нам это грозит лишней нагрузкой на сервер и конечно же забиванием интернет канала бесполезным траффиком. После недолгого раздумья сделал чтобы при запросе несуществующей страницы nginx просто рвал соединение с клиентом без отдачи какой либо ошибки выдавая 444. Прописать это можно как на уровне сервера так и в location приведу свой вариант:

location / {
root /srv/http;
index index.html;
#error_page 404 /;
if ( !-e $request_filename ) {
return 444; }
}

Последние 2 строки означают что при запросе несуществующего файла nginx возвратит нестандартную ошибку 444. Что в свою очередь приведет к закрытию соединения. Браузеры эту ошибку не отображают, на экране просто ничего не отобразится в данном случае. Также существует директива empty_gif которая для клиента перешедшего по неправильной ссылке отдает однопиксельный прозрачный gif, браузер также не отобразит ничего.

Пример конфигурации для empty_gif взятый с sysoev.ru

location = /_.gif {
empty_gif;
}

Оцените статью