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