Cuando se utiliza Nginx como proxy inverso frente a un servidor Apache, puede ocurrir el siguiente error en los registros de Nginx:
[error] 349#349: *44 peer closed connection in SSL handshake while SSL handshaking to upstream, client: 172.68.92.148, server: example.com, request: "GET /favicon.ico HTTP/2.0", upstream: "https://192.168.20.14:443/favicon.ico", host: "example.com", referrer: "https://example.com/path"
[error] 349#349: *46 peer closed connection in SSL handshake while SSL handshaking to upstream, client: 172.70.57.184, server: example1.com, request: "GET / HTTP/2.0", upstream: "https://192.168.20.17:443/", host: "example1.com"
[error] 349#349: *12 peer closed connection in SSL handshake while SSL handshaking to upstream, client: 162.158.123.23, server: example1.com, request: "GET /favicon.ico HTTP/2.0", upstream: "https://192.168.20.17:443/favicon.ico", host: "example1.com", referrer: "https://example1.com/"
Causa del problema
Este error ocurre debido a un conflicto en la configuración de Apache cuando se utiliza la directiva RemoteIPProxyProtocol On
. Esta configuración no es compatible con el tráfico SSL enviado desde Nginx a Apache a través del protocolo HTTPS, lo que provoca que la conexión SSL falle durante el "handshake".
Solución
Para resolver este problema, es necesario deshabilitar la configuración RemoteIPProxyProtocol
en Apache y asegurarse de que se utilice únicamente la directiva RemoteIPHeader
para pasar la dirección IP real del cliente desde Nginx.
Pasos a seguir
- Editar el archivo de configuración de Apache: Abra el archivo de configuración principal de Apache, generalmente ubicado en
/etc/apache2/apache2.conf
:sudo nano /etc/apache2/apache2.conf
- Comentar o eliminar la línea
RemoteIPProxyProtocol On
: Busque la línea siguiente:RemoteIPProxyProtocol On
Y coméntela añadiendo un#
al inicio de la línea, o elimínela por completo:#RemoteIPProxyProtocol On
- Asegurarse de que
RemoteIPHeader
esté configurado correctamente: Asegúrese de que la directivaRemoteIPHeader
esté configurada para aceptar el encabezadoX-Forwarded-For
, que es enviado por Nginx:RemoteIPHeader X-Forwarded-For
- Guardar los cambios y reiniciar Apache: Guarde el archivo y cierre el editor. Luego reinicie Apache para aplicar los cambios:
sudo systemctl restart apache2
- Verificar la configuración en Nginx: Asegúrese de que Nginx esté configurado para pasar el encabezado
X-Forwarded-For
. Esto suele estar configurado por defecto, pero puede verificarse en el bloqueserver
olocation
del archivo de configuración de Nginx:proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
- Revisar los registros: Después de realizar los cambios, monitoree los registros de Nginx y Apache para confirmar que el error ha sido resuelto y que las solicitudes se procesan correctamente.
Conclusión
El error "peer closed connection in SSL handshake while SSL handshaking to upstream" suele deberse a una configuración incorrecta de Apache al usar RemoteIPProxyProtocol
con SSL. Al deshabilitar esta opción y utilizar solo RemoteIPHeader X-Forwarded-For
, se soluciona el problema y se asegura que Nginx pase correctamente la IP del cliente al servidor Apache.