Ускоряем Magento: Часть 2 – Настройка веб-сервера

Михаил Бессолов, 31.08.09

Вторая статья из серии “Ускоряем Magento”, в которой мы рассмотрим параметры конфигурации веб-сервера и оптимальную настройку Apache для запуска Magento.

Предыдущие статьи в серии “Ускоряем Magento”:

Хотя существует несколько способов настройки выполнения PHP-скриптов под Apache: как модуль (mod_php) или как FastCGI/CGI (например, с помощью mod_fastcgi или mod_fcgid), наиболее часто используется все-таки первый (mod_php).

Кроме mod_php в конфигурационном файле Apache по умолчанию включена загрузка почти всех доступных модулей, несмотря на то, что не все их них требуются для работы Magento. Это становится особенно актуально в многосерверной конфигурации, когда различные узлы занимаются выполнением разных задач, и могут быть сконфигурированы для оптимального выполнения конкретной задачи.

Минимально необходимый перечень модулей Apache для работы Magento:

*Примечание: Мы рассматриваем настройку веб-сервера только с точки зрения 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.

Написать комментарий