Я управляю несколькими серверами Mac OSX XServes для производственных веб-сайтов и недавно столкнулся с проблемой, связанной с сервером, разрешающим DNS некоторых сайтов. Дальнейшее расследование показало, что httpd.conf был настроен для прослушивания всех IP-адресов (порт 80), но конфигурации виртуального хоста применялись только к фактическому IP-адресу для домена (не localhost).
например (конфигурация от руки, вероятно, синтаксически некорректна и отсутствуют нерелевантные параметры): в httpd.conf: Listen 80
в domainA: 80.conf: ServerName domainA.com
Теперь в файле / etc / hosts была эта запись: 127.0.0.1 localhost 127.0.0.1 domainA.com
что произойдет, когда domainB.com вызовет domainA.com на том же компьютере, он будет использовать IP-адрес localhost. Следовательно, вместо использования правильной конфигурации virtualHost, он использовал конфигурацию по умолчанию (мне потребовалось так много времени, чтобы понять, но это имеет смысл)
Мне действительно не нужно получать доступ к доменам с localhost, поэтому мой вопрос: как лучше всего отключить apache от попыток доступа к конфигурации с помощью 127.0.0.1?
1) Закомментируйте запись «127.0.0.1 domainA.com» в / etc / hosts (это то, что я сделал, чтобы временно исправить это, но действительно ли это хорошее решение)?
2) Обновить файл httpd.conf для прослушивания только соответствующего IP-адреса 1.2.3.4 (Listen 1.2.3.4:80)?
Примечание: я временно выбрал вариант 1, потому что я использую конфигурацию Tenon и не был уверен в последствиях изменения их значения по умолчанию в «Слушать»
Ваш вариант 2 - правильный путь. Вы, вероятно, найдете Listen 80
в вашем httpd.conf, в котором говорится, что слушайте порт 80 на всех доступных интерфейсах. Изменив его на Listen 1.2.3.4:80
ограничит его этим адресом.
Следовательно, вместо использования правильной конфигурации virtualHost, он использовал конфигурацию по умолчанию (мне потребовалось так много времени, чтобы понять, но это имеет смысл)
Если вы используете виртуальные хосты на основе имен, это не должно быть проблемой. В этом случае Apache сопоставляет виртуальные хосты для запроса на основе имени хоста запроса; IP-адрес не имеет значения. Это становится проблемой только в том случае, если вы используете SSL (который в большинстве случаев требует виртуальных хостов на основе адреса или порта).
Есть ли какая-то особая причина, по которой вы перечисляете эти домены в файле локальных хостов? Если другие люди могут получить доступ к вашим серверам, это говорит о том, что у вас есть соответствующий DNS. Если вы действительно хотите, чтобы они были в файле локальных хостов, вы можете поместить их туда с их фактическим IP-адресом, а не создавать псевдонимы имен для localhost.