Cum să reglați și să optimizați performanța serverului web Nginx

Introducere

Nginx este un server web foarte rapid, robust, ușor și performant, care rulează cel puțin 40% din cele mai aglomerate site-uri la nivel mondial. Datorită versatilității Nginx, este folosit și un echilibrator de încărcare, proxy invers și server de cache HTTP.


Cea mai bună caracteristică a Nginx este viteza sa care îi permite să gestioneze ușor mii de conexiuni simultane.

În acest articol, vom ilustra cele mai bune moduri de a regla și de a optimiza serverul web Nginx.

Pre-rechizite

  • Instalare Linux VPS (Orice aromă Linux)
  • Înțelegere de bază a configurației Nginx
  • Instalat Nginx

Reglarea și optimizarea Nginx implică ajustarea parametrilor în fișierul de configurare implicit Nginx /etc/nginx/nginx.conf.

Iată un exemplu de fișier de configurare Nginx implicit /etc/nginx/nginx.conf

utilizator www-date;
muncitor_procesează auto;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;

evenimente {
conexiuni muncitor 768;
# multi_accept pe;
}

http {

##
# Setări de bază
##

sendfile pornit;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
server_tokens dezactivat;
add_header X-XSS-Protection "1; mode = bloc";
add_header X-Frame-Options "SAMEORIGIN";

# server_names_hash_bucket_size 64;
# server_name_in_redirect off;

includeți /etc/nginx/mime.types;
default_type application / octet-stream;

##
# Setări SSL
##

ssl_protocoli TLSv1 TLSv1.1 TLSv1.2; # Droping SSLv3, ref: POODLE
ssl_prefer_server_ciphers on;

##
# Setări de logare
##
access_log /var/log/nginx/access.log;
eroare_log /var/log/nginx/error.log;

##
# Setări Gzip
##

gzip pornit;

# gzip_vary pornit;
# gzip_proxied oricare;
# gzip_comp_level 6;
# gzip_buffers 16 8k;
# gzip_http_version 1.1;
# gzip_types text / text simplu / aplicație css / aplicație json / text javascript / aplicație xml / aplicație xml / xml + text SMS / javascript;

##
# Configuri de gazdă virtuală
##

includeți /etc/nginx/conf.d/*.conf;
include / etc / nginx / sites-enabled / *;
}

#Poștă {
# # A se vedea scriptul de autentificare a mostrei la:
# # http://wiki.nginx.org/ImapAuthenticateWithApachePhpScript
#
# # auth_http localhost / auth.php;
# # pop3_capabilități "TOP" "UTILIZATOR";
# # imap_capabilități "IMAP4rev1" "UIDPLUS";
#
# Server {
# asculta localhost: 110;
# protocol pop3;
# proxy pornit;
#}
#
# Server {
# ascultați localhost: 143;
# protocol imap;
# proxy pornit;
#}
#}

Faceți o copie de siguranță a fișierului actual de configurare nginx înainte de editare, în timp ce efectuați optimizarea și optimizarea nginx. Este recomandat să efectuați o modificare simultană, să salvați fișierul de configurare, să reporniți serverul Nginx și să faceți testarea performanței pentru a vedea orice îmbunătățire a performanței. Dacă nu vedeți nicio îmbunătățire, poate doriți să reveniți la valoarea implicită / inițială.

1. Procese de muncitori

Procesele lucrătorilor se referă la numărul de lucrători care trebuie depus de Nginx. Este cea mai bună practică de a rula un proces de lucru pentru fiecare nucleu al procesorului. Dacă introduceți o valoare mai mare decât numărul de nuclee de procesor în mașina / VPS-ul dvs., acest lucru va provoca procese inactive în sistem.

În mod implicit, valoarea procesării lucrătorului este setată la auto.

Pentru a cunoaște numărul de nuclee CPU în sistemul dvs., rulați comanda:

$ grep procesor / proc / cpuinfo | wc -l
1

În VPS-ul nostru, avem un nucleu, de aceea este recomandat să setați valoarea procesului lucrătorului la 1

în fișierul de configurare așa cum se arată mai jos:

lucrător_procese 1;

În cazul în care există mai mult trafic acumulat pe serverul dvs. web nginx și trebuie să rulați mai multe procese, atunci este recomandat să vă actualizați mașina la mai multe nuclee și să reglați procesele de lucru la noul număr de nuclee de procesor din sistemul dvs..

2. Conexiuni pentru lucrători

Conexiunile de lucru reprezintă numărul de clienți care pot fi deserviți simultan de un server web Nginx. Când este combinat cu procesul de lucrător, obțineți numărul maxim de clienți care pot fi deserviți pe secundă, după cum urmează:

Număr maxim de clienți / secundă = Procese de lucru * Conexiuni de lucru

În mod implicit, valoarea conexiunilor lucrătorului este setată la 768.

Cu toate acestea, trebuie menționat că de cele mai multe ori un browser deschide cel puțin 2 conexiuni pe server în același timp, de aceea numărul poate fi redus la jumătate.

Pentru a maximiza potențialul complet al Nginx, conexiunile lucrătorului ar trebui să fie setate la numărul maxim admis de procese care pot fi rulate de către centrală la un moment dat. Acest lucru este echivalent cu numărul de descriptori de fișiere deschise care pot fi obținute cu comanda:

$ ulimit -n
1024

În VPS-ul nostru, nucleul este limitat la 1024 de procese simultan, de aceea este recomandat să setați valoarea conexiunilor de lucrători (în secțiunea evenimente) la 1024 după cum urmează:

evenimente {
lucrători_conectări 1024;

}

Din calculul nostru, numărul maxim de clienți care pot fi deserviți pe secundă este

1024 conexiuni lucrător * 1 proces lucrător = 1024 clienți pe secundă

3. Multi Accept

Multi accept definește modul în care procesul lucrător acceptă conexiuni noi.

În mod implicit, procesul de lucru este setat pe Off și acceptă o nouă conexiune la un moment dat.

Dacă este activat, procesul lucrător acceptă toate conexiunile noi simultan. Valoarea multi_accept (în secțiunea evenimente) ar trebui să fie dezactivată după cum se arată mai jos:

evenimente {
lucrători_conectări 1024;
multi_accept off;
}

4. Compresia Gzip

Compresia răspunsurilor clienților reduce dimensiunea acestora, prin urmare, utilizând mai puțin lățimea de bandă a rețelei și îmbunătățind timpul de încărcare a paginii pentru conexiunile lente. Trebuie menționat faptul că procesul de compresie în sine consumă resurse de mașini, prin urmare, ar trebui să analizați și să evaluați costurile-beneficii ale compresiei. În caz contrar, compresia poate funcționa în dezavantaj și poate reduce performanța nginx. Este recomandat să implementați compresia după cum urmează:

  1. Activați conținutul gzip numai pentru conținut adecvat, de ex. CSS, text, fișiere JavaScript, de ex
  2. Examinați efectele compresiei activând și dezactivând compresia pentru diferitele tipuri și dimensiuni de conținut
  3. NU crește nivelul de compresie, deoarece acest lucru costă efortul procesorului fără o creștere proporțională a debitului.

Proba de configurare recomandată pentru gzip este următoarea: (în secțiunea http)

gzip pornit;
gzip_vary pornit;
gzip_proxied oricare;
gzip_comp_level 1;
gzip_buffers 16 8k;
gzip_http_version 1.1;
text gzip_types / text simplu / aplicație css / aplicație json / text javascript / aplicație xml / aplicație xml / xml + text SMS / javascript;

5. Tampoane

Bufferele joacă un rol important în optimizarea performanței nginx. Următoarele sunt variabilele care trebuie ajustate pentru o performanță optimă:

client_body_buffer_size – Gestionează dimensiunea tamponului client, adică acțiunile POST, de ex. trimiteri de formular trimise pe serverul web Nginx. Este recomandat să setați acest lucru la 10K.

client_header_buffer_size – similar client_body_buffer_size, dar gestionează dimensiunea antetului clientului. Este recomandat să setați acest lucru la 1K.

client_max_body_size – Dimensiunea maximă permisă a solicitării clientului. Dacă valoarea este depășită, nginx produce 413 eroare sau solicită entitate prea mare.

large_client_header_buffers – Numărul și dimensiunea maximă de buffere pentru anteturile clientilor mari.

Setările recomandate sunt următoarele (în secțiunea http)

client_body_buffer_size 10K;
client_header_buffer_size 1k;
client_max_body_size 8m;
large_client_header_buffers 4 4k;

Cu valorile de deasupra nginx va funcționa optim, dar pentru o optimizare suplimentară, puteți regla valorile și puteți testa performanța.

6. Intervalele de timp

Intervalele de timp îmbunătățesc într-adevăr performanța nginx. Conexiunile de păstrare reduc cpu și rețele aeriene necesare pentru deschiderea și închiderea conexiunilor. Următoarele sunt variabilele care trebuie ajustate pentru cele mai bune performanțe:
client_header_timeout & client_body_timeout – Timpul în care serverul nginx va aștepta să fie trimis un antet sau corp al clientului după o solicitare.

keepalive_timeout – Durata conexiunii Keepalive rămâne deschisă, după care nginx închide conexiunea clientului.

send_timeout – Timeout pentru trimiterea unui răspuns către client. Dacă clientul nu primește răspunsul serverului în această durată, nginx încheie conexiunea.

Următoarele sunt valorile recomandate: (în secțiunea http)

client_body_timeout 12;
client_header_timeout 12;
keepalive_timeout 15;
send_timeout 10;

7. Jurnal de acces

Logarea este foarte critică pentru gestionarea, depanarea și auditul sistemelor. Cu toate acestea, logarea și stocarea unor bucăți mari de date consumă o mare parte din resursele sistemului, utilizează mai multe cicluri CPU / IO, reducând astfel performanța serverului. pentru accesarea jurnalului, acesta înregistrează fiecare cerere nginx, consumând astfel o mulțime de resurse CPU care reduc performanța nginx.

Există două soluții pentru a face acest lucru.

  1. Dezactivați complet înregistrarea accesului
    access_log off;
  2. Dacă este obligatoriu să ai logare de acces, atunci activează buffering-ul de jurnal de acces. Aceasta permite Nginx să tamponeze o serie de intrări de jurnal și să le scrie în fișierul jurnal împreună odată, în loc să efectueze operațiunea de scriere diferită pentru fiecare intrare de jurnal.
    access_log /var/log/nginx/access.log buffer principal = 16k

Puteți utiliza, de asemenea, soluții open source pentru logare, cum ar fi stiva ELK și altele care vor centraliza toate jurnalele pentru sistemul dvs..

Concluzie

După ce aveți un server web nginx optimizat, următorul pas este monitorizarea serverului și modificarea setărilor cu timpul pe măsură ce traficul către acumularea serverului sau alte factori au loc. Prin urmare, valorile recomandate nu sunt cele mai bune pentru toate circumstanțele, ci doar în timpul dezvoltării și în timpul traficului redus sau al traficului mediu către serverul web. Puteți crește valorile pas cu pas în timp ce faceți testarea performanței pentru a verifica orice îmbunătățire.

Dacă nu vedeți nicio îmbunătățire, lăsați valoarea implicită. În mod colectiv, valorile modificate ale diferiților parametri îmbunătățesc imensitatea performanței nginx.

Alte considerente pe care le-ați putea face pentru a îmbunătăți performanțele serverului dvs. web, în ​​special atunci când se acumulează traficul este echilibrarea încărcării, scalarea automată, disponibilitatea ridicată, pentru a menționa câteva. Dacă toate celelalte nu reușesc, luați în considerare trecerea la un nou furnizor VPS cu hardware și software mai performante și mai actualizate (aveți nevoie de ajutor? Accesați lista celor mai bune servicii de găzduire VPS HostAdvice)

Consultați aceste 3 servicii VPS de top:

A2 Gazduire

Pret de inceput:
$ 5.00


Fiabilitate
9.3


Prețuri
9


Ușor de utilizat
9.3


A sustine
9.3


Caracteristici
9.3

Citește recenziile

Accesați Găzduirea A2

ScalaHosting

Pret de inceput:
$ la ora 12.00


Fiabilitate
9.4


Prețuri
9.5


Ușor de utilizat
9.5


A sustine
9.5


Caracteristici
9.4

Citește recenziile

Accesați ScalaHosting

Hostinger

Pret de inceput:
$ 3,95


Fiabilitate
9.3


Prețuri
9.3


Ușor de utilizat
9.4


A sustine
9.4


Caracteristici
9.2

Citește recenziile

Vizitați Hostinger

Articole legate de modalități conexe

  • Cum se instalează WordPress cu Nginx & Redis
    incepator
  • Cum se instalează WordPress cu Nginx & Redimensionați un VPS CentOS sau un server dedicat
    intermediar
  • Cum se întărește Nginx Web Server pe un Ubuntu 18.04 VPS sau Server Dedicat
    expert
  • Cum se instalează LEMP (Linux, Nginx, MySQL, PHP) Stack pe CentOS 7 VPS sau Server Dedicat
    intermediar
  • Cum să configurați Nginx și Apache împreună pe același server VPS Ubuntu sau server dedicat
    intermediar
Jeffrey Wilson Administrator
Sorry! The Author has not filled his profile.
follow me