Apache web serweriňiziň öndürijiligini ýokarlandyrmak üçin 5 maslahat


Netcraft-yň (beýleki hyzmatlaryň arasynda web brauzerini ulanmagyň statistikasyny hödürleýän meşhur internet kompaniýasy) hasabatyna görä, Apache saýtlaryň we internete girýän kompýuterleriň arasynda iň köp ulanylýan web serweri bolmagyny dowam etdirýär.

Mundan başga-da, Apache iň ýokary web serwerleriniň arasynda iň uly ösüşi başdan geçirýär, ondan soň Nginx we IIS. Şeýlelik bilen, “Apache” gurnamalaryny dolandyrmak üçin ulgam dolandyryjysy bolsaňyz, web serweriňiziň (ýa-da müşderiňiziň) isleglerine görä web serweriňiziň mümkin boldugyça has gowy işleýändigini nädip bilmelidigiňizi bilmelisiňiz.

Bu makalada Apache-iň kadaly işlemegine we uzakdaky müşderilerden garaşýan haýyşlaryňyzyň sanyny çözmäge kömek etjek birnäçe maslahaty ara alyp maslahatlaşarys.

Şeýle-de bolsa, Apache-iň esasy ýazgylary goýmak maksady bilen döredilmändigini ýadyňyzdan çykarmaň, ýöne şeýle-de bolsa, pikir edip boljak ulanyş ýagdaýyňyzda-da ýokary öndürijiligi üpjün edip bilýär.

Maslahat # 1: Elmydama Apache-ni iň soňky wersiýasyna täzeläň

“Apache” -niň iň soňky wersiýasynyň gurulmagy, ilkinji nobatda göz öňünde tutulmaly zatlaryň biri bolmagy ahmal. 2015-nji ýylyň 19-njy noýabrynda CentOS 7 ammarlarynda bar bolan Apache-iň iň soňky wersiýasy 2,4,6, Debian-da bolsa 2.4.10.

Şeýle-de bolsa, ýaňy-ýakynda gowulaşan ýa-da çeşmeden göçürip alyp bolýan täze çykan durnukly wersiýa goşulan bir näsazlyk düzedilmegi bolup biler. Toplama we gurnama görkezmeleri hem şu ýerde berilýär - ýadyňyzdan çykarmaň, bu täzeleniş usulyny saýlasaňyz, ätiýaçlyk hökmünde häzirki konfigurasiýa faýllaryňyzy/sahypalaryňyzy/wirtual hostlaryňyzy ätiýaçlandyryp bilersiňiz.

Her niçigem bolsa, häzirki gurlan wersiýaňyzy aşakdaky ýaly barlap bilersiňiz:

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

Düzgün bolşy ýaly, CentOS ýa-da Debian üçin saýlanan paýlanyşyňyzyň paket dolandyryjysy ( yum update httpd ýa-da aptitude safe-upgrade apache2 ) tarapyndan berlen täzelenme usulyna ýapyşyň, degişlilikde) başga ýol bolmasa. Iň soňky goýberiş belliklerini Apache HTTP serwer Taslamasynyň web sahypasynda Apache Resminamalar bölüminde okap bilersiňiz.

Maslahat # 2: 2.4-den uly ýadro ulanýan bolsaňyz, häzir täzelemegi göz öňünde tutuň

Näme üçin? 2.4adro 2.4 we ondan ýokary wersiýalarynda iberiş ýadrosy ulgamy çagyryşy deslapky görnüşde işledilýär. Bu, öz gezeginde, ýokary öndürijilikli tor faýl geçirişini ýeňilleşdirýär (web serwer-müşderi aragatnaşygynyň çäginde islenýär) we Apache-e bir wagtyň özünde okamak we ibermek amallaryny ýerine ýetirip, statiki mazmuny has çalt we pes CPU ulanylyşy bilen üpjün etmäge mümkinçilik berýär.

Häzirki wagtda gurlan ýadrosyňyzy aşakdakylar bilen görüp bilersiňiz:

# uname -r

we ony www.kernel.org-daky iň soňky durnukly ýadro bilen deňeşdiriň (bu ýazylan wagty 4.3).

Bu täze başlanlar üçin niýetlenmedik bir proses bolsa-da, ýadrosyňyzy täzelemek Linux-yň içerki görnüşleri barada has giňişleýin öwrenmek üçin gyzykly maşkdyr.

Maslahat 33: Siziň işiňiz üçin iň oňat işleýän köp işleýiş modulyny (MPM) saýlaň

Iş ýüzünde MPM-ler, web serwerini enjamdaky tor portlaryna birikdirmek, müşderileriň haýyşlaryny kabul etmek we şeýle islegleri çözmek üçin çagalar amallaryny (we sapaklary) ulanmak üçin web serwerini nädip sazlamalydygyny kesgitlemäge mümkinçilik bermek bilen Apache-iň modul işleýşini giňeldýärler.

2.4 wersiýasyndan başlap, Apache zerurlyklaryňyza baglylykda saýlamak üçin üç dürli MPM hödürleýär:

  1. prefork MPM sapaksyz birnäçe çaga amallaryny ulanýar. Her proses, hersi üçin aýratyn sapaklar döretmezden bir gezekde bir baglanyşyk işleýär. Gaty jikme-jik maglumat bermezden, bu MPM-i diňe mod_php ýaly sapaksyz howpsuz modullary ulanýan ýa-da programmaňyz bilen iş salyşmaly bolsa, ulanyp boljakdygyny aýdyp bileris.
  2. işgäri MPM, her sapak bir gezekde bir baglanyşygy amala aşyrýan çaga amallary üçin birnäçe sapak ulanýar. Trafficokary traffikli serwerler üçin bu gowy saýlaw, sebäbi has köp birikdirilen birikmeleri öňki ýagdaýdakydan has az RAM bilen işlemäge mümkinçilik berýär.
  3. Netijede, hadysasy MPM 2.4 we ondan ýokary wersiýalar üçin Apache gurnamalarynyň köpüsinde esasy MPM. Işçi MPM-e meňzeýär, sebäbi ol her bir çaga prosesinde birnäçe sapak döredýär, ýöne artykmaçlygy bilen: KeepAlive ýa-da boş baglanyşyklaryň (şol ýagdaýda galýarka) bir sapak bilen işlemegine sebäp bolýar, şeýlelik bilen ýadyňy boşadýar beýleki sapaklara bölüner. Bu MPM mod_php ýaly sapaksyz howpsuz modullar bilen ulanmak üçin amatly däl, munuň ýerine PHP-FPM çalyşmagy ulanylmaly.

Apache gurnamagyňyzda ulanylýan MPM-i barlamak üçin edip bilersiňiz:

# httpd -V

Aşakdaky surat, bu web serweriniň prefork MPM ulanýandygyny görkezýär.

Muny üýtgetmek üçin redaktirlemeli bolarsyňyz:

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

Nirede mpm_event, mpm_worker ýa-da mpm_prefork bolup biler.

we islenýän moduly şeýle ýükleýän setiri açmak:

LoadModule mpm_event_module modules/mod_mpm_event.so

Bellik: Çäräni MPM Debian-da işlemek üçin libapache2-mod-fastcgi paketini erkin däl ammarlardan gurnamaly bolmagyňyz mümkin.

Mundan başga-da, CentOS üçin php-fpm (fcgi we mod_fcgid bilen bilelikde) gerek bolar, Debian-da bolsa php5-fpm (apache2-mpm-waka bilen bilelikde).

Iň soňkusy, web serwerini we täze gurlan php-fpm (ýa-da php5-fpm) hyzmatyny täzeden açyň:

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

“Apache” -ni belli bir MPM-ni ulanmak üçin sazlap bilseňiz, bu konfigurasiýa wirtual host esasda ozal görkezilişi ýaly üýtgedilip bilner.

Her wirtual host üçin degişli bellikleri konfigurasiýa faýlyna taşlaň we gitmäge taýýardyňyz - ýöne her whostda ýekeje MPM ulanýandygyňyza göz ýetiriň.

Ahyrynda, saýlan paýlanyşyňyza garamazdan php-fpm FastCGI-iň durmuşa geçirilmegine bil baglaýandygyny ýadyňyzdan çykarmaň, goşmaça paket gurnamalaryny öňem maslahat bermegimiň sebäbi.

Php-fpm-de has giňişleýin maglumat we mysallar we MPM hadysasy bilen bilelikde Apache-iň öndürijiligini ýokarlandyryp biljekdigi üçin resmi resminamalara ýüz tutuň.

Öňki MPM-ni preforkdan hadysa öňki suratda görkezilen gutuda üýtgedenimden soň görýän zadym:

CentOS 7-de, http we https hyzmatlarynyň gorag diwary arkaly açykdygyna we tor interfeýsiniň (leriniň) deslapky zona dogry goşulandygyna göz ýetirmeli.

Mysal üçin:

# 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

Bu meseläni gozgamagymyň sebäbi, ýaňy-ýakynda bir bulut VPS-de adaty firewalld konfigurasiýa sazlamalarynyň php-fpm we Apache-iň php faýllaryny gaýtadan işlemeginiň öňüni alýan bir meseläni başdan geçirdim.

Esasy synag hökmünde (has çylşyrymly ýa-da stresli pikir edip biljekdigiňize ynanýaryn), iki CentOS-yň şol bir katalogynda test.php atly başga bir faýlyň bardygyny barlaýan php faýly dörederin. Birmeňzeş enjam aýratynlyklary we ýükli, ýöne dürli MPM bilen 7 serwer. Olaryň biri hadysany, beýlekisi prefork ulanar:

Bu, checkiffileexists.php atly faýlda saklan php kody:

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

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

Soňra 2000 haýyş gutarýança 200 bir wagtyň özünde Apache ölçeg guralyny (ab) işlederis:

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

Synagy geçireliň we netijeleri deňeşdireliň. Netijeleriň statistikasyna üns beriň:

Görşüňiz ýaly, serweriň waka bilen işleýşi, bu synagyň ähli ugurlarynda prefork kärdeşinden has ýokarydyr.

Maslahat # 4: Apache üçin RAM paýhasly paýlaň

Perhapshtimal, göz öňünde tutulmaly iň möhüm enjam elementi, her Apache prosesi üçin bölünip berlen RAM mukdarydyr. Muny gönüden-göni dolandyryp bilmeýän bolsaňyz, Apache tarapyndan RAM ulanylyşyna çäklendirme girizjek MaxRequestWorkers direktiwasy (ozal Apache 2.2-de MaxClients ady bilen tanalýardy) arkaly çaga amallarynyň sanyny çäklendirip bilersiňiz. Againene-de bu bahany her öý eýesi ýa-da wirtual host esasynda kesgitläp bilersiňiz.

Munuň üçin Apache tarapyndan ulanylýan RAM-yň ortaça mukdaryna üns bermeli, ony MaxRequestWorkers-iň sanyna köpeltmeli we Apache amallary üçin bölünip beriljek ýadyň mukdary. Web serweriňiziň hiç haçan islemeýän zady, swap ulanyp başlamak, sebäbi bu onuň işini ep-esli peselder. Şeýlelik bilen, “Apache” tarapyndan RAM-yň ulanylyşyny elmydama mümkin bolan çäklerde saklamaly we hiç haçan onuň çalşygyna bil baglamaly däl.

Mysal üçin, aşakdaky blok bir wagtyň özünde müşderileriň sanyny 30-a çenli çäklendirer. Has köp müşderi öý eýesini ursa, brauzeri täzelemek arkaly aňsatlyk bilen çözülip bilinjek gijikdirme ýa-da wagtlaýyn şowsuzlyga duçar bolup biler. Bu islenmeýän hasaplanylsa-da, serwer üçin has sagdyn we uzak möhletde sahypaňyz üçin hem peýdalydyr.

Bu bloky CentOS ýa-da Debian ulanýandygyňyza baglylykda /etc/httpd/conf/httpd.conf ýa-da /etc/apache2/apache2.conf içinde ýerleşdirip bilersiňiz.

Şol bir ýörelgäniň ähli MPM-lere degişlidigini ýadyňyzdan çykarmaň - men bu ýerde wakany öňki maslahatda görkezilen düşünjäni dowam etdirmek üçin ulanýaryn:

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

Her niçigem bolsa, saýlanan MPM üçin haýsy görkezmeleriň rugsat berilýändigini görmek üçin Apache 2.4 resminamalaryna ýüz tutmagyňyz maslahat berilýär.

Maslahat # 5: Arzalaryňyzy biliň

Düzgün bolşy ýaly, programmaňyzyň işlemegi üçin düýbünden zerur bolmadyk Apache modullaryny ýüklemeli däl. Bu, iň bolmanda, ulgam dolandyryjysy bolsaňyz we ösüş üçin jogapkär başga bir topar bar bolsa, serweriňizde işleýän programmalar barada iň bolmanda umumy bilim talap eder.

Häzirki wagtda ýüklenen modullary sanap bilersiňiz:

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

CentOS-da modullary düşürmek/öçürmek üçin LoadModule bilen başlanýan setiri (esasy konfigurasiýa faýlynda ýa-da /etc/httpd/conf.modules.d içindäki kömekçi görnüşinde) düşündirmeli bolarsyňyz.

Beýleki tarapdan, Debian modullary öçürmek üçin a2dismod atly gural bilen üpjün edýär we aşakdaky ýaly ulanylýar:

# a2dismod module_name

Yzyna açmak üçin:

# a2enmod module_name

Iki ýagdaýda-da üýtgeşmeleriň güýje girmegi üçin Apache-i täzeden açmagy ýatdan çykarmaň.

Gysgaça mazmun

Bu makalada Apache web serwerini sazlamaga we öndürijiligini ýokarlandyrmaga kömek etjek 5 maslahaty gözden geçirdik. Mundan başga-da, optimizasiýanyň we howpsuzlygyň ýerine ýetirilmeginiň manysyzdygyny ýadyňyzdan çykarmaly dälsiňiz, şonuň üçin linux-console.net sahypasyndaky Apache gatylaşdyryjy maslahatlar makalasyna hem ýüz tutup bilersiňiz.

Bu makalada bu mowzugyň ähli taraplaryny ýeterlik derejede gurşap alyp bilmeýändigimiz sebäpli, belki, beýleki jemgyýetler bilen paýlaşmak isleýän beýleki pikirleriňiz hakda pikir edersiňiz. Şeýle bolsa, aşakdaky düşündiriş formuny ulanyp bize habar beriň.