Files
VacatureRadar/docs/operations/NGINX_PROXY_MANAGER.md
T
Jens 7caea3a1ee
deploy / deploy (push) Canceled after 0s
demo mode
2026-07-27 23:38:37 +02:00

4.5 KiB

Nginx Proxy Manager en publiek HTTPS-domein

Deze handleiding publiceert VacatureRadar achter Nginx Proxy Manager zonder de Django-container rechtstreeks op internet bloot te stellen.

Waarom DisallowedHost verschijnt

Django weigert onbekende Host-headers bewust. Een publieke hostnaam moet daarom expliciet overeenkomen met:

  • PUBLIC_BASE_URL;
  • DJANGO_ALLOWED_HOSTS;
  • DJANGO_CSRF_TRUSTED_ORIGINS.

De applicatie leidt de host en CSRF-origin automatisch af uit PUBLIC_BASE_URL, maar de expliciete lijsten blijven ondersteund voor LAN- en beheerhosts.

Een publieke Django-debugpagina is een afzonderlijk beveiligingsprobleem. Gebruik achter Nginx altijd DJANGO_DEBUG=0; debugpagina's tonen interne paden en implementatiedetails.

VacatureRadar configureren

Voer dit uit in de huidige bronmap op Unraid:

cd /mnt/user/appdata/vacatureradar/source
python scripts/configure_public_url.py \
  https://vacatureradar.itworx.tech \
  --env-file /mnt/user/appdata/vacatureradar/source/.env \
  --cache-url redis://127.0.0.1:6379/1

De helper:

  • bewaart bestaande secrets en databasewachtwoorden;
  • zet DJANGO_DEBUG=0;
  • voegt de host en CSRF-origin toe;
  • activeert secure cookies en HTTPS-redirect;
  • zet een conservatieve HSTS-periode;
  • activeert reverse-proxyherkenning;
  • maakt de gastdemo alleen-lezen;
  • gebruikt Redis voor gedeelde rate limiting en readiness;
  • schrijft het bestand atomair met modus 0600.

Hermaak daarna de container. Een gewone restart laadt gewijzigde environmentvariabelen niet altijd opnieuw:

docker compose -f docker-compose.unraid.yml up -d --build --force-recreate

Voor een andere omgeving kan deployment/production.env.example als checklist worden gebruikt.

Proxy Host in Nginx Proxy Manager

Gebruik voor de Proxy Host:

Instelling Waarde
Domain Names vacatureradar.itworx.tech
Scheme http
Forward Hostname / IP het LAN-IP of de Docker-hostnaam van VacatureRadar
Forward Port 1226
Cache Assets uit, tenzij expliciet getest
Block Common Exploits aan
Websockets Support niet vereist

Op het tabblad SSL:

  • vraag een geldig certificaat aan;
  • activeer Force SSL;
  • activeer HTTP/2;
  • activeer HSTS pas nadat HTTPS correct werkt;
  • activeer HSTS subdomains alleen wanneer alle subdomeinen HTTPS ondersteunen.

Nginx Proxy Manager stuurt de noodzakelijke proxyheaders normaal al door. Gebruik bij een aangepaste configuratie minstens:

proxy_set_header Host $host;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

Overschrijf deze headers aan de proxyzijde; laat een internetclient ze niet vrij bepalen.

Correcte client-IP-rate-limiting

VacatureRadar vertrouwt X-Forwarded-For alleen wanneer de directe afzender in TRUSTED_PROXY_CIDRS staat. Zonder deze instelling blijft rate limiting veilig op het proxy-IP werken, maar worden bezoekers niet individueel onderscheiden.

Bepaal het proxy-IP of Docker-netwerk en voeg alleen dat bereik toe, bijvoorbeeld:

python scripts/configure_public_url.py \
  https://vacatureradar.itworx.tech \
  --env-file /mnt/user/appdata/vacatureradar/source/.env \
  --cache-url redis://127.0.0.1:6379/1 \
  --trusted-proxy-cidr 172.18.0.0/16

Gebruik geen brede private range zoals 10.0.0.0/8 of 172.16.0.0/12 zonder aantoonbare noodzaak.

Validatie

Controleer eerst intern:

curl -fsS http://127.0.0.1:1226/health/live/
curl -fsS http://127.0.0.1:1226/health/ready/

Controleer daarna publiek:

curl -I https://vacatureradar.itworx.tech/
curl -fsS https://vacatureradar.itworx.tech/robots.txt

Verwacht:

  • geen DisallowedHost;
  • geen Django-debugpagina;
  • een redirect naar login of HTTP 200 na authenticatie;
  • Strict-Transport-Security zodra HSTS actief is;
  • X-Content-Type-Options: nosniff;
  • X-Frame-Options: DENY;
  • Content-Security-Policy;
  • standaard X-Robots-Tag: noindex, nofollow, noarchive voor een persoonlijke installatie.

Controleer ook een echte login, logout en één CSRF-beschermde actie. Alleen een succesvolle GET bewijst niet dat proxy-HTTPS en CSRF correct zijn.

Terugdraaien

Bij een probleem:

  1. zet de Proxy Host tijdelijk op access-list/VPN-only of offline;
  2. herstel de vorige .env uit de beheerde back-up;
  3. hermaak de container;
  4. controleer intern /health/ready/;
  5. publiceer pas opnieuw nadat login en CSRF via HTTPS slagen.