Это правило было моей идеей, так что вот мои размышления над ним.
В ходе очень большой выборки запросов я заметил, что настоящие веб-браузеры (IE, Firefox, Chrome, Konqueror , Opera и другие) всегда отправляли заголовок Accept. Но роботы не всегда это делали, в зависимости от множества факторов, таких как библиотека HTTP, компетенция программиста и т. Д.
Затем роботы притворялись веб-браузерами с поддельной строкой User-Agent иногда не хватало заголовка Accept.
Итак, идея заключалась в том, чтобы поймать роботов, которые притворяются веб-браузерами и делают это плохо, не отправляя заголовок Accept.
Для реализации этого правила вы должны ] также проверьте, что строка User-Agent начинается с «Mozilla». Блокировать нельзя, если не выполняются оба этих условия: пользовательский агент утверждает, что является веб-браузером, а заголовок Accept отсутствует.
if ($http_user_agent ~ ^Mozilla) {
set $block_missing_accept_header "Mozilla";
}
if ($http_accept = false) {
set $block_missing_accept_header "${block_missing_accept_header}NoAccept";
}
if ($block_missing_accept_header == "MozillaNoAccept") {
return 403;
}
Я думаю, что клиенты без пользовательского агента должны быть заблокированы.