Server web Nginx și apache - ce este și cum funcționează această combinație?

Server web dedicat bazat pe nginx – metodă grozavăîmbunătățirea performanței site-urilor web. Pur și simplu nu are egal în viteza de procesare a conținutului static: poate rezista cu ușurință la câteva mii de conexiuni simultane și poate fi ușor optimizat și adaptat oricărei configurații. In orice caz? Acționând ca front-end pentru Apache, nginx se dovedește a fi cel mai vulnerabil punct al întregii infrastructuri web, așa că trebuie acordată o atenție deosebită securității nginx.

Acest articol este un fel de program educațional sau, dacă doriți, un rezumat al tuturor tehnicilor de îmbunătățire a securității nginx. Nu va conține teorie, o descriere a elementelor de bază ale instalării unui server web și alte puf. În schimb, veți primi material cuprinzător, practic, care descrie toți pașii de bază pe care trebuie să-i faceți pentru a avea un server Web cu adevărat sigur.

Instalare

Pachetul nginx este disponibil în formă precompilată pentru orice distribuție. Cu toate acestea, construind singur serverul, îl puteți face mai compact și mai fiabil și veți avea, de asemenea, posibilitatea de a schimba linia de întâmpinare a serverului web pentru a descuraja copiii cu scenarii proști.

Schimbați linia de întâmpinare a serverului Web

Descărcați sursele nginx, deschideți fișierul src/http/ngx_http_header_filter_module.c și găsiți următoarele două rânduri:

static char ngx_http_server_string = "Server: nginx" CRLF;
static char ngx_http_server_full_string = "Server: " NGINX_VER CRLF;

Înlocuiește-le cu ceva de genul acesta:

static char ngx_http_server_string = "Server: ][ Web Server" CRLF;
static char ngx_http_server_full_string = "Server: ][ Web Server" CRLF;

Eliminați toate modulele nginx pe care nu le utilizați

Unele module nginx se conectează la serverul web direct în timpul compilării și oricare dintre ele este plin de pericol potențial. Poate că în viitor se va găsi o vulnerabilitate într-una dintre ele, iar serverul tău va fi în pericol. Prin dezactivarea modulelor inutile, puteți reduce semnificativ riscul apariției unei astfel de situații.

Construiți folosind următoarele comenzi:

# ./configure --without-http_autoindex_module --without-http_ssi_module
# face
# face instalarea

În acest fel, veți obține nginx cu modulele SSI (Server Side Includes) și Autoindex dezactivate în avans (și în cele mai multe cazuri inutile). Pentru a afla ce module pot fi eliminate în siguranță de pe serverul Web, rulați scriptul de configurare cu indicatorul „-help”.

Să disecăm nginx.conf

După instalare, nginx ar trebui configurat. Pe paginile revistei exista deja material care descrie acest proces, dar vom rămâne la subiectul articolului și vom vorbi despre modalități de creștere a securității serverului.

Dezactivați afișarea versiunii serverului pe toate paginile de eroare

Adăugați linia „server_tokens off” în fișierul nginx.conf. Acest lucru va forța nginx să ascundă informații despre tipul și versiunea serverului web pe paginile generate ca răspuns la o solicitare eronată a clientului.

Configurați protecția împotriva întreruperii stivei

Adăugați la secțiunea server următoarele rânduri:

# vi /etc/nginx/nginx.conf

# Dimensiunea maxima buffer pentru stocarea corpului cererii clientului
client_body_buffer_size 1K;
# Dimensiunea maximă a memoriei tampon pentru stocarea antetelor cererilor clientului
client_header_buffer_size 1k;
# Dimensiunea maximă a corpului solicitării clientului, specificată în câmpul antet Content-Length. Dacă serverul trebuie să accepte încărcări de fișiere, această valoare trebuie mărită
client_max_body_size 1k;
# Numărul și dimensiunea bufferelor pentru citirea antetului de solicitare mare a clientului
large_client_header_buffers 2 1k;

Acordați atenție directivei large_client_header_buffers. În mod implicit, nginx alocă patru buffer-uri pentru a stoca șirul URI, dimensiunea fiecăruia fiind egală cu dimensiunea unei pagini de memorie (pentru x86 aceasta este de 4 KB). Bufferele sunt eliberate de fiecare dată când conexiunea intră în starea de menținere în viață după procesarea unei cereri. Două buffer-uri de 1 KB pot stoca URI-uri care au o lungime de numai 2 KB, ceea ce ajută la combaterea roboților și a atacurilor DoS.

Pentru a îmbunătăți performanța, adăugați următoarele rânduri:

# vi /etc/nginx/nginx.conf

# Timeout în timp ce citiți corpul solicitării clientului
client_body_timeout 10;
# Timeout la citirea antetului solicitării clientului
client_header_timeout 10;
# Timeout după care conexiunea keep-alive cu clientul nu va fi închisă din partea serverului
keepalive_timeout 5 5;
# Timeout la trimiterea răspunsului către client
send_timeout 10;

Controlați numărul de conexiuni simultane

Pentru a proteja serverul Web de supraîncărcare și încercări de a efectua un atac DoS, adăugați următoarele linii la configurație:

# vi /etc/nginx/nginx.conf

# Descriem zona (limitele) în care vor fi stocate stările de sesiune. O zonă de 1 MB poate stoca aproximativ 32000 de stări, am setat dimensiunea ei la 5 MB
limit_zone slimits $binary_remote_addr 5m;
# Setați numărul maxim de conexiuni simultane pentru o sesiune. În esență, acest număr specifică numărul maxim de conexiuni de la un IP
limit_conn slimits 5;

Prima directivă ar trebui să fie în secțiunea HTTP, a doua în secțiunea locație. Când numărul de conexiuni depășește limitele, clientul va primi un mesaj „Serviciu indisponibil” cu codul 503.

Permite conexiuni numai la domeniul tău

Hackerii pot folosi boți pentru a scana subrețele și pentru a găsi servere Web vulnerabile. De obicei, roboții parcurg pur și simplu intervale de adrese IP căutând 80 de porturi deschise și trimit o solicitare HEAD pentru a obține informații despre serverul web (sau pagina principala). Puteți preveni cu ușurință o astfel de scanare interzicând accesul la server după adresa IP (adăugați la subsecțiunea locație):

# vi /etc/nginx/nginx.conf

dacă ($gazdă !~ ^(gazdă.com|www.gazdă.com)$) (
întoarcere 444;
}

Limitați numărul de metode disponibile pentru accesarea serverului Web

Unii roboți folosesc diverse metode solicită serverului să încerce să-i determine tipul și/sau penetrarea, dar RFC 2616 afirmă clar că serverul Web nu este obligat să le implementeze pe toate, iar metodele neacceptate pot pur și simplu să nu fie procesate. Astăzi, doar metodele GET (cerere de document), HEAD (cerere antet server) și POST (cerere de publicare a documentului) rămân în uz, astfel încât toate celelalte pot fi dezactivate fără durere prin plasarea următoarelor linii în secțiunea server a fișierului de configurare:

# vi /etc/nginx/nginx.conf

if ($metoda_cerere !~ ^(GET|HEAD|POST)$) (
întoarcere 444;
}

Închideți roboții

O altă modalitate de a bloca roboții, scanerele și alte spirite rele se bazează pe determinarea tipului de client (user-agent). Nu este foarte eficient, deoarece majoritatea boților vizează browsere complet legitime, dar în unele cazuri rămâne util:

# vi /etc/nginx/nginx.conf

# Blocați managerii de descărcare
dacă ($http_user_agent ~* LWP::Simple|BBBike|wget) (
întoarce 403;
}
# Blocați unele tipuri de roboți
if ($http_user_agent ~* msnbot|scrapbot) (
întoarce 403;
}

Blocați spamul referitor

Dacă site-ul dvs. publică jurnalele Web într-un formular accesibil public, puteți deveni cu ușurință o victimă a spam-ului referitor (când roboții de spam vă contactează serverul, indicând referitor în antet - adresa site-ului promovat). Acest tip de spam poate strica cu ușurință evaluările SEO ale unei pagini web, așa că trebuie blocat fără greș. O modalitate de a face acest lucru este să enumerați cele mai multe cuvinte frecvente, care se găsesc în adresele site-urilor promovate, sunt incluse pe lista neagră.

# vi /etc/nginx/nginx.conf

# Secțiunea Server
dacă ($http_referer ~* (bebe|de vânzare|fată|bijuterii|dragoste|nudit|organic|poker|porno|sex|adolescent))
{
întoarce 403;
}

Blocați legătura rapidă

Un hotlink este includerea unei imagini (sau a unui alt conținut) de pe un alt site pe o pagină. În esență, acesta este un furt, deoarece imaginea pe care ați petrecut mai mult de o oră din timpul liber nu este doar folosită în mod liber de către alții, ci creează și o încărcare pe serverul dvs. Web fără a aduce vizitatori la acesta. Pentru a combate hotlink-urile, este suficient să te asiguri că imaginile sunt trimise clientului doar dacă acesta le-a solicitat în timp ce se afla deja pe site (cu alte cuvinte, antetul cererii de referință ar trebui să conțină numele site-ului tău). Adăugați următoarele rânduri în secțiunea server a fișierului de configurare nginx.conf (host.com este adresa site-ului dvs.):

# vi /etc/nginx/nginx.conf

locație /imagini/ (
valid_referers nici unul blocat www.host.com host.com;
dacă ($invalid_referer) (
întoarce 403;
}
}

Ca alternativă, puteți configura serverul să returneze un banner special cu un mesaj despre furt în locul imaginii solicitate. Pentru a face acest lucru, înlocuiți linia „return 403” cu linia:

rescrie ^/images/uploads.*\.(gif|jpg|jpeg|png)$ http://www.host.com/banned.jpg ultima

Protejați directoarele importante de străini

Ca orice alt server Web, nginx vă permite să reglați accesul la directoare pe baza adreselor IP și a parolelor. Această caracteristică poate fi folosită pentru a închide anumite părți ale site-ului de la privirile indiscrete. De exemplu, pentru a elimina URI-ul lumea de afara:

# vi /etc/nginx/nginx.conf

locație /încărcări/ (
# Permite accesul numai la mașinile din rețeaua locală
permite 192.168.1.0/24;
# Să-i ucidem pe toți ceilalți
nega totul;
}

Acum doar utilizatorii rețelei locale vor avea acces la documentele din directorul de încărcări. Pentru a seta o parolă, va trebui să faceți mai multe actiuni complexe. Mai întâi trebuie să creați un fișier cu parolă privat pentru nginx și să îl adăugați utilizatorii necesari(să adăugăm utilizatorul admin ca exemplu):

# mkdir /etc/nginx/.htpasswd
# htpasswd -c /etc/nginx/.htpasswd/passwd admin

# vi /etc/nginx/nginx.conf

locație /admin/ (
auth_basic „Restricționat”;
auth_basic_user_file /etc/nginx/.htpasswd/passwd;
}

Utilizatori noi pot fi adăugați folosind următoarea comandă:

# htpasswd -s /etc/nginx/.htpasswd/passwd utilizator

Utilizați SSL

Dacă site-ul dvs. funcționează cu date private de utilizator, cum ar fi numere de card de credit, parole de la alte servicii sau oferă acces la alte servicii Informații importante, care poate fi o bucată delicioasă pentru terți, aveți grijă de criptare. Nginx funcționează bine cu SSL și această caracteristică nu trebuie neglijată.

Pentru a configura criptarea SSL folosind nginx, trebuie doar să urmați câțiva pași: pași simpli. Mai întâi trebuie să creați un certificat utilizând următoarea secvență de comenzi:

# cd /etc/nginx
# openssl genrsa -des3 -out server.key 1024
# openssl req -new -key server.key -out server.csr
# cp server.key server.key.org
# openssl rsa -in server.key.org -out server.key
# openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt

Apoi descrieți certificatul în fișierul de configurare nginx:

# vi /etc/nginx/nginx.conf

Server(
nume_server gazdă.com;
asculta 443;
ssl activat;
ssl_certificate /etc/nginx/server.crt;
ssl_certificate_key /etc/nginx/server.key;
access_log /etc/nginx/logs/ssl.access.log;
error_log /etc/nginx/logs/ssl.error.log;
}

După aceasta, puteți reporni serverul web:

# /etc/init.d/nginx reîncărcare

Desigur, fără suport din partea site-ului web în sine, este inutil să faceți acest lucru.

alte metode

Setați valorile corecte pentru variabilele de sistem

Deschideți fișierul /etc/sysctl.conf și plasați următoarele linii în el:

# vi /etc/sysctl.conf

# Protecție împotriva atacurilor ștrumfilor
net.ipv4.icmp_echo_ignore_broadcasts = 1
# Protecție împotriva mesajelor ICMP nevalide
net.ipv4.icmp_ignore_bogus_error_responses = 1
# Protecție împotriva inundațiilor SYN
net.ipv4.tcp_syncookies = 1
# Dezactivează rutarea sursei
net.ipv4.conf.all.accept_source_route = 0
net.ipv4.conf.default.accept_source_route = 0
# Protecție anti-spoofing
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1
# Nu suntem un router
net.ipv4.ip_forward = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
# Activați ExecShield
kernel.exec-shield = 1
kernel.randomize_va_space = 1
# Extinderea gamei de porturi disponibile
net.ipv4.ip_local_port_range = 2000 65000
# Măriți dimensiunea maximă a bufferelor TCP
net.ipv4.tcp_rmem = 4096 87380 8388608
net.ipv4.tcp_wmem = 4096 87380 8388608
net.core.rmem_max = 8388608
net.core.wmem_max = 8388608
net.core.netdev_max_backlog = 5000
net.ipv4.tcp_window_scaling = 1

Plasați directorul rădăcină al serverului web pe o partiție dedicată

Prin plasarea directorului rădăcină al serverului Web într-o partiție dedicată și interzicerea plasării oricăruia fișiere executabileși fișierele dispozitivului, veți proteja restul sistemului de oricine poate obține acces la rădăcina serverului Web. În acest caz, intrarea din fișierul /etc/fstab ar trebui să arate cam așa:

/dev/sda5 /nginx ext4 implicite,nosuid,noexec,nodev 1 2

Plasați nginx într-un mediu chroot/jail

Orice sistem *nix modern vă permite să blocați aplicația într-un mediu de execuție izolat. Pe Linux puteți folosi acest lucru tehnologii KVM, Xen, OpenVZ și VServer, în FreeBSD - Jail, în Solaris - Zones. Dacă niciuna dintre aceste tehnologii nu este disponibilă, puteți pune nginx într-un chroot clasic, care, deși mult mai fragil, poate opri majoritatea hackerilor.

Instalați regulile SELinux pentru a proteja nginx

O alternativă bună medii izolate execuțiile sunt sisteme locale de detectare și prevenire a intruziunilor, cum ar fi SELinux sau AppArmor. Dacă sunt configurate corect, acestea pot preveni încercările de a pirata serverul Web. În mod implicit, niciunul dintre ele nu este configurat să funcționeze împreună cu nginx, totuși, în cadrul proiectului SELinuxNginx(http://sf.net/projects/selinuxnginx/) au fost create reguli pentru SELinux pe care oricine le poate folosi. Tot ce rămâne este să descărcați și să instalați:

# tar -zxvf se-ngix_1_0_10.tar.gz
# cd se-ngix_1_0_10/nginx
# face
# /usr/sbin/semodule -i nginx.pp

Configurare firewall

De obicei, nginx este instalat pe mașini dedicate pregătite pentru încărcare mare, deci este adesea singurul serviciu de rețea care rulează pe server. Pentru a securiza serverul, este suficient să creați un set foarte mic de reguli care să deschidă porturile 80, 110 și 143 (dacă, bineînțeles, nginx ar trebui să funcționeze și ca un proxy IMAP/POP3) și să închidă orice altceva din lumea exterioară. .

Limitați numărul de conexiuni folosind un firewall

Pentru un site Web puțin încărcat, este o idee bună să limitați numărul de încercări de conectare de la o singură adresă IP pe minut. Acest lucru vă poate proteja de anumite tipuri de atacuri DoS și de forță brută. Pe Linux, acest lucru se poate face folosind modulul standard iptables/netfilter state:

# iptables -A INPUT -p tcp --dport 80 -i eth0 \
-m stare --state NOU -m recent --set
# iptables -A INPUT -p tcp --dport 80 -i eth0 \
-m stare --state NOU -m recent --actualizare \
--seconds 60 --hitcount 15 -j DROP

Regulile reduc limita numărului de conexiuni de la un IP pe minut la 15. Același lucru se poate face folosind pf:

# vi /etc/pf.conf

webserver_ip="1.1.1.1"
masa persista
blocați rapid din
transmiteți $ext_if proto tcp la $webserver_ip \
port www steagurile S/SA păstrează starea \
(max-src-conn 100, max-src-conn-rate 15/60,\
suprasarcina culoare)

Pe lângă limita privind numărul de conexiuni secvenţiale (15 pe minut), această regulă stabileşte o limită suplimentară pentru numărul de conexiuni simultane egală cu 100.

Configurare PHP

Dacă utilizați nginx împreună cu PHP, nu uitați să îl configurați și pe acesta. Iată cum ar trebui să arate fișierul de configurare /etc/php/php.ini al serverului securizat:

# vi /etc/php/php.ini

# Dezactivează funcțiile periculoase
disable_functions = phpinfo, system, mail, exec
# Timp maxim de execuție a scriptului
max_execution_time = 30
# Timpul maxim pe care scriptul îl poate petrece procesând datele cererii
max_input_time = 60
# Cantitatea maximă de memorie alocată fiecărui script
limita_memorie = 8M
# Dimensiunea maximă a datelor trimise către script folosind metoda POST
dimensiune_max_post = 8M
# Dimensiunea maximă a fișierelor încărcate
upload_max_filesize = 2M
# Nu arătați utilizatorilor erori de script PHP
display_errors = Dezactivat
# Activați modul sigur
safe_mode = Activat
# Activați modul sigur SQL
sql.safe_mode = Activat
# Permiteți executarea comenzilor externe numai în acest director
safe_mode_exec_dir = /path/to/protected/directory
# Protejați-vă împotriva scurgerilor de informații despre PHP
expose_php = Dezactivat
# Păstrăm jurnalele
log_errors = Activat
# Preveniți deschiderea fișierelor de la distanță
allow_url_fopen = Dezactivat

concluzii

Aplicând recomandările descrise în acest articol, veți obține un server Web mult mai sigur. Dar rețineți că nu toate tehnicile se potrivesc configurației dvs. De exemplu, protecția cu forță brută bazată pe reducerea dimensiunii buffer-urilor alocate de nginx pentru procesarea cererilor clienților poate duce la o scădere a performanței și, în unele cazuri, la eșecuri în procesarea cererilor. Limitarea numărului de conexiuni va afecta grav performanța unui site Web încărcat moderat, dar va fi benefică dacă pagina are trafic redus. Verificați întotdeauna modul în care modificările pe care le faceți afectează performanța și sănătatea generală a paginii Web.

Despre eroul zilei

Nginx este unul dintre cele mai puternice și mai populare servere web din lume. Potrivit Netcraft, este folosit pentru a susține peste 12 milioane de site-uri web din întreaga lume, inclusiv mastodonti precum Rambler, Yandex, Begun, WordPress.com, Wrike, vkontakte.ru, megashara.com, Librusec și Taba.ru. O arhitectură competentă bazată pe conexiuni de multiplexare utilizând apeluri de sistem select, epoll (Linux), kqueue (FreeBSD) și un mecanism de gestionare a memoriei bazat pe pool-uri (buffer-uri mici de la 1 la 16 KB) permite nginx să nu se lade chiar și la sarcini foarte mari, rezistând peste 10.000 de conexiuni simultane (așa-numita problemă C10K). Scris inițial de Igor Sysoev pentru Rambler și deschis în 2004 sub o licență asemănătoare BSD.

In contact cu

Pe acest moment Cele două servere web care au câștigat cea mai mare popularitate. Acestea sunt Apache și Ngnix. Fiecare dintre ele are propriile sale avantaje și dezavantaje. Apache a fost dezvoltat încă din 1995 și dezvoltarea sa nu a ținut cont de toate nevoile posibile ale utilizatorilor, consumă multă memorie și resurse de sistem, dar este ușor de configurat; Nginx a fost dezvoltat puțin mai târziu în 2002, ținând cont de erorile Apache și concentrându-se pe performanță maximă.

Nu vom intra în detalii despre avantajele și dezavantajele ambelor servere web. Fiecare dintre ele are propriul său domeniu de aplicare. Acest ghid va acoperi instalarea Nginx Ubuntu 16.04. Deși voi vorbi despre Ubuntu 16.04, toți pașii vor funcționa și pentru alte distribuții. Configurarea Nginx este aceeași peste tot, doar comanda de instalare este diferită.

Primul pas este să instalați serverul web în sine pe sistem. Programul se află în depozitele oficiale, dar versiunea sa este deja puțin depășită, așa că dacă doriți cel mai mult versiune noua, trebuie să adăugați PPA:

sudo apt-add-repository ppa:nginx/stable

În prezent, versiunea 1.10.0 este disponibilă în depozitele oficiale, iar 1.10.1 este deja disponibilă în PPA stabil. Dacă nu aveți nevoie de versiune, puteți face fără PPA. Apoi, actualizați listele de pachete din depozite:

Și instalează ngnix:

sudo apt install nginx

După finalizarea instalării serverului Nginx, adăugați programul la pornire, astfel încât să pornească automat:

sudo systemctl enable nginx

Dacă deschideți browserul acum, veți vedea că nginx rulează, dar tot trebuie să îl configuram.

Configurarea Nginx Ubuntu

Configurarea Nginx Ubuntu este mult mai complicată decât Apache. Aici nu vom lua în considerare toate opțiunile și capacitățile programului, ci vom vorbi doar despre cele principale. Există diverse configurații în care Nginx este folosit ca server proxy și serverul principal Apache, dar nu ne va interesa asta. Trebuie să instalăm Nginx ca server web autonom.

Setările Nginx sunt foarte diferite - există un singur fișier de configurare principal și fișiere pentru gazdele virtuale. Configurația din fiecare director, ca în Apache, nu este acceptată.

  • /etc/nginx/nginx.conf- fișierul de configurare principal
  • /etc/nginx/sites-available/*- fisiere de configurare pentru gazde virtuale, cu alte cuvinte, pentru fiecare site.
  • /etc/nginx/sites-enabled/*- fișierele de configurare ale site-urilor activate.

De fapt, fișierele de configurare pentru gazde virtuale sunt citite doar din directorul site-uri activate, dar acesta conține link-uri către site-uri disponibile. Acest sistem a fost inventat pentru a face posibilă dezactivarea temporară a anumitor site-uri fără a le șterge configurația. Toate celelalte fișiere conțin doar declarații variabile și setări standard, care nu trebuie schimbate. În ceea ce privește nginx.conf, toate fișierele de la site-enables sunt incluse în acesta și, prin urmare, pot conține exact aceleași instrucțiuni. Acum să ne uităm la fișierul principal de configurare:

sudo vi /etc/nginx/nginx.conf

După cum puteți vedea, fișierul este împărțit în secțiuni. Structura generală este:

opțiuni globale
evenimente()
http(
Server(
Locație()
}
Server()
}
Poștă()

  • opțiuni globale sunt responsabili pentru funcționarea întregului program.
  • evenimente- această secțiune conține setări pentru lucrul cu rețeaua.
  • http- conține setări de server web. Ar trebui să conțină o secțiune de server pentru reglarea fină a fiecărui site.
  • Server- aceasta sectiune contine setarile pentru fiecare site gazduit pe serverul web.
  • Locație- secțiunea de locație poate fi localizată doar în interiorul secțiunii de server și conține setări doar pentru o anumită solicitare.
  • Poștă- conține setări de proxy de e-mail.

Înainte de a trece la opțiuni, trebuie să mai spunem câteva cuvinte despre sintaxa liniei din fișierul de configurare. Arata cam asa:

valoarea parametrului valoare_suplimentară...;

Linia trebuie să se termine cu „;” și toate parantezele deschise (trebuie să fie închise.

Acum că ați studiat puțin structura globală, puteți trece la analizarea parametrilor înșiși. Nu există multe opțiuni globale:

  • utilizator- utilizatorul în numele căruia va rula programul.
  • procese_lucrători- setează câte procese trebuie lansate pentru a paraleliza activitatea programului, nu trebuie să lansați mai multe procese decât aveți nuclee; Puteți seta parametrul autoși apoi programul va determina însuși acest număr.
  • pid= fișier pid program.
  • worker_rlimit_nofile- indică numărul maxim de fișiere pe care programul le poate deschide. Calculat ca worker_processes * worker_connections* 2.

Am terminat cu opțiunile globale, nu erau multe și nu erau atât de interesante. Mult mai interesante din punct de vedere al optimizării sunt opțiunile din secțiunea evenimente:

  • conexiuni_lucrători- numărul de conexiuni pe care programul le poate procesa simultan pe un proces. Dacă înmulțim worker_process cu acest parametru, obținem numărul maxim de utilizatori care se pot conecta la server în același timp. Se recomandă setarea valorii de la 1024 la 4048.
  • multi_accept- permite acceptarea mai multor conexiuni în același timp, setați parametrul pornit sau dezactivat.
  • utilizare- o modalitate de a lucra cu stiva de rețea. Valoarea implicită este poll, dar pe Linux este mai eficient să utilizați epoll.
  • Trimite fișier- utilizați metoda de trimitere a datelor sendfile. Valoarea este activată.
  • tcp_nodelay, tcp_nopush- trimiteți antetele și începutul fișierului într-un singur pachet. Valoarea este activată.
  • keepalive_timeout- timeout de așteptare înainte ca conexiunea Keepalive să fie închisă, implicit este 65, dar poate fi redus la 10 secunde.
  • keepalive_requests- numărul maxim de conexiuni keepalive de la un client, recomandat 100.
  • reset_timedout_connection- întrerupeți conexiunile după un timeout. Valoarea este activată.
  • open_file_cache- cache informații despre deschide fișiere. Linia de setare arată astfel: open_file_cache max=200000 inactive=20s; max - numărul maxim de fișiere în cache, timpul de stocare în cache.
  • open_file_cache_valid- indică după ce oră trebuie ștearsă informațiile din cache. De exemplu: open_file_cache_valid 30s;
  • open_file_cache_min_uses- cache informații despre fișierele care au fost cel puțin deschise cantitate specificata o singura data.
  • open_file_cache_errors- cache informații despre fișierele lipsă, valoarea activată.

Principalii parametri au fost revizuiți. Aceste setări vă vor ajuta să obțineți performanțe mai bune de la nginx. Ne vom uita la secțiunile server și locație în configurarea gazdelor virtuale.

Configurarea compresiei Gzip

Comprimarea conținutului este necesară pentru a reduce dimensiunea datelor descărcate de browser. Acest lucru accelerează încărcarea site-ului, dar adaugă încărcare suplimentară procesorului serverului. Pentru a activa compresia în secțiunea http, trebuie să adăugați următorul parametru:

Această directivă poate fi folosită și în secțiunea server, atunci va funcționa doar pentru cele specificate domeniul virtual. În continuare, configurăm parametrii de compresie folosind următoarele opțiuni:

  • gzip_min_length- lungimea minimă a paginii în octeți la care trebuie utilizată compresia, de exemplu, 1000 (1 kb)
  • gzip_proxied- dacă este necesar să comprimați cererile proxy, orice spune că totul trebuie comprimat.
  • gzip_types- tipuri de fișiere care trebuie comprimate, de exemplu: text/plain application/xml application/x-javascript text/javascript text/css text/json;
  • gzip_disable „msie6”- compresia nu este acceptată în IE 6, așa că o dezactivăm.
  • gzip_comp_level- nivel de compresie, opțiuni disponibile de la 1 la 10. 1 - minim, 10 - compresie maximă.

Configurarea gazdelor virtuale

După cum știți, un server poate găzdui mai multe site-uri web. Toate cererile vin la IP-ul serverului, iar nginx determină deja, pe baza domeniului, ce conținut trebuie servit. Pentru ca nginx să știe ce domeniu aparține, trebuie să configurați gazde virtuale. Fiecare gazdă este de obicei plasată în dosar separat. Configurația gazdei se află în secțiunea server, dar deoarece toate fișierele de pe site-uri activate sunt importate în secțiunea http, logica structurii fișierelor de configurare nu este întreruptă.

Să ne uităm la un exemplu de configurare:

vi /etc/nginx/sites-enabled/site.conf

  • asculta 80- specifică că o conexiune ar trebui ascultată pe portul 80, poate conține și o opțiune server implicit, ceea ce înseamnă că acest domeniu va fi deschis dacă domeniul nu a fost specificat în cerere.
  • rădăcină /var/www/html- directorul în care se află fișierele site-ului.
  • index index.html- pagina care se va deschide implicit.
  • numele serverului- numele de domeniu al site-ului.
  • access_log- un fisier pentru inregistrarea unui jurnal de solicitari catre server, poate fi folosit atat global in sectiunea http cat si pentru anumit tip fișiere în locație.
  • error_log- jurnalul erorilor serverului web, poate accepta un parametru suplimentar care indică detaliile jurnalului. warn - maxim, crit - numai erori critice.

Acestea sunt toate setările de bază pentru gazda virtuală, după care va funcționa deja. Dar există și o secțiune de locație, care vă permite să configurați comportamentul serverului pentru anumite directoare și fișiere. Sintaxa locației este:

adresa locatiei()

Atât o interogare directă cu privire la rădăcina serverului, cât și expresiile regulate pot fi folosite ca adresă. Pentru a utiliza expresii regulate, acesta este precedat de un caracter „~”. Să ne uităm la exemplele de mai jos, dar deocamdată să ne uităm la posibilele directive:

  • permite- permite accesul la locație pentru utilizatori, toți - toată lumea, puteți specifica și un ip sau o subrețea.
  • nega- interziceți accesul la locație, tuturor - pentru toată lumea.
  • fișierele de încercare- încearcă să deschidă fișierele într-o anumită ordine, deschide primul fișier găsit. De exemplu, această construcție: $uri $uri/index.html $uri.html =404; mai întâi încearcă să deschidă $uri, apoi index.html, dacă $uri.html nu este găsit și apoi, dacă niciunul dintre fișierele prepoziționale nu există, dă o eroare 404.
  • expiră- setează timpul de stocare în cache a browserului pentru elementul dat, de exemplu, 1d - o zi, 2h - două ore, 30s - 30 secunde.

Pe lângă aceste directive principale, aici pot fi utilizate și altele. Pentru mai multe detalii, consultați documentația oficială. Să ne uităm la câteva exemple:

Nu înregistrați favicon:

locație = /favicon.ico (
log_not_found off;
access_log off;
}

Interziceți accesul la fișierele care încep cu un punct:

locație ~ /\. (
nega totul;
}

Cache fișiere obișnuite timp de 90 de zile:

locație ~* ^.+\.(ogg|ogv|svg|svgz|eot|otf|woff|mp4|ttf|rss|atom|jpg|jpeg|gif|png|ico|zip|tgz|gz|rar|bz2 |doc|xls|exe|ppt|tar|mid|midi|wav|bmp|rtf)$ (
access_log off; log_not_found off; expiră 90d;

Unul dintre cele mai populare servere web

Nginx este foarte popular printre utilizatorii de servere web și proxy datorită performanței sale. Serverul are multe avantaje, dar configurarea lui va fi dificilă pentru un începător. Dorim să vă ajutăm să înțelegeți fișierele de configurare, sintaxa și configurarea parametrilor de bază Nginx.

Ierarhia directoarelor

Toate fișierele de configurare a serverului se află în directorul /etc/nginx. În plus, există mai multe foldere în interiorul directorului, precum și fișiere de configurare modulare.

cd /etc/nginx
ls -F
conf.d/ koi-win naxsi.rules scgi_params uwsgi_params
fastcgi_params mime.types nginx.conf site-available/win-utf
koi-utf naxsi_core.rules proxy_params site-enabled/

Dacă ați folosit Apache, ar trebui să vă familiarizați cu directoarele cu site-uri activate și site-uri disponibile. Ele determină configurația site-urilor. Fișierele create sunt stocate în ultimul director. Dosarul activat pentru site-uri este necesar pentru a stoca configurațiile numai ale paginilor activate. Pentru a le conecta ai nevoie legătură simbolicăîntre dosare. Configurațiile pot fi stocate și în directorul conf.d. În același timp, în timpul pornirii Nginx, fiecare fișier cu extensia .conf va fi citit din nou. Când scrieți fișierele de configurare, introduceți codul fără erori și urmați sintaxa. Toate celelalte fișiere se află în /etc/nginx. Configuratorul conține informații despre procese specifice, precum și componente suplimentare.

Fișierul principal de configurare Nginx este nginx.conf.

Citește toate fișierele de configurare, combinându-le într-unul care este solicitat la pornirea serverului. Deschideți fișierul cu:

sudo nano /etc/nginx/nginx.conf

Următoarele linii vor apărea pe ecran:

utilizator www-date;
lucrător_procese 4;
pid /var/run/nginx.pid;
evenimente (
conexiuni_muncitor 768;
#multi_accept on;
}
http (
. . .

Primul este Informații generale despre Nginx. Expresia user www-data indică utilizatorul care conduce serverul. Directiva pid arată unde sunt localizate procesele PID pentru uz intern. Linia worker_processes arată câte procese poate rula Nginx simultan. În plus, puteți specifica aici jurnalele (de exemplu, jurnalul de erori este determinat folosind directiva error_log). Mai jos este secțiunea evenimente. Este necesar pentru a gestiona conexiunile la server. După ce este blocul http.

Structura fișierului de configurare Nginx

Înțelegerea structurii de formatare a fișierelor vă va ajuta să înțelegeți mai bine configurația serverului dvs. web. Este împărțit în blocuri structurale. Detaliile de configurare a blocului http sunt stratificate folosind blocuri private. Ei moștenesc proprietăți de la părinte, adică. cel în care se află. Acest bloc stochează majoritatea configurațiilor serverului. Ele sunt împărțite în blocuri de server, în care locație.

Când configurați serverul Nginx, rețineți că cu cât blocul de configurare este mai jos, cu atât mai puține elemente vor moșteni proprietăți și invers. Fișierul conține un număr mare de opțiuni care modifică funcționarea serverului. Puteți seta compresia pentru fișierele trimise către client, de exemplu. Pentru a face acest lucru, introduceți parametrii:

gzip on;
gzip_disable „msie6”;

Rețineți că același parametru poate lua valori diferite în blocuri diferite. Mai întâi setați-l în partea de sus, apoi redefiniți parametrul la nivelul dorit. Dacă ultima actiune neexecutat, programul va seta automat valorile.

Ultimele rânduri ale fișierului nginx.conf sunt:

includ /etc/nginx/conf.d/*.conf;
includ /etc/nginx/sites-enabled/*;

Ele indică faptul că locația și blocurile de server sunt stocate în afara acestui fișier. Acestea definesc setările pentru adrese URL și fișiere specifice. Această structură este necesară pentru a menține o structură de configurare modulară. În interiorul acestuia puteți crea directoare și fișiere noi pentru diferite site-uri. In afara de asta, fișiere similare poti grupa. După luare în considerare, puteți închide fișierul nginx.conf.

Blocuri virtuale

Sunt analoge cu gazdele virtuale din Apache. Blocurile secțiunii server includ caracteristici ale site-urilor individuale care se află pe server. În folderul site-available veți găsi fișierul implicit de blocare a serverului. În interiorul acestuia puteți găsi datele necesare care pot fi necesare la întreținerea site-urilor.

site-uri cd-disponibile
sudo nano implicit
Server(
root /usr/share/nginx/www;
index index.html index.htm;
nume_server gazdă locală;
Locație/(
try_files $uri $uri/ /index.html;
}
locație /doc/ (
alias /usr/share/doc/;
autoindex activat;
permite 127.0.0.1;
nega totul;
}
}

În exemplul de mai sus, comentariile au fost eliminate în mod intenționat. Acest lucru a fost făcut pentru ușurința percepției. În interiorul blocurilor de server există setări cuprinse între acolade:

Acest bloc este plasat folosind directiva include la sfârșitul http, scrisă în fișierul nginx.conf. Directiva rădăcină definește directorul în care va fi localizat conținutul site-ului. În acesta, programul va căuta fișiere pe care utilizatorul le va solicita. Calea implicită este: /usr/share/nginx/www. Nginx separă liniile sau directivele unele de altele folosind punct și virgulă. Dacă nu puneți semn de punctuație, mai multe rânduri vor fi citite ca unul singur. Pentru a specifica regulile care vor fi utilizate ca index, utilizați directiva index. Serverul le va verifica în ordinea în care sunt listate. Dacă niciuna dintre paginile disponibile nu a fost solicitată de utilizator, va fi returnat index.html. Dacă nu este acolo, serverul va căuta index.htm.

regula nume_server

Include o listă de nume de domenii pe care blocul serverului va trebui să le proceseze. Puteți introduce orice număr dintre ele, separate prin spații. Dacă puneți * la sfârșitul sau începutul domeniului, puteți specifica un nume cu o mască. Asteriscul se potrivește cu o parte a numelui. Dacă introduceți *.com.ua, atunci aceasta va include toate adresele zonei de domeniu specificate. Dacă adresa se potrivește cu descrierea mai multor directive, atunci va răspunde la cea care se potrivește pe deplin. Dacă nu există potriviri, răspunsul va fi cel mai mare nume lung, care are mască. În caz contrar, potrivirea expresiilor regulate va fi efectuată. Numele de server care folosesc expresii regulate încep cu un tilde (~).

Blocuri de locație

Următorul la rând vom avea blocul de locație. Este necesar să se determine metoda de prelucrare anumite cereri. Dacă resursele nu se potrivesc cu niciun alt bloc de locație, atunci li se vor aplica directivele specificate în paranteze. Aceste blocuri pot include o cale ca /doc/. Pentru a stabili o potrivire completă între uri și locație, se folosește semnul =. Folosind tilde, puteți potrivi expresii regulate. De asemenea, puteți seta sensibilitatea cu majuscule și minuscule punând ~. Dacă adăugați un asterisc, majusculele nu contează.

Rețineți: atunci când solicitarea se potrivește pe deplin cu blocul de locație, aceasta va fi folosită și căutarea se va opri. Când potrivirea este incompletă, URI-ul va fi comparat cu parametrii directivelor de locație. Utilizați un bloc cu ^~ care se potrivește cu URI pentru a selecta blocul. Dacă această opțiune nu este activat, serverul va selecta potrivirea optimă și, de asemenea, va efectua o căutare folosind expresii regulate. Acest lucru este necesar pentru a selecta unul dintre șabloanele potrivite. Dacă se găsește o expresie potrivită, aceasta va fi folosită. În caz contrar, potrivirea anterioară a URI va fi aplicată. Cu toate acestea, rețineți că Nginx preferă potrivirile complete. Dacă nu sunt acolo, va începe să caute expresii regulate și apoi după URI. Paritatea de căutare este specificată de combinația de simboluri ^~.

regula try_files

Acesta este un instrument foarte util care poate verifica prezența fișierelor într-o ordine specificată. Folosește primul care corespunde criteriilor pentru a procesa cererea. poți să folosești Opțiuni suplimentare pentru a specifica modul în care serverul va servi cererile. Configuratorul are această linie implicită:

try_files $uri $uri/ /index.html;

Ce înseamnă? Dacă vine o solicitare care este servită de un bloc de locație, serverul va încerca mai întâi să trateze uri-ul ca pe un fișier. Aceasta este furnizată de variabila $uri. Când nu există potriviri, uri-ul va fi tratat ca un director. Îi puteți verifica existența adăugând o bară oblică: $uri/. Există situații în care nici fișierul, nici directorul nu vor fi găsite. În acest caz, fișierul implicit va fi încărcat - index.html. Regula try_files folosește ultimul parametru ca alternativă. De aceea, acest fișier trebuie să fie în sistem. Cu toate acestea, dacă nu se găsesc potriviri, Nginx va returna o pagină de eroare. Pentru a-l seta, scrie = și codul de eroare:

Opțiuni suplimentare

Dacă aplicați regula alias, veți putea servi paginile blocului de locație în afara directorului rădăcină, de exemplu. Când sunt necesare fișiere din doc, acestea vor fi solicitate din /usr/share/doc/. În plus, regula de autoindexare începe să listeze directoarele serverului pentru directiva de locație specificată. Dacă scrieți liniile de deny și allow, veți putea schimba accesul la directoare.

Ca o concluzie, merită să spunem că Nginx este un instrument multifuncțional foarte puternic. Dar pentru a înțelege bine principiul funcționării sale, va fi nevoie de timp și efort. Dacă înțelegeți cum funcționează configurațiile, vă puteți bucura pe deplin de toate caracteristicile programului.

Peste 50% din traficul din întreaga lume este deservit de tehnologia Apache și Nginx– servere web care au deschis sursă. Nginx realizează funcția de front-end, Apache realizează funcția de backend. Nginx este primul care acceptă cererile utilizatorilor și le răspunde cu conținutul necesar - imagini, fișiere, scripturi. Heavy Apache, la rândul său, nu se ocupă de asta, ci procesează dinamica. Solicitări de proxy Nginx și răspunsuri returnate. Această combinație este excelentă pentru site-urile mari care sunt vizitate de mulți utilizatori. Pentru site-uri mici această grămadă nu va crește productivitatea. Apache și Nginx reduc încărcarea pe server în general datorită faptului că Mânere Nginx continut static, iar Apache este dinamic.

Apache și Nginx nu ar trebui considerate tehnologii interschimbabile, chiar dacă au multe caracteristici similare. Fiecare server web are propriile sale avantaje și utilizarea sa depinde de sarcina la îndemână. În acest articol Să ne uităm la fiecare tehnologie în funcție de domeniul de aplicare. Articolul va fi util proprietarilor de servere fizice virtuale și dedicate.

Funcțional și rapid, Nginx a fost lansat în 2004 și după această lansare a început să-și câștige popularitatea. Datorită ușoarei și scalabilității sale, funcționează bine pe orice hardware. Nginx este utilizat în două moduri: ca server web sau ca proxy.

Ce face Nginx ca server web?

  • creează automat descriptori de cache și liste de fișiere, menține fișiere indexși interogări statice;
  • accelerează toleranța la erori, proxy și echilibrarea sarcinii;
  • memorează cache cu FastCGI și accelerează proxy-ul;
  • suportă SSL;
  • suportă Perl;
  • are filtre si modularitate;
  • autentifică HTTP și filtrează SSL.

Ca proxy Nginx:

  • furnizarea completă a StartTLS și SSL;
  • ușurință de autentificare (UTILIZATOR/PASS, LOGIN);
  • folosește un server HTTP extern pentru a redirecționa către backend-ul POP3/IMAP.

După cum puteți vedea, Nginx îndeplinește multe funcții fără a supraîncărca sistemul. Conform datelor oficiale, tehnologia este utilizată de peste 56 de milioane de site-uri din întreaga lume (de exemplu, Rambler, Yandex, Mail, Begun, WordPress.com, vk.com, Facebook, Rutracker.org), dar Nginx este inferior față de Apache în popularitate. De ce este Apache atât de popular?

Server web Apache – multiplatformă software, care a fost creat în 1995. Datorită documentației extinse și integrării bune cu software-ul terților, Apache a câștigat o popularitate enormă. Suportă următorul sistem de operare - Linux, BSD, Mac OS, Microsoft Windows, Novell NetWare, BeOS. .

Avantajele serverului web Apache:

  • a sustine limbaje de programare PHP, Python, Ruby, Perl, ASP, Tcl;
  • ușurința de conectare a modulelor externe;
  • suport tehnologic CGI și FastCGI;
  • prezența unor mecanisme care asigură securitatea și diferențierea accesului la date;
  • capacitatea de a utiliza un DBMS pentru autentificarea utilizatorului;
  • configurație flexibilă și fiabilă a sistemului;
  • potrivit pentru aplicații care necesită protecție puternică a datelor criptografice;
  • capacitatea de a crea directoare personalizate pentru site-ul web;
  • capacitatea de a configura gazde virtuale, cu ajutorul căruia pe una server fizic poti crea mai multe virtuale;
  • păstrează jurnalele a ceea ce se întâmplă pe serverul tău;
  • activ Părere cu dezvoltatoriiși rezolvarea în timp util a erorilor software.

Dar în ciuda tuturor avantajelor Server web Apache oarecum dificil de configurat și de operat, așa că nu orice începător va putea face față. Dar dacă proiectul tău are nevoie de acest software special, atunci vei face alegerea corectă în favoarea Apache.

Doriți să vă asigurați Funcționează PHP pe server? Mai multe detalii despre asta.

După ce cunoașteți avantajele și dezavantajele Apache și Nginx, puteți alege solutii utile pentru site-ul dvs., în funcție de obiectivele pe care le urmăriți. Dar poate veți avea nevoie de combinația Apache+Nginx pentru a obține cel mai bun rezultat. De exemplu, Nginx este adesea folosit în fața Apache ca proxy invers. Această combinație vă permite să faceți față multor cereri competitiveși le sortează. Acele solicitări pe care Nginx nu le poate gestiona sunt trimise către Apache, reducând astfel sarcina pe acesta din urmă. În acest caz, toleranța la erori crește. Înainte de a alege un server web, trebuie să efectuați teste obligatorii privind performanța și capacitățile fiecărei soluții.

Pentru mai multe informații despre toate tehnologiile acceptate de găzduirea HyperHost, vă rugăm să vizitați.

Acest articol a fost furnizat pentru familiarizarea generală cu capabilitățile de combinare a serverelor web Apache și Nginx. Mai mult mai multe informatii V .

Dacă aveți nevoie de ajutorul nostru, vă rugăm să ne contactați!

Vom fi bucuroși să vă răspundem la toate întrebările despre configurarea serverelor web. De asemenea, puteți obține întotdeauna administrare gratuită de la noi. Este totul suport tehnic hosterii sunt la fel? Despre caracteristicile de administrare gratuită și plătită într-una specială.

de 17249 ori 10 ori vizualizate astăzi

Serverul web Nginx este unul dintre cele mai populare servere web cu performanțe foarte înalte și procesare rapidă a cererilor statice de la utilizatori. La setare corectă Puteți obține performanțe foarte înalte de la acest server web. Nginx este foarte rapid la manipularea fișierelor statice, fie el pagini html sau alte tipuri de resurse.

Într-unul dintre articolele anterioare ne-am uitat deja la stabilirea parametrilor săi principali, în acest articol vreau să mă opresc mai mult asupra performanței și pregătirii serverului web pentru utilizare în condiții de luptă. Cu privire la distribuție Linux, atunci astăzi vom lua în considerare CentOS, acest sistem este adesea folosit pe servere și pot apărea unele dificultăți la configurarea Nginx. În continuare, ne vom uita la configurarea Nginx CentOS, haideți să vorbim despre cum să activați suportul complet pentru http2, google pagespeed și să configurați fișierul de configurare principal.

Arhivele oficiale CentOS includ Nginx și cel mai probabil este deja instalat pe sistemul dumneavoastră. Dar dorim ca site-ul să funcționeze folosind protocolul http2, care vă permite să transferați toate datele cu o singură conexiune, iar acest lucru crește performanța. Pentru a funcționa prin http2, va trebui să configurați un certificat SSL, dar acest lucru este deja scris în articolul de obținere a unui certificat Lets Encrypt Nginx. Dar asta nu este tot. Pentru a trece de la SSL obișnuit la HTTP2.0, majoritatea browserelor folosesc acum protocolul ALPN și este acceptat începând cu OpenSSL 1.02. În timp ce în depozite există doar OpenSSL 1.01. Prin urmare, trebuie să instalăm o versiune de Nginx construită cu OpenSSL 1.02. Puteți utiliza Broken Repo pentru asta:

sudo yum -y instalează yum-utils
# sudo yum-config-manager --add-repo https://brouken.com/brouken.repo

Dacă utilizați depozitul EPEL, atunci trebuie să indicați că nu trebuie să luați Nginx din acesta:

sudo yum-config-manager --save --setopt=epel.exclude=nginx*;

Acum, pentru a instala versiunea corectă de Nginx, trebuie doar să tastați:

sudo yum install nginx

Cel mai ultima versiune Nginx 1.13.2, cu suport complet ALPN. În continuare, să trecem la configurare.

2. Configurarea Nginx

Primul pas este să luați în considerare structura fișierului de configurare. La prima vedere, totul aici poate părea foarte confuz, dar totul este destul de logic:

opțiuni globale
evenimente()
http(
Server(
Locație()
}
Server()
}

Mai întâi există opțiuni globale, care stabilesc parametrii de bază ai programului, de exemplu, pe ce utilizator va fi lansat și numărul de procese. Urmează o secțiune evenimente, care descrie modul în care Nginx va răspunde la conexiunile de intrare, urmat de secțiunea http, care combină toate setările privind funcționarea protocolului http. Conține o secțiune Server, fiecare astfel de secțiune este responsabilă pentru un domeniu separat, secțiunea de server conține secțiuni Locație, fiecare dintre acestea fiind responsabil pentru o anumită adresă URL de solicitare, rețineți că nu este un fișier de pe server, ca în Apache, ci URL-ul solicitării.

Vom face setările globale principale în fișierul /etc/nginx/nginx.conf. În continuare, să ne uităm la ce vom schimba exact și ce valori este recomandabil să setăm. Să începem cu opțiunile globale:

  • utilizator- utilizatorul în numele căruia va fi lansat serverul trebuie să fie proprietarul directorului cu fișierele site-ului, iar php-fpm trebuie să fie rulat în numele lui;
  • procese_lucrători- numărul de procese Nginx care vor fi lansate trebuie să fie setat exact câte nuclee aveți, de exemplu, eu am 4;
  • worker_cpu_affinity- acest parametru vă permite să atribuiți fiecare proces unui nucleu de procesor separat, setați valoarea la auto, astfel încât programul însuși să aleagă la ce să se atașeze;
  • worker_rlimit_nofile- numărul maxim de fișiere pe care programul le poate deschide, pentru fiecare conexiune aveți nevoie de cel puțin două fișiere și fiecare proces va avea numărul de conexiuni pe care îl specificați, deci formula este: worker_proceses * worker_connections * 2, parametrul conexiuni_lucrători Să ne uităm la asta mai jos;
  • pcre_jit- activați această opțiune pentru a accelera procesarea expresiilor regulate folosind compilarea JIT;

În secțiunea de evenimente ar trebui să configurați doi parametri:

  • conexiuni_lucrători- numărul de conexiuni pentru un proces trebuie să fie suficient pentru a procesa conexiunile de intrare. În primul rând, trebuie să știm câte dintre aceste conexiuni de intrare există, pentru aceasta ne uităm la statisticile de pe server ip_address/nginx_status. Vom vedea mai jos cum să-l activăm. În linia Active Connections vedem numărul compuși activi cu serverul, trebuie să țineți cont și de faptul că sunt luate în considerare și conexiunile cu php-fpm. Apoi, acordați atenție câmpurilor acceptate și gestionate, primul afișează conexiunile procesate, al doilea - numărul celor acceptate. Valorile trebuie să fie aceleași. Dacă diferă, înseamnă că nu există suficiente conexiuni. Vezi exemplele, prima imagine este problema, a doua este ordinea. Pentru configurația mea, cifra optimă poate fi de 200 de conexiuni (800 în total, luând în considerare 4 procese):

  • multi_accept- permite programului să accepte mai multe conexiuni simultan, de asemenea, accelerează lucrul cu un număr mare de conexiuni;
  • accept_mutex- setați valoarea acestui parametru la off, astfel încât toate procesele să primească imediat notificare despre noile conexiuni;

De asemenea, este recomandat să folosiți directiva de utilizare epoll în secțiunea evenimente, deoarece aceasta este cea mai mare metoda eficienta procesează conexiunile de intrare pentru Linux, dar această metodă este folosită în mod implicit, așa că nu văd niciun rost să o adaug manual. Să ne uităm la câțiva parametri din secțiunea http:

  • Trimite fișier- utilizați metoda de trimitere a datelor sendfile. Cea mai eficientă metodă pentru Linux.
  • tcp_nodelay, tcp_nopush- trimite anteturile și corpul cererii într-un singur pachet, funcționează puțin mai repede;
  • keepalive_timeout- timeout pentru menținerea unei conexiuni cu clientul, dacă nu aveți scripturi foarte lente, atunci vor fi suficiente 10 secunde, setați valoarea cât este necesar pentru ca utilizatorul să poată fi conectat la server;
  • reset_timedout_connection- întrerupeți conexiunile după un timeout.
  • open_file_cache- cache informații despre fișierele deschise. De exemplu, open_file_cache max=200000 inactive=120s; max - numărul maxim de fișiere în cache, timpul de stocare în cache.
  • open_file_cache_valid- când trebuie să verificați relevanța fișierelor. De exemplu: open_file_cache_valid 120s;
  • open_file_cache_min_uses- stocați în cache numai fișierele care au fost deschise de numărul specificat de ori;
  • open_file_cache_errors- amintiți-vă erorile de deschidere a fișierelor.
  • dacă_modificată- stabilește cum vor fi procesate anteturile if-modified-since. Cu acest antet, browserul poate primi un răspuns 304 dacă pagina nu s-a schimbat de atunci ultima vizualizare. Opțiuni posibile: nu trimite - off, trimite dacă ora se potrivește exact - exact, trimite dacă ora se potrivește exact sau mai mult - înainte;

Iată cum va arăta configurarea nginx conf:

utilizator nginx;
lucrător_procese 4;
worker_cpu_affinity auto;
worker_rlimit_nofile 10000;
pcre_jit on;

error_log /var/log/nginx/error.log warn;
load_module „module/ngx_pagespeed.so”;

evenimente (
multi_accept pe;
accept_mutex dezactivat;
conexiuni_muncitor 1024;
}

sendfile activat;
tcp_nopush activat;
tcp_nodelay activat;

open_file_cache max=200000 inactiv=20s;
open_file_cache_valid 120s;
open_file_cache_errors activat;

reset_timedout_connection activat;
client_body_timeout 10;
keepalive_timeout 65;

includ /etc/nginx/sites-enabled.*.conf

3. Configurarea http2

Nu voi descrie în detaliu configurarea secțiunii de server, deoarece am făcut deja acest lucru în articolul despre instalarea Nginx în Ubuntu și nu am nimic de adăugat aici, Configurare SSL Acesta este un subiect destul de larg și va fi discutat și într-un articol separat. Dar pentru a configura http2 trebuie să aveți deja SSL. Apoi, pur și simplu ajustați directiva listen în secțiunea serverului dvs.:

asculta 194.67.215.125:443 default_server;

ascultați 194.67.215.125:443 http2 default_server;

În acest mod simplu, puteți activa http2 dacă l-ați instalat înainte versiunea corecta Nginx.

4. Setarea Viteza paginii

Google Pagespeed este un modul Nginx care efectuează diverse optimizări pentru a se asigura că paginile se încarcă mai repede, serverul web rulează mai eficient și utilizatorii experimentează mai puțin disconfort. Aceasta include stocarea în cache, optimizarea cod html, optimizarea imaginii, combinarea codului javascript și css și multe altele. Toate acestea se fac la nivel Nginx, deci este mai eficient decât dacă ați face-o în PHP. Dar există un dezavantaj: modulul elimină antetul Ultima modificare.

Faptul este că PageSpeed ​​​​setează o linie cache foarte lungă pentru toate fișierele și adaugă hash-ul său la numele fișierului. În acest fel, viteza de încărcare a resurselor este mult mai mare, deoarece browserul va solicita doar fișiere cu noul hash, iar LastModified este eliminat, astfel încât utilizatorii să poată vedea modificările dacă se modifică orice fișier. Acum să vedem cum să instalăm modulul. Va trebui să-l construim din codul sursă.

Mai întâi instalați instrumentele pentru asamblare, este foarte important, dacă nu le instalați, atunci veți primi o eroare și nu veți ști ce să faceți:

yum install wget gcc cmake unzip gcc-c++ pcre-devel zlib-devel

Descărcați și extrageți sursele Nginx pentru versiunea dvs., de exemplu 1.13.3:

wget -c https://nginx.org/download/nginx-1.13.3.tar.gz
# tar -xzvf nginx-1.13.3.tar.gz

Configurarea serverului nginx nu include reasamblarea și înlocuirea programului din depozit, pur și simplu folosim aceste surse pentru a construi modulul. Descărcați și extrageți sursele PageSpeed:

wget -c https://github.com/pagespeed/ngx_pagespeed/archive/v1.12.34.2-stable.zip
# unzip v1.12.34.2-stable.zip

Descărcați și despachetați biblioteca de optimizare PageSpeed ​​în folderul cu sursele modulului:

cd ngx_pagespeed-1.12.34.2-stable/
# wget -c https://dl.google.com/dl/page-speed/psol/1.12.34.2-x64.tar.gz
# tar -xvzf 1.12.34.2-x64.tar.gz

Descărcați și despachetați sursele OpenSSL 1.02:

wget -c https://www.openssl.org/source/openssl-1.0.2k.tar.gz -O /opt/lib/$OPENSSL.tar.gz
# tar xvpzf openssl-1.0.2k.tar.gz

Acum trebuie să asamblam modulul. Mai întâi, uitați-vă la opțiunile cu care este construit actualul Nginx:

Acum să mergem la folderul cu Nginx, să înlocuim toate opțiunile primite, opțiunea --add-dynamic-module pentru PageSpeed, OpenSSL și să încercăm să construim:

cd nginx-1.13.3
# ./configure --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib64/nginx/modules --conf-path=/etc/nginx/nginx .conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx .pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache /nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path= /var/cache/nginx/scgi_temp --user=nginx --group=nginx --with-compat --with-file-aio --with-threads --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --cu-http_flv_module --cu-http_gunzip_module --cu-http_gzip_static_module --cu-http_mp4_module --cu-http_random_index_module --cu-http_realip_module --cu-http_secure_link_module --cu-http_slice_module-cu-modul-http_ ule --with-http_sub_module --with-http_v2_module --with-mail --with-mail_ssl_module --with-stream --with-stream_realip_module --with-stream_ssl_module --with-stream_ssl_preread_module --with-cc-opt="- O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic" --cu- ld-opt= --with-openssl=$HOME/openssl-1.0.2k --add-dynamic-module=$HOME/ngx_pagespeed-1.12.34.2-stable $(PS_NGX_EXTRA_FLAGS)
# face

Dacă totul a fost făcut corect, atunci la ieșire veți primi modulul ngx_pagespeed.so în folderul obj, trebuie să îl copiați în folderul /etc/nginx/modules:

cp ngx_pagespeed.so /etc/nginx/modules/ngx_pagespeed.so

Creați un folder pentru cache:

mkdir -p /var/ngx_pagespeed_cache
# chown -R nginx:nginx /var/ngx_pagespeed_cache

Acum adăugați următoarea linie pentru a activa modulul în /etc/nginx/nginx.conf:

load_module „module/ngx_pagespeed.so”;