Menyelesaikan virtual host sangat lambat pada Mac OS X Lion


26

Sejak memutakhirkan ke Mac OS X Lion (dari Snow Leopard), saya perhatikan bahwa penyelesaian ke host virtual sangat lambat (antara sekitar 3 detik). Saya telah menemukan sejumlah tips (misalnya, tidak menggunakan .local TLD) yang mungkin menyelesaikan ini, tetapi mereka tidak berlaku untuk pengaturan saya.

Setup saya cukup sederhana: - Apache 2 (dikirimkan bersama Lion) - PHP yang diaktifkan - ditambah beberapa host virtual - paket Mail dan SMTP Pear yang diinstal

File host Apache terlihat seperti ini:

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

Dan file host virtual Apache terlihat seperti ini:

<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>

Setup pada dasarnya identik dengan setup saya di Snow Leopard, tetapi kinerja Apache untuk menyelesaikan host virtual sangat berbeda. Saya menjalankan Mac OS X Lion 10.7.2, tetapi masalah sudah ada saat menjalankan 10.7.1.

Ini mungkin tampak seperti masalah kecil, tetapi ketika Anda mengakses host virtual beberapa ratus kali sehari maka ini menambah pemborosan waktu yang signifikan seperti yang dapat Anda bayangkan.


Saya tidak melihat apa pun di deskripsi masalah yang mengesampingkan masalah biasa seperti beban sistem, pemanfaatan jaringan, pemanfaatan memori. Anda mengatakan menyelesaikan host virtual lambat. Dari mana? Perintah host, atau melihat halaman yang dilayani oleh server? Jika ini murni terkait DNS / host, Anda dapat mengatur waktu kinerja seperti ini di baris perintah: time host snd.dev
labradort

Jawaban:


22

Timeout DNS yang panjang hampir selalu merupakan tanda masalah IPv6.

Apakah Anda memerlukan konektivitas IPv6 ke apache?

Jika tidak, saya sarankan berubah

<VirtualHost *:80>

ke

<VirtualHost 0.0.0.0:80>

Atau nonaktifkan konektivitas IPv6 sama sekali.


3
+1: pencarian DNS ipv6 adalah masalah utama pada OSX. Untuk beberapa alasan yang tidak jelas OSX pertama melakukan pencarian IPv6. Jika itu habis (30 detik atau lebih) akan dilanjutkan dengan v4. OSX tampaknya tidak memeriksa / etc / hosts pertama vor v6, itu berlaku untuk v4, tetapi hanya setelah v6 telah kehabisan waktu. Jika Anda tidak dapat menonaktifkan v6 lebih baik pastikan Anda memiliki pengaturan v6 yang berfungsi penuh termasuk v6 DNS.
Tonny

Terima kasih atas jawabannya. Saya tidak yakin apakah ini satu-satunya masalah yang memainkan peran di sini, tetapi waktu yang diperlukan untuk menyelesaikan virtual host lokal telah menurun sebagian besar waktu.
Bart Jacobs

Pencarian DNS saya membutuhkan 2-5 detik untuk menyelesaikan, bukan 30. Jadi, saya tidak yakin apa masalah saya karena itu tidak mungkin menjadi batas waktu. Apapun, sekarang instan sejak membuat perubahan dari jawaban ini.
Justin

22

Saya juga pernah mengalami hal ini.

Ini akan mengatur IPv6 di Konfigurasi jaringan ke Mati ...

# 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

Tapi .. sayangnya ini tidak menyelesaikan masalah penyelesaian DNS untuk saya (mungkin setelah sistem restart). Apa yang benar-benar membantu adalah menambahkan IP style ipv6 ke / etc / hosts seperti ini:

# 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 sekarang ditampilkan secara instan

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

bukannya menggantung selama 5 detik pada Menyelesaikan project.local.


Saran Anda adalah semua yang saya butuhkan - hanya menambahkan entri IPv6 ke file host saya di samping standar 127.0.0.1dan masalahnya selesai sepenuhnya.
Kirk Woll

Yay! Ini membantu dalam OS X 10.8 (Mountain Lion). Setelah memutakhirkan dari 10.6 langsung ke 10.8 Saya menemukan pencarian host lokal saya terlalu lama ... seperti mereka waktu sebelum menyelesaikan. Ini memperbaiki masalah bagi saya. Terima kasih!
Lothar_Grimpsenbacher

Saya mengalami masalah ini baru-baru ini dan entri IPv6 di / etc / hosts memperbaikinya dengan sempurna.
Neil Albrock

ini dia, bekerja sekarang untuk saya di Max OS 10.10.1
ezmilhouse

10

Di domain MacOSX Lion .local telah "dicadangkan" untuk Multicast DNS Resolver (bonjour).

Ini berarti bahwa mencari domain yang diakhiri dengan .local akan menghasilkan pencarian mDNS (hingga 5s) sebelum / etc / hosts.

Perbaikan:

  1. Ubah domain pengujian Anda ke beberapa TLD lainnya (yaitu .dev)
  2. Gunakan alat dscl untuk menambahkan pengecualian.

Bekerja untuk saya juga ... membuat saya gila bahwa hanya beberapa situs dev saya melakukan ini ... rendah dan lihat ... semua yang berakhiran .local! ini tidak mulai terjadi pada saya sampai saya meng-upgrade ke High Sierra ... terima kasih kepada @artur
Mfoo

1
dsclstrategi pengecualian cukup bagus. @ artur-bodera tautan Anda telah kedaluwarsa, tetapi mereka mengarsipkan blog lama mereka di github github.com/icebourg/itandme-archive/blob/master/posts/2011/08/…
lkraav

Perhatikan juga bahwa .local adalah standar yang diusulkan dengan IETF: tools.ietf.org/html/rfc6762 Ini juga ide yang sangat bagus untuk hanya mendaftarkan nama domain jika Anda memerlukan domain "test", karena Anda mendapatkan kontrol penuh bagaimana itu. dikonfigurasi dalam DNS. Membuat nama domain sangat mungkin menyebabkan konflik aneh dengan bagian lain dari sistem domain (seperti mDNS dalam kasus ini.)
James Tikalsky

3

Lihatlah blog ini untuk melihat apakah itu membantu, khususnya menyoroti Masalah # 2:

Rupanya, terminal dan beberapa alat Unix BSD dengan benar menggunakan /etc/resolv.conf dan urutan / etc / hosts yang benar terlebih dahulu dan kemudian server DNS. Namun, semua yang lain pada OS X Lion, termasuk semua Aplikasi Anda, lakukan mundur!


1

Berhasil.

Saya menggunakan solusi ini

##
# 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

Bug yang sama di Mavericks.

Diselesaikan ketika saya menempatkan definisi host lokal saya ke awal /etc/hosts, seperti ini:

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

Saya akan mencoba mengubah:

::1             localhost 
fe80::1%lo0 localhost

untuk

::1             localhost6 
fe80::1%lo0 localhost6

1
Sayangnya, ini tidak menyelesaikan masalah. Bisakah Anda memberi tahu logika apa yang ada di balik saran Anda? Terima kasih atas tanggapan Anda.
Bart Jacobs

Saya baru-baru ini berjuang berkali-kali untuk respon snmp dari mesin yang tidak menjalankan IPV6 tetapi memiliki entri seperti di / etc / hosts. Sekarang hal lain yang terlintas dalam pikiran adalah waktu server nama - agak aneh, karena host harus didahulukan daripada bind. (Tentu saja bisa dikonfigurasi).
Alien Life Form

Memang sangat aneh. Kadang-kadang, menyelesaikan suatu host adalah instan (seperti yang diharapkan) dan pada yang lain dibutuhkan beberapa detik.
Bart Jacobs
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.