Выбор виртуального хоста сервером (virtualhost matching)

[umka]
На сайте с 25.05.2008
Offline
456
1408

Всем привет!

Вот какой вопрос меня тревожит уже очень много лет (и в последнее время прямо спать спокойно не могу).

Если мы делаем name-based виртуальный хостинг, то при запросе несуществующего виртуального хоста веб-сервер отдаёт первый виртуальный хост на том IP, на который произошло подключение.

Собственно, вопрос, зачем он это делает? :)

Ведь у нас name-based хостинг и серверу известно, сущетвует ли хост с таким именем или нет. Почему бы просто не отдать 404?

Это можно сказать и про апач и про nginx.

И за примерами далеко ходить не нужно:

localhost:~ umka$ telnet ya.ru 80
Trying 93.158.134.3...
Connected to ya.ru.
Escape character is '^]'.
GET / HTTP/1.1
Host: google.com

HTTP/1.1 200 OK
Server: nginx
Date: Mon, 14 Mar 2011 01:18:04 GMT
Content-Type: text/html; charset=UTF-8
Connection: close
Cache-Control: no-cache,no-store,max-age=0,must-revalidate
Content-Length: 96723
Expires: Mon Mar 14 01:18:04 2011 GMT
Last-Modified: Mon Mar 14 01:18:04 2011 GMT
P3P: policyref="/w3c/p3p.xml", CP="NON DSP ADM DEV PSD IVDo OUR IND STP PHY PRE NAV UNI"
Set-Cookie: S=; path=/; expires=Fri, 16-Mar-2001 01:18:04 GMT
Set-Cookie: S=; domain=.yandex.ru; path=/; expires=Fri, 16-Mar-2001 01:18:04 GMT
Set-Cookie: yandexuid=437472991300065484; domain=.yandex.ru; path=/; expires=Thu, 11-Mar-2021 01:18:04 GMT
X-XRDS-Location: http://openid.yandex.ru/server_xrds/

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><meta http-equiv="X-UA-Compatible"content="IE=EmulateIE7"><meta http-equiv=Content-Type content="text/html;charset=UTF-8"><title>Яндекс</title><link rel="shortcut

Это он нам отдал контент от yandex.ru :)

Лог в помощь!
L
На сайте с 13.01.2011
Offline
132
#1

решение проблемы при запросе несуществующего виртуального хоста веб-сервер отдаёт первый виртуальный хост на этом ip -нужно создать любой домен (например my.ru в ispmanager(у меня он)) и повесить его первым на ip и на нем сделать html старничку с ошибкой или редирект куда надо.

Контакты-icq 535609 ()
M
На сайте с 16.09.2009
Offline
278
#2

Logger, Вы вопроса не поняли. Речь вовсе не о том, как "отдать 404" что кажется логичным ТС. Вопрос о том, почему оно не делает "зашибись" в понимании [umka]. Почему разработчики веб-серверов обрабатывают описанную ситуацию именно так.

Ответ очень простой. Это логично и правильно с точки зрения разработчика веб-сервера. Не нужно думать о создании каких-то специальных директив по поводу "странички 404 для виртуального хоста, которого нет" (вы же ее кастомизировать захотите, правда?).

Пользователь сам, при желании, подобное организует (пример привел Logger). Элементарная логика и здравый смысл.

Абонементное сопровождение серверов (Debian) Отправить личное сообщение (), написать письмо ().
[umka]
На сайте с 25.05.2008
Offline
456
#3
myhand:
Logger, Вы вопроса не поняли. Речь вовсе не о том, как "отдать 404" что кажется логичным ТС. Вопрос о том, почему оно не делает "зашибись" в понимании [umka]. Почему разработчики веб-серверов обрабатывают описанную ситуацию именно так.

Всё верно :) Чисто академический интерес. А как с этим бороться — известно.

myhand:
Ответ очень простой. Это логично и правильно с точки зрения разработчика веб-сервера. Не нужно думать о создании каких-то специальных директив по поводу "странички 404 для виртуального хоста, которого нет" (вы же ее кастомизировать захотите, правда?).

Просто мне это наоборот кажется нелогичным, когда сервер отдаёт то, чего у него как-бы и нет :)

Почему сервер Яндекса мне отдаёт "HTTP/1.1 200 OK", если я спрашиваю у него хост "google.com", которого у него на самом деле нет?

Ведь теоретически, если кто-то возьмёт пачку доменов, и нацелит их A-записи на ip-адрес какого-либо сайта, на котором обсуждаемая ситуация не обрабатывается, то появится куча дубликатов.

M
На сайте с 16.09.2009
Offline
278
#4
'[umka:
;8661232']Просто мне это наоборот кажется нелогичным, когда сервер отдаёт то, чего у него как-бы и нет :)
Почему сервер Яндекса мне отдаёт "HTTP/1.1 200 OK", если я спрашиваю у него хост "google.com", которого у него на самом деле нет?

А как веб-сервер узнает, что его "там нет". Телепатически что-ли? Самая обычная практика - если новая доменная запись должна указывать на домен по-умолчанию, то нам не нужно даже заводить там отдельный ServerAlias. Просто тупо направьте IN A запись на Ваш сервер - и все заработает.

К счастью, разработчики веб-серверов не решают данную ситуацию "правильно" - а дают ее решение в руки администратора.

'[umka:
;8661232']Ведь теоретически, если кто-то возьмёт пачку доменов, и нацелит их A-записи на ip-адрес какого-либо сайта, на котором обсуждаемая ситуация не обрабатывается, то появится куча дубликатов.

Дубликатов чего и зачем кому-то подобное нужно?

[umka]
На сайте с 25.05.2008
Offline
456
#5
myhand:
А как веб-сервер узнает, что его "там нет". Телепатически что-ли?

Они у него все в хеше. У апача, во всяком случае.

Апач же при чтении конфигурации берёт все айпишники, которые числятся как NameVirtualHost, и пихает их в хеш вида

{айпишник}=>[список структур virtualhost-ов, которые на нём висят]

И при получении запроса на какой-то айпишник (с указанным заголовком Host), прочёсывает этот список в поисках виртуального хоста с подходящим именем. Если не находит, то использует первый.

Так что он это отлично знает.

myhand:
Самая обычная практика - если новая доменная запись должна указывать на домен по-умолчанию, то нам не нужно даже заводить там отдельный ServerAlias. Просто тупо направьте IN A запись на Ваш сервер - и все заработает.

К счастью, разработчики веб-серверов не решают данную ситуацию "правильно" - а дают ее решение в руки администратора.
Дубликатов чего и зачем кому-то подобное нужно?

Дубликатов сайта с этого айпишника :)

Теоретически, можно, не утруждая себя работой, вот таким макаром сделать дубликаты разных сайтов на своих доменах, и если через какое-то время они обрастут ссылочной массой и тицами, можно уже сграбить и торговать ссылками )

Ну это как вариант.

Вот ещё вариант вредительства.

Можно сделать какое-то количество таких дубликатов и скормить их поисковым системам, и роботы будут создавать паразитную нагрузку. Т.к. фактически сайт один, а для роботов это разные сайты, которые непременно нужно проиндексировать :)

И такой ещё хак.

Если клиенту на виртуалке выдаётся выделенный ip, но ограниченное количество виртуальных хостов, то он может создать один виртуалхост, нацелить на этот ip ещё сотню доменов и развести их по разным директориям с помощью .htaccess :)

Boris A Dolgov
На сайте с 04.07.2007
Offline
215
#6

Тогда бы приходилось придумывать специальный способ указания дефолтного виртхоста, а это - больше документации, конфигурации и багов.

С уважением, Борис Долгов. Администрирование, дешевые лицензии ISPsystem, Parallels, cPanel, DirectAdmin, скины, SSL - ISPlicense.ru (http://www.isplicense.ru/?from=4926)
M
На сайте с 16.09.2009
Offline
278
#7
'[umka:
;8661945']Они у него все в хеше. У апача, во всяком случае.

В каком еще кеше? IN A запись для доменного имени показывает на IP сервера. Апач может про "сайт" при этом вообще ничего не знать. Нету у него такого сайта ни в конфигах, ни, тем более - "в кеше". То, что Вы интерпретируете как ненормальную ситуацию - вполне штатный режим работы для некоторых.

'[umka:
;8661945']Теоретически, можно, не утруждая себя работой, вот таким макаром сделать дубликаты разных сайтов на своих доменах, и если через какое-то время они обрастут ссылочной массой и тицами

А еще через некоторое время - вылетят из индекса. Если вобще туда попадут, учитывая неуникальность контента.

'[umka:
;8661945']Можно сделать какое-то количество таких дубликатов и скормить их поисковым системам, и роботы будут создавать паразитную нагрузку. Т.к. фактически сайт один, а для роботов это разные сайты, которые непременно нужно проиндексировать :)

Да без проблем. Заплатите несколько сотен доменов у регистратора - и вперед.

'[umka:
;8661945']И такой ещё хак.
Если клиенту на виртуалке выдаётся выделенный ip, но ограниченное количество виртуальных хостов, то он может создать один виртуалхост, нацелить на этот ip ещё сотню доменов и развести их по разным директориям с помощью .htaccess :)

Вы не пугайте своими "хаками" добрых людей на ночь. А лучше почитайте мануал апача и поймите, что ничего работать в таком случае не будет, покуда хостер этого сам не захочет (ну или если он придурок, не читающий документацию).

[umka]
На сайте с 25.05.2008
Offline
456
#8
myhand:
В каком еще кеше? IN A запись для доменного имени показывает на IP сервера. Апач может про "сайт" при этом вообще ничего не знать. Нету у него такого сайта ни в конфигах, ни, тем более - "в кеше". То, что Вы интерпретируете как ненормальную ситуацию - вполне штатный режим работы для некоторых.

Да не в кеше, а в хеше, который формируется при чтении конфига.

Вот тут написано, как он его формирует, и как он по нему шарит, при получении http-запроса:

http://httpd.apache.org/docs/2.2/vhosts/details.html

И к тому моменту, когда сервак получил http-запрос и прочесал весь этот хеш, он, разумеется, знает, есть ли в конфигурации тот хост, который запрошен в заголовке "Host:"

Странно, что нельзя какой-нибудь одной директивой взять и попросить его посылать нафиг все хосты, которые он не знает.

myhand:
А лучше почитайте мануал апача и поймите, что ничего работать в таком случае не будет, покуда хостер этого сам не захочет (ну или если он придурок, не читающий документацию).

Дык в том и беда, что если дополнительных усилий не приложить и не создать дефолтные хосты для всех айпишников, то описанная мной схема будет работать :)

(при условии, что у каждого юзера свой ip)

M
На сайте с 16.09.2009
Offline
278
#9
'[umka:
;8665223']Да не в кеше, а в хеше, который формируется при чтении конфига.

Ну замените оговорку хеш->кеш выше. Это что-то изменит?

'[umka:
;8665223']Странно, что нельзя какой-нибудь одной директивой взять и попросить его посылать нафиг все хосты, которые он не знает.

Ну так он "пошлет" также и вполне нормальную конфигурацию, которую я описал выше. Еще раз: то, что вы расцениваете как "неправильно" - некоторые люди просто используют. У них в конфиге апача/nginx нет в принципе некоторых доменов (как виртуальных хостов или алиасов), которые показывают на сервер.

'[umka:
;8665223']Дык в том и беда, что если дополнительных усилий не приложить и не создать дефолтные хосты для всех айпишников, то описанная мной схема будет работать :)

Если головой не думать - еще и не такое может работать. Апач виноват?

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