Naar de hoofdinhoud

Inloggen verplicht maken op WordPress (voor staging/testomgevingen)

Hoe je een WordPress-site afschermt met de eigen WordPress-login, zodat alleen ingelogde gebruikers de frontend kunnen zien. Handig voor stagingomgevingen, sites in ontwikkeling, of klanten die hun site nog niet publiek willen tonen.

Wat doet deze configuratie?

Deze aanpassing wijzigt het location / blok in de Nginx-configuratie zodat:

  • Niet-ingelogde bezoekers automatisch worden doorgestuurd naar /wp-login.php.

  • Ingelogde WordPress-gebruikers (herkend aan de wordpress_logged_in_ cookie) de site normaal kunnen bezoeken.

  • /wp-admin en de loginpagina zelf altijd bereikbaar blijven — anders kan niemand inloggen.

De site blijft dus volledig functioneel voor ingelogde redacteuren en beheerders, maar is afgeschermd voor de buitenwereld.


Stap 1 — Open de Nginx-configuratie

De Nginx-configuratie staat in de nginx/ map op het volume van de site. Je kunt erbij via één van deze methoden (allemaal pakken hetzelfde bestand aan):

Toegangsmethode

Hoe

CloudShell

Webterminal in CloudPress — eenvoudigste optie

File Manager

Webbestandsbeheer in CloudPress

SSH

Verbind met de Bastion-container via de SSH-gegevens uit CloudPress

SFTP

Verbind met de Bastion-container via de SFTP-gegevens uit CloudPress

Navigeer naar de nginx/ map. In de Bastion-container staat die op: /home/sftpuser/apps/{containernaam}/wordpress/nginx/


Stap 2 — Controleer of er al een eigen site.conf bestaat

In de nginx/ map staat standaard site.conf.sample. Dit is een template - het systeem leest dit bestand niet, het dient alleen als referentie.

Pas zodra je een bestand site.conf aanmaakt (zonder de .sample extensie), wordt dat actief gebruikt door Nginx.

Controleer eerst of er al een site.conf bestaat:

  • Bestaat al → bewerk dat bestand. De klant heeft mogelijk al eerdere aanpassingen.

  • Bestaat nog niet → kopieer eerst de sample:

bash

  cp nginx/site.conf.sample nginx/site.conf

⚠️ Werk nooit in site.conf.sample zelf. Dat bestand wordt niet uitgelezen, dus je wijzigingen hebben geen effect.


Stap 3 — Pas het location / blok aan

Open nginx/site.conf en zoek dit blok:

nginx

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

Vervang het volledig door:

nginx

location / {
# Stuur niet-ingelogde bezoekers door naar de loginpagina,
# behalve voor /wp-admin (zodat inloggen en SSO blijven werken)
set $need_login 0;
if ($http_cookie !~* "wordpress_logged_in_") {
set $need_login 1;
}
if ($request_uri ~* "^/wp-admin") {
set $need_login 0;
}
if ($need_login = 1) {
return 302 /wp-login.php;
}
try_files $uri $uri/ /index.php?$args;
}

Sla het bestand op.


Stap 4 - Herstart de WordPress-container

Nginx leest de configuratie alleen opnieuw als de container herstart wordt. Doe dit vanuit CloudPress: ga naar de site en klik op Restart.


Stap 5 - Controleer of het werkt

  1. Open een incognito/privé venster (geen WordPress-cookies).

  2. Bezoek de homepage van de site.

  3. Je zou direct doorgestuurd moeten worden naar /wp-login.php.

  4. Log in en controleer of de site nu normaal werkt.


Hoe schakel je het weer uit?

Twee opties:

  • Volledig terug naar default: verwijder nginx/site.conf (de .sample blijft bestaan) en herstart de container. Nginx valt automatisch terug op de standaardconfiguratie.

  • Alleen dit blok terugzetten: vervang het aangepaste location / blok in site.conf weer door de originele drie regels (try_files $uri $uri/ /index.php?$args;) en herstart.


Veelvoorkomende problemen

Symptoom

Oorzaak

Oplossing

Wijziging heeft geen effect na herstart

Bewerkt in site.conf.sample in plaats van site.conf

Controleer met ls nginx/site.conf of het bestand zonder .sample bestaat

Redirect loop op /wp-login.php

De uitzondering voor /wp-admin ontbreekt of staat verkeerd

Controleer of het if ($request_uri ~* "^/wp-admin") blok aanwezig is

Site nog steeds publiek toegankelijk

Bunny CDN heeft de oude versie gecachet

Purge de CDN cache via CloudPress

502 / 500 na herstart

Syntaxfout in site.conf

Verwijder site.conf (terug naar default) en probeer opnieuw

Was dit een antwoord op uw vraag?