Nginx-configuratiegenerator

genereren Nginx Config

Een Nginx-configuratie vanaf nul schrijven betekent dat je elke regel proxy_set_header en elk MIME-type dat gzip moet comprimeren uit je hoofd kent, en dat je het verschil ziet tussen try_files $uri/ /index.php?$args en de variant die de routing stilletjes sloopt. Deze generator vraagt om het domein, de upstream, de PHP-handler en de paden naar je SSL-bestanden, en levert daarna een server block op met verstandige standaardwaarden voor TLS, HTTP/2, caching van statische bestanden en compressie.

Zo genereer je jouw server block

  1. 1

    Kies een preset

    Statische site, PHP-FPM (Laravel, WordPress), een reverse proxy voor Node.js of een simpele 301-redirect.

  2. 2

    Vul het domein in

    Neem de volledige server_name-lijst op, meestal de variant met en zonder www.

  3. 3

    Stel de SSL-gegevens in

    Verwijs naar je fullchain- en privkey-bestanden, of sla deze stap over als je alleen HTTP gebruikt.

  4. 4

    Pas de upstream aan

    Poort, socketpad of backend-URL voor situaties met proxy_pass.

  5. 5

    Kopieer en zet live

    Zet de uitvoer in /etc/nginx/sites-available, voer nginx -t uit en herlaad Nginx.

Hoe een goed server block eruitziet

Een moderne virtuele host in Nginx bestaat meestal uit deze onderdelen:

Onderdeel Functie
listen 443 ssl http2 Accepteert HTTPS met HTTP/2 ingeschakeld
ssl_certificate + ssl_certificate_key Wijst het TLS-certificaat en de privésleutel aan
ssl_protocols TLSv1.2 TLSv1.3 Zet oude TLS-versies buitenspel
gzip on + typenlijst Comprimeert tekst/HTML/JSON/JS/CSS tijdens het uitleveren
expires-headers voor statische bestanden Beperkt herhaalde verzoeken van terugkerende bezoekers
try_files Stuurt door naar een front controller (PHP, Laravel enzovoort)
HSTS + beveiligingsheaders Dwingt de browser om TLS te blijven gebruiken

De basis van een reverse proxy

Voor Node.js-, Python- en Ruby-apps die achter Nginx draaien:

location / {
    proxy_pass http://127.0.0.1:3000;
    proxy_http_version 1.1;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
}

X-Forwarded-For vergeten is de klassieke manier om de echte IP-adressen van bezoekers kwijt te raken in je applicatielogs.

Veelgemaakte fouten

  • Geen fallback voor server_name. Als geen enkele naam overeenkomt, gebruikt Nginx het eerste server block als standaard. Zet er een catch-all server_name _-block bij dat 444 teruggeeft, zodat aanvallen via de Host-header geen kans krijgen.
  • Verkeerde volgorde van het certificaat. Het bestand ssl_certificate moet de volledige keten bevatten (fullchain: het servercertificaat plus de tussenliggende certificaten), niet alleen het servercertificaat.
  • Te gretig cachen. expires 1y meesturen voor /index.html maakt elke volgende release onzichtbaar. Voorzie in plaats daarvan de URL’s van statische bestanden van een versienummer.
  • Herladen zonder test. Voer altijd eerst nginx -t uit en pas daarna systemctl reload nginx: één syntaxfout haalt de hele site offline.

Veelgestelde vragen

HTTP/2 is stabiel en wordt breed ondersteund vanaf Nginx 1.25. HTTP/3 (QUIC) is er vanaf dezelfde versie, maar nog als experimentele functie. Zet voor een productieconfiguratie vandaag HTTP/2 aan en voeg desgewenst HTTP/3 toe met de directives http3 en quic.

De conventie is /etc/ssl/certs/ voor publieke ketens en /etc/ssl/private/ voor privésleutels. Let’s Encrypt zet alles onder /etc/letsencrypt/live/domain/. Volg het pad dat je verlengingstool verwacht.

Ja, voor vrijwel elke site. Voeg een apart server block op poort 80 toe dat 301 https://$host$request_uri teruggeeft. In combinatie met HSTS wordt dat HTTP-block na het eerste verzoek nauwelijks nog aangesproken.

Voer sudo nginx -t uit om de configuratie te controleren zonder te herladen. Verschijnt “syntax is ok” en “test is successful”, herlaad dan met sudo systemctl reload nginx. Gebruik in productie nooit restart: herladen wisselt de configuratie zonder het verkeer te onderbreken.

Gerelateerde tools

Tool beschikbaar in andere talen