NGINX

Învață Nginx: directive, reverse proxy și SSL explicate cu exemple

30 de directive 7 categorii

Nginx (pronunțat „engine-x”) este unul dintre cele mai folosite servere web din lume. Pe lângă servirea fișierelor statice, Nginx este folosit ca reverse proxy în fața aplicațiilor Node.js, Python sau PHP, ca load balancer între mai multe servere, ca terminator SSL/TLS pentru HTTPS și ca strat de cache. Configurarea se face prin fișiere text cu directive (de exemplu listen 80;) grupate în blocuri (contexte) precum http, server și location.

Secțiunea este organizată pe categorii, în ordinea în care le întâlnești de obicei: comenzile de administrare (testarea și reîncărcarea configurației), blocurile de bază ale unui site, reverse proxy și load balancing, redirecționări și rescrieri, SSL/TLS și securitate, performanță și PHP (gzip, cache, PHP-FPM) și jurnale și depanare. Pentru fiecare directivă este indicat contextul în care poate fi folosită.

Exemplele sunt scrise pentru Nginx 1.24–1.27 pe distribuții Debian/Ubuntu (căi precum /etc/nginx/sites-available/), dar directivele sunt aceleași pe orice sistem. Apasă pe oricare comandă sau directivă pentru explicații detaliate, parametri, exemple practice și greșelile frecvente de evitat.

macOS • Windows • Linux

Ghid de instalare Nginx pe fiecare sistem de operare

Instalează serverul web Nginx, pornește serviciul și verifică configurația pe macOS, Windows (WSL2 / Docker) și Linux.

Cerințe de sistem: Acces de administrator (sudo); porturile 80 și 443 libere pentru producție.

Terminal macOS (Homebrew / zsh)
# Instalare prin Homebrew și pornire ca serviciu:
brew install nginx
brew services start nginx

# Pe macOS, Nginx ascultă implicit pe portul 8080:
curl -I http://localhost:8080

# Fișierul de configurare (Apple Silicon; pe Intel: /usr/local/etc/nginx/):
nginx -t
# /opt/homebrew/etc/nginx/nginx.conf

Comenzi de administrare 5 directive

Blocuri de bază 6 directive

Reverse proxy și load balancing 4 directive

Redirecționări și rescrieri 3 directive

SSL/TLS și securitate 5 directive

Performanță și PHP 5 directive

Jurnale și depanare 2 directive

Toate comenzile și directivele Nginx

Lista completă a comenzilor explicate în această secțiune, cu sintaxa lor uzuală. Fiecare comandă are o pagină dedicată, cu explicații detaliate, opțiuni și exemple practice.

Comenzi de administrare (5)

Comandă / Directivă Ce face
nginx -t Testează sintaxa fișierelor de configurare fără a opri sau reporni serverul.
nginx -t [-q] [-c fișier] [-p prefix] [-g directive]
nginx -s reload Trimite un semnal procesului master Nginx: reload, stop, quit sau reopen.
nginx -s reload|stop|quit|reopen
systemctl reload nginx Pornește, oprește, repornește sau reîncarcă serviciul Nginx prin systemd.
systemctl start|stop|restart|reload|status|enable|disable nginx
nginx -V / nginx -T Afișează versiunea și modulele compilate (-V) sau întreaga configurație rezultată (-T).
nginx -v | nginx -V | nginx -T
nginx.conf și sites-available Cum sunt organizate fișierele de configurare: nginx.conf, include, conf.d, sites-available și sites-enabled.
include cale/fișiere/*.conf;

Blocuri de bază (6)

Comandă / Directivă Ce face
server Definește un server virtual (un site) cu porturile, numele de domeniu și regulile sale.
server { ... }
listen Stabilește adresa IP și portul pe care un bloc server acceptă conexiuni.
listen [adresă:]port [default_server] [ssl] [quic] [reuseport] [backlog=număr];
server_name Stabilește numele de domeniu (antetul Host) pentru care răspunde un bloc server.
server_name nume [nume ...];
location Potrivește calea URI a cererii (exact, cu prefix sau cu expresie regulată) și aplică regulile corespunzătoare.
location [ = | ~ | ~* | ^~ ] uri { ... }
root / alias Stabilesc directorul de pe disc din care sunt servite fișierele: root lipește întregul URI, alias înlocuiește prefixul location.
root cale;
alias cale;
try_files Verifică pe rând existența fișierelor sau directoarelor și redirecționează intern către ultimul argument dacă niciunul nu există.
try_files fișier ... uri;
try_files fișier ... =cod;

Reverse proxy și load balancing (4)

Comandă / Directivă Ce face
proxy_pass Trimite cererea către un server backend (Node.js, Python, Go, Docker) și returnează răspunsul clientului.
proxy_pass URL;
proxy_set_header Setează sau modifică antetele HTTP trimise către backend (Host, X-Real-IP, X-Forwarded-For, X-Forwarded-Proto).
proxy_set_header câmp valoare;
upstream Definește un grup de servere backend între care Nginx distribuie traficul (load balancing) și gestionează conexiunile keepalive.
upstream nume { server adresă [parametri]; ... }
Proxy pentru WebSocket Configurează antetele Upgrade și Connection pe HTTP/1.1 pentru ca conexiunile WebSocket să treacă prin Nginx.
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";

Redirecționări și rescrieri (3)

Comandă / Directivă Ce face
return Oprește procesarea cererii și trimite imediat clientului un cod de stare HTTP, o redirecționare sau un text scurt.
return cod [text];
return cod URL;
return URL;
rewrite Modifică URI-ul cererii pe baza unei expresii regulate, pentru redirecționări externe sau rescrieri interne.
rewrite regex înlocuire [last | break | redirect | permanent];
Redirecționare HTTP → HTTPS Tiparul recomandat pentru redirecționarea traficului de pe portul 80 pe HTTPS (și canonizarea cu sau fără www).
return 301 https://$host$request_uri;

SSL/TLS și securitate (5)

Comandă / Directivă Ce face
ssl_certificate și HTTPS Configurează certificatul, cheia privată, versiunile TLS (1.2/1.3) și cache-ul de sesiuni pentru HTTPS.
ssl_certificate fișier.pem;
ssl_certificate_key cheie.key;
ssl_protocols TLSv1.2 TLSv1.3;
certbot --nginx Obține și reînnoiește automat certificate SSL gratuite Let’s Encrypt și actualizează configurația Nginx.
certbot --nginx -d domeniu.ro [-d www.domeniu.ro]
certbot certonly --webroot -w /var/www/site -d domeniu.ro
add_header Adaugă antete HTTP în răspunsul trimis clientului (antete de securitate HSTS, CSP, X-Frame-Options sau CORS).
add_header nume valoare [always];
limit_req Limitează rata cererilor (rate limiting) pe adresă IP pentru a proteja formularele de login și API-urile.
limit_req_zone $binary_remote_addr zone=nume:10m rate=10r/s;
limit_req zone=nume [burst=N] [nodelay];
allow / deny / auth_basic Restricționează accesul la o zonă după adresa IP (allow/deny) sau cu utilizator și parolă HTTP Basic (auth_basic).
allow adresă | CIDR | all;
deny adresă | CIDR | all;
auth_basic "Mesaj";
auth_basic_user_file /cale/htpasswd;

Performanță și PHP (5)

Comandă / Directivă Ce face
gzip Comprimă din mers răspunsurile text (HTML, CSS, JS, JSON, SVG) înainte de a le trimite către browser.
gzip on | off;
gzip_types mime/type ...;
gzip_comp_level 1..9;
expires Setează antetele Cache-Control și Expires pentru ca browserul și CDN-ul să păstreze în cache fișierele statice.
expires [modified] timp | epoch | max | off;
fastcgi_pass Trimite scripturile .php către PHP-FPM prin protocolul FastCGI (socket Unix sau port TCP).
fastcgi_pass adresă;
fastcgi_cache Salvează în cache răspunsurile HTML generate de PHP-FPM, servind paginile direct din Nginx fără a mai apela PHP și baza de date.
fastcgi_cache_path /var/cache/nginx levels=1:2 keys_zone=nume:100m inactive=60m;
fastcgi_cache nume;
fastcgi_cache_valid 200 60m;
client_max_body_size Stabilește dimensiunea maximă permisă pentru corpul unei cereri HTTP (încărcări de fișiere) și previne eroarea 413.
client_max_body_size dimensiune;

Jurnale și depanare (2)

Comandă / Directivă Ce face
access_log / error_log Configurează jurnalele de acces și de erori (fișiere separate pe site, niveluri de severitate, dezactivare pe rute).
access_log cale [format [buffer=dim] [flush=timp] [if=condiție]] | off;
error_log cale [debug | info | notice | warn | error | crit | alert | emerg];
log_format Definește structura unei linii din access_log (timpi de răspuns din backend, stare cache, format JSON pentru ELK/Loki).
log_format nume [escape=default|json|none] șir ...;