
Ich habe einen Server mit Apache als Proxy für Anfragen an einen Node-Webdienst. Ich kann mich derzeit mit einem Browser außerhalb meines lokalen Netzwerks über meinen Domänennamen verbinden: https://mydomain.ca
. Ich glaube, ichgebrauchtum mich mit einem Browser in meinem lokalen Netzwerk über die lokale IP-Adresse des Servers verbinden zu können: https://10.0.0.13
. Wenn ich es jetzt jedoch versuche, erhalte ich einen 500-Fehler. Ich brauche Hilfe, um dies wieder zum Laufen zu bringen. Ich wäre auch damit einverstanden, in meinem lokalen Netzwerk kein SSL zu verwenden und über auf den Server zuzugreifen, wenn http://10.0.0.13
das machbarer ist.
Ich erhalte den folgenden Text mit dem 500-Fehler:
The proxy server could not handle the request
Reason: Error during SSL Handshake with remote server
Ich habe in meinem Apache-Fehlerprotokoll (/var/log/apache2/error.log) nach weiteren Hinweisen gesucht, aber den Text, den ich besonders hilfreich fand, konnte ich nicht finden:
[Sun Nov 28 23:11:42.609115 2021] [proxy_http:error] [pid 28560:tid 140085584455424] [client 10.0.0.220:26070] AH01097: pass request body failed to 127.0.0.1:4201 (loca lhost) from 10.0.0.220 ()
[Sun Nov 28 23:11:42.769782 2021] [proxy:error] [pid 28560:tid 140085567670016] (20014)Internal error (specific information not available): [client
10.0.0.220:26071] AH 01084: pass request body failed to 127.0.0.1:4201 (localhost)
[Sun Nov 28 23:11:42.769805 2021] [proxy:error] [pid 28560:tid 140085567670016] [client 10.0.0.220:26071] AH00898: Error during SSL Handshake with remote server returne d by /
So sehen meine Konfigurationsdateien aus:
meinedomain.ca-le-ssl.conf
<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerAdmin webmaster@localhost
ServerName mydomain.ca
ServerAlias www.mydomain.ca
ProxyPreserveHost on
SSLProxyEngine on
ProxyPass / https://localhost:4201/
ProxyPassReverse / https://localhost:4201/
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
ServerAlias mydomain.ca
SSLCertificateFile /etc/letsencrypt/live/mydomain.ca/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/mydomain.ca/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf
</VirtualHost>
</IfModule>
meinedomain.ca.conf
<VirtualHost *:80>
ServerAdmin webmaster@localhost
ServerName mydomain.ca
ServerAlias www.mydomain.ca
DocumentRoot /var/www/mydomain.ca
ProxyPreserveHost on
ProxyPass / http://localhost:4201/
ProxyPassReverse / http://localhost:4201/
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
BEARBEITEN – Hier sind einige Informationen zum Node-Webdienst: Der Node-Webdienst überwacht einen einzelnen Port und nur https-Verbindungen.
Antwort1
Sie haben sowohl HTTP als auch HTTPS für die Verbindung mit demselben Port auf dem Backend-Server konfiguriert.
Es ist höchst unwahrscheinlich, dass Ihr Backend-Server beide Protokolle auf demselben Port unterstützt.
Verwenden Sie entweder HTTP in beiden VirtualHosts oder den richtigen Port für HTTPS, wenn Ihr Backend-Server beides unterstützt.
Antwort2
Einige der obigen Kommentare haben mich dazu gebracht, richtig darüber nachzudenken. Der Ansatz, den ich gewählt habe, war
- separate http- und https-Server auf unterschiedlichen Ports innerhalb meines Node-Webdienstes ausführen,
- Aktualisieren Sie die Portnummern in mydomain.ca.conf und mydomain.ca-le-ssl.conf, damit sie den richtigen Portnummern entsprechen.
- Aktualisieren Sie mydomain.ca.conf, um nur auf Anfragen vom lokalen Host oder LAN zu antworten, wie unten gezeigt.
<VirtualHost *:80> # We should only access the web server via http if on localhost # or within LAN. <Location /> Require local Require ip 10.0.0.0/24 </Location> ...
Nachdem dies alles eingerichtet ist, kann ich jetzt http://10.0.0.13
von innerhalb und https://mydomain.ca
außerhalb meines lokalen Netzwerks zugreifen.