Home Assistant
Come configurare NGINX Reverse Proxy per Home Assistant
Configura NGINX come reverse proxy HTTPS per Home Assistant con WebSocket, Let’s Encrypt e trusted_proxies corretti.
NGINX Reverse Proxy è un software che riceve le richieste HTTPS pubbliche e le inoltra al servizio Home Assistant sulla LAN. In questa guida NGINX gira su un host Linux separato da Home Assistant, termina TLS con Let’s Encrypt e inoltra anche i WebSocket. La porta 8123 non viene pubblicata direttamente.
Prerequisiti & Hardware Necessario
- Home Assistant attivo su
192.168.1.10:8123. - Server Linux sempre acceso per NGINX, con IP riservato
192.168.1.2. NGINX, Certbot e Home Assistant sono software; il server è l’hardware che li esegue. - Dominio o sottodominio, per esempio
ha.example.it, con record DNS A/AAAA verso l’IP pubblico. - Router con inoltro delle sole porte
TCP 80eTCP 443verso192.168.1.2. Non inoltrare8123. - Account Home Assistant con password forte e MFA attivo. Per questa guida non sono necessari prodotti commerciali o link d’acquisto.
Procedura passo-passo
- Controlla la rete. Dal server NGINX verifica che l’origin risponda:
Se il comando fallisce, correggi prima routing, firewall o indirizzo di Home Assistant.curl -I http://192.168.1.10:8123 - Installa NGINX e Certbot. Su Debian o Ubuntu:
Controlla il servizio consudo apt update sudo apt install nginx certbot python3-certbot-nginxsudo systemctl enable --now nginx. - Configura il DNS e il router. Crea il record
Aperha.example.itverso l’IP pubblico e inoltra80/TCPe443/TCPdal router a192.168.1.2. Se usi IPv6, configura anche il recordAAAAsolo quando il server è realmente raggiungibile via IPv6. - Crea il virtual host HTTP. Sostituisci il dominio con il tuo:
sudo nano /etc/nginx/sites-available/homeassistant
Il parametroserver { listen 80; listen [::]:80; server_name ha.example.it; location / { proxy_pass http://192.168.1.10:8123; proxy_http_version 1.1; proxy_set_header Host $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_read_timeout 3600; } }proxy_http_version 1.1e gli header Upgrade/Connection sono necessari per il corretto passaggio dei WebSocket. - Abilita il sito e verifica la sintassi.
Non eseguire il reload sesudo ln -s /etc/nginx/sites-available/homeassistant /etc/nginx/sites-enabled/homeassistant sudo rm -f /etc/nginx/sites-enabled/default sudo nginx -t sudo systemctl reload nginxnginx -tsegnala errori. - Emetti il certificato TLS. Quando DNS e porta 80 sono raggiungibili dall’esterno, esegui:
Seleziona il redirect automatico HTTP→HTTPS e completa l’email richiesta. Verifica il rinnovo consudo certbot --nginx -d ha.example.itsudo certbot renew --dry-run. - Configura Home Assistant per il reverse proxy. In
configuration.yamlinserisci l’IP o la subnet reale da cui NGINX arriva a Home Assistant. Se NGINX usa192.168.1.2direttamente:
Non inserire una subnet inventata. Se il proxy è in Docker, usa la subnet o l’IP effettivo visibile nei log di Home Assistant; per una rete, usa l’indirizzo di rete corretto, per esempiohttp: use_x_forwarded_for: true trusted_proxies: - 192.168.1.2172.20.0.0/16, non un host scritto come172.20.0.5/16. - Controlla la configurazione e riavvia Home Assistant. Usa Impostazioni → Sistema → Controlli del server → Controlla configurazione. Se il controllo è valido, riavvia Home Assistant. In caso di errore “a request from a reverse proxy was received”, interrompi il test pubblico e correggi
trusted_proxies. - Imposta gli URL di Home Assistant. In Impostazioni → Sistema → Rete imposta come URL Internet
https://ha.example.it. Mantieni l’URL locale coerente con la tua rete e con l’app Companion. - Verifica l’esposizione. Da una rete esterna apri
https://ha.example.it. Il browser deve mostrare un certificato valido, il login deve funzionare e il dashboard deve aggiornarsi. L’IP pubblico non deve rispondere direttamente sulla porta8123.
Verifica del funzionamento
- Esegui
sudo nginx -te verifica il certificato concurl -I https://ha.example.it. - Controlla
sudo journalctl -u nginx -n 50 --no-pagere i log di Home Assistant per richieste rifiutate dal proxy. - Apri una dashboard con entità live, automazioni e cronologia: se i WebSocket funzionano, gli aggiornamenti arrivano senza ricaricare la pagina.
- Verifica il rinnovo automatico con
sudo certbot renew --dry-run. - Da una scansione esterna autorizzata controlla che siano esposte solo
80/TCPe443/TCP, non8123/TCP.
Problemi comuni
| Problema | Causa | Soluzione |
|---|---|---|
| 502 Bad Gateway | NGINX non raggiunge 192.168.1.10:8123. | Prova curl dal server proxy e correggi IP, porta, firewall o routing. |
| 400 richiesta da reverse proxy | trusted_proxies non contiene l’IP reale del proxy. | Leggi l’IP nei log HA e inserisci solo quell’IP o la subnet corretta. |
| Dashboard senza aggiornamenti live | WebSocket non inoltrati oppure HTTP/1.1 assente. | Controlla proxy_http_version 1.1, gli header Upgrade/Connection e il timeout. |
| Certbot non emette il certificato | DNS errato, porta 80 chiusa o CGNAT. | Verifica risoluzione pubblica, port forwarding e disponibilità di un IP pubblico. |
| NGINX non si ricarica | Errore di sintassi o link simbolico errato. | Esegui sudo nginx -t, correggi l’errore indicato e ripeti il reload. |
FAQ essenziali
Devo configurare SSL anche in Home Assistant?
No, se TLS termina su NGINX. Home Assistant può restare in HTTP sulla LAN; il collegamento esterno deve usare HTTPS e il proxy deve essere attendibile.
Posso usare NGINX senza dominio?
Per HTTPS pubblico e certificato Let’s Encrypt serve un nome DNS valido. Un IP può essere usato per test locali, ma non sostituisce una configurazione TLS pubblica affidabile.
Prodotti consigliati
Hardware pertinente alla guida
I collegamenti portano alle pagine dei prodotti indicati. Il prezzo Amazon, quando disponibile, proviene dall’API ufficiale ed è aggiornato con data e ora; prezzo e disponibilità finali sono quelli della pagina Amazon.