Доступ до віртуального хоста дуже повільний на Mac OS X Lion


26

З моменту оновлення до Mac OS X Lion (від Snow Leopard), я помітив, що доступ до віртуального хоста відбувається дуже повільно (приблизно від 3 секунд). Я знайшов ряд порад (наприклад, не використовую .local TLD), які могли б вирішити це, але вони не стосуються моєї настройки.

Моя настройка досить проста: - Apache 2 (постачається разом з Lion) - включений PHP - додано кілька віртуальних хостів - встановлені пакети Mail and 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.


3
+1: Пошук DNS ipv6 є головною проблемою на OSX. З якоїсь незрозумілої причини OSX спочатку здійснює пошук ipv6. Якщо цей час вичерпається (30 секунд або більше), він продовжить роботу з v4. OSX, схоже, не перевіряє / etc / hosts first vor v6, він робить для v4, але лише після того, як v6 вичерпано. Якщо ви не можете відключити v6, краще переконайтеся, що у вас є повністю працююча установка v6, включаючи D6 v6.
Тонні

Дякую за відповідь. Я не впевнений, чи це єдине питання, яке тут відіграє певну роль, але час, необхідний для вирішення локального віртуального хоста, припадає більшу частину часу.
Барт Джейкобс

На пошук мого DNS було потрібно близько 2-5 секунд, щоб вирішити, а не 30. Отже, я не впевнений, у чому полягає моя проблема, оскільки це навряд чи буде тайм-аутом. Незважаючи на те, що з моменту внесення змін у цю відповідь зараз настав момент.
Джастін

22

Я теж зараз натрапив на це.

Це встановить IPv6 у конфігурації мережі на Вимкнено ...

# 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 до мого файлу хостів поряд зі стандартним, 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 Lion .local домен "зарезервований" для Multicast DNS Resolver (bonjour).

Це означає, що пошук будь-якого домену, що закінчується .local, призведе до пошуку mDNS (до 5s) перед / etc / hosts.

Виправлення:

  1. Змініть свої тестові домени на інші TLD (тобто .dev)
  2. Використовуйте інструмент dscl, щоб додати виняток.

Працював і для мене ... зводив мене з розуму, що лише кілька моїх сайтів розробників зробили це ... низько і ось ... всі, що закінчуються в .local! це не сталося зі мною, поки я не перейшов на Високу Сьєрру ... завдяки @artur
Mfoo

1
dsclСтратегія винятку досить витончена. @ artur-bodera ваше посилання закінчилося, але вони зберегли
lkraav

Зауважте також, що .local - це запропонований стандарт із IETF: tools.ietf.org/html/rfc6762 Це також дуже гарна ідея просто зареєструвати доменне ім’я, якщо вам потрібен "тестовий" домен, оскільки ви отримуєте повний контроль над тим, як це налаштований у DNS. Створення доменного імені, швидше за все, спричинить дивні конфлікти з іншими частинами доменної системи (як, наприклад, mDNS).
Джеймс Тікальський,

3

Перегляньте цей блог, щоб побачити, чи допомагає він, особливо виділивши проблему №2:

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


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

Та сама помилка на Mavericks.

Вирішено, коли я ставив визначення місцевих хостів до початку /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

0

Я б спробував змінити:

::1             localhost 
fe80::1%lo0 localhost

до

::1             localhost6 
fe80::1%lo0 localhost6

1
На жаль, це не вирішує питання. Чи можете ви сказати, яка логіка стоїть за вашою пропозицією? Дякую за вашу відповідь.
Барт Джейкобс

Нещодавно я бився неординарно довгі часи за відповіді snmp з машин, які не працюють з IPV6, але мають схожі записи в / etc / hosts. Тепер інша річ, яка спадає на думку, - це вимкнення часу сервера імен - хоч трохи дивно, тому що хости мають перевагу над прив’язкою. (Конфігураційно так, звичайно).
Форма чужорідного життя

Справді дуже дивно. Іноді вирішення проблеми хоста відбувається миттєво (як очікують одні), а для інших може зайняти кілька секунд.
Барт Джейкобс
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.