Webhosting

nginx.conf

Definitie

nginx.conf is het hoofdconfiguratiebestand van de webserver Nginx. Het is opgebouwd uit geneste blokken die contexten heten (events, http, server, location) en die de gehoste sites beschrijven, de adressen waarop wordt geluisterd, de verwerking van elk pad en het doorgeven van PHP-scripts aan PHP-FPM. Voor de hele server vervangt het de .htaccess-bestanden van Apache.

nginx.conf, Webhosting

Waar Apache zijn configuratie verspreidt over .htaccess-bestanden in de mappen van de site, centraliseert Nginx alles. Volgens de documentatie heet het bestand nginx.conf en staat het in /etc/nginx, /usr/local/nginx/conf of /usr/local/etc/nginx. Het laadt vaak andere bestanden in, één per site, die afhankelijk van de distributie in conf.d/ of sites-available/ staan.

Hoe nginx.conf is opgebouwd

Het bestand bestaat uit directives. Een eenvoudige directive eindigt op een puntkomma; een blokdirective bevat andere directives tussen accolades, en heet een context als er andere directives in kunnen. Wat buiten elk blok staat, hoort bij de hoofdcontext (main), die events en http bevat; server staat in http, en location in server.

Schema van de contexten van nginx.conf, van buiten naar binnen: main voor de algemene directives zoals worker_processes, de gebruiker en de foutlogs; events voor het afhandelen van verbindingen door de workers; http voor de instellingen die voor alle sites gelden, zoals MIME-types, compressie en includes; server voor één site met listen 443 ssl, server_name en het certificaat; location voor één pad, met try_files voor de permalinks en fastcgi_pass naar PHP-FPM voor de .php-bestanden.
De configuratie van Nginx zit in elkaar als matroesjka's: main, dan http, dan server, dan location.

Dit is de kern van een WordPress-site, met PHP-FPM luisterend op een socket:

server {
    listen 443 ssl;
    server_name voorbeeld.nl;
    root /var/www/voorbeeld;
    index index.php;
    location / {
        try_files $uri $uri/ /index.php?$args;
    }
    location ~ \.php$ {
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_pass unix:/run/php/php-fpm.sock;
    }
}

De volgorde van de location-blokken

Dit is de meest voorkomende bron van fouten. Volgens de documentatie zoekt Nginx eerst een exacte overeenkomst (=), die het zoeken stopt. Daarna onthoudt hij het langste passende prefix; heeft dat prefix ^~, dan blijft hij daarbij. Anders test hij de reguliere expressies (~, hoofdlettergevoelig, en ~*, niet hoofdlettergevoelig) in de volgorde van het bestand, en de eerste die past, wint. Pas als er geen enkele overeenkomt, valt hij terug op het onthouden prefix. Praktisch gevolg: een blokkeerregel die als gewoon prefix is geschreven, kan worden omzeild door het blok ~ \.php$.

Testen en herladen

nginx -t controleert de syntaxis en de toegang tot de genoemde bestanden, zonder iets toe te passen. nginx -s reload past daarna de nieuwe configuratie toe: het masterproces controleert haar, start nieuwe workers en stopt de oude zodra hun lopende verzoeken klaar zijn; bij een fout houdt het de oude aan.

Video: “Learn Proper NGINX Configuration Context Logic” (NGINX, in het Engels)

Voor WordPress

  • Geen enkele plugin kan nginx.conf aanpassen: regels die een plugin in een .htaccess zou schrijven, moeten met de hand of door de hoster worden overgenomen.
  • Blokkeer gevoelige bestanden met exacte locations of reguliere expressies die vóór het PHP-blok staan: back-ups, .git, .env, debug.log, zoals in ons artikel over blootgestelde bestanden.
  • Beperk het beheer op IP of met HTTP-authenticatie, volgens onze gids om wp-admin aan de serverkant te beschermen.
  • WP Masquerade heeft nginx.conf alleen nodig voor de bestandsaliassen van de Pro-versie, waarvan het het blok toont dat je in het server-blok kopieert, en voor één regel die zijn map verbergt: de pagina compatibiliteit met hosters en caches geeft deze regels. Test met nginx -t voordat je herlaadt.

Verder lezen

  • Pagina Compatibel met hosting en cache

Bronnen

  1. nginx: Beginner’s Guide (externe link, opent in een nieuw tabblad)
  2. nginx: Module ngx_http_core_module (location) (externe link, opent in een nieuw tabblad)
  3. nginx: Command-line parameters (externe link, opent in een nieuw tabblad)
  4. WordPress Advanced Administration: Nginx (externe link, opent in een nieuw tabblad)

Alle definities

WordPress-beveiliging, zonder ruis

Eén e-mail wanneer het ertoe doet: nieuw waargenomen aanvallen, updates van de plugin en praktische gidsen. Geen spam, afmelden met één klik.

Begin gratis, stap over op Pro wanneer je eraan toe bent

De gratis versie verbergt WordPress al en verplaatst de inlogpagina. Pro voegt aliassen, tweestapsverificatie en bewaking toe.