2

У меня есть несколько компьютеров, подключенных к сети. Внутри этой сети есть сервер, на котором находится WAMP (Windows + Apache + PHP + MySQL). На нем установлена Windows 7 x32 Pro. Я могу пропинговать этот сервер с моего беспроводного подключенного сервера, все пинги 1 мс. Что интересно, когда я просматриваю свое веб-приложение на самом сервере, оно загружается в мгновение ока. Я могу просматривать страницы, как будто они были изображениями, которые я просто переключаю.

Однако на других компьютерах он работает медленнее. Это не трагично, но заметно медленнее. В некоторых случаях браузер показывает «Ожидание…», которое занимает одну или две секунды, и это наиболее болезненно.

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

Когда я смотрю на консоль разработчика в Chrome, я вижу, что: DOMContentLoaded - это 400-600ms на сервере и 1400ms на любом другом компьютере.

Что я могу сделать в этой ситуации?

1 ответ1

1

Убедитесь, что HostnameLookups Off в Apache.

Вы говорите, что сервер работает под управлением Apache через настройку WAMP (Windows аналог LAMP), правильно? Хорошо, если это так, откройте httpd.conf или apache2.conf (все зависит от того, как он был установлен в вашей установке; оба файла в основном одинаковы) и найдите строку конфигурации с HostnameLookups в ней. По умолчанию для HostnameLookups установлено значение « Off Как описано в комментарии, которое должно быть прямо над параметром HostnameLookups в этом файле; смелый акцент мой

HostnameLookups: регистрируйте имена клиентов или только их IP-адреса, например, www.apache.org (включено) или 204.62.129.132 (выключено). По умолчанию выключено, потому что в целом для сети было бы лучше, если бы людям приходилось сознательно включать эту функцию, поскольку ее включение означает, что каждый клиентский запрос приведет по крайней мере один запрос к серверу имен.

И официальная документация Apache также углубляется в детали; опять жирный акцент мой

По умолчанию установлено значение «Выкл.», Чтобы сохранить сетевой трафик для тех сайтов, которые действительно не нуждаются в обратном поиске. Это также лучше для конечных пользователей, потому что они не должны испытывать дополнительную задержку, которую влечет за собой поиск. Сильно загруженные сайты должны оставить эту директиву выключенной, поскольку поиск DNS может занять значительное количество времени.

Не используйте имена хостов для директивы Allow from/Deny from .

Кроме того, у вас есть какие-либо каталоги или директивы, которые используют Apache Basic Auth? Какую простую защиту паролем можно установить в Apache? Я помню, в некоторых случаях были замедления, связанные с поиском имени хоста, связанным с Allow from таких полей, как Allow from localhost узла. Если закомментировать Allow from localhost или установить значение Allow from 127.0.0.1 ::1 а затем перезапустить Apache, это прояснится.

Как объяснено в официальной документации Apache, даже если для HostnameLookups задано значение Off использование полных имен хостов в директивах Allow from/Deny from будет запускать целую цепочку поиска DNS, что может замедлять доступ; смелый акцент мой

Хостам, чьи имена совпадают или заканчиваются этой строкой, разрешен доступ. Подходят только полные компоненты, поэтому приведенный выше пример будет соответствовать foo.apache.org, но не будет соответствовать fooapache.org. Эта конфигурация заставит Apache выполнить двойной обратный поиск DNS на IP-адресе клиента, независимо от настройки директивы HostnameLookups. Он выполнит обратный поиск DNS по IP-адресу, чтобы найти соответствующее имя хоста, а затем выполнит прямой поиск по имени хоста, чтобы убедиться, что он соответствует исходному IP-адресу. Только если прямой и обратный DNS согласованы и совпадения имен хостов будут разрешены.

Этот пост также хорошо объясняет это, если вы хотите прочитать больше подробностей о том, как Allow from/Deny from записей, которые имеют имя хоста - вместо необработанного IP-адреса - может замедлить доступ к Apache из-за нескольких поисков DNS:

Однако недавно я столкнулся с ситуацией, когда мы непреднамеренно делали эквивалент без явного включения HostnameLookups. Как? Ограничивая доступ на основе удаленного имени хоста! Прочтите документацию по директиве Allow в разделе «A (частичное) имя домена»:

Эта конфигурация заставит Apache выполнить двойной обратный поиск DNS на IP-адресе клиента, независимо от настройки директивы HostnameLookups. Он выполнит обратный поиск DNS по IP-адресу, чтобы найти соответствующее имя хоста, а затем выполнит прямой поиск по имени хоста, чтобы убедиться, что он соответствует исходному IP-адресу. Только если прямой и обратный DNS согласованы и совпадения имен хостов будут разрешены. Это имеет смысл, но это довольно большой неожиданный побочный эффект использования чего-то вроде:

Allow from .example.com

В нашем случае это был еще менее очевидный случай, который вообще не заставлял нас думать об именах хостов:

Allow from localhost

Здесь был написан localhost, возможно, чтобы сэкономить некоторые усилия или, возможно, повысить ясность по сравнению с записью 127.0.0.1 (IPv4) и ::1 (IPv6). Мысленно так легко увидеть "localhost" - это прямой псевдоним для 127.0.0.1 и ::1, что мы можем забыть, что имя "localhost" является просто соглашением и требует поиска, как и любое другое имя. Те, кто знаком с базой данных MySQL, могут знать, что она на самом деле присваивает слову "localhost" особое запутанное значение, чтобы устанавливать сокетное соединение UNIX вместо TCP-соединения с 127.0.0.1 или любого другого "localhost", определенного в системе!

Вы также можете подумать, что поиск 127.0.0.1 быстрый, потому что он обычно отображается на "localhost" в /etc /hosts. Это правда, но любой другой посетитель, который не находится в /etc /hosts, получает медленный поиск DNS PTR! И в зависимости от операционной системы вы можете увидеть «ip6-localhost» или «ip6-loopback» (Debian 7, Ubuntu 12.04), "localhost6" (RHEL 5/6, Fedora 19) в /etc /hosts или что-то еще , Поэтому важно прописать адреса:

Allow from 127.0.0.1
Allow from ::1

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .