Аптымізацыя прадукцыйнасці apache2

Многія выкарыстоўваюць apache2 у якасці вэб-сервера. Аднак мала хто задумваецца пра аптымізацыю яго прадукцыйнасці, што прама прапарцыйна адбіваецца на хуткасці загрузкі старонак сайта, хуткасці апрацоўкі скрыптоў (у прыватнасці php), а таксама на росце нагрузкі на ЦП і павелічэнні аб'ёму выкарыстоўванай АЗП.

Такім чынам, наступны мануал, павінен дапамагчы пачаткоўцам (і не толькі) карыстачам.
Усе ніжэйпрыведзеныя прыклады выкарыстоўваліся на Raspberry PI 3, Debian 9, Apache 2.4.38, PHP 7.3.

Такім чынам, пачнем.

1. Адключэнне модуляў, якія не выкарыстоўваюцца.

Першым метадам з'яўляецца банальнае адключэнне модуляў, якія вы не карыстаецеся:

Спіс модуляў, якія выкарыстоўваюцца ў дадзены момант, можна паглядзець камандай:

apache2ctl -M

Для адключэння модуля выкарыстоўваецца каманда:

a2dismod *название модуля*

Адпаведна для ўключэння модуля выкарыстоўваецца каманда:

a2enmod *название модуля*

Звярніце ўвагу, што пры выкарыстанні a2dismod, назву модуля неабходна пісаць без самога слова модуль.

Напрыклад, калі вы ў выснове каманды apache2ctl -M ўбачылі proxy_module, то для яго адключэння неабходна выкарыстоўваць каманду - a2dismod проксі

Найболей загружальнымі сістэму модулямі (па асабістым досведзе) з'яўляюцца:

  • PHP, Ruby, Perl і іншыя модулі для розных скрыптовых моў
  • SSL
  • Перазапісаць
  • CGI

Так што ў тых выпадках, калі гэтыя модулі вам не патрэбны я рэкамендую гэтыя модулі адключыць.

Таксама, пасля адключэння якога-небудзь модуля, я рэкамендую выкарыстоўваць каманду. Тэст канфігурацыі apache2ctl, якая праверыць канфігурацыю выкарыстоўваных сайтаў і калі які-небудзь з адключаных модуляў быў для іх неабходны, выдасць памылку.

2. Змена MPM(Multi-Processing Module) і выкарыстанне php-fpm

Па змаўчанні, пасля ўсталёўкі, apache2 выкарыстае MPM Prefork (1 струмень на 1 злучэнне), які прыкметна змяншае прадукцыйнасць, але пры гэтым паляпшае стабільнасць і бяспека.

Але для аптымізацыі прадукцыйнасці я рэкамендую выкарыстоўваць MPM Worker, які дазваляе выкарыстоўваць адразу некалькі плыняў на адно злучэнне.

Для яго ўключэння выкарыстоўваем наступныя каманды:

a2dismod mpm_prefork  //Отключаем prefork
a2dismod php7.3  //Отключаем модуль php, который зависит от prefork
a2enmod mpm_worker  //Включаем worker

Аднак пры выкарыстанні Worker вы можаце сутыкнуцца з праблемай, т.я. модуль php7.3 залежыць ад модуля Prefork.

Для вырашэння гэтай праблемы ўсталюем модуль php7.3-fpm, які будзе выкарыстоўвацца для адпрацоўкі php-скрыптоў:

apt-get update && apt-get install php7.3-fpm  //Устанавливаем
systemctl enable php7.3-fpm && systemctl start php7.3-fpm  //Добавляем в автозагрузку и запускаем
a2enmod php7.3-fpm && a2enconf php7.3-fpm.conf  //Включаем модуль и конфиг для него

Варта заўважыць, што выкарыстанне php-fpm таксама зменшыць аб'ём выкарыстоўванай АЗП працэсам apache2 і трохі паскорыць адпрацоўку php-скрыптоў.

3. заключэнне

Такім чынам, такімі простымі дзеяннямі мы змаглі аптымізаваць прадукцыйнасць і зменшыць нагрузку на машыну (у дадзеным выпадку RPI3).

Вядома ж, ёсць сотні іншых варыянтаў аптымізацыі, накшталт уключэння сціску (што сапраўды карысна, але ў большасці сваёй ужо ўключана па змаўчанні), змены параметраў (файлаў канфігурацыі) MPM, адключэнні HostnameLookups і г.д., але ў дадзеным артыкуле я пастараўся адбіць менавіта тыя пункты, якія найбольш дапамаглі мне, і спадзяюся, што дапамогуць іншым.

Крыніца: habr.com

Дадаць каментар