Un server web răspunde direct la cereri HTTP, fie servind fișiere de pe disc, fie transmițând cererea unui interpretor precum PHP-FPM. Nginx și Apache httpd sunt servere web în acest sens strict, la fel ca LiteSpeed, folosit pe majoritatea găzduirilor cPanel din România. Un reverse proxy se așază în fața unuia sau mai multor servere din spate (backend), primește cererea clientului, o transmite mai departe și returnează răspunsul ca și cum ar fi propriul răspuns. Diferența față de un proxy obișnuit, numit forward proxy, este direcția, un forward proxy ascunde clientul față de destinație, un reverse proxy ascunde destinația față de client.
Un load balancer distribuie cererile între mai multe servere backend identice, cu scopul de a crește capacitatea totală și de a elimina un punct unic de eșec. HAProxy, creat de Willy Tarreau în anul 2000, este un load balancer specializat, fără a servi el însuși fișiere statice. Nginx, apărut în 2004 din munca lui Igor Sysoev pentru a rezolva problema C10k, adică zece mii de conexiuni simultane pe un singur server, poate juca simultan toate cele trei roluri, în funcție de configurație.
Cele trei roluri, comparate
| Rol | Ce face | Exemplu de unealtă |
|---|---|---|
| Server web | Servește fișiere sau interpretează cod pe același server | Nginx cu root și index, Apache httpd |
| Reverse proxy | Transmite cererea unui alt proces sau server și returnează răspunsul | Nginx cu proxy_pass |
| Load balancer | Alege unul dintre mai multe backend-uri identice pentru fiecare cerere | HAProxy, Nginx cu bloc upstream |
Un exemplu din găzduirea românească
Pe un VPS cu cPanel și LiteSpeed găzduind un singur site WordPress, LiteSpeed joacă rolul de server web, servind direct fișierele temei și interpretând PHP prin lsphp. Nu există niciun reverse proxy separat. Când același magazin online crește și trece la mai multe servere backend pentru a face față traficului din perioada Black Friday, apare nevoie de un strat suplimentar, un reverse proxy care distribuie cererile, exact rolul pe care îl va prelua Nginx în capitolele următoare ale acestui curs.
Confuzia frecventă, server web versus server de aplicație
Un server web nu execută întotdeauna codul aplicației. Nginx nu interpretează PHP, ci transmite cererea către PHP-FPM printr-un socket sau printr-o adresă TCP, folosind directiva fastcgi_pass. Această separare între procesul care ascultă cererile HTTP și procesul care execută codul aplicației este exact motivul pentru care Nginx poate funcționa și ca reverse proxy pentru orice limbaj de programare, nu doar pentru PHP.
De ce contează distincția pentru restul cursului
Fiecare capitol care urmează pornește de la unul dintre aceste trei roluri. Configurarea Nginx ca server web pur ține de capitolul 2, configurarea sa ca reverse proxy ține de capitolul 3, iar echilibrarea încărcării cu HAProxy ține de capitolele 6, 7 și 8. Rețineți această hartă, deoarece o eroare frecventă la administratorii aflați la început este să caute o directivă de echilibrare a încărcării direct în configurația de bază a unui server web, fără să înțeleagă că este un rol distinct, adăugat separat.