translation

Dit is een door AI vertaalde tekst.

뚠뚠멍의 생각들

Belangrijkste nginx-configuraties voor gebruik als webserver

Profielfoto

Samenvatting van de tekst door durumis AI

  • 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_buffers 8 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;                  # Buffering uitschakelen (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.






뚠뚠멍
뚠뚠멍의 생각들
뚠뚠멍
Websiteprestaties meten - PerformanceObserverOntdek hoe je de prestaties van je website kunt meten met PerformanceObserver en leer hoe je Web Core Vitals kunt verbeteren. We bespreken concrete methoden om de CLS, LCP, FCP en FID-metrics te optimaliseren.

September 24, 2024

Basisregels van CSS (Normale flow, BFC, IFC)Deze blogpost legt de basisregels van CSS uit, namelijk Normal flow, BFC en IFC, en biedt de kennis die nodig is voor het opbouwen van lay-outs en responsief design.

September 7, 2024

Mijn cross-browser problemen (vooral Safari)Dit artikel beschrijft cross-browser problemen (vooral in Safari) die zich voordeden tijdens de ontwikkeling van een mobiele website en hoe deze werden opgelost. Het behandelt problemen met het berekenen van de viewport hoogte, UI-verschuivingen door het

September 27, 2024

Cloud Run gebruiken voor het serveren van statische bestanden - 1Een blogpost over het gebruik van Google Cloud Run om statische bestanden te leveren. De focus ligt op redirects en het verbeteren van de prestaties.
두루미스 기술 블로그
두루미스 기술 블로그
두루미스 기술 블로그
두루미스 기술 블로그

September 4, 2024

Google Cloud Storage en Cloud Run gebruiken voor CDN-implementatie - 2Dit is het tweede artikel over het opzetten van een CDN met behulp van Google Cloud Storage en Cloud Run. We behandelen hoe u afbeeldingen en tekstbestanden kunt optimaliseren voor verzending en hoe u resources kunt distribueren over 8 regio's wereldwijd
두루미스 기술 블로그
두루미스 기술 블로그
두루미스 기술 블로그
두루미스 기술 블로그

September 6, 2024

[Niet-ICT'er, Ontwikkelaar worden] 14. Veelgestelde technische interviewvragen voor beginnende ontwikkelaars samengevatVeelgestelde technische vragen tijdens een sollicitatiegesprek voor beginnende ontwikkelaars (geheugengebieden, datastructuren, databases, etc.) zijn samengevat. Hopelijk helpt dit je bij de voorbereiding op je ontwikkelingsgesprek.
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자

April 3, 2024

[DB] Criteria voor het instellen van cacheDit artikel behandelt de criteria voor het instellen van databasecache en presenteert praktijkvoorbeelden. We bespreken hoe u gegevens die vaak worden gelezen maar zelden worden geschreven kunt cachen en hoe u de actualiteit kunt waarborgen via TTL-instel
제이온
제이온
제이온
제이온

April 25, 2024

Google Cloud Storage en Cloud Run gebruiken voor beeldoptimalisatie en synchronisatie - 3Deze blogpost legt uit hoe je Google Cloud Storage en Cloud Run kunt gebruiken om afbeeldingen te optimaliseren en te synchroniseren naar verschillende regio's. We behandelen de implementatie van functies voor het converteren, repliceren en verwijderen va
두루미스 기술 블로그
두루미스 기술 블로그
두루미스 기술 블로그
두루미스 기술 블로그

September 8, 2024

Phylaxis lanceert cloudoplossing 'WAAP' die firewall en CDN combineertPhylaxis heeft Phylaxis WAAP gelanceerd, een cloudbeveiligingoplossing die CDN en WAAP combineert. Deze oplossing biedt een lage prijs en een hoge DDoS-afweergraad, en ondersteunt diverse functies en een gratis abonnement.
스타트업 커뮤니티 씬디스 (SeenThis.kr)
스타트업 커뮤니티 씬디스 (SeenThis.kr)
스타트업 커뮤니티 씬디스 (SeenThis.kr)
스타트업 커뮤니티 씬디스 (SeenThis.kr)

May 27, 2024