Skip to main content

HTTPS y Nginx Proxy Pass

Nginx Proxy Pass

Configuración de virtualhost Nginx

server {
        listen 443 ssl;
        server_name ha.psc.local;

        ssl_certificate /etc/nginx/certs/home-assistant.psc.local.pem;
        ssl_certificate_key /etc/nginx/certs/home-assistant.psc.local.key;

        location / {
                proxy_pass http://10.15.50.11:8123/;
                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 $connection_upgrade;
        }

        location /api/websocket {
                proxy_pass http://10.15.50.11:8123/api/websocket;
                proxy_set_header Host $host;
                proxy_http_version 1.1;
                proxy_set_header X-Real-IP         $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header Upgrade $http_upgrade;
                proxy_set_header Connection $connection_upgrade;
        }

}

server {
    if ($host = ha.psc.local) {
        return 301 https://$host$request_uri;
    }
        listen 80;
        server_name ha.psc.local;
    return 404;
}

Compruebe la configuración del nuevo virtualHost con

nginx -t

Si aparece el siguiente error

Siga los pasos indicados en https://futurestud.io/tutorials/nginx-how-to-fix-unknown-connection_upgrade-variable, añadiendo la configuración a nginx.conf.

Compruebe de nuevo

nginx -t

Ya no debería salir el error, deberá indicar que la configuración es correcta.

systemctl reload nginx

Sin embargo al acceder a la web mediante el proxy pass HTTPS, encontrará el siguiente error.

400: Bad Request

Si accede al apartado de logs mediante la conexión HTTP, encontrará el error indicando que no se ha definido un proxy autorizado.

Mediante la consola donde está instalado el contenedor, acceda al fichero config/configuration.yaml

Editelo y añada las siguientes lineas de configuración

http:
  use_x_forwarded_for: true
  trusted_proxies: IP_PROXY_1, IP_PROXY_2

Ejecute el reinicio del docker

docker restart homeassistant

Compruebe que ya puede acceder correctamente desde el proxy-pass.

En caso de que le aparezca el siguiente mensaje

Si inspecciona la consola, pueda ver el siguien error

Compruebe que ha copiado correctamente en la definición del virtualhost el bloque location /api/websocket. Recuerde reiniciar el servicio nginx para que tenga en cuenta los cambios.