4.4 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
python scripts/configure_public_url.py \
https://vacatureradar.itworx.tech \
--env-file /mnt/user/appdata/VacatureRadar/.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/.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-Securityzodra HSTS actief is;X-Content-Type-Options: nosniff;X-Frame-Options: DENY;Content-Security-Policy;- standaard
X-Robots-Tag: noindex, nofollow, noarchivevoor 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:
- zet de Proxy Host tijdelijk op access-list/VPN-only of offline;
- herstel de vorige
.envuit de beheerde back-up; - hermaak de container;
- controleer intern
/health/ready/; - publiceer pas opnieuw nadat login en CSRF via HTTPS slagen.