Iggo

Рейтинг
81
Регистрация
04.06.2010
Интересы
Балет на льду, хоккей на траве (с) Ф.Раневская

Ну вот, когда коту делать нечего - он сидит и ... кодит

Занялся 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, уважаемые, есть мысли?

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

User-agent: bingbot
User-agent: msnbot
Allow: /
Crawl-delay: 3

Спасибо за помощь, отвечаю:

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:

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?

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

Братцы, неужели ни у кого подобного нет - не поленитесь, гляньте логи?

siv1987:
Возможно бот обращается по ип адресу

Точно не оно.

Для 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 ----------

Sanches27:
Предлагаю копнуть в сторону:
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'ами не баловался...

Куда копать - ума не приложу...

Да, блин. Прям как в зоопарке - наша ветка вообще не спит 🤪

Только-только начал "прыгать" в баре пока что по части проектов. Какой-то затяжнооооооооой прибалтийский аааааааааапппп :)

Всего: 156