5 Għajnuniet biex Tissaħħaħ il-Prestazzjoni tas-Server tal-Web Apache Tiegħek


Skont rapport reċenti minn Netcraft (kumpanija tal-Internet magħrufa li tipprovdi fost servizzi oħra statistika dwar l-użu tal-web browser), Apache għadu l-web server l-aktar użat fost is-siti u l-kompjuters li jiffaċċjaw l-Internet.

Barra minn hekk, Apache għadu jesperjenza l-akbar tkabbir fost l-aqwa servers tal-web, segwit minn Nginx u IIS. Għalhekk, jekk inti amministratur tas-sistema inkarigat mill-ġestjoni tal-installazzjonijiet Apache, trid tkun taf kif tiżgura li s-server tal-web tiegħek jaħdem bl-aħjar mod tal-kapaċità tiegħu skont il-ħtiġijiet tiegħek (jew tal-klijent tiegħek).

F'dan l-artikolu ser niddiskutu ftit suġġerimenti li jgħinuk tiżgura li Apache se jaħdem bla xkiel u jkun jista 'jimmaniġġja n-numru ta' talbiet li qed tistenna minn klijenti remoti.

Madankollu, jekk jogħġbok żomm f'moħħok li Apache ma kienx iddisinjat bl-għan li jistabbilixxi rekords ta 'referenza - iżda, minkejja dan, għadu kapaċi jipprovdi prestazzjoni għolja fi kważi kull każ ta' użu li tista 'taħseb fih.

TIP #1: Dejjem żomm Apache aġġornat għall-aħħar verżjoni tiegħu

M'hemmx għalfejn ngħidu li l-aħħar verżjoni ta' Apache installata hija probabbilment waħda mill-ewwel affarijiet li għandek bżonn tikkunsidra. Mid-19 ta 'Novembru 2015, l-aħħar verżjoni ta' Apache disponibbli fir-repożitorji CentOS 7 hija 2.4.6, filwaqt li f'Debian hija 2.4.10.

Madankollu, jista 'jkun hemm titjib riċenti jew soluzzjoni ta' bug li tkun ġiet miżjuda ma 'verżjoni stabbli li għadha kif ħarġet, li mbagħad issir disponibbli biex tniżżel u tinstalla mis-sors. Istruzzjonijiet ta’ kumpilazzjoni u installazzjoni huma pprovduti wkoll hawnhekk – ftakar biss li jekk tagħżel dan il-metodu ta’ aġġornament, tista’ tkun trid tagħmel backup tal-fajls/siti/hosts virtwali tal-konfigurazzjoni attwali tiegħek bħala prekawzjoni.

Fi kwalunkwe każ, tista 'tiċċekkja l-verżjoni installata bħalissa tiegħek kif ġej:

# httpd -v               [On RedHat/CentOS based systems]
# apache2 –v             [On Debian/Ubuntu based systems] 

Bħala regola ġenerali, żomm mal-metodu ta’ aġġornament ipprovdut mill-maniġer tal-pakketti tad-distribuzzjoni magħżula tiegħek (yum update httpd jew aptitude safe-upgrade apache2, għal CentOS jew Debian, rispettivament) sakemm ma jkunx hemm mod ieħor. Tista 'taqra l-aħħar noti ta' rilaxx fit-taqsima tad-Dokumentazzjoni Apache fil-websajt tal-Proġett tas-server Apache HTTP.

TIP #2: Jekk qed tuża Kernel eqdem minn 2.4, ikkunsidra li taġġorna issa

Għaliex? Verżjonijiet tal-kernel 2.4 u 'l fuq għandhom is-sejħa tas-sistema tal-kernel sendfile attivata b'mod awtomatiku. Dan, min-naħa tiegħu, jiffaċilita trasferimenti ta 'fajls tan-netwerk ta' prestazzjoni għolja (li huma mixtieqa fil-kuntest ta 'komunikazzjonijiet web server-klijent) u jippermetti lil Apache biex iwassal kontenut statiku aktar malajr u b'użu aktar baxx tas-CPU billi jwettaq operazzjonijiet simultanji ta' qari u tibgħat.

Tista' tara l-kernel installat bħalissa tiegħek ma':

# uname -r

u qabbilha mal-aħħar kernel stabbli f'www.kernel.org (4.3 fil-ħin tal-kitba).

Għalkemm huwa proċess mhux maħsub għal dawk li jibdew, it-titjib tal-qalba tiegħek huwa eżerċizzju interessanti biex titgħallem aktar dwar l-intern tal-Linux.

TIP #3: Agħżel il-Multi-Processing Module (MPM) li jaħdem l-aħjar għall-każ tiegħek

Fil-prattika, l-MPMs jestendu l-funzjonalità modulari ta 'Apache billi jippermettulek tiddeċiedi kif tikkonfigura s-server tal-web biex jorbot mal-portijiet tan-netwerk fuq il-magna, jaċċettaw talbiet mill-klijenti, u jużaw proċessi tat-tfal (u ħjut, alternattivament) biex jimmaniġġjaw tali talbiet.

Li tibda bil-verżjoni 2.4, Apache joffri tliet MPMs differenti minn fejn tagħżel, skont il-bżonnijiet tiegħek:

  1. Il-prefork MPM juża proċessi tfal multipli mingħajr kamini. Kull proċess jimmaniġġja konnessjoni waħda kull darba mingħajr ma joħloq ħjut separati għal kull wieħed. Mingħajr ma nidħlu wisq fid-dettall, nistgħu ngħidu li tkun trid tuża dan l-MPM biss meta tiddibaggja applikazzjoni li tuża, jew jekk l-applikazzjoni tiegħek teħtieġ li tittratta moduli mhux thread-safe bħal mod_php.
  2. Il-ħaddiem MPM juża diversi threads għal kull tifel proċessi, fejn kull thread jieħu ħsieb konnessjoni waħda kull darba. Din hija għażla tajba għal servers ta' traffiku għoli peress li tippermetti li jiġu ttrattati aktar konnessjonijiet konkorrenti b'inqas RAM milli fil-każ preċedenti.
  3. Fl-aħħarnett, l-avveniment MPM huwa l-MPM default fil-biċċa l-kbira tal-installazzjonijiet Apache għall-verżjonijiet 2.4 u ogħla. Huwa simili għall-ħaddiem MPM peress li joħloq ukoll ħjut multipli għal kull proċess tifel iżda b'vantaġġ: jikkawża konnessjonijiet KeepAlive jew idle (filwaqt li jibqgħu f'dak l-istat) biex jiġu mmaniġġjati b'ħajt wieħed, u b'hekk teħles memorja li tista' jiġu allokati għal ħjut oħra. Dan l-MPM mhuwiex adattat għall-użu ma' moduli li mhumiex thread-safe bħal mod_php, li għalihom irid jintuża sostituzzjoni bħal PHP-FPM minflok.

Biex tiċċekkja l-MPM użat mill-installazzjoni Apache tiegħek, tista 'tagħmel:

# httpd -V

L-immaġni hawn taħt turi li dan is-server tal-web partikolari qed juża l-prefork MPM.

Biex tibdel dan, ser ikollok bżonn teditja:

# /etc/httpd/conf.modules.d/00-mpm.conf          [On RedHat/CentOS based systems]
# /etc/apache2/mods-available/<mpm>.load   [On Debian/Ubuntu based systems]

Fejn jista' jkun mpm_event, mpm_worker, jew mpm_prefork.

u neħħi l-kumment tal-linja li jgħabbi l-modulu mixtieq hekk:

LoadModule mpm_event_module modules/mod_mpm_event.so

Nota: Biex l-avveniment MPM jaħdem f'Debian, jista' jkollok tinstalla l-pakkett libapache2-mod-fastcgi mir-repożitorji mhux ħielsa.

Barra minn hekk, għal CentOS ser ikollok bżonn php-fpm (flimkien ma 'fcgi u mod_fcgid) filwaqt li f'Debian tissejjaħ php5-fpm (flimkien ma' apache2-mpm-event).

L-aħħar, iżda mhux l-inqas, ibda mill-ġdid is-server tal-web u s-servizz php-fpm (jew php5-fpm) li għadu kif ġie installat:

# systemctl restart httpd php-fpm && systemctl enable httpd php-fpm
# systemctl restart apache2 php5-fpm && systemctl enable apache2 php5-fpm

Għalkemm tista' tissettja Apache biex tuża MPM speċifiku, dik il-konfigurazzjoni tista' tiġi ssostitwita fuq bażi ta' kull host virtwali bl-istess mod kif indikat qabel.

Waqqa 'l-tags korrispondenti fil-fajl tal-konfigurazzjoni għal kull host virtwali u tkun lest biex tmur - imma kun żgur li qed tuża MPM wieħed u wieħed biss għal kull vhost.

Fl-aħħarnett, jekk jogħġbok innota li irrispettivament mid-distribuzzjoni magħżula tiegħek, php-fpm jiddependi fuq l-implimentazzjoni ta 'FastCGI, li hija r-raġuni għaliex irrakkomandat l-installazzjonijiet ta' pakkett addizzjonali aktar kmieni.

Għal aktar dettalji u eżempji dwar php-fpm u kif jista 'flimkien mal-avveniment MPM iżid il-prestazzjoni ta' Apache, għandek tirreferi għad-dokumentazzjoni uffiċjali.

Dan huwa dak li nara wara li nbiddel l-MPM default minn prefork għal avveniment fl-istess kaxxa murija fl-immaġni ta 'qabel:

F'CentOS 7, ser ikollok bżonn tiżgura li s-servizzi http u https huma attivati permezz tal-firewall, u li l-interface(s) tan-netwerk huma miżjuda sew maż-żona default.

Pereżempju:

# firewall-cmd --zone=internal --add-interface=tun6to4 
# firewall-cmd --zone=internal --add-interface=tun6to4 --permanent 
# firewall-cmd --set-default-zone=internal 
# firewall-cmd --add-service=http 
# firewall-cmd --add-service=https 
# firewall-cmd --add-service=http --permanent 
# firewall-cmd --add-service=https --permanent 
# firewall-cmd --reload

Ir-raġuni għaliex qed inġib dan hija għaliex reċentement esperjenzajt kwistjoni fejn is-settings tal-konfigurazzjoni tal-firewalld default f'VPS sħaba żammew lil php-fpm u Apache milli jipproċessaw fajls php.

Bħala test bażiku (ninsab ċert li tista' taħseb f'oħrajn aktar ikkumplikati jew stressanti), se noħloq fajl PHP li jiċċekkja l-eżistenza ta' fajl ieħor bl-isem test.php fl-istess direttorju ta' żewġ CentOS 7 servers bl-istess karatteristiċi ta 'hardware u tagħbija iżda b'MPM differenti. Wieħed minnhom juża event u l-ieħor juża prefork:

Dan huwa l-kodiċi PHP li ssalvajt f'fajl bl-isem checkiffileexists.php:

<?php
$filename = 'test.php';

if (file_exists($filename)) {
    echo "The file $filename exists";
} else {
    echo "The file $filename does not exist";
}
?>

Imbagħad se nħaddmu l-għodda ta' referenza Apache (ab) b'200 talba simultanja sakemm jitlestew 2000 talba:

# ab -k -c 100 -n 2000 localhost/checkiffileexists.php

Ejja nagħmel it-test u nqabblu r-riżultati. Oqgħod attent għall-istatistika tal-prestazzjoni:

Kif tistgħu taraw, il-prestazzjoni tas-server bl-avveniment hija superjuri ħafna għall-kontroparti prefork tagħha f'kull aspett ta 'dan it-test.

TIP #4: Alloka RAM b'mod għaqli għal Apache

Forsi l-aktar oġġett ta 'hardware kritiku li għandu jitqies huwa l-ammont ta' RAM allokat għal kull proċess Apache. Filwaqt li ma tistax tikkontrolla dan direttament, tista' tirrestrinġi n-numru ta' proċessi tfal permezz tad-direttiva MaxRequestWorkers (magħrufa qabel bħala MaxClients f'Apache 2.2), li se tpoġġi limiti fuq l-użu tar-RAM minn Apache. Għal darb'oħra, tista' tissettja dan il-valur fuq bażi għal kull host jew għal kull host virtwali.

Biex tagħmel dan, għandek tieħu nota tal-ammont medju ta 'RAM użat minn Apache, imbagħad immultiplikah bin-numru ta' MaxRequestWorkers, u dak huwa l-ammont ta 'memorja li se jiġi allokat għall-proċessi Apache. Ħaġa waħda li qatt ma trid tagħmel is-server tal-web tiegħek hija li tibda tuża t-tpartit, peress li dan inaqqas b'mod sinifikanti l-prestazzjoni tiegħu. Għalhekk, għandek dejjem iżżomm l-użu ta 'RAM minn Apache fil-limiti li tista' taffordja u qatt ma tistrieħ fuq tpartit għaliha.

Pereżempju, il-blokk li ġej se jirrestrinġi n-numru ta 'klijenti simultanji għal 30. Jekk aktar klijenti jolqtu lill-ospitant, jistgħu jesperjenzaw dewmien jew falliment momentanju li jista' jiġi solvut faċilment billi jġedded il-browser. Filwaqt li dan jista 'jitqies mhux mixtieq, huwa aktar b'saħħtu għas-server u fit-tul, l-aħjar għas-sit tiegħek ukoll.

Tista' tpoġġi din il-blokka ġewwa /etc/httpd/conf/httpd.conf jew /etc/apache2/apache2.conf, skont jekk tkunx qed tuża CentOS jew Debian.

Jekk jogħġbok innota li l-istess prinċipju japplika għall-MPMs kollha – qed nuża l-avveniment hawn biex inkompli bil-kunċett deskritt fil-ponta preċedenti:

<IfModule mpm_event_module>
    StartServers 3
    MinSpareThreads          25
    MaxSpareThreads          75
    ThreadLimit                      64
    ThreadsPerChild          25
    MaxRequestWorkers    30
    MaxConnectionsPerChild    1000
</IfModule>

Fi kwalunkwe każ, huwa rakkomandat ħafna li tirreferi għad-dokumenti Apache 2.4 biex tara liema direttivi huma permessi għall-MPM magħżul tiegħek.

TIP #5: Kun af l-applikazzjonijiet tiegħek

Bħala regola ġenerali, m'għandekx tagħbija moduli Apache li mhumiex strettament meħtieġa biex l-applikazzjoni tiegħek taħdem. Dan se jeħtieġ mill-inqas għarfien ġenerali tal-applikazzjonijiet li qed jaħdmu fuq is-server tiegħek, speċjalment jekk inti amministratur tas-sistema u hemm tim ieħor inkarigat mill-iżvilupp.

Tista' telenka l-moduli mgħobbija bħalissa bi:

# httpd -M          [On RedHat/CentOS based systems]
# apache2ctl -M     [On Debian/Ubuntu based systems]

Biex tħott/tiddiżattiva moduli f'CentOS, ser ikollok bżonn tikkummenta l-linja li tibda b'LoadModule (jew fil-fajl tal-konfigurazzjoni prinċipali jew f'wieħed awżiljarju ġewwa /etc/httpd/conf.modules.d.

Min-naħa l-oħra, Debian jipprovdi għodda msejħa a2dismod biex tiddiżattiva l-moduli u tintuża kif ġej:

# a2dismod module_name

Biex tippermettilu lura:

# a2enmod module_name

Fi kwalunkwe każ, ftakar li terġa 'tibda Apache biex il-bidliet jidħlu fis-seħħ.

Sommarju

F'dan l-artikolu rrevejna 5 suġġerimenti li jgħinuk tissaħħaħ is-server tal-web Apache u żżid il-prestazzjoni tiegħu. Barra minn hekk, għandek tiftakar li l-ottimizzazzjoni u l-prestazzjoni mingħajr sigurtà huma inutli, għalhekk tista 'tkun trid tirreferi għall-artiklu ta' tips dwar it-twebbis ta 'Apache f'linux-console.net ukoll.

Peress li ma nistgħux inkopru b'mod adegwat l-aspetti kollha ta 'dan is-suġġett f'dan l-artikolu, forsi taħseb f'ideat oħra li tixtieq taqsam mal-bqija tal-komunità. Jekk iva, tħossok liberu li tgħarrafna billi tuża l-formola tal-kummenti hawn taħt.