Ich habe eine Webanwendung, die über Port 80 mit dem Endbenutzer und über Port 3001 mit einem Express-Server kommuniziert. Ich habe eineReverseproxyaber der Code scheint meine Serverantwort direkt an meinen Endbenutzer zurückzugeben, anstatt den HTML-Code der Webanwendung. Ich möchte, dass die Webanwendung weiterhin ihre typische HTML-Antwort sendet, während sie ihre Server-API-Anfragen an Port 3001 sendet. Habe ich meinen Proxy falsch eingerichtet?
Der schwierige Teil dabei ist, dass meine Webanwendung sowohl als Server (für den Endbenutzer) als auch als Client (für den Express-Server) fungiert.
Hier ist meine Vhost-Konfiguration:
<VirtualHost *:443>
SSLEngine on
SSLProxyEngine on
SSLProxyCheckPeerCN off
SSLProxyCheckPeerName off
SSLProxyCheckPeerExpire off
ServerName 192.168.253.101
ServerAlias example.com
DocumentRoot /var/www/example.com/public_html
ErrorLog /var/www/example.com/error.log
CustomLog /var/www/example.com/request.log combined
SSLCertificateFile "/etc/ssl/certs/Client_Cert.crt"
SSLCertificateKeyFile "/etc/ssl/certs/Client_Key.key"
ProxyRequests Off
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
ProxyPass / https://localhost:3001/
ProxyPassReverse / https://localhost:443/
</VirtualHost>
Antwort1
Durch Ändern der Zeile „ProxyPass“ in „ProxyPassMatch“ konnte ich weiterhin von der Stammdomäne aus auf meine HTML-Seite zugreifen und gleichzeitig alle zusätzlichen API-Aufrufe an meinen lauschenden Server weiterleiten.
<VirtualHost *:443>
SSLEngine on
SSLProxyEngine on
SSLProxyCheckPeerCN off
SSLProxyCheckPeerName off
SSLProxyCheckPeerExpire off
ServerName 192.168.253.101
ServerAlias example.com
DocumentRoot /var/www/example.com/public_html
ErrorLog /var/www/example.com/error.log
CustomLog /var/www/example.com/request.log combined
SSLCertificateFile "/etc/ssl/certs/Client_Cert.crt"
SSLCertificateKeyFile "/etc/ssl/certs/Client_Key.key"
ProxyRequests Off
<Proxy "*">
Require host yournetwork.example.com
</Proxy>
ProxyPassMatch ^/([a-z]+)$ https://localhost:3001/$1
</VirtualHost>