Handleidingen

Reverse proxy met https: Nginx Proxy Manager of Caddy

Zodra je meer dan een paar diensten draait (Home Assistant, Jellyfin, een NAS), wil je niet meer onthouden dat die op 192.168.1.20:8123 en 192.168.1.30:8096 staan. Met een reverse proxy krijgen ze een gewone naam, zoals ha.jouwdomein.nl, een geldig https-certificaat en één plek om dat te beheren.

Wat heb je nodig?

  • Een domeinnaam (een paar euro per jaar) waarvan je de DNS kunt beheren.
  • Een computer of container voor de proxy, met een vast IP-adres.
  • Als je diensten van buiten wilt bereiken: poort 80 en 443 doorgestuurd naar de proxy. Doe dat alleen voor diensten die echt publiek moeten, en liever niet zonder extra beveiliging. Voor gebruik van buiten met minder risico kies je een vpn.
  • Wil je alleen binnen https? Gebruik dan de “DNS-challenge” van je DNS-aanbieder om certificaten te krijgen, zonder dat poort 80 open hoeft, en laat je eigen DNS (zoals Pi-hole) de naam naar de proxy laten wijzen.

Optie 1: Nginx Proxy Manager

Een webpagina waarmee je alles aanklikt. Zet dit in een compose.yaml en start met docker compose up -d:

services:
  npm:
    image: jc21/nginx-proxy-manager:latest
    restart: unless-stopped
    ports:
      - "80:80"
      - "81:81"
      - "443:443"
    volumes:
      - ./data:/data
      - ./letsencrypt:/etc/letsencrypt
  1. Open http://IP-adres:81 en maak een beheerdersaccount (oudere versies beginnen met admin@example.com en wachtwoord changeme; verander dat meteen).
  2. Kies Hosts → Proxy Hosts → Add Proxy Host. Vul de naam in (ha.jouwdomein.nl), het adres en de poort van de dienst, en zet Websockets Support aan.
  3. Op het tabblad SSL vraag je een nieuw Let’s Encrypt-certificaat aan en zet je Force SSL aan.

Optie 2: Caddy

Caddy regelt certificaten zelf en je configuratie is een klein bestand. Zet dit in Caddyfile:

ha.jouwdomein.nl {
    reverse_proxy 192.168.1.20:8123
}

jellyfin.jouwdomein.nl {
    reverse_proxy 192.168.1.30:8096
}

En start Caddy in Docker met je Caddyfile en een map voor de gegevens:

services:
  caddy:
    image: caddy:2
    restart: unless-stopped
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./Caddyfile:/etc/caddy/Caddyfile
      - ./caddy-data:/data
      - ./caddy-config:/config

Caddy vraagt zelf de certificaten aan zodra de naam naar je adres wijst en de poorten bereikbaar zijn.

Home Assistant achter een proxy

Home Assistant weigert verbindingen via een proxy tenzij je dat toestaat. Zet in configuration.yaml het adres van je proxy:

http:
  use_x_forwarded_for: true
  trusted_proxies:
    - 192.168.1.10

Start Home Assistant daarna opnieuw. Gebruik hier het IP-adres van de proxy, niet je hele netwerk.

Controleren en problemen oplossen

  • Controleer je certificaat met onze SSL-certificaatcheck en kijk met de HTTP-headers-tool of http netjes doorverwijst naar https en welke beveiligingsheaders je site meestuurt.
  • 502 Bad Gateway: de proxy kan de dienst niet bereiken. Controleer het adres, de poort en of de dienst draait.
  • Certificaat mislukt: wijst de naam naar het juiste adres (check met de DNS-lookup) en zijn poort 80 en 443 bereikbaar?
  • Websockets haperen: zet de optie voor websockets aan, anders werkt bijvoorbeeld het Home Assistant-dashboard slecht.

Veiligheid

  • Zet alleen diensten online die je echt van buiten nodig hebt, en houd ze bijgewerkt.
  • Gebruik sterke wachtwoorden en, waar het kan, een tweede stap (2FA).
  • Laat beheerpagina’s (zoals poort 81 van Nginx Proxy Manager) niet van buiten bereikbaar zijn.

Bronnen en bronvermelding

Dit artikel is in eigen woorden geschreven. Meer lezen: