5 Mga Tip aron Mapauswag ang Pagganap sa Imong Apache Web Server


Sumala sa usa ka bag-o nga taho sa Netcraft (usa ka inila nga kompanya sa Internet nga naghatag taliwala sa ubang mga serbisyo sa mga istatistika sa paggamit sa web browser), ang Apache nagpadayon nga labing kaylap nga gigamit nga web server taliwala sa mga site ug mga kompyuter nga nag-atubang sa Internet.

Dugang pa, ang Apache nagpadayon sa pagsinati sa pinakadako nga pagtubo sa mga nanguna nga web server, gisundan sa Nginx ug IIS. Busa, kung ikaw usa ka administrador sa sistema nga nagdumala sa pagdumala sa mga instalasyon sa Apache, kinahanglan nimo mahibal-an kung giunsa pagsiguro nga ang imong web server molihok sa labing kaayo nga kapasidad niini sumala sa imong (o imong kliyente) nga mga panginahanglanon.

Niini nga artikulo atong hisgutan ang pipila ka mga tip nga makatabang kanimo sa pagsiguro nga ang Apache modagan nga hapsay ug makahimo sa pagdumala sa gidaghanon sa mga hangyo nga imong gipaabut gikan sa mga hilit nga kliyente.

Bisan pa, palihug hinumdomi nga ang Apache wala gidisenyo nga adunay katuyoan sa pagtakda sa mga talaan sa sukaranan - apan, bisan pa, kini makahimo gihapon nga maghatag taas nga pasundayag sa halos bisan unsang kaso sa paggamit nga mahimo nimong mahunahuna.

TIP #1: Kanunay nga i-update ang Apache sa pinakabag-o nga bersyon niini

Wala'y gisulti nga ang pag-instalar sa pinakabag-o nga bersyon sa Apache tingali usa sa unang mga butang nga kinahanglan nimong tagdon. Hangtud sa Nobyembre 19, 2015, ang pinakabag-o nga bersyon sa Apache nga anaa sa CentOS 7 repository mao ang 2.4.6, samtang sa Debian kay 2.4.10.

Bisan pa, mahimo’g adunay bag-o nga pag-uswag o usa ka pag-ayo sa bug nga gidugang sa usa ka bag-ong gipagawas nga stable nga bersyon, nga mahimo’g magamit aron ma-download ug ma-install gikan sa gigikanan. Ang mga panudlo sa pag-compile ug pag-install gihatag usab dinhi - hinumdomi lang nga kung imong pilion kini nga pamaagi sa pag-update, mahimo nimong i-back up ang imong karon nga mga file sa pag-configure/site/virtual host ingon usa ka pag-amping.

Sa bisan unsang panghitabo, mahimo nimong susihon ang imong na-install nga bersyon sama sa mosunod:

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

Ingon usa ka lagda sa kumagko, sunda ang pamaagi sa pag-update nga gihatag sa manager sa package sa imong gipili nga pag-apod-apod (yum update httpd o aptitude safe-upgrade apache2, para sa CentOS o Debian, tagsa-tagsa) gawas kon walay laing paagi. Mahimo nimong basahon ang pinakabag-o nga mga nota sa pagpagawas sa seksyon sa Apache Documentation sa Apache HTTP server Project website.

TIP #2: Kung naggamit ka usa ka Kernel nga mas tigulang kaysa 2.4, hunahunaa ang pag-upgrade karon

Ngano man? Ang mga bersiyon sa kernel 2.4 ug labaw pa kay ang sendfile kernel system call nga gipagana pinaagi sa default. Kana, sa baylo, nagpadali sa mga pagbalhin sa file sa network nga adunay taas nga pasundayag (nga gitinguha sa konteksto sa mga komunikasyon sa web server-kliyente) ug gitugotan ang Apache nga maghatud sa static nga sulud nga mas paspas ug adunay gamay nga paggamit sa CPU pinaagi sa paghimo sa dungan nga pagbasa ug pagpadala nga mga operasyon.

Mahimo nimong tan-awon ang imong gi-install karon nga kernel gamit ang:

# uname -r

ug itandi kini sa pinakabag-o nga stable kernel sa www.kernel.org (4.3 sa panahon sa pagsulat niini).

Bisan kung kini usa ka proseso nga wala gituyo alang sa mga nagsugod, ang pag-upgrade sa imong kernel usa ka makapaikag nga ehersisyo aron mahibal-an ang dugang bahin sa mga internal sa Linux.

TIP #3: Pilia ang Multi-Processing Module (MPM) nga labing maayo alang sa imong kaso

Sa praktis, gipalapad sa MPM ang modular functionality sa Apache pinaagi sa pagtugot kanimo sa pagdesisyon kung unsaon pag-configure ang web server aron mabugkos sa mga network port sa makina, modawat sa mga hangyo gikan sa mga kliyente, ug mogamit sa mga proseso sa mga bata (ug mga thread, alternatibo) sa pagdumala sa maong mga hangyo.

Sugod sa bersyon 2.4, ang Apache nagtanyag og tulo ka lain-laing mga MPM nga mapilian, depende sa imong mga panginahanglan:

  1. Ang prefork MPM naggamit ug daghang proseso sa bata nga walay threading. Ang matag proseso nagdumala sa usa ka koneksyon sa usa ka higayon nga wala’y paghimo og lahi nga mga hilo alang sa matag usa. Sa walay paghisgot ug daghan kaayong detalye, makaingon mi nga gusto nimong gamiton kini nga MPM lamang sa dihang mag-debug sa usa ka aplikasyon nga naggamit, o kon kinahanglang atubangon sa imong aplikasyon, ang mga modulo nga dili luwas sa thread sama sa mod_php.
  2. Ang worker MPM naggamit ug daghang mga thread kada proseso sa bata, diin ang matag thread nagdumala sa usa ka koneksyon matag higayon. Kini usa ka maayong pagpili alang sa mga server nga adunay daghang trapiko tungod kay gitugotan niini ang daghang mga dungan nga koneksyon nga madumala nga adunay gamay nga RAM kaysa sa miaging kaso.
  3. Sa katapusan, ang event MPM mao ang default MPM sa kadaghanan sa mga instalasyon sa Apache para sa mga bersyon 2.4 ug pataas. Susama kini sa trabahante nga MPM nga nagmugna usab kini daghang mga hilo matag proseso sa bata apan adunay usa ka bentaha: hinungdan nga ang mga koneksyon sa KeepAlive o wala’y mahimo (samtang nagpabilin sila sa kana nga kahimtang) nga madumala sa usa ka hilo, sa ingon nagpagawas sa memorya nga mahimo. igahin sa ubang mga thread. Kini nga MPM dili angay alang sa paggamit sa mga non-thread-safe nga mga modulo sama sa mod_php, diin ang usa ka puli sa ingon nga PHP-FPM kinahanglang gamiton hinuon.

Aron masusi ang MPM nga gigamit sa imong pag-install sa Apache, mahimo nimo:

# httpd -V

Ang hulagway sa ubos nagpakita nga kining partikular nga web server naggamit sa prefork MPM.

Aron mabag-o kini, kinahanglan nimo nga usbon:

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

Diin ang mahimong mpm_event, mpm_worker, o mpm_prefork.

ug uncomment ang linya nga nagkarga sa gitinguha nga module sama niini:

LoadModule mpm_event_module modules/mod_mpm_event.so

Mubo nga sulat: Aron mahimo ang kalihokan sa MPM nga magtrabaho sa Debian, mahimo nimong i-install ang libapache2-mod-fastcgi nga pakete gikan sa dili libre nga mga repositoryo.

Dugang pa, alang sa CentOS kinahanglan nimo ang php-fpm (kauban ang fcgi ug mod_fcgid) samtang sa Debian gitawag kini nga php5-fpm (uban ang apache2-mpm-event).

Katapusan, apan dili labing gamay, i-restart ang web server ug ang bag-ong na-install nga php-fpm (o php5-fpm) nga serbisyo:

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

Bisan kung mahimo nimong itakda ang Apache nga mogamit usa ka piho nga MPM, kana nga pag-configure mahimong ma-override sa usa ka per-virtual host nga basehan sa parehas nga paagi sama sa gipakita sa sayo pa.

Ihulog lang ang katugbang nga mga tag sa configuration file alang sa matag virtual host ug andam ka na nga moadto - apan siguroha nga naggamit ka ug usa ug usa lamang ka MPM matag vhost.

Sa katapusan, palihug timan-i nga bisan unsa pa ang imong gipili nga pag-apod-apod, ang php-fpm nagsalig sa pagpatuman sa FastCGI, nga mao ang hinungdan ngano nga girekomenda nako ang dugang nga mga pag-install sa package sa sayo pa.

Alang sa dugang nga mga detalye ug mga panig-ingnan sa php-fpm ug kung giunsa kini mahimo kauban ang panghitabo nga ang MPM makadugang sa pasundayag sa Apache, kinahanglan nimo nga tan-awon ang opisyal nga dokumentasyon.

Mao kini ang akong nakita human mausab ang default MPM gikan sa prefork ngadto sa panghitabo sa samang kahon nga gipakita sa miaging hulagway:

Sa CentOS 7, kinahanglan nimo nga sigurohon nga ang mga serbisyo sa http ug https gipagana pinaagi sa firewall, ug nga ang (mga) interface sa network husto nga gidugang sa default zone.

Pananglitan:

# 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

Ang rason ngano nga ako nagdala niini tungod kay bag-o lang ako nakasinati og usa ka isyu diin ang default firewalld configuration settings sa usa ka cloud VPS nagpugong sa php-fpm ug Apache sa pagproseso sa php files.

Isip batakang pagsulay (Sigurado ko nga makahunahuna ka og mas komplikado o makapa-stress), maghimo ko og php file nga magsusi sa pagkaanaa sa laing file nga ginganlan og test.php sa samang direktoryo sa duha ka CentOS 7 nga mga server nga adunay parehas nga mga kinaiya sa hardware ug load apan adunay lainlaing MPM. Ang usa kanila mogamit sa panghitabo ug ang usa mogamit sa prefork:

Kini ang php code nga akong gi-save sa usa ka file nga ginganlag checkiffileexists.php:

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

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

Dayon among ipadagan ang Apache benchmark tool (ab) nga adunay 200 ka dungan nga mga hangyo hangtod makompleto ang 2000 nga mga hangyo:

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

Atong sugdan ang pagsulay ug itandi ang mga resulta. Hatagi'g pagtagad ang mga istatistika sa pasundayag:

Sama sa imong nakita, ang pasundayag sa server nga adunay panghitabo labi ka labaw sa prefork nga katugbang niini sa matag aspeto sa kini nga pagsulay.

TIP #4: Igahin ang RAM nga maalamon para sa Apache

Tingali ang labing kritikal nga butang sa hardware nga pagaisipon mao ang kantidad sa RAM nga gigahin alang sa matag proseso sa Apache. Samtang dili nimo kini makontrol direkta, mahimo nimong pugngan ang gidaghanon sa mga proseso sa bata pinaagi sa direktiba sa MaxRequestWorkers (kanhi nailhan nga MaxClients sa Apache 2.2), nga magbutang ug mga limitasyon sa paggamit sa RAM sa Apache. Pag-usab, mahimo nimong itakda kini nga kantidad sa matag host o matag virtual host nga basehan.

Aron mahimo kini, kinahanglan nimong hinumdoman ang kasagaran nga kantidad sa RAM nga gigamit sa Apache, unya i-multiply kini sa gidaghanon sa MaxRequestWorkers, ug kana ang kantidad sa memorya nga igahin alang sa mga proseso sa Apache. Usa ka butang nga dili nimo gusto nga buhaton sa imong web server mao ang pagsugod sa paggamit sa swap, tungod kay kana makapakunhod sa pasundayag niini. Sa ingon, kinahanglan nimo kanunay nga itago ang paggamit sa RAM ni Apache sa mga limitasyon nga imong maabut ug dili gyud magsalig sa pagbaylo niini.

Pananglitan, ang mosunod nga block magpugong sa gidaghanon sa dungan nga mga kliyente ngadto sa 30. Kung mas daghang mga kliyente ang moigo sa host, sila mahimong makasinati og usa ka paglangan o usa ka makadiyot nga kapakyasan nga daling masulbad pinaagi sa pag-refresh sa browser. Samtang kini mahimong giisip nga dili gusto, kini mas himsog alang sa server ug sa kadugayan, labing maayo alang sa imong site usab.

Mahimo nimong ibutang kini nga block sulod sa /etc/httpd/conf/httpd.conf o /etc/apache2/apache2.conf, depende kung naggamit ka og CentOS o Debian.

Palihug timan-i nga ang parehas nga prinsipyo magamit sa tanan nga MPM - Gigamit nako ang panghitabo dinhi aron ipadayon ang konsepto nga gilatid sa miaging tip:

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

Sa bisan unsa nga panghitabo, girekomendar kaayo nga imong tan-awon ang Apache 2.4 docs aron makita kung unsang mga direktiba ang gitugotan para sa imong gipili nga MPM.

TIP #5: Hibal-i ang imong mga aplikasyon

Ingon sa usa ka lagda sa kumagko, kinahanglan nga dili ka mag-load sa bisan unsang mga module sa Apache nga dili higpit nga kinahanglanon aron molihok ang imong aplikasyon. Nagkinahanglan kini labing menos usa ka kinatibuk-ang kahibalo sa mga aplikasyon nga nagdagan sa imong server, labi na kung ikaw usa ka tagdumala sa sistema ug adunay lain nga team nga nagdumala sa pag-uswag.

Mahimo nimong ilista ang mga modulo nga gikarga karon sa:

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

Aron madiskarga/ma-disable ang mga module sa CentOS, kinahanglan nimo nga magkomento sa linya nga nagsugod sa LoadModule (bisan sa main configuration file o sa usa ka auxiliary sa sulod /etc/httpd/conf.modules.d.

Sa pikas bahin, ang Debian naghatag usa ka himan nga gitawag a2dismod aron ma-disable ang mga module ug gigamit sama sa mosunod:

# a2dismod module_name

Aron mahimo kini pagbalik:

# a2enmod module_name

Sa bisan hain nga kaso, hinumdomi nga i-restart ang Apache aron ma-epekto ang mga pagbag-o.

Summary

Niini nga artikulo among gisusi ang 5 nga mga tip nga makatabang kanimo sa pag-tune sa Apache web server ug pagpataas sa performance niini. Dugang pa, kinahanglan nimong hinumdoman nga ang pag-optimize ug pasundayag nga wala’y kasiguruhan wala’y kapuslanan, mao nga mahimo nimong i-refer ang artikulo sa Apache hardening tips sa linux-console.net.

Tungod kay dili nato igo nga makobrehan ang tanang aspeto niini nga topiko niining artikuloha, tingali maghunahuna ka ug ubang mga ideya nga gusto nimong ipaambit sa ubang bahin sa komunidad. Kung mao, ayaw kabalaka nga ipahibalo kanamo gamit ang porma sa komento sa ubos.