6

В моей интрасети много компьютеров в одной подсети, подключенных через концентратор. Все компьютеры в подсети получают IP от встроенного DHCP роутера. Кроме того, все компьютеры получают подключение к Интернету с одного маршрутизатора.

У меня есть Интернет-сервер на одном из компьютеров (192.168.0.67) в той же подсети. Он имеет Windows XP, Apache, MySQL и Perl. Сайт отлично загружается в localhost . Когда я пытаюсь загрузить этот сайт на клиентский компьютер (IP 192.168.0.100) с Windows 7, загрузка простой страницы занимает 5-10 минут. Однако, когда я загружаю сайт из Интернета, он загружается быстро. Независимо от того, какой браузер я использую, он работает очень медленно. Я отключил брандмауэр Windows и антивирусное программное обеспечение на обоих компьютерах.

Когда я проверял taskmgr на загрузку сети, он потребляет около 0,1-0,2%. На вкладке производительности загрузка процессора составляет около 10%, и у меня достаточно памяти на обоих компьютерах

Когда я ping сервера с низкой полезной нагрузкой, это хорошо. Но когда я проверяю связь с сервером с высокой полезной нагрузкой (выше, чем у ping server -l 15000), многие пакеты теряются.

2 ответа2

6

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

Вы говорите, сервер работает под Apache, правильно? Хорошо, если это так, откройте 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 нужно было разрешить в первую очередь. Но это было бы очень плохо для системы общественного производства из-за замедления в обслуживании трафика.

0

В Windows XP добавлено ограничение максимального количества активных подключений для клиентских операционных систем (я считаю, что это число равно 10, но я не совсем уверен в этой части). Это означает, что если вы работаете с сервером на этом компьютере и к системе подключено больше этого количества подключений, ряду ваших клиентов придется подождать, пока предыдущий клиент не будет готов.

Вам, вероятно, следует заменить эту Windows XP чем-то другим, и это исправит это - даже на том же оборудовании.

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