We behandelen belangrijke nginx webserver-configuraties voor prestatieoptimalisatie, waaronder gzip-compressie, proxy_buffer-instellingen en worker- en keep-alive-instellingen.
Met name wordt de belangrijkheid benadrukt van gzip-compressie en proxy_buffer buffering voor het verminderen van de hoeveelheid verzonden data en het minimaliseren van de serverbelasting, en van worker-processen en keep-alive-instellingen voor het beheren van verbindingen.
Verschillende tests zijn uitgevoerd om de optimale configuratie voor uw serveromgeving te bepalen, en er worden voorzorgsmaatregelen gegeven voor een stabiele serverwerking.
Nginx is een open-source webserver en wordt vaak gebruikt als webserver of webproxy-server.
Met de juiste configuratie kan het statische content efficiënt leveren.
Hieronder beschrijf ik een aantal belangrijke configuratie-instellingen.
Enkele belangrijke instellingen met betrekking tot prestaties
1. gzip-compressie
Bij het laden van een website worden talloze bestanden zoals Javascript, afbeeldingen, HTML en CSS van de webserver ontvangen.
In plaats van deze content ongecomprimeerd te versturen, kan gzip-compressie worden gebruikt om de hoeveelheid verzonden data aanzienlijk te verminderen.
Dit resulteert in:
- Verminderde hoeveelheid data, wat leidt tot besparing op bandbreedte.
- Besparing op serverresources.
- Een snellere laadtijd voor de gebruiker.
Anderzijds kan het uitvoeren van gzip-compressie vóór het verzenden van de content leiden tot een hogere CPU-belasting op de server.
Het is essentieel om te testen welke soorten bestanden gecomprimeerd moeten worden, de compressieniveau en de minimale bestandsgrootte voordat de instellingen in productie worden genomen.
Hieronder volgen enkele instellingen met betrekking tot gzip.
gzip on; # gzip compressie inschakelen.
gzip_vary on; # Voegt Vary: Accept-Encoding toe aan de header.
gzip_proxied any; # Indien nginx als proxy server wordt gebruikt, comprimeert het de respons van de backend. (compressie voor geproxyde requests)
gzip_min_length 256; # Comprimeert alleen bestanden groter dan 256 bytes.
gzip_comp_level 5; # Compressieniveau van 1 tot 9. Hogere waarden leiden tot hogere CPU-belasting. 5 comprimeert ongeveer 50%.
gzip_types text/plain text/css text/xml application/json application/javascript;
// Geeft de content types aan die gecomprimeerd moeten worden.
* gzip_vary zorgt ervoor dat de content zowel in gecomprimeerde als ongecomprimeerde vorm kan worden verzonden, afhankelijk van of de client gzip ondersteunt. (Geeft aan dat verschillende versies van de content kunnen worden aangeboden, afhankelijk van de Accept-Encoding header in het client request.)
2. proxy_buffer instellingen
Nginx slaat de respons op in een buffer voordat deze naar de client wordt verzonden.
Wanneer de webserver een respons naar de client verzendt en de client langzaam is, moet de server wachten tot de data is verzonden. (netwerk bottle neck)
Dit houdt server resources in beslag. Om dit op te lossen, wordt een buffer gebruikt om de respons tijdelijk op te slaan, ongeacht de snelheid van de client. Dit levert de volgende voordelen op:
- Optimalisatie van de serverbelasting
- Verminderde netwerk bottle necks
location / {
proxy_pass serverurl;
# Proxy buffer instellingen
proxy_buffering on; # Schakelt buffering in.proxy_buffer_size 4k; # Stel de grootte van de buffer in.(voornamelijk voor headers).proxy_buffers8 4k; # Aantal en grootte van buffers per connectie(8 buffers van 4kb) proxy_busy_buffers_size 8k; # Maximale buffergrootte die kan worden gebruikt tijdens het verzenden van de respons naar de client
}
※ Als de buffergrootte te groot is ingesteld, kan dit leiden tot vertraging bij real-time data transmissie zoals text streaming. Daarom is testen essentieel. Dit is vooral belangrijk bij recente AI-diensten; controleer deze instelling als text streaming niet werkt.
3. worker en http instellingen
Workers zijn processen die client requests afhandelen. Het aantal workers per CPU-core kan worden geconfigureerd.
HTTP verwerkt doorgaans request - connectie - respons - connectie sluiten. Om resources te besparen bij meerdere requests, kan de client connectie in stand worden gehouden. Dit is de keep-alive instelling.
worker_processes auto; # Automatische instelling gebaseerd op het aantal beschikbare CPU-cores
worker_connections 1024; # Aantal connecties dat elke worker tegelijkertijd kan afhandelen
# Keep-alive instellingen
keepalive_timeout 65;
keepalive_requests 100;
server {
listen 80;
location / {
proxy_pass server url;
}
}
De reden om deze twee te combineren is als volgt:
Als de server 4 cores heeft, is het theoretische maximum aantal connecties 1024 * 4 = 4096.
(Dit kan afwijken afhankelijk van resources en netwerkverkeer.)
Wanneer 4096 clients tegelijkertijd verbonden zijn en 65 seconden alle keep-alive connecties gebruiken,
kan de 4097e gebruiker geen verbinding maken, wat kan leiden tot vertraging.
Onder de aanname van stabiele server resources door middel van auto-scaling, kan deze configuratie een indirecte invloed hebben op responsvertragingen tijdens piekperiodes.
4. Overige - location block
Sommige instellingen, zoals proxy buffer, kunnen per request URL worden toegepast.
* Keep-alive en andere instellingen worden toegepast op HTTP/Server niveau en kunnen niet per blok worden geconfigureerd.
server { listen 80; server_name example.com;
# Verwerking van de basis route(/)location/{ proxy_pass server url; # Buffering instellingen
proxy_buffering on; proxy_buffers 8 16k; proxy_buffer_size 32k; proxy_busy_buffers_size 64k;}# Verwerking van de /test route
location/test { proxy_pass server url2; # Buffering uitschakelen
proxy_buffering off; # Bufferinguitschakelen(respons direct verzenden)}}
Met bovenstaande instellingen kan de web performance worden geoptimaliseerd. Test grondig met verschillende testcases om de serverprestaties te optimaliseren!
* De gewijzigde nginx configuratie kan meestal zonder downtime worden toegepast, dus het is over het algemeen stabiel.