Как я могу устранить медленное разрешение / загрузку localhost / virtualhost (задержка на 2-3 секунды) в Mac OS X Lion?


97

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

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

Как видно ниже, я не использую TLD .local.

Моя установка: Apache 2 - MySQL - PHP установлен и включен - добавлена ​​пара виртуальных хостов, один из которых я создал для localhost

Мои / etc / hosts:

127.0.0.1       localhost
255.255.255.255 broadcasthost
::1             localhost
fe80::1%lo0     localhost
127.0.0.1       myproject.dev
::1             myproject.dev
fe80::1%lo0     myproject.dev

Настройка моего виртуального хоста в username.conf:

NameVirtualHost *:80

<Directory "/Users/myusername/Sites/">
    Options Indexes MultiViews
    AllowOverride None
    Order allow,deny
    Allow from all
</Directory>

<VirtualHost *:80>
    ServerName localhost
    DocumentRoot /Users/myusername/Dropbox/dev_envs/
</VirtualHost>
<VirtualHost *:80>
    ServerName myproject.dev
    DocumentRoot /Users/myusername/Dropbox/dev_envs/myprojectname
</VirtualHost>

Я нашел этот stackoverflow.com/questions/19313546/… . и у меня работает !!!
Кларк Ю

2
Я сообщил об этом как об ошибке в apple rdar: // 24237290 и получил забавный ответ:> Разработчики предоставили следующие отзывы по этой проблеме:> Это ожидаемое поведение, поскольку макс. разрешенных псевдонимов в файле / etc / hosts равно 10. Наличие более 10 псевдонимов в файле / etc / hosts нецелесообразно. Я был бы рад, если больше людей сообщат об этой ошибке и скажут им, что этот ответ совершенно нелепый (и нигде не задокументирован).
DWT

Есть ли что-то плохое в использовании TLD .local?
Yaakov Ainspan

У меня отлично работает в мохаве ... :)
rogerdpack

Ответы:


171

У меня была точно такая же проблема, и это сводило меня с ума!

Поместите все записи файла hosts для localhost в одну строку, например:

127.0.0.1 localhost myproject.dev myotherproject.dev
::1 localhost
fe80::1%lo0 localhost

Сработало для меня как шарм. Похоже на ошибку в Lion.


Это работает, и я думаю, что @ adam-gries должен отметить это как ответ. Спасибо, Джереми!
zysoft

5
Это исправление сработало для меня, но я достиг лимита в 11 сайтов, после чего он стал работать еще медленнее! На данный момент я разделил все на две записи о хостах (с одним и тем же IP-адресом), и, похоже, все идет нормально.
Alex Ghiculescu

Та же проблема и решение, что и @AlexGhiculescu, но в OS X 10.8 Mountain Lion.
chrishiestand

2
OS X 10.9, все еще проблема, и она уже несколько часов сводит меня с ума! Отлично, спасибо за отличный ответ!
robertp 09

2
Это работает только потому, что вы вводите записи хоста ПЕРЕД другой маршрутизацией устройства localhost. Если ваш веб-сервер просматривает 127.0.0.1, эти хосты должны находиться в ГОЛОВЕ файла / etc / hosts для быстрого поиска. У меня есть несколько десятков строк 127.0.0.1, только когда я переместил их в ТОП файла / etc / hosts, они быстро разрешились для меня.
Joey T

71

Есть еще одна проблема с 10.7. * По 10.8.4 для сайтов, заканчивающихся на ".local", которая вызывает пятисекундный поиск. Детали и решение любезно предоставлены Брэмом (США) Ван Даммом по следующей ссылке:

http://www.bram.us/2011/12/12/mamp-pro-slow-name-resolving-with-local-vhosts-in-lion-fix/

"По умолчанию любое имя хоста, заканчивающееся на .local, рассматривается как хост Bonjour, а не путем запроса записей DNS-сервера в настройках сети.

Чтобы решить эту проблему (без необходимости переименовывать каждый виртуальный хост), вам необходимо добавить записи IPv6 для каждого из ваших виртуальных хостов в файл / etc / hosts: "

::1 mysite.local
fe80::1%lo0 mysite.local
127.0.0.1 mysite.local

Это также влияет на системы Windows. Решение там тоже работает как шарм.
ToBe

У меня продолжалась эта проблема при указании хостов на локальную виртуальную машину. Я оставил файл моих хостов красиво отформатированным (записи в отдельных строках и т. Д.) И добавил дополнительные записи, используя адрес IPV6 из виртуальной машины, и все мои проблемы с задержкой исчезли. Я действительно сталкивался с этим только с сайтами, заканчивающимися на .local, и добавление обеих записей IPV4 / 6 исправило для меня все (OS X 10.9)
Джастин

Пришлось немного побороться с этим, потому что мое имя хоста в панели предпочтений «Совместное использование» не совпадало с тем, которое я вводил в / etc / hosts, на всякий случай, если это кому-то поможет ...
abhishekmukherg

Вот это да. Я понимаю, что ::1это сокращение от IPv6 127.0.0.1. Но что fe80::1%lo0значит? - а, ответил на superuser.com/questions/241642/…
AlexChaffee

на macOS Sierra это сработало, но мне пришлось удалить первую строку.
Брайс Йорк

24

У меня была такая же проблема, также на Lion.

Как ни странно, мое решение было противоположным Джереми. У меня была целая куча записей someproject.dev в одной строке в / etc / hosts. Загрузка сайта на любой из них в первый раз заняла целую вечность, около минуты. Если бы я использовал его снова в течение 5 секунд или около того, это было бы очень быстро, но намного дольше, и это снова заняло бы минуту. Я подозревал всякие вещи, соединения mysql, версии Ruby, ошибки Rails, Apache, Phusion Passenger. Пока я, наконец, не посмотрел на консоль и не понял, что предпринимались попытки поиска DNS.

Итак, я поместил их все в отдельные строки:

127.0.0.1 localhost

127.0.0.1 myproject.dev

127.0.0.1 myotherproject.dev

И вдруг все снова стало круто. То же самое на обеих моих машинах.


Пробовал что-нибудь здесь, в stackoverflow, но это и сообщение user902664 помогли. Все линии IPv4 и IPv6 должны быть в одну линию. Если используются только записи IPv4, но на отдельных строках, уменьшено с 30 секунд до ~ 1, использование вместе с настройками IPv6 на отдельных строках уменьшено до ~ 0,5 секунды.
tomis

Кажется, это сумасшедшая ошибка. У меня была запись для адреса 192.168.56.3 с 14 псевдонимами. Удалите один псевдоним, и вы сможете разрешить хосты за <1 с. С 14-м псевдонимом требуется ~ 30 секунд, чтобы разрешить первые несколько записей в списке ...
Брайан М. Карр

Это ошибка только OSX? Кто-нибудь может ссылку на отчет об ошибке?
pje

Просто потратил часы, изучая конфигурацию сети больше, чем я когда-либо хотел. Я собирался сделать решительный шаг и настроить локальный DNS-сервер, а затем это исправило. Спасибо. Mavericks 10.9.5 здесь.
clumsyfingers 06

13

Мне помогло указание того же хоста для IPv6 :: 1.

127.0.0.1 something.local.mydomain.org
::1 something.local.mydomain.org

Да и по одному домену на строку.
варвариук

1
Это устранило проблему для меня. По крайней мере, в моем случае не было необходимости в одном домене на строку.
jeff-h

9

Убедитесь, что записи IP v6 не находятся в строке с localhost

::1 localhost

записи IP v6 идут в отдельной строке

fe80::1%lo0 here and_here

Иногда это происходит очень быстро, но есть редкие исключения, когда старые лаги возвращаются. Однако они могут быть основаны на других причинах.


1
Это сработало для меня в OS X 10.11.6 - как только я продублировал запись IPv4 localhost (одна строка для 127.0.0.1) в строку :: 1 с такими же псевдонимами, поиск стал мгновенным с 4-5 секунд. У меня также была запись 127.0.0.2, которую я продублировал как :: 2. У меня одна строка на адрес. Спасибо!
RichVel

7

В OSX El Capitan у меня сработало создание дублирующей записи IPv6 прямо над записью IPv4, вот так

fe80::1%lo0 demo.test.dev
127.0.0.1   demo.test.dev

Согласовано, работает с записью IPv6 выше или ниже IPv4, если у нее такой же список псевдонимов.
RichVel

Это абсурдно, но исправлена ​​проблема, с которой я столкнулся, когда Chrome очень медленно разрешал ссылки localhost на мои докер-контейнеры laradock (Safari всегда был в порядке)
jeff-h

Также работает для High Sierra - Firefox, Safari работают с ним или без него
Крис Атанасиадис

3

Для меня важно обеспечить определение имен хостов в начале файла. По умолчанию строка 127.0.0.1 localhost уже находится в начале, просто добавьте свои записи в ту же строку.


Это реальное решение, все остальное перепробовано, и оно не имеет ничего общего со ссылками в одной строке или связанными с маршрутом IPv6 (если, может быть, это ваш основной маршрут в apache conf ...), спасибо @Erik!
Joey T

Кроме того, для меня это было намного больше, чем 2 или 3 секунды, скорее от 10 до 20 секунд. У меня было много записей 127.0.0.1, но все они были перечислены ПОСЛЕ конфигурации localhost по умолчанию OS X. Я также использую Lion, а не ML, если это важно.
Joey T

К сожалению, это больше не работает с Mavericks - оставив здесь свой голос за Lion, хотя он работал нормально, пока я не обновился до Mavs несколько месяцев назад.
Joey T

1

У меня была такая же проблема, и я обнаружил, что она вызвана включением IPv6 в моей локальной сети, но неправильная настройка IPv6 между моей сетью и моим интернет-провайдером. Судя по всему, DNS-сервер IPv6 имеет приоритет над DNS IPv4, когда клиенту даны оба. Клиенту требовалось несколько секунд (при каждой попытке), чтобы обнаружить, что DNS IPv6 недоступен или отсутствует, а затем вернуться к IPv4 DNS.


1

Примечание. Я использую Windows и XAMPP, однако при исследовании проблемы многие люди сталкивались с той же проблемой в Windows и Mac. Ответьте для справки для тех, кто найдет этот вопрос, поскольку я потратил часы, пытаясь найти решение, которое подойдет мне:

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

Единственное решение, которое до сих пор работало для меня, - это комбинация всех решений:

  • Изменение домена, который я использую с mysite.местный на mysite. DEV . Вдохновленный ответом @ Cleverlemming.
  • Включая строки IPv6.
  • Удаление избыточных виртуальных хостов и хостов (я их закомментировал).

В моем файле hosts мои хосты в настоящее время находятся на отдельных строках, и пока проблема, похоже, исправлена.

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


1

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

например

127.0.0.1 localhost host1 host2 host3 host4 host5 host1 host6

Я удалил второй экземпляр того же хоста (в приведенном выше примере - host1) - и все сразу ускорилось.

Я почувствовал себя немного глупо, когда обнаружил это, но когда у вас есть 10 длинных имен хостов в одной строке и вы часто добавляете / удаляете, это можно легко упустить.


0

Уловка, которая сделала это для меня, заключалась в добавлении

127.0.0.1 locahost

в первой строке хост-файла.

Из всех моих виртуальных хостов только те, которые использовали базу данных, работали медленно. Я считаю, что это потому, что процесс поиска «localhost» для подключения к базе данных замедлил работу, поскольку я добавил только адреса своих виртуальных хостов, а не «localhost». Теперь все снова быстро. :)


У меня было два определения localhost; один кажется лучше.
Аарон Брик

0

Я тоже с этим сталкивался. У меня есть набор vhosts, определенных в двух строках, одна для IPv4 и одна для IPv6. Перемещение хоста, который я пытался решить, чтобы быть первым в списке, ускорило его.

127.0.0.1 faster.example.dev host1.example.dev host2.example.dev host3.example.dev host4.example.dev host5.example.dev host6.example.dev
::1 faster.example.dev host1.example.dev host2.example.dev host3.example.dev host4.example.dev host5.example.dev host6.example.dev

0

Глупая проблема, из-за которой я потратил много времени: после применения ответа @ Cleverlemming я выяснил, что в файле hosts есть повторяющиеся записи. Что-то вроде:

::1          site1.local site2.local site1.local site3.local site4.local
fe80::1%lo0  site1.local site2.local site1.local site3.local site4.local
127.0.0.1    site1.local site2.local site1.local site3.local site4.local

Тогда разрешение IP для site3.local и site4.local занимает эти 5 секунд смерти.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.