Linux und Windows HelpDesk

Home Assistant hinter Apache Reverse Proxy.

Möchte man Home Assistant hinter einem Apache Webserver betreiben und von außen über die FQDN erreichbar machen, kann man in Apache einen Reverse Proxy auf Home Assistant einrichten. Home Assistant ist dann über eine Subdomain wie z.B. home.domain.de erreichbar. Auf dem bestehenden Apache muss dafür das Modul mod_proxy vorhanden sein.

Zunächst erstellt man auf seinem bereits bestehenden Apache-Webserver, unter /etc/apache2/sites-available/ eine Datei mit dem gewünschten Namen des Home Assistant-VHOST und editiert diese mit dem Editor seiner Wahl.

# touch /etc/apache2/sites-available/VIRTUALHOST.conf
# mcedit /etc/apache2/sites-available/VIRTUALHOST.conf

Home Assistant sollte nur per https erreichbar sein und z.B. ein Let's Encrypt Zertifikat verwendet werden. In der Datei /etc/apache2/sites-available/VIRTUALHOST.conf sind dazu die folgenden Angaben zu machen wobei die individuellen Angaben wie Alias, IP des Home Assistant, Pfade... individuell anzupassen sind.

<VirtualHost *:80>
    ServerName home.domain.de:80
    ServerAlias www.home.domain.de
    ServerAdmin root@domain.de
    Redirect permanent / https://home.domain.de:443/
    ErrorLog /var/www/log/home_error_log
    CustomLog /var/www/log/home_access_log combined
</VirtualHost>
<VirtualHost *:443>
    ServerName home.domain.de:443
    ServerAlias www.home.domain.de
    ServerAdmin root@domain.de
    SSLProxyEngine On
    SSLCertificateFile /usr/local/ssl/certs/domain.de.pem
    SSLCertificateKeyFile /usr/local/ssl/certs/domain.de.pem
    ErrorLog /var/www/log/home_error_log.ssl
    CustomLog /var/www/log/home_access_log.ssl combined
    <Proxy *>
      Authtype Basic
      Authname "Members only!"
      AuthUserFile /etc/apache2/htpasswd.home
      Require valid-user
      Order deny,allow
      Allow from all
    </Proxy>
    ProxyPreserveHost On
    ProxyRequests Off
    ProxyPass /api/websocket ws://192.168.120.200:8123/api/websocket
    ProxyPassReverse /api/websocket wss://192.168.120.200:8123/api/websocket
    ProxyPass / http://192.168.120.200:8123/
    ProxyPassReverse / http://192.168.120.200:8123/
    RewriteEngine On
    RewriteCond %{HTTP:Upgrade} websocket [NC]
    RewriteRule ^/?(.*) "ws://192.168.120.200:8123/$1" [P,L]
</VirtualHost>

Der markierte Abschnitt ist optional und bewirkt eine zusätzliche Passwortabfrage des Apache, beim betreten des VHOST. Es ist eine Passwortdatei nötig, die mit dem folgenden Aufruf erstellt wird. Wenn es auf dem System einen Standardpfad für die Apache-Passwortdateien gibt, sollte dieser angegeben werden.

# sudo htpasswd -c /etc/apache2/htpasswd.home username

Zum Abschluss muss der Home Assistant-VHOST aktiviert werden. Unter Systemen auf Basis von Debian erfolgt das sehr einfach auf der Kommandozeile mit diesem Befehl.

# sudo a2ensite VIRTUALHOST.conf

Alternativ kann ein Softlink erstellt und Apache neu gestartet werden.

# ln -s /etc/apache2/sites-available/VIRTUALHOST.conf /etc/apache2/sites-enabled/VIRTUALHOST.conf
# service apache2 restart

Auf Home Assistant ist in der configuration.yaml dieser Abschnitt, mit der lokalen IP des Apache-Server einzutragen.

http:
  use_x_forwarded_for: true
  trusted_proxies:
    - 192.168.120.100

Zum Abschluss folgt der obligatorische Neustart von Home Assistant.