Nginx Proxy Manager

Nginx Proxy Manager (NginxPM) corre como contenedor Docker directamente en el host Proxmox y actúa como proxy inverso para todas las instancias de Home Assistant, gestionando también los certificados SSL (ver Configuración de DNS).

Despliegue

mkdir -p /opt/stack

Crear /opt/stack/docker-compose.yml:

services:
  app:
    image: jc21/nginx-proxy-manager:latest
    restart: unless-stopped
    ports:
      - "80:80"
      - "443:443"
      - "81:81"
    volumes:
      - ./data:/data
      - ./letsencrypt:/etc/letsencrypt

  # ver configuración completa en dnsmasq.html
  dnsmasq:
    image: 4km3/dnsmasq:2.85-r2
    container_name: dnsmasq-router
    restart: unless-stopped
    network_mode: host
    cap_add:
      - NET_ADMIN
    volumes:
      - ./dnsmasq/config/dnsmasq.conf:/etc/dnsmasq/dnsmasq.conf:ro
      - ./dnsmasq/hosts.d:/etc/dnsmasq/hosts.d
      - dnsmasq-leases:/var/lib/dnsmasq

volumes:
  dnsmasq-leases:

Iniciar:

cd /opt/stack && docker compose up -d

Acceso al panel de administración

Acceder a http://<IP_PUBLICA>:81. En el primer acceso aparece un formulario de registro para crear la cuenta de administrador.

Note

En GCP el puerto 81 no está abierto en el firewall. En lugar de modificar las reglas de firewall, se puede crear un túnel SSH que reenvía el puerto local al servidor remoto:

gcloud compute ssh <nombre de la instancia> --zone=europe-west1-b -- -L 8181:localhost:81 -N

Mientras el túnel esté activo, el panel de administración estará disponible en http://localhost:8181.

Proxy para la interfaz web de Proxmox

Proxmox escucha en https://172.17.0.1:8006 (gateway Docker → host).

En Proxy Hosts → editar host de Proxmox:

Pestaña Custom Nginx Configuration:

proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_buffering off;
proxy_read_timeout 3600;
Warning

Usar $http_host en lugar de $host — Proxmox valida el token CSRF contra el host original y sin esto da error 401.

Añadir un nuevo Proxy Host

  1. Ir a Proxy Hosts → Add Proxy Host
  2. Rellenar:
  3. Pestaña SSL:
  4. Guardar.

Ver también: OpenWRT + Nginx Proxy Manager