example - Apache ProxyPass: cómo preservar la dirección IP original
reverse proxy apache vhost (5)
Esto tiene una explicación más elegante y más de una posible solución. http://kasunh.wordpress.com/2011/10/11/preserving-remote-iphost-while-proxying/
La publicación describe cómo usar un módulo de Apache popular y uno menos conocido para preservar el host / ip en una configuración que involucra proxying.
Use el módulo mod_rpaf, instálelo y habilítelo en el servidor back-end y agregue las siguientes directivas en la configuración del módulo. RPAFable en
RPAFsethostname activado
RPAFproxy_ips 127.0.0.1
(Edición de 2017) Ubicación actual de mod_rpaf: https://github.com/gnif/mod_rpaf
Estamos utilizando ProxyPass para redirigir todas las solicitudes "/ r" a jboss en el puerto 18080 de la siguiente manera:
ProxyPreserveHost on
ProxyPass /r http://localhost:18080/redirectService/
ProxyPassReverse /r http://localhost:18080/redirectService/
Pero eso hace que la dirección IP registrada en el registro de acceso de jboss sea "127.0.0.1". ¿Alguien sabe cómo podemos preservar la IP original de donde vino la solicitud en HttpServletRequest? Queremos acceder desde la solicitud de servlet jboss en doGet ()
La respuesta de JasonW está bien. Pero desde apache httpd 2.4.6 hay una alternativa: mod_remoteip
Todo lo que debes hacer es:
- Puede ser que deba instalar el paquete mod_remoteip
Habilitar el módulo:
LoadModule remoteip_module modules/mod_remoteip.so
Agregue lo siguiente a su configuración httpd de apache. Tenga en cuenta que debe agregar esta línea no a la configuración del servidor proxy. Debe agregar esto a la configuración del servidor httpd de destino proxy (el servidor detrás del proxy):
RemoteIPHeader X-Forwarded-For
Consulte en http://httpd.apache.org/docs/trunk/mod/mod_remoteip.html para obtener más información y más opciones.
Puede obtener el host original del campo de encabezado X-Forwarded-For .
Si está utilizando el proxy inverso de Apache para servir una aplicación que se ejecuta en un puerto de host local, debe agregar una ubicación a su host virtual.
<Location />
ProxyPass http://localhost:1339/ retry=0
ProxyPassReverse http://localhost:1339/
ProxyPreserveHost On
ProxyErrorOverride Off
</Location>
Para obtener la dirección IP, tenga las siguientes opciones
console.log(">>>", req.ip);// this works fine for me returned a valid ip address
console.log(">>>", req.headers[''x-forwarded-for''] );// returned a valid IP address
console.log(">>>", req.headers[''X-Real-IP''] ); // did not work returned undefined
console.log(">>>", req.connection.remoteAddress );// returned the loopback IP address
Entonces, use req.ip o req.headers [''x-forward-for'']
Si tiene la capacidad para hacerlo, recomendaría usar ya sea mod-jk o mod-proxy-ajp para pasar solicitudes de Apache a JBoss. El protocolo AJP es mucho más eficiente en comparación con el uso de solicitudes de proxy HTTP y, como beneficio, JBoss verá que la solicitud proviene del cliente original y no de Apache.