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.
38 lines
1.2 KiB
Django/Jinja
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>
|