Ускоряем Magento: Часть 2 – Настройка веб-сервера
Вторая статья из серии “Ускоряем Magento”, в которой мы рассмотрим параметры конфигурации веб-сервера и оптимальную настройку Apache для запуска Magento.
Предыдущие статьи в серии “Ускоряем Magento”:
Хотя существует несколько способов настройки выполнения PHP-скриптов под Apache: как модуль (mod_php) или как FastCGI/CGI (например, с помощью mod_fastcgi или mod_fcgid), наиболее часто используется все-таки первый (mod_php).
Кроме mod_php в конфигурационном файле Apache по умолчанию включена загрузка почти всех доступных модулей, несмотря на то, что не все их них требуются для работы Magento. Это становится особенно актуально в многосерверной конфигурации, когда различные узлы занимаются выполнением разных задач, и могут быть сконфигурированы для оптимального выполнения конкретной задачи.
Минимально необходимый перечень модулей Apache для работы Magento:
- mod_expires
- mod_deflate
- mod_mime
- mod_dir
- mod_rewrite
- mod_authz_host
- mod_authz_user – может понадобиться для ограничения доступа к тестовой среде с помощью аутентификации по паролям, но редко используется на “боевом” сервере.
*Примечание: Мы рассматриваем настройку веб-сервера только с точки зрения Magento. Если у вас на том же сервере запущены другие веб-приложения, будьте осторожны при использовании приведенных рекомендаций.
Уменьшение количества загружаемых модулей (закомментировав соответствующие строчки “LoadModule” в httpd.conf) позволяет несколько уменьшить объем памяти используемый веб-сервером, что может позволить обрабатывать больше одновременных соединений при том же объеме установленной памяти.
Важным параметром настройки Apache является задание оптимального количества запускаемых процессов Apache. На данный момент режим mpm_worker все еще не может быть рекомендован для безопасного использования совместно с PHP, а процесс создания новых процессов Apache в режиме mod_prefork является “дорогой” операцией. Лучше всего работает создание необходимого количества процессов Apache сразу же при запуске веб-сервера. Это количество может быть определено практическим путем при максимальной загрузке сервера.
Обратите внимание, что значения параметров ServerLimit и MaxClients нельзя увеличивать бесконечно. Они должны иметь значения, выставленные в зависимости от доступного количества физической памяти, для того, чтобы система не начала вытеснять “лишние” процессы Apache в раздел подкачки (что приведет к резкому “проседанию” сервера при увеличении нагрузки до определенного значения).
Параметр MaxRequestsPerChild можно оставить со значением по умолчанию (4000).
Использование пула постоянных соединений (keep-alive) хотя и улучшает скорость получения контента веб-браузером, но под высокой нагрузкой приводит к неоправданному перерасходу ресурсов сервера, поэтому KeepAlive всегда должен быть выставлен в off.
Следующим важным параметром является использование сжатия контента. Несмотря на то, что это немного увеличивает использование вычислительных ресурсов сервера, выигрыш от быстрой отдачи контента броузеру и освобождение процессов для обработки следующих запросов с лихвой компенсируют эти “затраты”. Функциональность по компрессии контента предоставляется модулем mod_deflate. В Magento в файле .htaccess приведены все необходимые директивы для включения компрессии, нужно просто раскомментировать соответствующие строки, чтобы уменьшить время загрузки страниц броузером. Вот пример части .htaccess, которая у вас получится в релузьтате:
# Insert filter on selected content types only
AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css text/javascript
# Netscape 4.x has some problems...
BrowserMatch ^Mozilla/4 gzip-only-text/html
# Netscape 4.06-4.08 have some more problems
BrowserMatch ^Mozilla/4\.0[678] no-gzip
# MSIE masquerades as Netscape, but it is fine
BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
# Don't compress images
SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ no-gzip dont-vary
# Make sure proxies don't deliver the wrong content
Header append Vary User-Agent env=!dont-vary
Кроме того, можно избежать дополнительных затрат по сканированию всех директорий в пути к запрашиваемому скрипту или файлу, внеся все параметры из файлов .htaccess в основной httpd.conf файла в соответствующие разделы <Directory>.
И, в качестве дополнительного штриха, если вы используете программный балансировщик (например nginx) в многосерверной конфигурации, можно переложить на него все функции по ведению логов доступа. Это позволит снизить дисковую активность на бек-эндах Apache.
Написать комментарий