Разрешение на виртуальный хост очень медленное в Mac OS X Lion

26

После обновления до Mac OS X Lion (от Snow Leopard) я заметил, что разрешение на виртуальный хост очень медленное (около 3 секунд). Я нашел несколько советов (например, не использовать домен .local), которые могут решить эту проблему, но они не относятся к моей настройке.

Моя настройка довольно проста: - Apache 2 (поставляется с Lion) - включен PHP - добавлено несколько виртуальных хостов - установлены пакеты Mail и SMTP Pear

Хост-файл Apache выглядит следующим образом:

127.0.0.1   localhost
255.255.255.255 broadcasthost
::1             localhost 
fe80::1%lo0 localhost
127.0.0.1   tbi.dev
127.0.0.1   www.tbi.dev
127.0.0.1   test1.tbi.dev
127.0.0.1   test2.tbi.dev
127.0.0.1   psa.dev
127.0.0.1   snd.dev

И файл виртуальных хостов Apache выглядит так:

<VirtualHost *:80>
    DocumentRoot "/Users/Bart/Sites/tbi"
    ServerName tbi.dev
</VirtualHost>

<VirtualHost *:80>
    DocumentRoot "/Users/Bart/Sites/tbi"
    ServerName tbi.dev
    ServerAlias *.tbi.dev www.tbi.dev
</VirtualHost>

<VirtualHost *:80>
    DocumentRoot "/Users/Bart/Sites/psa"
    ServerName psa.dev
</VirtualHost>

<VirtualHost *:80>
    DocumentRoot "/Users/Bart/Sites/sandbox"
    ServerName snd.dev
</VirtualHost>

Настройка в основном идентична моей настройке на Snow Leopard, но производительность Apache для разрешения виртуальных хостов существенно отличается. Я использую Mac OS X Lion 10.7.2, но проблема уже возникла при запуске 10.7.1.

Это может показаться небольшой проблемой, но когда вы обращаетесь к виртуальным хостам несколько сотен раз в день, это, как вы можете себе представить, приводит к значительной трате времени.

Барт Джейкобс
источник
В описании проблемы я не вижу ничего, что исключало бы такие обычные проблемы, как загрузка системы, использование сети, использование памяти. Вы говорите, что разрешение виртуального хоста идет медленно. Откуда? Команда хоста или просмотр страницы, обслуживаемой сервером? Если это чисто DNS / хост, вы можете измерить производительность в командной строке: time host snd.dev
labradort

Ответы:

22

Длинные тайм-ауты DNS почти всегда являются признаком проблем с IPv6.

Вам нужно подключение IPv6 к Apache?

Если нет, я предлагаю изменить

<VirtualHost *:80>

в

<VirtualHost 0.0.0.0:80>

Или вообще отключите соединение IPv6.

adaptr
источник
3
+1: поиск DNS в ipv6 является серьезной проблемой в OSX. По какой-то непонятной причине OSX сначала выполняет поиск ipv6. Если это время истекло (30 секунд или около того), оно продолжится с v4. OSX, кажется, не проверяет / etc / hosts сначала vor v6, это делает для v4, но только после того, как время v6 истекло. Если вы не можете отключить v6, лучше убедитесь, что у вас полностью работающая настройка v6, включая DNS v6.
Тонни
Спасибо за ответ. Я не уверен, что это единственная проблема, которая играет здесь роль, но время, необходимое для устранения локального виртуального хоста, сократилось в большинстве случаев.
Барт Джейкобс
У меня на поиск DNS ушло около 2-5 секунд, а не 30. Так что я не уверен, в чем заключалась моя проблема, так как вряд ли это был тайм-аут. Независимо от того, что сейчас происходит с момента внесения изменений из этого ответа.
Джастин
22

Я столкнулся с этим только сейчас тоже.

Это установит IPv6 в конфигурации сети на Off ...

# list all network interfaces to get their names
networksetup -listallnetworkservices
# disable the one you want, in my case it's WiFi
networksetup -setv6off Wi-Fi

Но .. к сожалению, это не решило проблему с разрешением DNS для меня (возможно, после перезагрузки системы). Что действительно помогло, так это добавление IP-адресов в стиле ipv6 в / etc / hosts следующим образом:

# my original /etc/hosts ...
127.0.0.1 localhost
255.255.255.255 broadcasthost
::1             localhost 
fe80::1%lo0 localhost

127.0.0.1 project.local

# adding this solved resolving:
fe80::1%lo0 project.local

wget http: //project.local теперь отображается мгновенно

Resolving project.local... 127.0.0.1
Connecting to project.local|127.0.0.1|:80... connected.

вместо зависания на 5 секунд на Resolving project.local.

Далибор Филус
источник
Все, что мне нужно, - это ваш совет - просто добавьте записи IPv6 в мой файл hosts вместе со стандартом, 127.0.0.1и проблема была полностью решена.
Кирк Уолл
Ура! Это помогает в OS X 10.8 (Mountain Lion). После обновления с 10.6 напрямую до 10.8 я обнаружил, что мои локальные поиски на хосте слишком навсегда ... как будто они истекают перед разрешением. Это исправило проблему для меня. Благодарность!
Lothar_Grimpsenbacher
Я недавно столкнулся с этой проблемой, и записи IPv6 в / etc / hosts исправили ее.
Нил Альброк
это оно, теперь у меня работает на Max OS 10.10.1
ezmilhouse
10

В MacOSX .local домен Lion был «зарезервирован» для многоадресного DNS Resolver (bonjour).

Это означает, что поиск любого домена, оканчивающегося на .local, приведет к поиску mDNS (до 5 с) перед / etc / hosts.

Исправления:

  1. Измените свои тестовые домены на другой домен верхнего уровня (т. Е. .dev)
  2. Используйте инструмент dscl, чтобы добавить исключение.
Артур Бодера
источник
Работал и на меня ... сводил меня с ума из-за того, что только несколько моих сайтов разработчиков делали это ... низко и вот ... все те, которые заканчиваются на .local! это не начинало происходить со мной, пока я не перешел на High Sierra ... благодаря @artur
Mfoo
1
dsclСтратегия исключения довольно изящна. @ artur-bodera срок действия вашей ссылки истек, но они заархивировали свой старый блог на github github.com/icebourg/itandme-archive/blob/master/posts/2011/08/…
lkraav
Также обратите внимание, что .local - это предлагаемый стандарт с IETF: tools.ietf.org/html/rfc6762 . Также очень полезно просто зарегистрировать доменное имя, если вам нужен «тестовый» домен, поскольку вы получаете полный контроль над тем, как он настроен в DNS. Создание доменного имени может вызвать странные конфликты с другими частями доменной системы (в данном случае, например, с mDNS)
Джеймс Тикальский,
3

Взгляните на этот блог, чтобы увидеть, помогает ли он, особенно выделив проблему № 2:

Очевидно, что терминал и некоторые из инструментов BSD Unix правильно используют /etc/resolv.conf и правильный порядок / etc / hosts, а затем DNS-серверы. Однако все остальное в OS X Lion, включая все ваши Приложения, делает это в обратном направлении!

DTest
источник
1

Оно работает.

Я использую это решение

##
# Host Database
#
# localhost is used to configure the loopback interface
# when the system is booting.  Do not change this entry.
##
127.0.0.1   localhost
255.255.255.255 broadcasthost
::1             localhost6
fe80::1%lo0 localhost
гипноз
источник
1

Та же ошибка на Маверикс.

Решено, когда я помещаю свои определения локальных хостов в начало /etc/hosts, например:

127.0.0.1 localhost project1.dev project2.dev
127.0.0.1 project3.dev project4.dev
255.255.255.255 broadcasthost
::1             localhost
fe80::1%lo0     localhost
sviriden
источник
0

Я бы попробовал изменить:

::1             localhost 
fe80::1%lo0 localhost

в

::1             localhost6 
fe80::1%lo0 localhost6
Инопланетная Форма Жизни
источник
1
К сожалению, это не решает проблему. Можете ли вы сказать, что логика стоит за вашим предложением? Спасибо за ваш ответ, хотя.
Барт Джейкобс
Недавно я боролся за невероятно долгое время за ответы snmp от машин, не работающих под управлением IPV6, но имеющих подобные записи в / etc / hosts. Теперь, что приходит на ум, это тайм-аут сервера имен, хотя и немного странный, потому что хосты должны иметь приоритет над связыванием. (Конфигурируемо так, конечно).
Форма жизни инопланетянина
Очень странно. В некоторых случаях разрешение хоста происходит мгновенно (как и следует ожидать), а в других это может занять несколько секунд.
Барт Джейкобс