Очевидно, мой экземпляр Apache httpd выполняет обратный поиск DNS (RDNS, дайте мне имя хоста для этого IP-адреса) для каждого IP-адреса входящего клиентского соединения. Это плохо. Тем более, что иногда разрешение не удается с отсутствующей записью PTR - через 28 секунд.
Диагностика: добавил %D
к моему «комбинированному» стилю ведения журнала и смотрел на время отклика следующим образом: очевидно, <1 с для всех тех, которые зарегистрированы с их именем хоста и 20 + с для тех, которые регистрируют свой IP.
Вот что я пробовал:
server-status
расширение.HostnameLookups Off
находится в конфиге.mod_access
не указывается имя хоста в Allow
/Deny
правило.Что я пропустил?
Кажется, что стандартная установка Ubuntu 8.04 Apache httpd поставляется с LogFormat
что начинается с %h
и это выполняет поиск RDNS IP-адреса клиента. Почему ну почему ?? Заменив его на %a
(удаленный IP-адрес, см. настраиваемые форматы журналов) уменьшает эту проблему на ок. 90%. Некоторые остаются ...
Вы проверили HostnameLookups
не установлен ни в одной другой директиве? Вы активировали модуль mod_authz_host?
Я наткнулся на ту же проблему и обнаружил еще один источник обратного поиска: сами приложения! PHP имеет gethostbyaddr()
функция:
Интересно, что я столкнулся с аналогичной проблемой на одном из моих серверов. Проблема началась примерно в то время, когда я запустил PHP-скрипт командной строки, который сканировал файлы журналов на предмет основных IP-адресов. Затем я попросил PHP выполнить обратный поиск DNS для каждого IP-адреса. Примерно в то время, когда я это сделал, я заметил, что Apache внезапно начал сбрасывать имена хостов в журналы вместо IP-адресов. Переключение на% a с% h и перезапуск Apache, похоже, устранили проблему. HostnameLookups отключен. Я предполагаю, что Apache просто использует локально кэшированные результаты, если происходит обратный поиск IP в кеше. Может быть? Либо это, либо это ошибка на сервере.