Вопрос или проблема
Существует два способа работы с Apache:
-
настраивать конфигурации для папок по одной, используя файл htaccess
-
полностью отказаться от htaccess и поместить все правила в httpd.conf
Использование htaccess является вопросом времени загрузки. Я хочу знать, насколько дорого использование htaccess с точки зрения времени загрузки? Существуют ли какие-либо тесты?
Рекомендация от проекта Apache следующая:
В общем, вы должны использовать файлы .htaccess только тогда, когда у вас нет доступа к основному файлу конфигурации сервера. … распространенное заблуждение заключается в том, что директивы аутентификации пользователей и mod_rewrite должны помещаться в файлы
.htaccess
.
Поэтому, пожалуйста, установите AllowOverride None
и все ваши другие директивы в основном httpd.conf (и/или в подразделах, которые вы Include
)
Когда Apache не настроен с AllowOverride None
, вы уже получаете (небольшой) штраф по производительности, независимо от того, используются ли файлы .htaccess
или нет.
Это потому, что для каждого запроса Apache должен проверять наличие потенциального файла .htaccess
в каждой (под-) директории, ведущей к запрашиваемому ресурсу. Например, когда файл запрашивается из директории /www/htdocs/example, Apache должен искать следующие файлы:
/.htaccess
/www/.htaccess
/www/htdocs/.htaccess
/www/htdocs/example/.htaccess
Таким образом, для каждого доступа к файлу из этой директории происходит 4 дополнительных обращения к файловой системе, даже если ни один из этих файлов отсутствует. (Если AllowOveride установлен для /)
Системный вызов, используемый для этого (man 2 stat
), сам по себе не так уж и дорог, и, как правило, используется кэш файловой системы, а не опрашивается фактический диск, что ограничивает фактические требования к вводу-выводу, но тем не менее это может накапливаться, как утверждает эта статья.
Когда один или несколько фактических файлов .htaccess
действительно присутствуют, Apache все равно нужно открыть
и прочитать его (вызывая еще одну операцию чтения ввода-вывода и обычно также операцию записи ввода-вывода, чтобы обновить атрибут atime
файловой системы) и разобрать его, прежде чем можно будет применить логику внутри.
В отличие от случаев, когда ваши директивы находятся в основном httpd.conf
, который нужно лишь один раз разобрать Apache при запуске, каждый файл .htaccess
нужно интерпретировать заново для каждого запроса.
Насколько дорогим, помимо операций ввода-вывода, является разбор файлов .htaccess, зависит от их сложности.
Для определения этого потребуется тщательное тестирование.
Расходы зависят от того, насколько мощен сервер, в частности от его подсистемы хранения I/O и от того, есть ли какая-либо кэширование.
Способ протестировать это — настроить вашу систему с использованием .htaccess и нагрузочное тестирование так же, как вы бы делали с любым веб-сервером. Затем настройте систему без .htaccess и запустите те же тесты.
Сравните и проанализируйте результаты для ваших настроенных систем.
Я не верю, что существует единственно правильный ответ на ваш вопрос. Существуют множество переменных, которые могут повлиять на время загрузки htaccess:
- Структура папок сайта: все .htaccess в каждой папке загружаются каждый раз, когда открывается страница.
- Какова длина файла htaccess: 200 строк против 3500 строк? Есть большая разница.
- Конфигурация .htaccess: правила переписывания и перенаправления могут быть более тяжелыми, чем другие (и не единственными).
- Сетевое соединение со стороны клиента может повлиять на время загрузки. На мой взгляд, вы можете попробовать из более чем одного места и взять среднее время как ссылку.
- ab – инструмент для тестирования производительности Apache HTTP сервера может вам помочь
больше информации:
Я тестировал с .htaccess и без него и действительно не смог заметить никакой разницы в скорости или накладных расходах. Хотя я веду всего 16 сайтов и у меня супер быстрый сервер, так что в моем случае отслеживать миллисекунды практически невозможно. На сервере, работающем с сотнями сайтов, накладные расходы могут быть заметными, поэтому, как и говорил @Iain, тестируйте и смотрите.
Лично я все делаю, используя файл .conf для виртуального хоста, а не .htaccess, это дает мне абсолютный контроль над всем, он чище и загружается один раз в память Apache. Даже мои правила переписывания WordPress находятся в моих .conf файлах, так что они никогда не могут сломаться.
Ответ или решение
Использование файла .htaccess
в Apache действительно может оказывать влияние на время загрузки веб-страниц. Давайте рассмотрим, какие факторы влияют на производительность и какие рекомендации могут помочь в оптимизации.
Влияние .htaccess
на время загрузки
-
Проверка наличия файлов: Когда сервер Apache сконфигурирован без директивы
AllowOverride None
, он будет проверять наличие файла.htaccess
в каждом каталоге, начиная с корневого, вплоть до запрашиваемого ресурса. Это приводит к множественным обращениям к файловой системе даже в случае отсутствия.htaccess
:/
/www/.htaccess
/www/htdocs/.htaccess
/www/htdocs/example/.htaccess
Это может незначительно увеличивать время доступа, так как сервера придется выполнять дополнительные операции по проверке.
-
Чтение и парсинг
.htaccess
: Если файл.htaccess
присутствует, серверу нужно открыть его, прочитать и распарсить каждый раз при каждом запросе. Это влечет за собой операции ввода-вывода (IO), и чем больше и сложнее файл, тем больше вычислительных ресурсов потребуется для его обработки.Для сравнения, если настройки помещены в главный конфигурационный файл
httpd.conf
, Apache разбирает их только один раз при старте, что значительно уменьшает время отклика.
Рекомендации по оптимизации
-
Перенос настроек в
httpd.conf
: Если у вас есть доступ к этому файлу конфигурации сервера, рекомендуется размещать все правила и директивы в нем, что обеспечит более высокую производительность. -
Минимизация использования
.htaccess
: Используйте.htaccess
, только если это совершенно необходимо и вы не можете изменить конфигурацию сервера. -
Тестирование производительности: Рекомендуется провести нагрузочное тестирование с помощью инструментов, таких как Apache Benchmark (ab). Сравните результаты запросов с активными правилами
.htaccess
и без них. Это поможет вам понять, насколько существенно ваше управление производительностью зависит от использования файлов.htaccess
.
Факторы, влияющие на время загрузки
-
Структура папок: Наличие множества файлов
.htaccess
в различных подкаталогах может значительно увеличить количество обращений к файловой системе. -
Объем и сложность правил: Разные настройки могут быть более затратными по времени исполнения в зависимости от их сложности, например, правила переадресации (
mod_rewrite
) могут быть тяжелее обычных настроек. -
Характеристики сервера: Этот фактор касается как аппаратных, так и программных аспектов, например, мощности системы хранения и наличия кэширования.
-
Проверка сети: Сетевые задержки могут также повлиять на общую производительность, особенно при тестировании из различных географических мест.
Заключение
Таким образом, хотя .htaccess
может быть удобным инструментом для локальной настройки сервера, его использование может незначительно увеличивать время загрузки из-за необходимости многократной проверки и парсинга на каждом запросе. В идеале, все возможности конфигурации следует перенести в httpd.conf
для повышения производительности. Всегда рекомендуется проводить индивидуальные тестирования на вашем конкретном сервере для максимальной точности в оценках производительности.