Files
configpolicy/roles/homeassistant/templates/homeassistant.httpd.conf.j2
Dustin C. Hatch ceeb61cdb0 roles/homeassistant: Proxy ZwaveJS2Mqtt Web UI
ZwaveJS2Mqtt includes a very powerful web-based UI for configuring and
controlling the Z-Wave network.  This functionality is no longer
available within Home Assistant itself, so being able to access the
ZwaveJS2Mqtt UI is crucial to operating the network.

I wanted to make the UI available at */zwave/*, which requires using
*mod_rewrite* to conditionally proxy requests based on the `Connection`
HTTP header, since the UI passes both HTTP and WebSocket requests to the
same paths.  *mod_rewrite* configuration is not inherited from the main
server configuration to virtual hosts, so the
`RewriteRule`/`RewriteCond` directives have to be specified within the
`<VirtualHost>` block.  This means that the Home Assistant proxy
configuration has to be within its own virtual host, and the
Zwavejs2Mqtt configuration has to be there as well.
2021-07-19 15:58:58 -05:00

38 lines
1.2 KiB
Django/Jinja

RewriteEngine on
RewriteCond %{HTTPS} !on
RewriteRule /.* https://%{SERVER_NAME}$0 [R=301,L]
<VirtualHost _default_:443>
ServerName {{ homeassistant_server_name }}
SSLCertificateFile {{ homeassistant_ssl_certificate }}
SSLCertificateKeyFile {{ homeassistant_ssl_certificate_key }}
SSLCertificateChainFile {{ homeassistant_ssl_certificate }}
ProxyPreserveHost On
ProxyRequests Off
RewriteEngine on
{% if homeassistant_proxy_zwavejs2mqtt %}
RewriteRule ^/zwave$ /zwave/ [R=301,L]
RewriteCond %{HTTP:Upgrade} =websocket [NC]
RewriteRule /zwave/(.*) ws://localhost:8091/$1 [P,L]
RewriteRule /zwave/(.*) http://localhost:8091/$1 [P,L]
# ZwaveJS2Mqtt doesn't respect X-External-Path for the logo URL
RewriteRule ^/static/logo\.png$ http://localhost:8091$0 [P,L]
<Location /zwave>
RequestHeader set X-External-Path /zwave
</Location>
ProxyPassReverse /zwave/ http://localhost:8091/
{% endif %}
RewriteCond %{HTTP:Upgrade} =websocket [NC]
RewriteRule /(.*) ws://localhost:8123/$1 [P,L]
RewriteRule /(.*) http://localhost:8123/$1 [P,L]
ProxyPassReverse / http://localhost:8123/
Header always set \
Strict-Transport-Security "max-age=63072000; includeSubDomains"
</VirtualHost>