<-
Apache > HTTP Server > Documentation > Version 2.0

Проблемы Относительно DNS и Apacheа

эта страница могла быть получена в итоге с утверждением: не формируйте Apacheа таким способом, что это полагается на решение DNS для того, чтобы разобрать из файлов конфигурации. Если Apache требует, чтобы решение DNS разобрало файлы конфигурации тогда, ваш сервер может быть подчиненным проблемам надежности (то есть это не могло бы загрузить), или опровержение и воровство нападений обслуживания (включая пользователей, способных украсть хиты от других пользователей).

top

A Simple Example

<VirtualHost www.abc.dom>
ServerAdmin webgirl@abc.dom
DocumentRoot /www/abc
</VirtualHost>

для Apacheа, чтобы функционировать должным образом, это абсолютно должно иметь две информации о каждом действительном хозяине: ServerName и по крайней мере один IP адрес, который сервер свяжет и ответит на. Вышеупомянутый пример не включает IP адрес, таким образом Apache должен использовать DNS, чтобы найти адрес www.abc.dom . если по некоторым причинам DNS не доступен в то время, когда ваш сервер разбирает его config файл, то этот действительный хозяин не будет формироваться . не будет в состоянии ответить на любые хиты этому действительному хозяину (до Apacheской версии 1.2, которую сервер даже не загрузил бы).

предположим это www.abc.dom имеет адрес 10.0.0.1. Тогда рассмотрите этот отрывок конфигурации:

<VirtualHost 10.0.0.1>
ServerAdmin webgirl@abc.dom
DocumentRoot /www/abc
</VirtualHost>

на сей раз Apache должен использовать обратный DNS, чтобы найти ServerName для этого virtualhost. Если тот обратный поиск будет терпеть неудачу тогда, то это частично повредит virtualhost (до Apacheской версии 1.2, которую сервер даже не загрузил бы). Если действительный хозяин будет на основе названия тогда, то это эффективно будет полностью выведено из строя, но если это будет на основе IP тогда, то это будет главным образом работать. Однако, если Apacheу когда-либо придется производить полный URL для сервера, который включает название сервера, тогда это будет не в состоянии произвести действительный URL.

вот - отрывок, который избегает обеих из этих проблем:

<VirtualHost 10.0.0.1>
ServerName www.abc.dom
ServerAdmin webgirl@abc.dom
DocumentRoot /www/abc
</VirtualHost>

top

Denial of Service

есть по крайней мере две формы, в которые опровержение обслуживания может войти. Если Вы будете управлять версией Apacheа до версии 1.2 тогда, то ваш сервер не будет даже загружать, если один из двух упомянутых выше поисков DNS будет терпеть неудачу для любого из ваших действительных хозяев. В некоторых случаях этот поиск DNS, возможно, даже не под вашим контролем; например, если abc.dom является одним из ваших клиентов, и они управляют их собственным DNS, они могут вынудить ваш (пред1.2) сервер терпеть неудачу, загрузка просто, удаляя www.abc.dom отчет.

другая форма гораздо более коварна. Рассмотрите этот отрывок конфигурации:

<VirtualHost www.abc.dom>
  ServerAdmin webgirl@abc.dom
  DocumentRoot /www/abc
</VirtualHost>

<VirtualHost www.def.dom>
  ServerAdmin webguy@def.dom
  DocumentRoot /www/def
</VirtualHost>

предположим, что Вы назначили 10.0.0.1 на www.abc.dom и 10.0.0.2 к www.def.dom . кроме того, предположите это def.dom имеет контроль собственный DNS. С этим config Вы поместили def.dom в положение, где они могут украсть все движение, предназначенное к abc.dom . чтобы сделать так, все, что они должны сделать, установлено www.def.dom к 10.0.0.1. Так как они управляют их собственным DNS, который Вы не можете мешать им указать www.def.dom сделать запись везде, где они желают.

запросы, входящие к 10.0.0.1 (включая все те, где пользователи напечатали в URL формы http://www.abc.dom/whatever ) будет все служиться def.dom действительный хозяин. Лучше понимать, почему это случается, требует более всестороннего обсуждения того, как Apache совпадает поступающие запросы с действительным хозяином, который будет служить этому. Грубый документ, описывающий это is available .

top

The "main server" Address

дополнение name-based virtual host support в Apacheе 1.1 требует, чтобы Apache знал IP адрес (а) хозяина это httpd продолжается. Чтобы получить этот адрес, это использует любой глобальное ServerName (если подарок) или запросы функция C gethostname (который должен возвратить то же самое как печатание "hostname" в команде незамедлительно). Тогда это выполняет поиск DNS на этом адресе. В настоящее время нет никакого способа избежать этого поиска.

если Вы боитесь, что этот поиск мог бы терпеть неудачу, потому что ваш сервер DNS снижается тогда, Вы можете вставить hostname в /etc/hosts (где Вы вероятно уже имеете это так, чтобы машина могла загрузить должным образом). Тогда гарантируйте, что ваша машина формируется, чтобы использовать /etc/hosts когда DNS терпит неудачу. В зависимости от какого РТА Вы используете, это могло бы быть достигнуто, редактируя /etc/resolv.conf , или возможно /etc/nsswitch.conf .

если ваш сервер не должен выполнить DNS по любой другой причине тогда, Вы могли бы быть в состоянии избежать неприятностей с управлением Apache с HOSTRESORDER набор переменной окружающей среды к "местному". Это все зависит от того, какой РОТ и библиотеки решающего устройства Вы используете. Это также затрагивает CGIs, если Вы не используете mod_env управлять окружающей средой. Лучше консультироваться со страницами человека или ЧАСТО ЗАДАВАЕМЫМИ ВОПРОСАМИ для вашего РТА.

top

Tips to Avoid These Problems

top

Appendix: Future Directions

ситуация относительно DNS очень нежелательна. Для Apacheа 1.2 мы попытались заставить сервер по крайней мере продолжить загружать в случае неудавшегося DNS, но это не могло бы быть лучшим, мы можем сделать. В любом случае, требование использования явных IP адресов в файлах конфигурации очень нежелательно в сегодняшнем Интернете, где изменение нумерации - потребность.

возможная работа вокруг к воровству нападения обслуживания, описанного выше должна была бы выполнить обратный поиск DNS на IP адресе, возвращенном передовым поиском и сравнить два названия - в случае не соответствования, virtualhost будет инвалидами. Это требовало бы, чтобы обратный DNS формировался должным образом (который является кое-чем, что большинство admins является знакомым с из-за общего использования "двойных-обратных" поисков DNS серверами ПРОГРАММЫ ПЕРЕДАЧИ ФАЙЛОВ и обертками TCP).

в любом случае, это не кажется возможным, надежно загружают действительно-принятый сервер сети, когда DNS терпел неудачу, если IP адреса не используются. Частичные решения, типа выведения из строя частей конфигурации могли бы быть хуже чем не загрузка вообще в зависимости от того, чего webserver должен достигнуть.

поскольку HTTP/1.1 развернут и браузеры, и полномочия начинают выходить Host удар головой станет возможно избежать использования действительных хозяев на основе IP полностью. В этом случае, webserver не имеет никакого требования, чтобы сделать поиски DNS в течение конфигурации. Но на март 1997 эти особенности не были развернуты достаточно широко, чтобы быть помещенными в использование на критическом webservers.