
Tengo un servidor con Apache como proxy para solicitudes a un servicio web de Node. Actualmente puedo conectarme usando un navegador fuera de mi red local usando mi nombre de dominio: https://mydomain.ca
. Yo creo que yousadopara poder conectarme usando un navegador dentro de mi red local usando la dirección IP local del servidor: https://10.0.0.13
. Sin embargo, cuando lo intento ahora, aparece un error 500. Estoy buscando ayuda para que esto vuelva a funcionar. También estaría de acuerdo con no usar SSL en mi red local y acceder al servidor si http://10.0.0.13
eso es más factible.
Recibo el siguiente texto con el error 500:
The proxy server could not handle the request
Reason: Error during SSL Handshake with remote server
Busqué en mi registro de errores de Apache (/var/log/apache2/error.log) más pistas, pero no encontré el texto que encontré muy útil:
[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 /
Así es como se ven mis archivos de configuración:
midominio.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>
midominio.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>
EDITAR: aquí hay información sobre el servicio web de Node: El servicio web de Node escucha en un único puerto y solo escucha conexiones https.
Respuesta1
Ha configurado HTTP y HTTPS para conectarse al mismo puerto en el servidor backend.
Es muy poco probable que su servidor backend admita ambos protocolos en el mismo puerto.
Utilice HTTP en ambos VirtualHosts o utilice el puerto correcto para HTTPS si su servidor backend admite ambos.
Respuesta2
Algunos de los comentarios anteriores me hicieron pensar en esto de la manera correcta. El enfoque que elegí fue
- ejecutar servidores http y https separados en diferentes puertos dentro de mi servicio web Node,
- actualizar los números de puerto en mydomain.ca.conf y mydomain.ca-le-ssl.conf para que correspondan a los números de puerto correctos, y
- actualice mydomain.ca.conf para responder solo a solicitudes de localhost o LAN como se muestra a continuación.
<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> ...
Con todo esto implementado, ahora puedo acceder http://10.0.0.13
desde dentro de mi red local y https://mydomain.ca
desde fuera de mi red local.