Webhosting

Nginx

Definitie

Nginx (uitgesproken als "engine-x") is een opensource-webserver met een event-driven architectuur, die ook dient als reverse proxy, load balancer en HTTP-cache. Hij verbruikt weinig geheugen bij veel gelijktijdige verbindingen, geeft PHP-scripts door aan PHP-FPM en leest geen .htaccess-bestanden.

Nginx, Webhosting

Nginx is gemaakt om een groot aantal gelijktijdige verbindingen aan te kunnen en heeft zich gevestigd als hoofdwebserver of als reverse proxy voor andere servers. WordPress noemt hem samen met Apache als een van de robuustste servers om het CMS te hosten.

Hoe Nginx werkt

Volgens de documentatie start Nginx een masterproces en meerdere workerprocessen. De master leest en controleert de configuratie en beheert de workers; die verwerken de verzoeken, volgens een event-driven model. In plaats van een proces of thread per verbinding te reserveren, volgt elke worker veel verbindingen tegelijk en reageert hij zodra er één klaar is. Het aantal workers wordt vaak afgestemd op het aantal processorcores.

De configuratie staat in het bestand nginx.conf en de bestanden die het inlaadt. Een wijziging werkt pas na herladen (nginx -s reload): de master controleert de nieuwe configuratie, start nieuwe workers en stopt de oude rustig, of houdt de oude configuratie aan als de nieuwe een fout bevat.

Nginx en PHP

Nginx voert PHP niet zelf uit. Hij geeft de scripts met de directive fastcgi_pass door aan een FastCGI-server, bijna altijd PHP-FPM. De communicatie loopt via een Unix-socket of een lokale poort; de PHP-documentatie waarschuwt dat een FastCGI-eindpunt dat open staat naar het netwerk het uitvoeren van willekeurige code mogelijk maakt, vandaar de voorkeur voor een socket als alles op dezelfde machine draait.

Schema van een WordPress-verzoek met Nginx en PHP-FPM: de browser vraagt een pagina op, een Nginx-worker volgt met een event-loop veel verbindingen tegelijk, try_files levert een bestaand bestand zoals een afbeelding, CSS of JS meteen en stuurt anders door naar index.php, fastcgi_pass geeft het PHP-verzoek via een Unix-socket of een lokale poort door aan PHP-FPM, en een worker uit de pool voert WordPress uit en stuurt de pagina terug.
Nginx levert de statische bestanden zelf en laat PHP over aan PHP-FPM.

Geen .htaccess

Dit is het verschil dat het meest verrast als je van Apache komt: de documentatie van WordPress benadrukt dat Nginx geen configuratiebestand per map heeft zoals de .htaccess. Alles wordt op serverniveau ingesteld, en WordPress kan zijn rewrite-regels niet zelf schrijven. Voor de permalinks is deze regel essentieel:

location / {
    try_files $uri $uri/ /index.php?$args;
}

Hij levert het opgevraagde bestand of de opgevraagde map als die bestaat, en geeft het verzoek anders door aan index.php, met behoud van de URL-parameters. Zonder deze regel geven aangepaste permalinks 404-fouten.

Video: “Apache vs NGINX” (IBM Technology, in het Engels)

Voor WordPress

  • Regels van plugins worden niet vanzelf toegepast: een plugin die in de .htaccess schrijft (cache, beveiliging, redirects), heeft op Nginx geen enkel effect. Je moet de regels naar de configuratie overzetten, of de hoster vragen dat te doen.
  • Bescherm het beheer en gevoelige bestanden met location-blokken, zoals onze gids laat zien om wp-admin op serverniveau te beschermen.
  • Achter een CDN of proxy stel je de module real_ip in om het adres van de bezoeker terug te krijgen; zie Cloudflare voor WordPress.
  • Herlaad na elke wijziging en test de configuratie eerst met nginx -t.

WP Masquerade werkt op Nginx zonder serverregels, met twee uitzonderingen: de bestandsaliassen van de Pro-versie, waarvoor de plugin het blok genereert dat je kopieert, en één regel die de map van de plugin verbergt, zoals de pagina compatibiliteit met hosters en caches uitlegt.

Veelgemaakte fouten

Beveiligingen in een .htaccess zetten op een Nginx-server en denken dat de site beschermd is; PHP-FPM laten luisteren op een adres dat vanaf internet bereikbaar is; ?$args vergeten in try_files, waardoor adressen met parameters niet meer werken. Veel hosters zetten Nginx ook vóór Apache: in dat geval werkt de .htaccess weer voor de verzoeken die naar Apache worden doorgestuurd.

Verder lezen

  • Artikel Cloudflare voor WordPress: echt IP-adres, WAF en fouten om te vermijden
  • Pagina Compatibel met hosting en cache

Bronnen

  1. nginx: Beginner’s Guide (externe link, opent in een nieuw tabblad)
  2. WordPress Advanced Administration: Nginx (externe link, opent in een nieuw tabblad)
  3. PHP Manual: FPM configuration (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.