Conform un raport recent al Netcraft (o companie de internet cunoscută care oferă, printre alte servicii, statistici de utilizare a browserului web), Apache continuă să fie cel mai utilizat server web printre site-uri și computere orientate spre internet.
În plus, Apache continuă să se confrunte cu cea mai mare creștere dintre serverele web de top, urmată de Nginx și IIS. Astfel, dacă sunteți un administrator de sistem responsabil de gestionarea instalărilor Apache, trebuie să știți cum pentru a vă asigura că serverul dvs. web funcționează la cea mai bună capacitate în funcție de dvs. (sau de clientul dvs.) are nevoie.
În acest articol vom discuta câteva sfaturi care vă vor ajuta să vă asigurați că Apache va funcționa fără probleme și va putea gestiona numărul de solicitări pe care le așteptați de la clienții la distanță.
Cu toate acestea, vă rugăm să rețineți că Apache nu a fost conceput cu scopul de a stabili înregistrări de referință - dar, chiar și așa, este încă capabil să ofere performanțe ridicate în aproape orice caz de utilizare pe care îl puteți gândi de.
Este de la sine înțeles că a fi instalată cea mai recentă versiune de Apache este probabil unul dintre primele lucruri pe care trebuie să le luați în considerare. Începând cu 19 noiembrie 2015, cea mai recentă versiune a Apache disponibilă în CentOS 7 depozite este 2.4.6, întrucât în Debian’s este 2.4.10.
Cu toate acestea, poate exista o îmbunătățire recentă sau o remediere a erorilor care a fost adăugată la o versiune stabilă recent lansată, care este apoi pusă la dispoziție pentru descărcare și instalare din sursă. De asemenea, sunt furnizate instrucțiuni de compilare și instalare Aici - Amintiți-vă doar că, dacă alegeți această metodă de actualizare, vă recomandăm să faceți o copie de siguranță a fișierelor / site-urilor / gazdelor virtuale de configurare ca măsură de precauție.
În orice caz, puteți verifica versiunea instalată curent după cum urmează:
# httpd -v [Pe sistemele bazate pe RedHat / CentOS] # apache2 –v [Pe sistemele bazate pe Debian / Ubuntu]
Ca regulă generală, respectați metoda de actualizare furnizată de managerul de pachete al distribuției alese (yum actualizare httpd
sau aptitude safe-upgrade apache2
, pentru CentOS sau respectiv Debian) cu excepția cazului în care nu există altă cale. Puteți citi cele mai recente note de lansare în Secțiunea Apache Documentation în site-ul web al proiectului Apache HTTP server.
De ce? Versiuni de nucleu 2.4 și mai sus au apelul de sistem kernel sendfile activat în mod implicit. Acest lucru, la rândul său, facilitează transferurile de fișiere de rețea de înaltă performanță (care sunt dorite în contextul server-client web comunicații) și permite Apache să furnizeze conținut static mai rapid și cu o utilizare mai redusă a procesorului, efectuând simultan citire și trimite operațiuni.
Puteți vizualiza nucleul instalat în prezent cu:
# uname -r.
și comparați-l cu cel mai recent nucleu stabil de pe www.kernel.org (4.3 în momentul scrierii acestui articol).
Deși este un proces care nu este destinat începătorilor, actualizarea nucleului dvs. este un exercițiu interesant pentru a afla mai multe despre componentele interne ale Linux.
In practica, MPM-uri extindeți funcționalitatea modulară a Apache, permițându-vă să decideți cum să configurați serverul web pentru a se conecta la rețea porturi de pe mașină, acceptă cereri de la clienți și utilizează procese pentru copii (și fire, alternativ) pentru a gestiona astfel solicitări.
Începând cu versiunea 2.4, Apache oferă trei MPM-uri diferite pentru a alege, în funcție de nevoile dvs.:
prefork
MPM utilizează mai multe procese copil fără filetare. Fiecare proces gestionează câte o conexiune la un moment dat, fără a crea fire separate pentru fiecare. Fără a intra în prea multe detalii, putem spune că veți dori să utilizați acest MPM numai la depanare o aplicație care folosește sau dacă aplicația dvs. trebuie să se ocupe de module care nu sunt sigure pentru fire, cum ar fi mod_php.muncitor
MPM folosește mai multe fire de proces pe fiecare proces copil, în care fiecare thread gestionează câte o conexiune la un moment dat. Aceasta este o alegere bună pentru serverele cu trafic mare, deoarece permite gestionarea conexiunilor mai concurente cu mai puțină memorie RAM decât în cazul precedent.eveniment
MPM este MPM implicit în majoritatea instalațiilor Apache pentru versiunile 2.4 și superioare. Este similar cu MPM-ul lucrător prin faptul că creează, de asemenea, mai multe fire de lucru pe proces copil, dar cu un avantaj: provoacă Ține în viață sau inactiv conexiunile (în timp ce acestea rămân în acea stare) să fie gestionate de un singur fir, eliberând astfel memoria care poate fi alocată altor fire. Acest MPM nu este potrivit pentru utilizarea cu module care nu sunt sigure pentru fire, cum ar fi mod_php, pentru care un înlocuitor un astfel de PHP-FPM trebuie folosit în schimb.Pentru a verifica MPM utilizat de instalarea dvs. Apache, puteți face:
# httpd -V.
Imaginea de mai jos arată că acest server web special folosește prefork MPM.
Pentru a modifica acest lucru, va trebui să editați:
# /etc/httpd/conf.modules.d/00-mpm.conf [Pe sistemele bazate pe RedHat / CentOS] # / etc / apache2 / mods-available /.load [Pe sistemele bazate pe Debian / Ubuntu]
Unde
și decomentați linia care încarcă modulul dorit astfel:
LoadModule mpm_event_module modules / mod_mpm_event.so.
Notă: Pentru ca evenimentul MPM să funcționeze în Debian, poate fi necesar să instalați libapache2-mod-fastcgi pachet din depozitele non-gratuite.
În plus, pentru CentOS veți avea nevoie php-fpm (impreuna cu fcgi și mod_fcgid) în timp ce în Debian se numește php5-fpm (impreuna cu apache2-mpm-event).
Nu în ultimul rând, reporniți serverul web și noul instalat php-fpm (sau php5-fpm) serviciu:
# systemctl reporniți httpd php-fpm && systemctl activați httpd php-fpm.
# systemctl reporniți apache2 php5-fpm && systemctl activați apache2 php5-fpm.
Deși puteți seta Apache să utilizeze un anumit MPM, acea configurație poate fi anulată pe un gazdă per-virtuală în același mod ca cel indicat anterior.
Introduceți etichetele corespunzătoare în fișierul de configurare pentru fiecare gazdă virtuală și sunteți gata să mergeți - dar asigurați-vă că utilizați un singur MPM per vhost.
În cele din urmă, vă rugăm să rețineți că, indiferent de distribuția aleasă, php-fpm se bazează pe implementarea FastCGI, motiv pentru care am recomandat mai devreme instalarea pachetelor suplimentare.
Pentru mai multe detalii și exemple despre php-fpm și cum poate, împreună cu evenimentul MPM să crească performanța Apache, ar trebui să vă referiți la documentația oficială.
Aceasta este ceea ce văd după schimbarea MPM implicit din prefork în eveniment în aceeași casetă afișată în imaginea anterioară:
În CentOS 7, va trebui să vă asigurați că http și https serviciile sunt activate prin firewall și că interfețele de rețea sunt adăugate în mod corespunzător în zona implicită.
De exemplu:
# 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.
Motivul pentru care aduc acest lucru în discuție este că am întâmpinat recent o problemă în care este implicit configurare firewalld setările într-un cloud VPS împiedicat php-fpm și Apache de la procesarea fișierelor php.
Ca test de bază (sunt sigur că vă puteți gândi la altele mai complicate sau stresante), voi crea un fișier php care verifică existența unui alt fișier numit test.php
în același director de două servere CentOS 7 cu aceleași caracteristici hardware și încărcare, dar cu MPM diferit. Unul dintre ei va folosi evenimentul, iar celălalt va folosi prefork:
Acesta este codul php pe care l-am salvat într-un fișier numit checkiffileexists.php
:
php. $ filename = 'test.php'; if (file_exists ($ filename)) {echo "Fișierul $ filename există"; } else {echo "Fișierul $ filename nu există"; }
Apoi vom rula Instrument de referință Apache (ab) cu 200 solicitări simultane până la 2000 cererile sunt completate:
# ab -k -c 100 -n 2000 localhost / checkiffileexists.php.
Să efectuăm testul și să comparăm rezultatele. Acordați atenție statisticilor de performanță:
După cum puteți vedea, performanța serverului cu eveniment este extrem de superioară celei sale prefork omolog în fiecare aspect al acestui test.
Poate că cel mai critic element hardware care trebuie luat în considerare este cantitatea de RAM alocate pentru fiecare proces Apache. Deși nu puteți controla acest lucru direct, puteți restricționa numărul de procese copil prin intermediul MaxRequestWorkers directivă (cunoscută anterior sub numele de MaxClients în Apache 2.2), care va limita utilizarea RAM de către Apache. Din nou, puteți seta această valoare pe bază de gazdă sau de gazdă virtuală.
Pentru a face acest lucru, ar trebui să luați notă de cantitatea medie de memorie RAM utilizată de Apache, apoi să o multiplicați cu numărul de MaxRequestWorkers, și aceasta este cantitatea de memorie care va fi alocată proceselor Apache. Un lucru pe care nu doriți niciodată să îl facă serverul dvs. web este să începeți să utilizați swap, deoarece acest lucru îi va reduce semnificativ performanța. Astfel, ar trebui să păstrați întotdeauna utilizarea RAM de către Apache în limitele pe care vi le puteți permite și să nu vă bazați niciodată pe swap pentru aceasta.
De exemplu, următorul bloc va restricționa numărul de clienți simultani la 30. Dacă mai mulți clienți lovesc gazda, pot întâmpina o întârziere sau un eșec momentan care poate fi rezolvat cu ușurință prin reîmprospătarea browserului. Deși acest lucru poate fi considerat nedorit, este mai sănătos pentru server și, pe termen lung, cel mai bun și pentru site-ul dvs.
Puteți plasa acest bloc în interior /etc/httpd/conf/httpd.conf
sau /etc/apache2/apache2.conf
, în funcție de faptul dacă utilizați CentOS sau Debian.
Vă rugăm să rețineți că același principiu se aplică tuturor MPM-uri - Folosesc evenimentul aici pentru a continua cu conceptul prezentat în sfatul anterior:
StartServers 3 MinSpareThreads 25 MaxSpareThreads 75 ThreadLimit 64 ThreadsPerChild 25 MaxRequestWorkers 30 MaxConnectionsPerChild 1000.
În orice caz, este foarte recomandat să faceți referire la Documente Apache 2.4 pentru a vedea ce directive sunt permise pentru MPM-ul ales.
Ca regulă generală, nu ar trebui să încărcați niciun modul Apache care nu este strict necesar pentru ca aplicația dvs. să funcționeze. Acest lucru va necesita cel puțin o cunoaștere generală a aplicațiilor care rulează pe serverul dvs., mai ales dacă sunteți administrator de sistem și există o altă echipă responsabilă de dezvoltare.
Puteți lista modulele încărcate în prezent cu:
# httpd -M [Pe sistemele bazate pe RedHat / CentOS] # apache2ctl -M [Pe sistemele bazate pe Debian / Ubuntu]
Pentru a descărca / dezactiva module în CentOS, va trebui să comentați linia care începe cu LoadModule (fie în fișierul principal de configurare, fie într-unul auxiliar din interior /etc/httpd/conf.modules.d.
Pe de altă parte, Debian oferă un instrument numit a2dismod pentru a dezactiva modulele și este utilizat după cum urmează:
# a2dismod nume_modul.
Pentru a o activa înapoi:
# a2enmod module_name.
În ambele cazuri, nu uitați să reporniți Apache pentru ca modificările să aibă efect.
În acest articol am analizat 5 sfaturi care vă va ajuta să reglați serverul web Apache și să sporiți performanța acestuia. În plus, ar trebui să vă amintiți că optimizarea și performanța fără securitate sunt inutile, deci vă recomandăm să consultați instalați mod_pagespeed pentru a îmbunătăți performanța serverului web și Articol sfaturi de întărire Apache și în Tecmint.com.
Deoarece nu putem acoperi în mod adecvat toate aspectele acestui subiect în acest articol, poate vă veți gândi la alte idei pe care ați dori să le împărtășiți cu restul comunității. Dacă da, nu ezitați să ne anunțați folosind formularul de comentarii de mai jos.