Januar 26, 2020

Apache reverse proxy for Homegear Node-BLUE

To be able to set up a reverse proxy for Node-BLUE (the Node-RED fork contained in the Homegear software), you have to set up a websocket proxy as well.

To do this, the proxy_wstunnel module has to be activated. This can be done with

# a2enmod proxy_wstunnel

After restarting with systemctl restart apache2, the module list should show at least the following modules:

# apache2ctl -M | grep proxy
proxy_module (shared)
proxy_http_module (shared)
proxy_wstunnel_module (shared)

As the default Homegear configuration provides the websocket at / and the Node-BLUE webinterface at /node-blue, the requests have to be handled separately. So an example for a conf file (e.g. /etc/apache2/sites-available/nodeblue.conf) could look like this:

<VirtualHost *:80>
    ServerName nodeblue.example.com
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
    ProxyPreserveHost On
    ProxyRequests Off
    ProxyPassMatch    "^/(hgflows.*)$" "ws://localhost:2001/$1"
    ProxyPassReverse  "^/(hgflows.*)$" "ws://localhost:2001/$1"

    ProxyPass "/" "http://localhost:2001/node-blue/"
    ProxyPassReverse "/" "http://localhost:2001/node-blue/"
</VirtualHost>

For Node-RED, this should work as well, with the difference that the webinterface is located at / and the websocket is located at /comms.