ipv6 → Исправление задержки в подключении к локальным сервисам в Windows Vista, 7, 8 и Windows Server 2008

Столкнулся с странной проблемой — после переезда на Windows 8 RP появилась задержка в работе всех сайтов на локальном веб-сервере. После некоторых проверок стало понятно, что задержка возникает только если скрипты используют какие-то сторонние сервисы, будь то MySQL база, MongoDB, Memcached или что-то другое,  к чему скрипт подключается по сети. После ещё пары экспериментов стало понятно, что задержка именно на этапе подключения, так как сами запросы и обмен данными осуществлялись быстро.

После непродолжительного поиска причин и решения в гугле, наткнулся на несколько записей на StackOverflow и ServerFault, где у людей была похожая проблема. Связано это было, чаще всего, с проблемами в DNS, а именно с тем, что, начиная с Windows Vista у IPv6 приоритет выше, чем у IPv4 (интересно, что до переезда на восьмёрку я использовал и висту, и семёрку,  подобных проблем не было) . Это означает, что при резолве адреса «localhost», сервис сначала получал локальный IPv6 адрес (::1), и только потом, поняв что по этому адресу сервиса нет (так как и MySQL, и Memcached по-умолчанию слушают IPv4-адрес), нужный нам 127.0.0.1. Чтобы проверить, в этом ли проблема, можно просто попробовать подключиться не к домену «localhost», а напрямую по IP-адресу 127.0.0.1. Когда я изменил в конфигах домен на прямой адрес, проблема исчезла, что означает, что проблема была действительно в медленном (а точнее, неправильном) резолве.

Когда мы знаем конкретную проблему — найти её решение уже проще, и мы быстро находим эту статью на сайте Майкрософта, из которой и узнаём решение. Для удобства, приведу его здесь.

Открываем редактор реестра (Win+R, затем пишем «regedit» и нажимаем Enter), находим ветку «HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip6\Parameters\». Находим там параметр «DisabledComponents», или создаём его, в случае если его нет (тип параметра — DWORD), и меняем его значение на «0x20» (разумеется, без кавычек), что установит приоритет IPv4 над IPv6. Перезагружаемся и проверяем.