adminslog/dokus/webserver/nginx-proxy-manager-setup.md

3.2 KiB

NGINX Proxy Manager als Reverse Proxy für Node.js-Apps

Letzte Änderung: 27.06.2025



Ziel

  • Node.js-Apps im LAN per HTTPS erreichbar machen
  • Let's Encrypt Zertifikate automatisch verwalten
  • Einfaches Management über Web-GUI
  • Kein manuelles Bearbeiten von NGINX-Konfigurationen

Voraussetzungen

  • Server mit Debian 12 oder kompatibel
  • Docker und Docker Compose installiert
  • Ports 80/443 sind frei
  • Fritzbox leitet Ports 80/443 auf den Server weiter
  • Domain zeigt per A-Record auf die öffentliche IP

Verzeichnisstruktur

Empfohlenes Setup unter /opt/nginx-proxy-manager/:

/opt/nginx-proxy-manager/
 ├── docker-compose.yml
 ├── data/           # Konfigurationsdaten von NGINX Proxy Manager
 └── letsencrypt/    # SSL-Zertifikate

docker-compose.yml

version: '3'

services:
  nginx-proxy-manager:
    image: 'jc21/nginx-proxy-manager:latest'
    container_name: nginx-proxy-manager
    restart: unless-stopped

    ports:
      - '80:80'     # HTTP
      - '443:443'   # HTTPS
      - '81:81'     # Admin UI

    volumes:
      - ./data:/data
      - ./letsencrypt:/etc/letsencrypt

    environment:
      - TZ=Europe/Berlin

Starten

cd /opt/nginx-proxy-manager
docker compose up -d

Zugriff auf Web-GUI

  • URL: http://<SERVER-IP>:81
  • Standard-Zugang:
    • Benutzer: admin@example.com
    • Passwort: changeme
  • Zugangsdaten nach erstem Login ändern.

Proxy-Host anlegen

  1. „Proxy Hosts“ → „Add Proxy Host“
  2. Domain Name: app1.domain.de
  3. Scheme: http
  4. Forward Hostname/IP: 192.168.178.11
  5. Forward Port: 3000
  6. SSL aktivieren → „Request a new SSL Certificate“ → Let's Encrypt

Ergebnis

  • Externe Anfragen an app1.domain.de werden via HTTPS von NGINX Proxy Manager entgegengenommen.
  • Intern wird die Anfrage an 192.168.178.11:3000 (Node.js-App) weitergeleitet.
  • Zertifikate werden automatisch verwaltet.

Hinweise

Kein systemweiter NGINX mehr erforderlich.
Ports 80/443 werden vollständig vom Container belegt.
Einfach skalierbar für mehrere Domains und Apps.
Wartbar über die Weboberfläche, keine manuelle Konfigurationsarbeit.


Optional: Node.js-Apps als systemd-Service verwalten

Beispiel für eine Datei /etc/systemd/system/myapp.service:

[Unit]
Description=Meine Node.js App
After=network.target

[Service]
ExecStart=/usr/bin/node /opt/myapp/index.js
Restart=on-failure
User=www-data
Environment=NODE_ENV=production

[Install]
WantedBy=multi-user.target

Aktivieren und starten:

systemctl enable myapp
systemctl start myapp

Fertig

Dein Setup ist jetzt produktionsbereit.