5 ráð til að auka árangur Apache vefþjónsins þíns


Samkvæmt nýlegri skýrslu frá Netcraft (þekkt internetfyrirtæki sem veitir meðal annars tölfræði um notkun vefvafra) heldur Apache áfram að vera mest notaði vefþjónninn meðal vefsvæða og tölva sem snúa að internetinu.

Að auki, Apache heldur áfram að upplifa mesta vöxtinn meðal efstu netþjóna, á eftir Nginx og IIS. Þannig að ef þú ert kerfisstjóri sem sér um að stjórna Apache uppsetningum þarftu að vita hvernig á að ganga úr skugga um að vefþjónninn þinn standi sig sem best í samræmi við þarfir þínar (eða viðskiptavinarins).

Í þessari grein munum við ræða nokkur ráð sem munu hjálpa þér að tryggja að Apache gangi vel og geti séð um fjölda beiðna sem þú átt von á frá ytri viðskiptavinum.

Hins vegar, vinsamlegast hafðu í huga að Apache var ekki hannað með það að markmiði að setja viðmiðunarmet – en þrátt fyrir það er það enn fær um að veita mikla afköst í næstum hvaða notkunartilvikum sem þú getur hugsað þér.

ÁBENDING #1: Haltu Apache alltaf uppfærðum í nýjustu útgáfuna

Það segir sig sjálft að að hafa nýjustu útgáfuna af Apache uppsett er líklega eitt af því fyrsta sem þú þarft að íhuga. Frá og með 19. nóvember 2015 er nýjasta útgáfan af Apache sem er fáanleg í CentOS 7 geymslunum 2.4.6, en í Debian er 2.4.10.

Hins vegar gæti verið nýleg endurbót eða villuleiðrétting sem hefur verið bætt við nýútkomna stöðuga útgáfu, sem síðan er gerð aðgengileg til að hlaða niður og setja upp frá uppruna. Leiðbeiningar um söfnun og uppsetningu eru einnig veittar hér - mundu bara að ef þú velur þessa uppfærsluaðferð gætirðu viljað taka öryggisafrit af núverandi stillingarskrám/síðum/sýndarhýsingum sem varúðarráðstöfun.

Í öllum tilvikum geturðu athugað útgáfuna þína sem er uppsett eins og hér segir:

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

Sem þumalfingursregla skaltu halda þig við uppfærsluaðferðina sem pakkastjórinn fyrir valdir dreifingu gefur upp (yum update httpd eða aptitude safe-upgrade apache2, fyrir CentOS eða Debian, í sömu röð) nema engin önnur leið sé til. Þú getur lesið nýjustu útgáfuskýringarnar í Apache Documentation hlutanum á Apache HTTP server Project vefsíðunni.

ÁBENDING #2: Ef þú ert að nota kjarna eldri en 2.4 skaltu íhuga að uppfæra núna

Hvers vegna? Kernel útgáfur 2.4 og nýrri hafa sendfile kjarnakerfiskallið sjálfgefið virkt. Það auðveldar aftur á móti afkastamikil netskráaflutning (sem óskað er eftir í samhengi við samskipti vefþjóns og viðskiptavinar) og gerir Apache kleift að skila kyrrstöðu efni hraðar og með minni CPU nýtingu með því að framkvæma samtímis lestur og sendingaraðgerðir.

Þú getur skoðað kjarnann þinn sem nú er uppsettur með:

# uname -r

og berðu hann saman við nýjasta stöðuga kjarnann á www.kernel.org (4.3 þegar þetta er skrifað).

Þó að það sé ferli sem ekki er ætlað byrjendum, þá er uppfærsla á kjarnanum þínum áhugaverð æfing til að læra meira um innri hluti Linux.

ÁBENDING #3: Veldu Multi-Processing Module (MPM) sem hentar þér best

Í reynd útvíkka MPM einingavirkni Apache með því að leyfa þér að ákveða hvernig á að stilla vefþjóninn þannig að hann bindist netgáttum á vélinni, samþykki beiðnir frá viðskiptavinum og noti barnaferli (og þræði, að öðrum kosti) til að sinna slíkum beiðnum.

Frá og með útgáfu 2.4 býður Apache upp á þrjá mismunandi MPM til að velja úr, allt eftir þörfum þínum:

  1. The prefork MPM notar mörg undirferli án þess að þræða. Hvert ferli sér um eina tengingu í einu án þess að búa til sérstaka þræði fyrir hvern. Án þess að fara út í of mörg smáatriði, getum við sagt að þú viljir aðeins nota þennan MPM þegar þú villir forrit sem notar, eða ef forritið þitt þarf að takast á við, óþráðaröruggar einingar eins og mod_php.
  2. starfsmaðurinn MPM notar nokkra þræði fyrir hvert undirferli, þar sem hver þráður sér um eina tengingu í einu. Þetta er góður kostur fyrir netþjóna með mikla umferð þar sem það gerir kleift að meðhöndla fleiri samhliða tengingar með minna vinnsluminni en í fyrra tilvikinu.
  3. Að lokum, viðburðurinn MPM er sjálfgefinn MPM í flestum Apache uppsetningum fyrir útgáfur 2.4 og nýrri. Það er svipað og starfsmaður MPM að því leyti að það býr einnig til marga þræði í hvert undirferli en með kostum: það veldur því að KeepAlive eða aðgerðalausar tengingar (á meðan þær eru áfram í því ástandi) eru meðhöndlaðar af einum þræði og losar þannig um minni sem getur verið úthlutað á aðra þræði. Þessi MPM er ekki hentugur til notkunar með óþráðaröruggum einingum eins og mod_php, en í staðinn verður að nota slíka PHP-FPM í staðinn.

Til að athuga MPM sem Apache uppsetningin þín notar geturðu gert:

# httpd -V

Myndin hér að neðan sýnir að þessi tiltekni vefþjónn notar prefork MPM.

Til að breyta þessu þarftu að breyta:

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

Þar sem getur verið mpm_event, mpm_worker eða mpm_prefork.

og afskrifaðu línuna sem hleður viðkomandi einingu svona:

LoadModule mpm_event_module modules/mod_mpm_event.so

Athugið: Til að láta viðburðinn MPM virka í Debian gætirðu þurft að setja upp libapache2-mod-fastcgi pakkann úr ófrjálsu geymslunum.

Að auki, fyrir CentOS þarftu php-fpm (ásamt fcgi og mod_fcgid) en í Debian er það kallað php5-fpm (ásamt apache2-mpm-event).

Síðast en ekki síst skaltu endurræsa vefþjóninn og nýuppsettu php-fpm (eða php5-fpm) þjónustuna:

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

Þó að þú getir stillt Apache til að nota tiltekna MPM, þá er hægt að hnekkja þeirri stillingu á grundvelli sýndarhýsingar á sama hátt og áður hefur komið fram.

Slepptu bara samsvarandi merkjum í stillingarskrána fyrir hvern sýndargestgjafa og þú ert tilbúinn að fara - en vertu viss um að þú sért að nota einn og aðeins einn MPM á hvern vhost.

Að lokum, vinsamlegast hafðu í huga að óháð því hvaða dreifingu þú hefur valið, þá treystir php-fpm á innleiðingu FastCGI, sem er ástæðan fyrir því að ég mælti með viðbótarpakkanum fyrr.

Fyrir frekari upplýsingar og dæmi um php-fpm og hvernig það getur ásamt viðburðinum MPM aukið árangur Apache, ættir þú að vísa til opinberu skjala.

Þetta er það sem ég sé eftir að hafa breytt sjálfgefna MPM úr prefork í atburð í sama reit sem sýndur er á fyrri mynd:

Í CentOS 7 þarftu að ganga úr skugga um að http og https þjónustan sé virkjuð í gegnum eldvegginn og að netviðmótinu sé rétt bætt við sjálfgefið svæði.

Til dæmis:

# 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

Ástæðan fyrir því að ég er að koma með þetta er vegna þess að ég lenti nýlega í vandamáli þar sem sjálfgefnar eldveggsstillingar í VPS skýi komu í veg fyrir að php-fpm og Apache gætu unnið php skrár.

Sem grunnpróf (ég er viss um að þú getur hugsað þér flóknari eða streituvaldandi) mun ég búa til php skrá sem athugar tilvist annarrar skráar sem heitir test.php í sömu möppu tveggja CentOS 7 netþjónar með sömu vélbúnaðareiginleika og álag en með mismunandi MPM. Annar þeirra mun nota atburð og hinn mun nota prefork:

Þetta er php kóðann sem ég hef vistað í skrá sem heitir checkiffileexists.php:

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

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

Síðan munum við keyra Apache viðmiðunartólið (ab) með 200 beiðnum samtímis þar til 2000 beiðnum er lokið:

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

Við skulum keyra prófið og bera saman niðurstöðurnar. Gefðu gaum að frammistöðutölfræðinni:

Eins og þú sérð er frammistaða þjónsins með atburði mjög betri en forgafl hliðstæða hans í öllum þáttum þessa prófs.

ÁBENDING #4: Úthlutaðu vinnsluminni skynsamlega fyrir Apache

Kannski er mikilvægasti vélbúnaðurinn sem þarf að taka með í reikninginn hversu mikið vinnsluminni er úthlutað fyrir hvert Apache ferli. Þó að þú getir ekki stjórnað þessu beint geturðu takmarkað fjölda barnaferla í gegnum MaxRequestWorkers tilskipunina (áður þekkt sem MaxClients í Apache 2.2), sem mun setja takmarkanir á vinnsluminni notkun Apache. Aftur, þú getur stillt þetta gildi á hvern gestgjafa eða hvern sýndarhýsil.

Til að gera þetta ættir þú að taka mið af meðalmagni vinnsluminni sem Apache notar, margfalda það síðan með fjölda MaxRequestWorkers, og það er magnið af minni sem verður úthlutað fyrir Apache ferla. Eitt sem þú vilt aldrei að vefþjónninn þinn geri er að byrja að nota swap, þar sem það mun draga verulega úr afköstum hans. Þannig ættirðu alltaf að halda notkun Apache á vinnsluminni innan þeirra marka sem þú hefur efni á og aldrei treysta á að skipta um það.

Til dæmis mun eftirfarandi blokk takmarka fjölda viðskiptavina samtímis við 30. Ef fleiri viðskiptavinir snerta gestgjafann geta þeir fundið fyrir töf eða augnabliksbilun sem auðvelt er að leysa með því að endurnýja vafrann. Þó að þetta geti talist óæskilegt er það hollara fyrir netþjóninn og til lengri tíma litið best fyrir síðuna þína líka.

Þú getur sett þennan blokk inni í /etc/httpd/conf/httpd.conf eða /etc/apache2/apache2.conf, allt eftir því hvort þú ert að nota CentOS eða Debian.

Vinsamlegast athugaðu að sama regla gildir um alla MPM - ég nota viðburð hér til að halda áfram með hugmyndina sem lýst er í fyrri ábendingunni:

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

Í öllum tilvikum er mjög mælt með því að þú skoðir Apache 2.4 skjölin til að sjá hvaða tilskipanir eru leyfðar fyrir valinn MPM.

RÁÐ #5: Kynntu þér forritin þín

Sem þumalputtaregla ættir þú ekki að hlaða neinum Apache-einingum sem eru ekki nauðsynlegar til að forritið þitt virki. Þetta mun krefjast að minnsta kosti heildarþekkingar á forritunum sem keyra á netþjóninum þínum, sérstaklega ef þú ert kerfisstjóri og það er annað teymi sem sér um þróun.

Þú getur skráð þær einingar sem nú eru hlaðnar með:

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

Til að afhlaða/slökkva á einingum í CentOS þarftu að skrifa athugasemdir við línuna sem byrjar á LoadModule (annaðhvort í aðalstillingarskránni eða í aukaeiningu inni í /etc/httpd/conf.modules.d.

Aftur á móti býður Debian upp tól sem kallast a2dismod til að slökkva á einingar og er notað sem hér segir:

# a2dismod module_name

Til að virkja það aftur:

# a2enmod module_name

Í báðum tilvikum, mundu að endurræsa Apache til að breytingarnar taki gildi.

Samantekt

Í þessari grein höfum við farið yfir 5 ráð sem munu hjálpa þér að stilla Apache vefþjóninn og auka afköst hans. Að auki ættir þú að muna að hagræðing og frammistaða án öryggis er tilgangslaus, svo þú gætir líka viljað vísa til Apache herðingarráðs greinarinnar á linux-console.net.

Þar sem við getum ekki fjallað nægilega um alla þætti þessa efnis í þessari grein, kannski munt þú hugsa um aðrar hugmyndir sem þú vilt deila með restinni af samfélaginu. Ef svo er, ekki hika við að láta okkur vita með því að nota athugasemdareyðublaðið hér að neðan.