izbushka: Я не думаю, что у Bing бота, если это он (смотрели IP?), "некорректно сформулирован заголовок".
Скорее всего, это вполне корректные запросы, например, по IP. Где он берет такие ссылки? Сложно сказать, видимо, где-то берет. В таком случае он должен попадать на DefaultHost в апаче. Можете поставить с него редирект на правильный домен, если хотите.
BingaBonga - точняк: в Verify Bingbot Tool проверил IP - действительно признали своего
Если бы в Host стоял тупо наш IP - он бы попал в Default, но HOST в логе остался бы. Глянул только что логи - реденько так попадаются Host="xxx.xxx.xxx.xxx:80" в основном школьники ломятся к phpMyAdmin
Если бы с того же IP бота не проходили и корректные запросы - грешил бы на Апач.
Но ведь он паразит просит разные поддомены (версия, что просят просто IP отпадает - Host показывал бы первый дефолтовый домен)
Redirect на основной домен ставить не хочется - ибо нефиг через IP лазать!!! :)
Спасибо за направления, кое-что критичное подправил, остался уже чисто академический интерес.
Получится разобраться и победить - отпишусь!!!
---------- Добавлено 03.10.2013 в 21:50 ----------
Sanches27: +1
Iggo, cпасибо за ответы
Я бы на вашем месте переформулировал вопрос - почему мой Апач при определенных обстоятельствах выдает пустой "HTTP_HOST". Потому что следующий вопрос не "может ли мне это вылезти боком" а "Когда вылезет, сколько ущерба будет :("
И начал копать
1 Что изменилось на сервере (версии apache, php etc) непосредственно перед тем, как начали появляться ошибки.
2 Если хоть в 1м .htaccess поддоменов есть редирект-директивы, переключил бы лог редиректов в отладку и покурил
3 Подвеслил бы на дефолтную страницу на пару дней дамп заголовка в файл (php getallheaders() ) и покурил бы результат.
4 У поддоменов свои IP или все на 1м? Менялся ли IP/хостер/DNS перед возникновением проблем?
5 Что будет, если запросить страницу на поддомене с левым портом? через https? через https с левым портом?
6 Что bingbot запрашивал непосредсвенно до и после получения 404 ошибки?
Кстати, что за дефисы в вашем логе перез IP? просто отбили каждую строчку?
PS. Если bingbot совсем задосил, тормозните его в robots.txt через Crawl-delay
1 Изменений не было около полугода (apache, php, hosts, mysql, .htaccess)
2 Редиректов не было нигде
3 ПОЖАЛУЙ ВОСПОЛЬЗУЮСЬ!!! Как понял - запись в файл значений getallheaders()
4 У поддоменов один IP. DNS не менялся, хостер тот же, сервер свой Collocation. Правда месяц назад хостер собирался менять свои маршрутизаторы, хабы или еще какое-то труднопроизносимое :)
5 Слушает только 80 порт, соответственно выдает Веб страница недоступна
6 Когда что - просит разные страницы разных поддоменов. Системы для "поломки" уловить не смог
Дефисы - это мне показалось, что так будет читабельнее и красивше:)
Crawl-delay энто здорово, но на сотне поддоменов он же эти 3 секунды для каждого брать будет.
P.S. соберусь с мыслями и воспользуюсь советом №3 - главное, чтоб этот подлец никуда не сбег. А то сейчас глянул логи - с 18:00 не появлялся. Может рабочий день у него закончился:)
izbushka: Вот тут и тут можете посмотреть примеры заголовка host и переменных HTTP_HOST, SERVER_NAME
Внимательно-внимательно прочитал обе ссылки плюс "вправо-влево" от них. В довесок ко всему еще раз глянул логи.
Статьи 100%-ной ясности не внесли. Туманно маячит, что у запросов от бота которые вылетели мог быть некорректно сформулирован заголовок и соответственно HTTP_HOST Апачем не вырезался (при том, что параметр Host в заголовке присутствует) - как итог ошибка 404. Бот с того же IP адреса через некоторое время передает запрос, который абсолютно корректно отрабатывается.
Посмотрел копии логов с начала года - такая ситуация пошла с середины сентября (никаких изменений последние полгода не вносилось)
На итог получается - BingBot'ом так и задумано, значит ошибка 404 есть правильно.
Братцы, развейте сомнения, скажите что я молодец, все понял правильно и наконец-то могу взять с полки пирожок :)
izbushka: Еще раз. Клиент (бот, броузер) не передает ни HTTP_HOST, ни SERVER_NAME. Он передает только HOST. Если он его не передает, то HTTP_HOST будет пустой. SERVER_NAME (если Apache) зависит от UseCanonicalName, и будет либо браться из конфига сервера, либо тоже из заголовка HOST.
Я так и не понял что вы хотите.. Надо отдавать то, что на самом деле есть. Если страницы нет - 404, если есть - 200. Какая разница кто это, бот или не бот?
Так в том-то и загвоздка, что для access.log прописал формат записи с выводом Host, HTTP_HOST, SERVER_NAME:
Т.е. по логам - 1, 2 запись - все отработало правильно, Apache перешел в соответствующую директорию c:/www/reg - где обрабатываются все регионы
А вот 3 и 4 запись - показывают пустой HTTP_HOST, но не пустой Host www.reg3.site.ru и www.reg4.site.ru Соответственно переходят в дефолтную директорию, где и получают свою законную 404 страничку.
UseCanonicalName стоит Off.
По ходу общения с Вами, существенно сузился круг подозреваемых :)
Вопрос уже получается следующий: почему у части запросов от BingBot "теряется" HTTP_HOST, при непустом Host?
izbushka: Я не понял чего вы хотите..
1. А что у вас несколько страниц выводится, или что?
2. Зачем его заменять? Какая цель?
По пунктам:
1. В дефолтной директории посмотрел - упустили - нет 404 страницы - вываливается Апачевский 404 NotFound
2. Заменить исключительно с тем, чтобы правильно отработать - если бот стучится по адресу: www.reg1.site.ru/page1.php, чтобы ему соответственно выводилась страничка page1 данного региона.
Похоже объясняльщик из меня хреновый:)
Попробую еще лаконичней.
Суть: похоже BingBot периодически передает пустые HTTP_HOST (SERVER_NAME) на все имеющиеся поддомены. При этом Host в заголовке запроса не пустой.
Вопрос:
- это коряво отрабатывает Apache или BingBot преднамеренно подменяет переменную HTTP_HOST
- если это козни бота, то как правильно поступить по теории сайтостроительства:)
а. выдать страницу ошибки и 404 код
б. попытаться отредиректить, подменив пустой HTTP_HOST на известный www.reg1.site.ru
Ну вот, когда коту делать нечего - он сидит и ... кодит
Занялся 3-м вариантом
В дефолтном блоке есть .htaccess:
RewriteEngine on
Options +FollowSymlinks
RewriteBase /
RewriteCond %{REQUEST_URI} !^(.*)/index\.php.*
RewriteRule (.*) /index.php [R=301,L]
В index.php (единственный файл который выводится всегда и на который соответственно редиректится все) в конце добавил
<?php
$f=fopen("log\my.log",'a');
flock ($f,2);
$HDate=Date('Y-m-d H:i:s');
fwrite($f,"--- $HDate\n");
foreach (getallheaders() as $name => $value)
{
fwrite($f,"$name: $value\r\n");
};
fwrite($f,"\r\n");
fclose($f);
?>
Ввел несуществующий поддомен+несуществующую страницу zzz.site.ru/pageX.php, соответственно перебросило на zzz.site.ru/index.php
В my.log увидел аж три записи:
--- 2013-10-04 01:23:11
Host: zzz.site.ru
Connection: keep-alive
Cache-Control: max-age=0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
User-Agent: Mozilla/5.0 (Windows NT 6.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.76 Safari/537.36
Accept-Encoding: gzip,deflate,sdch
Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4
--- 2013-10-04 01:23:11
Host: zzz.site.ru
Connection: keep-alive
User-Agent: Mozilla/5.0 (Windows NT 6.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.76 Safari/537.36
Accept: */*
Referer: http://zzz.site.ru/index.php
Accept-Encoding: gzip,deflate,sdch
Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4
--- 2013-10-04 01:23:11
Host: zzz.site.ru
Connection: keep-alive
Accept: */*
User-Agent: Mozilla/5.0 (Windows NT 6.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.76 Safari/537.36
Accept-Encoding: gzip,deflate,sdch
Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4
Пока не понял, с чем связано 3 записи - м.б. установленный у меня RDS бар
Зато вот пошел BingBot:
access.log:
157.56.93.83 - - [04/Oct/2013:01:24:58 +0400] "GET /pageN.php HTTP/1.1" 301 342 "-" "Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)" "www.reg1.site.ru" "-" "-"
А вот что этот гаденыш оставил в my.log (всего 1 запись)
--- 2013-10-04 01:24:58
Cache-Control: no-cache
Connection: Keep-Alive
Pragma: no-cache
Accept: */*
Accept-Encoding:
From: bingbot(at)microsoft.com
Host: www.reg1.site.ru
User-Agent: Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)
Для www.reg1.site.ru четко прописана секция в httpd.conf, но понятно, что он туда не попадает.
izbushka, Sanches27, уважаемые, есть мысли?
Я не думаю, что у Bing бота, если это он (смотрели IP?), "некорректно сформулирован заголовок".
Скорее всего, это вполне корректные запросы, например, по IP. Где он берет такие ссылки? Сложно сказать, видимо, где-то берет. В таком случае он должен попадать на DefaultHost в апаче. Можете поставить с него редирект на правильный домен, если хотите.
BingaBonga - точняк: в Verify Bingbot Tool проверил IP - действительно признали своего
Если бы в Host стоял тупо наш IP - он бы попал в Default, но HOST в логе остался бы. Глянул только что логи - реденько так попадаются Host="xxx.xxx.xxx.xxx:80" в основном школьники ломятся к phpMyAdmin
Если бы с того же IP бота не проходили и корректные запросы - грешил бы на Апач.
Но ведь он паразит просит разные поддомены (версия, что просят просто IP отпадает - Host показывал бы первый дефолтовый домен)
Redirect на основной домен ставить не хочется - ибо нефиг через IP лазать!!! :)
Спасибо за направления, кое-что критичное подправил, остался уже чисто академический интерес.
Получится разобраться и победить - отпишусь!!!
---------- Добавлено 03.10.2013 в 21:50 ----------
+1
Iggo, cпасибо за ответы
Я бы на вашем месте переформулировал вопрос - почему мой Апач при определенных обстоятельствах выдает пустой "HTTP_HOST". Потому что следующий вопрос не "может ли мне это вылезти боком" а "Когда вылезет, сколько ущерба будет :("
И начал копать
1 Что изменилось на сервере (версии apache, php etc) непосредственно перед тем, как начали появляться ошибки.
2 Если хоть в 1м .htaccess поддоменов есть редирект-директивы, переключил бы лог редиректов в отладку и покурил
3 Подвеслил бы на дефолтную страницу на пару дней дамп заголовка в файл (php getallheaders() ) и покурил бы результат.
4 У поддоменов свои IP или все на 1м? Менялся ли IP/хостер/DNS перед возникновением проблем?
5 Что будет, если запросить страницу на поддомене с левым портом? через https? через https с левым портом?
6 Что bingbot запрашивал непосредсвенно до и после получения 404 ошибки?
Кстати, что за дефисы в вашем логе перез IP? просто отбили каждую строчку?
PS. Если bingbot совсем задосил, тормозните его в robots.txt через Crawl-delay
Спасибо за помощь, отвечаю:
1 Изменений не было около полугода (apache, php, hosts, mysql, .htaccess)
2 Редиректов не было нигде
3 ПОЖАЛУЙ ВОСПОЛЬЗУЮСЬ!!! Как понял - запись в файл значений getallheaders()
4 У поддоменов один IP. DNS не менялся, хостер тот же, сервер свой Collocation. Правда месяц назад хостер собирался менять свои маршрутизаторы, хабы или еще какое-то труднопроизносимое :)
5 Слушает только 80 порт, соответственно выдает Веб страница недоступна
6 Когда что - просит разные страницы разных поддоменов. Системы для "поломки" уловить не смог
Дефисы - это мне показалось, что так будет читабельнее и красивше:)
Crawl-delay энто здорово, но на сотне поддоменов он же эти 3 секунды для каждого брать будет.
P.S. соберусь с мыслями и воспользуюсь советом №3 - главное, чтоб этот подлец никуда не сбег. А то сейчас глянул логи - с 18:00 не появлялся. Может рабочий день у него закончился:)
Вот тут и тут можете посмотреть примеры заголовка host и переменных HTTP_HOST, SERVER_NAME
Внимательно-внимательно прочитал обе ссылки плюс "вправо-влево" от них. В довесок ко всему еще раз глянул логи.
Статьи 100%-ной ясности не внесли. Туманно маячит, что у запросов от бота которые вылетели мог быть некорректно сформулирован заголовок и соответственно HTTP_HOST Апачем не вырезался (при том, что параметр Host в заголовке присутствует) - как итог ошибка 404. Бот с того же IP адреса через некоторое время передает запрос, который абсолютно корректно отрабатывается.
Посмотрел копии логов с начала года - такая ситуация пошла с середины сентября (никаких изменений последние полгода не вносилось)
На итог получается - BingBot'ом так и задумано, значит ошибка 404 есть правильно.
Братцы, развейте сомнения, скажите что я молодец, все понял правильно и наконец-то могу взять с полки пирожок :)
Еще раз. Клиент (бот, броузер) не передает ни HTTP_HOST, ни SERVER_NAME. Он передает только HOST. Если он его не передает, то HTTP_HOST будет пустой. SERVER_NAME (если Apache) зависит от UseCanonicalName, и будет либо браться из конфига сервера, либо тоже из заголовка HOST.
Я так и не понял что вы хотите..
Надо отдавать то, что на самом деле есть. Если страницы нет - 404, если есть - 200. Какая разница кто это, бот или не бот?
Так в том-то и загвоздка, что для access.log прописал формат записи с выводом Host, HTTP_HOST, SERVER_NAME:
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" \"%{Host}i\" \"%{HTTP_HOST}e\" \"%{SERVER_NAME}e\"" combined
А этот паразит в некоторых случаях где-то теряет HTTP_HOST (с Ваших слов понял, что может быть проблема в Apache)
- 157.55.32.100 - - [02/Oct/2013:18:36:08 +0400] "GET /page1.php?id=1 HTTP/1.1" 200 5122 "-" "Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)" "www.reg1.site.ru" "www.reg1.site.ru" "www.reg1.site.ru"
- 157.55.32.100 - - [02/Oct/2013:18:36:08 +0400] "GET /page2.php?id=2 HTTP/1.1" 200 4864 "-" "Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)" "www.reg2.site.ru" "www.reg2.site.ru" "www.reg2.site.ru"
- 157.55.32.100 - - [02/Oct/2013:18:35:53 +0400] "GET /page3.php?id=3 HTTP/1.1" 404 315 "-" "Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)" "www.reg3.site.ru" "-" "-"
- 157.55.32.100 - - [02/Oct/2013:18:35:53 +0400] "GET /page4.php?id=4 HTTP/1.1" 404 315 "-" "Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)" "www.reg4.site.ru" "-" "-"
Т.е. по логам - 1, 2 запись - все отработало правильно, Apache перешел в соответствующую директорию c:/www/reg - где обрабатываются все регионы
А вот 3 и 4 запись - показывают пустой HTTP_HOST, но не пустой Host www.reg3.site.ru и www.reg4.site.ru Соответственно переходят в дефолтную директорию, где и получают свою законную 404 страничку.
UseCanonicalName стоит Off.
По ходу общения с Вами, существенно сузился круг подозреваемых :)
Вопрос уже получается следующий: почему у части запросов от BingBot "теряется" HTTP_HOST, при непустом Host?
Я не понял чего вы хотите..
1. А что у вас несколько страниц выводится, или что?
2. Зачем его заменять? Какая цель?
По пунктам:
1. В дефолтной директории посмотрел - упустили - нет 404 страницы - вываливается Апачевский 404 NotFound
2. Заменить исключительно с тем, чтобы правильно отработать - если бот стучится по адресу: www.reg1.site.ru/page1.php, чтобы ему соответственно выводилась страничка page1 данного региона.
Похоже объясняльщик из меня хреновый:)
Попробую еще лаконичней.
Суть: похоже BingBot периодически передает пустые HTTP_HOST (SERVER_NAME) на все имеющиеся поддомены. При этом Host в заголовке запроса не пустой.
Вопрос:
- это коряво отрабатывает Apache или BingBot преднамеренно подменяет переменную HTTP_HOST
- если это козни бота, то как правильно поступить по теории сайтостроительства:)
а. выдать страницу ошибки и 404 код
б. попытаться отредиректить, подменив пустой HTTP_HOST на известный www.reg1.site.ru
Братцы, неужели ни у кого подобного нет - не поленитесь, гляньте логи?
Возможно бот обращается по ип адресу
Точно не оно.
Для IP адреса стоит блок:
<VirtualHost 19X.XXX.XXX.XXX>
ServerAdmin bla-bla-bla
DocumentRoot c:/www/default
ServerName 19X.XXX.XXX.XXX
ErrorLog logs/localhost_error.log
CustomLog logs/localhost_access.log combined
</VirtualHost>
И тогда бы не вылезал конкретный регион
---------- Добавлено 02.10.2013 в 22:42 ----------
Предлагаю копнуть в сторону:
1 reg2.site.ru или www.reg2.site.ru? Какой правильный или оба существуют?
2 Проблема только на reg3 / reg4 или на всех поддоменах?
3 Есть ли в конфиге Апача UseCanonicalName Off?
3 Если пользуете nginx, почитайте еще вот эту статью,
http://habrahabr.ru/post/166855/
1. Достучаться можно до обоих, в роботсе прописан главный Host с WWW
в config:
<VirtualHost reg2.site.ru>
ServerAdmin bla-bla-bla
DocumentRoot c:/www/reg
ServerName reg2.site.ru
ErrorLog logs/localhost_error.log
CustomLog logs/localhost_access.log combined
</VirtualHost>
<VirtualHost www.reg2.site.ru>
ServerAdmin bla-bla-bla
DocumentRoot c:/www/reg
ServerName www.reg2.site.ru
ErrorLog logs/localhost_error.log
CustomLog logs/localhost_access.log combined
</VirtualHost>
2. проблема вылезает на всех поддоменах
3. UseCanonicalName Off - присутствует в явном виде, УРЛы не преобразует
4. К сожалению/счастью стоит WinServer 2003 WEB Edition, статью обязательно гляну
Т.е. HOST и HTTP_HOST должны всегда совпадать?
Тогда как получается, что запрос к идентичным страницам настолько разный:
"www.reg1.site.ru" "www.reg1.vedun.ru" "www.reg1.site.ru"
или
"www.reg1.site.ru" "-" "-"
Rewrit'ами не баловался...
Куда копать - ума не приложу...
Да, блин. Прям как в зоопарке - наша ветка вообще не спит 🤪
Только-только начал "прыгать" в баре пока что по части проектов. Какой-то затяжнооооооооой прибалтийский аааааааааапппп :)