This guide has been migrated from our website and might be outdated. Feel free to edit this guide to update it, and to remove this message after that.
This example demonstrates how you can configure Apache to act as a proxy for Home Assistant.
This is useful if you want to have:
- a subdomain redirecting to your Home Assistant instance
- several subdomains for several instances
- HTTPS redirection
Subdomain
So you already have a working Apache server available at example.org. Your Home Assistant is correctly working on this webserver and available at http://localhost:8123
Enable mod_proxy_wstunnel
by running if you encounter issues while serving Home Assistant through your proxy:
sudo a2enmod proxy_wstunnel
To be able to access to your Home Assistant instance by using https://home.example.org
, add the following file to /etc/httpd/conf/extra/
as hass.conf
<VirtualHost *:443>
ServerName home.example.org
ProxyPreserveHost On
ProxyRequests off
ProxyPass /api/websocket ws://localhost:8123/api/websocket
ProxyPassReverse /api/websocket ws://localhost:8123/api/websocket
ProxyPass / http://localhost:8123/
ProxyPassReverse / http://localhost:8123/
RewriteEngine on
RewriteCond %{HTTP:Upgrade} =websocket [NC]
RewriteRule /(.*) ws://localhost:8123/$1 [P,L]
RewriteCond %{HTTP:Upgrade} !=websocket [NC]
RewriteRule /(.*) http://localhost:8123/$1 [P,L]
</VirtualHost>
and make sure that this file is read by Apache’s main configuration file /etc/httpd/conf/httpd.conf
...
Include conf/extra/hass.conf
...
If you don’t want HTTPS, you can change <VirtualHost *:443>
to <VirtualHost *:80>
or better consider redirecting all HTTP to HTTPS.
<VirtualHost *:443>
[...]
ProxyPass /api/websocket ws://localhost:8123/api/websocket disablereuse=on
[...]
ProxyPass / http://localhost:8123/ disablereuse=on
[...]
</VirtualHost>
Multiple Instance
You already have Home Assistant running on http://localhost:8123
and available at home.example.org as describe before. The configuration file for this Home Assistant is available in /home/alice/.homeassistant/configuration.yaml
You want another instance available at https://countryside.example.org
You can either :
- Create a new user,
bob
, to hold the configuration file in/home/bob/.homeassistant/configuration.yaml
and run Home Assistant as this new user - Create another configuration directory in
/home/alice/.homeassistan2/configuration.yaml
and run Home Assistant usinghass --config /home/alice/.homeassistant2/
In both solution, change the port number used by modifying configuration.yaml
http:
server_port: 8124
...
Start Home Assistant: Now, you have another instance running on http://localhost:8124
To access this instance by using https://countryside.example.org
add to /etc/httpd/conf/extra/hass.conf
<VirtualHost *:443>
ProxyPreserveHost On
ProxyRequests Off
ServerName countryside.example.org
ProxyPass /api/websocket ws://localhost:8123/api/websocket
ProxyPassReverse /api/websocket ws://localhost:8123/api/websocket
ProxyPass / http://localhost:8124/
ProxyPassReverse / http://localhost:8124/
</VirtualHost>
HTTP to HTTPS redirection
Add to your /etc/httpd/conf/extra/hass.conf
<VirtualHost *:80>
ServerName example.org
ServerSignature Off
RewriteEngine on
RewriteCond %{HTTPS} !=on
RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [NE,R,L]
</VirtualHost>