BingBot получает ошибку 404 при существующей странице

12 3
I
На сайте с 04.06.2010
Offline
81
2220

Братцы, возникла проблема: робот BingBot периодически получает 404 ошибку

Есть site.ru с региональными поддоменами reg1.site.ru, reg2.site.ru, ... regN.site.ru

На каждом поддомене 2000-3000 страниц

Сервер - Apache/2.0.55

В последний месяц повадился заходить BingBot. Не просто заходит, а фактически не вылезает - по логам читает до 5 страниц в секунду. Банить не хотелось бы, т.к. какой-никакой трафик с Бинга идет (до 200 уников в сутки).

Собственно о проблеме:

Глянул я в error.log - все забито строкой типа:

[Wed Oct 02 20:12:45 2013] [error] [client 157.55.32.100] script 'C:/WWW/default/pag1.php' not found or unable to stat

C:/WWW/default/ - директория по-умолчанию оставлена для несуществующих поддоменов и по идее туда никто попадать вообще не должен. Начал разбираться, кто такой настырный и тупой, в итоге работал с access.log

Для него прописал в _httpd.conf:

LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" \"%{Host}i\" \"%{HTTP_HOST}e\" \"%{SERVER_NAME}e\"" combined

В итоге в access.log собрались подобные записи:

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.vedun.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" "-" "-"

Не поленился, в Verify Bingbot Tool проверил IP - действительно признали своего:

Verdict for IP address 157.55.32.100:
Yes - this IP address is a verified Bingbot IP address. Name: msnbot-157-55-32-100.search.msn.com.

По логам видно, что один и тот же бот всегда передает HOST в заголовке, а HTTP_HOST и SERVER_NAME - когда как.

Насколько я понимаю - конфиг Apache определяет чего ему делать с разными поддоменами в секции VIRTUALHOST, сравнивая с полученным параметром SERVER_NAME. А так как периодически он приходит пустой, то срабатывает дефолтное правило и он отправляется в директорию ошибков, а там соответствующих страниц нет и формируется ошибка 404.

Соответственно вопрос - как правильно поступить? Я пока вижу 2 варианта:

1. В дефолтной директории выводить только 1 страницу с кодом(!) ошибки 404 и прописать жесткий редирект на нее

2. Каким-то образом на уровне конфига Apache заменять пустой HTTP_HOST+SERVER_NAME на Host из заголовка

Прошерстил все, что можно - ничего похожего не нашел. Что посоветуете?

Всё, что не убивает, делает Вас сильнее (c) Платон Щукин
izbushka
На сайте с 08.06.2007
Offline
110
#1
Iggo:
всегда передает HOST в заголовке, а HTTP_HOST и SERVER_NAME - когда как.

HOST - это заголовок, да.

Остальное все нет.

HTTP_HOST - это переменная окружения, которая определяется по этому заголовку

SERVER_NAME - это то, что задано в конфиге сервера.

Т.е. к клиенту эти две переменных отношения не имеют

I
На сайте с 04.06.2010
Offline
81
#2

Т.е. HOST и HTTP_HOST должны всегда совпадать?

Тогда как получается, что запрос к идентичным страницам настолько разный:

"www.reg1.site.ru" "www.reg1.vedun.ru" "www.reg1.site.ru"

или

"www.reg1.site.ru" "-" "-"

Rewrit'ами не баловался...

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

siv1987
На сайте с 02.04.2009
Offline
427
#3

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

S2
На сайте с 16.12.2007
Offline
44
#4
Iggo:
Братцы, возникла проблема: робот BingBot периодически получает 404 ошибку
Есть site.ru с региональными поддоменами reg1.site.ru, reg2.site.ru, ... regN.site.ru
"www.reg2.site.ru" "www.reg2.site.ru"
скип

Предлагаю копнуть в сторону:

1 reg2.site.ru или www.reg2.site.ru? Какой правильный или оба существуют?

2 Проблема только на reg3 / reg4 или на всех поддоменах?

3 Есть ли в конфиге Апача UseCanonicalName Off?

3 Если пользуете nginx, почитайте еще вот эту статью,

http://habrahabr.ru/post/166855/

I
На сайте с 04.06.2010
Offline
81
#5
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, статью обязательно гляну

I
На сайте с 04.06.2010
Offline
81
#6

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

Mik Foxi
На сайте с 02.03.2011
Offline
1214
#7
Iggo:
Братцы, неужели ни у кого подобного нет - не поленитесь, гляньте логи?

Дело в настройках вашего сервера, у меня он как и положено - получает 444 :-D

Антибот, антиспам, веб фаервол, защита от накрутки поведенческих: https://antibot.cloud/ (Зеркало: https://антибот.рф/ ) Форум на замену серчу: https://foxi.biz/
izbushka
На сайте с 08.06.2007
Offline
110
#8
Iggo:
Соответственно вопрос - как правильно поступить? Я пока вижу 2 варианта:
1. В дефолтной директории выводить только 1 страницу с кодом(!) ошибки 404 и прописать жесткий редирект на нее
2. Каким-то образом на уровне конфига Apache заменять пустой HTTP_HOST+SERVER_NAME на Host из заголовка

Я не понял чего вы хотите..

1. А что у вас несколько страниц выводится, или что?

2. Зачем его заменять? Какая цель?

I
На сайте с 04.06.2010
Offline
81
#9
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

izbushka
На сайте с 08.06.2007
Offline
110
#10
Iggo:
Суть: похоже BingBot периодически передает пустые HTTP_HOST (SERVER_NAME) на все имеющиеся поддомены. При этом Host в заголовке запроса не пустой.

Еще раз. Клиент (бот, броузер) не передает ни HTTP_HOST, ни SERVER_NAME. Он передает только HOST. Если он его не передает, то HTTP_HOST будет пустой. SERVER_NAME (если Apache) зависит от UseCanonicalName, и будет либо браться из конфига сервера, либо тоже из заголовка HOST.

Я так и не понял что вы хотите..

Надо отдавать то, что на самом деле есть. Если страницы нет - 404, если есть - 200. Какая разница кто это, бот или не бот?

12 3

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий