Port Forwarding with VirtualHost to HA from another Raspberry Pi

tl;dr: How can I configure Apache VirtualHosts to only forward myhomeassistant.duckdns.org:443 to https://myhomeassistant.duckdns.org:8123 while Apache is running on another Raspberry Pi than Home Assistant?

Hey all,

I’m struggling for days now and not finding a way to make it work, so I’m asking you for help. I read and tried so many things that I can’t even recall, what I already tried.

I am running Apache on a Raspberry Pi for nextcloud, pihole and other services and have ports 80 and 443 opened in my router. All this is accessible via https://www.mydomain.com/*.
On another Raspberry Pi, I am running Home Assistant (Home Assistant Core 2022.5.0, Home Assistant, Supervisor 2022.05.0, Home Assistant OS 7.6) with opened port 8123 and a duckdns domain, let’s say https://myhomeassistant.duckdns.org.

In order to make Alexa work, I need port 443 to be forwarded to my HA Pi port 8123 as shown in this video: https://www.youtube.com/watch?v=Ww2LI59IQ0A. Of course, I cannot just configure 443 → HA Pi 443 in my router since I need port 443 to be used with mydomain.com and thus 443 is already forwarded to my other Pi. Thus, I want to use VirtualHosts and forward everything that comes in at https://myhomeassistant.duckdns.org(:443) to https://myhomeassistant.duckdns.org:8123.
Everything else, especially https://www.mydomain.com/* and https://myhomeassistant.duckdns.org:8123 should be treated as it is now.

I tried for example (the whole list would be quite long):

<VirtualHost myhomeassistant.duckdns.org:443>
  ServerName myhomeassistant.duckdns.org
  ProxyPass / https://myhomeassistant.duckdns.org:8123/
</VirtualHost>

with and without Listen 443 in the first line and also with <VirtualHost *:443>.
I also tried using my local IP:

<VirtualHost *:443>
        ServerName myhomeassistant.duckdns.org
        ProxyPass / 192.168.178.112:8123
        ProxyPassReverse / 192.168.178.112:8123
</VirtualHost>

And as described in Reverse Proxy with Apache, I tried

<VirtualHost *:443>
  ServerName myhomeassistant.duckdns.org
  ProxyPreserveHost On
  ProxyRequests off
  ProxyPass /api/websocket ws://192.168.178.112:8123/api/websocket
  ProxyPassReverse /api/websocket ws://192.168.178.112:8123/api/websocket
  ProxyPass / https://192.168.178.112:8123/
  ProxyPassReverse / https://192.168.178.112:8123/
</VirtualHost>

with and without RewriteEngine:

  RewriteEngine on
  RewriteCond %{HTTP:Upgrade} =websocket [NC]
  RewriteRule /(.*)  ws://192.168.178.112:8123/$1 [P,L]
  RewriteCond %{HTTP:Upgrade} !=websocket [NC]
  RewriteRule /(.*)  https://192.168.178.112:8123/$1 [P,L]

to both the duckdns and my local IP.

How I tried: create new file hassio.conf in /etc/apache2/sites-available and write the above into it. Run sudo a2ensite hassio.conf and sudo service apache2 restart.

The result is either 400 Bad Request, 404 Not Found or https://myhomeassistant.duckdns.org is forwarded to the landing page of my Apache Pi at https://www.mydomain.com (which is obvious since duckdns points to the IP of my router).
And sometimes, it leads to a certificate warning when accessing HA via https://myhomeassistant.duckdns.org:8123.

Since I don’t know, if it makes a difference, here’s how my 000-default-le-ssl.conf looks like. I of course tried to write everything of the above directly in 000-default-le-ssl.conf as well.

<IfModule mod_ssl.c>
<VirtualHost *:443>
        ServerAdmin webmaster@localhost
        DocumentRoot /var/www/html
        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined
        ServerName www.mydomain.de
        Include /etc/letsencrypt/options-ssl-apache.conf
        SSLCertificateFile /etc/letsencrypt/live/www.mydomain.de/fullchain.pem
        SSLCertificateKeyFile /etc/letsencrypt/live/www.mydomain.de/privkey.pem
</VirtualHost>
</IfModule>

<IfModule mod_headers.c>
  Header always set Strict-Transport-Security "max-age=15552000; includeSubDomains"
</IfModule>

I tried so many different versions of the same and so many different things, but nothing worked at all.
Could someone please point me in the right direction?

I’m trying a very similar thing. Were you able to get this to work, please?