Nginx este adesea folosit doar pentru încărcarea fișierelor. De exemplu, găzduirea fișierelor. Ce ar trebui să caut pentru a optimiza Nginx pentru ieșirea de fișiere mari?
Ce ar trebui să configurez?
Deoarece serverul Web funcționează în mod normal, la transferarea unui fișier:- deschide fișierul sursă (pe disc)
- fișierul destinație este deschis (conexiune la rețea)
- blocul de date se citește, se copiază în tampon și se trimite la destinație până la sfârșitul fișierului
- ambele fișiere sunt închise
tcp_nopush
Autorizatiile Directiva sau interzice utilizarea opțiunii TCP_NOPUSH în FreeBSD sau TCP_CORK pe Linux. „Tcp_nopush pe“ util pentru sendfile (), Nginx, în acest caz, emite datele un pachet complet. După ce întreaga interogare este procesată, TCP_CORK / TCP_NOPUSH off, având ca rezultat descărcarea parțială a ultimului pachet.
TCP_NODELAY
Această directivă permite sau interzice opțiunea de utilizare TCP_NODELAY (starea de tranziție a compusului în keepalive). Înainte de a continua cu conexiuni la ieșiri Nginx KeepAlive apeluri de date (writev) porțiuni suficient de mari pentru a umple pachetul ( „postpone_output 1460“), astfel încât datele trebuie să meargă fără întârziere și TCP_NODELAY nu este necesar. Dar cu ultimul pachet incomplet poate exista o întârziere ușoară dacă conexiunea nu se închide. Pentru aceasta, trebuie să activați TCP_NODELAY:
Această opțiune vă permite să activați citirea directă fără a accesa memoria cache a sistemului de operare. Acest lucru este util pentru fișierele mari, deoarece cache-ul de operare pentru ele este ineficient. Opțiunea vă permite să setați dimensiunea minimă pentru a activa modul de citire directă:
Din moment ce avem de-a face cu fișiere statice, și este posibil ca același utilizator poate solicita în mod repetat același fișier, trebuie să activați memoria cache a clientului. Acest lucru se realizează prin setarea opțiunii "expires max", care va trimite anteturile necesare în browser:
limit_rate
# Noi limităm viteza de reacție la 196Kbps
Această opțiune funcționează numai într-o singură interogare, nu în client. Dacă doriți să impuneți o restricție clientului, trebuie să utilizați o variabilă:
În Nginx, este de asemenea posibil să setați pragul de recul, după care restricția va intra în vigoare. De asemenea, este logic ca media streaming (în acest caz, prima parte specificată să fie dată fără restricții):
# Viteza de restricție va fi suprapusă după 1 Mb
Fișierele solicitate foarte des au sens în memorarea în cache.
Cel mai important
O setare mică pentru Nginx special pentru încărcarea fișierelor va face posibilă utilizarea mai bună a resurselor fiecărui server.