¿Cómo capturo las direcciones IP de los clientes en los registros del servidor web con Elastic Load Balancing?
Utilizo Elastic Load Balancing (ELB) para mi servidor web y puedo ver la dirección IP de mi equilibrador de carga en los registros de acceso al servidor web. Quiero capturar las direcciones IP del cliente en su lugar.
Descripción breve
Los registros de acceso del servidor web capturan la dirección IP del equilibrador de carga porque este establece la conexión con las instancias. Para capturar las direcciones IP de los clientes en los registros de acceso al servidor web, configura lo siguiente:
-
Para los equilibradores de carga de aplicación y los equilibradores de carga clásicos con agentes de escucha HTTP/HTTPS, añade el encabezado HTTP X-Forwarded-For para capturar las direcciones IP del cliente. A continuación, puedes configurar los registros de acceso al servidor web para registrar estas direcciones IP.
Nota: En algunos casos, el encabezado X-FORWARDED-FOR puede estar ausente o vacío. Las solicitudes de comprobación de estado iniciadas por los equilibradores de carga de aplicación, los equilibradores de carga clásicos y los equilibradores de carga de red no incluyen el encabezado X-FORWARDED-FOR. Además, los equilibradores de carga de red y los equilibradores de carga clásicos con agentes de escucha TCP/SSL no añaden el encabezado X-FORWARDED-FOR a las solicitudes entrantes. En el caso de los equilibradores de carga de aplicación, selecciona el modo de procesamiento Append para añadir de manera consistente el encabezado X-FORWARDED-FOR.
-
En el caso de los equilibradores de carga clásicos con agentes de escucha TCP/SSL, configura la compatibilidad con el protocolo proxy en el equilibrador de carga clásico y en la aplicación de destino.
-
En el caso de los equilibradores de carga de red, registra los destinos por ID de instancia para capturar las direcciones IP del cliente sin tener que configurar un servidor web adicional. Para obtener instrucciones, consulta Atributos del grupo de destino.
-
En el caso de los equilibradores de carga de red, cuando solo puedas registrar direcciones IP como destinos, activa la versión 2 del protocolo proxy en el equilibrador de carga. Para obtener instrucciones, consulta Protocolo de proxy.
Resolución
Equilibradores de carga de aplicación y equilibradores de carga clásicos con agentes de escucha HTTP/HTTPS (Apache)
Para añadir el encabezado HTTP X-Forwarded-For y configurar los registros de acceso al servidor web, sigue estos pasos:
-
Utiliza el editor de texto para abrir la configuración de Apache. La ubicación varía según la configuración, por ejemplo, /etc/httpd/conf/httpd.conf para Amazon Linux y RHEL o /etc/apache2/apache2.conf para Ubuntu.
-
En la sección LogFormat, añade %{X-Forwarded-For}i, como se muestra en el siguiente ejemplo:
... LogFormat "%{X-Forwarded-For}i %h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined LogFormat "%h %l %u %t \"%r\" %>s %b" common ... -
Guarda los cambios.
-
Vuelve a cargar el servicio Apache. Según el sistema operativo, ejecuta uno de los siguientes comandos:
Sysvinit, sistemas basados en Debian (como Ubuntu) y SUSE (como SLES11)
# /etc/init.d/apache2 reloadSysvinit, sistemas basados en RPM (como RHEL 6 y Amazon Linux), excepto SUSE
# /etc/init.d/httpd reloadSystemd, sistemas basados en Debian (como Ubuntu) y SUSE (como SLES12)
# systemctl reload apache2Sistemas basados en RPM (como RHEL 7 y Amazon Linux 2), excepto SUSE
# systemctl reload httpd -
Abre los registros de acceso al servidor web Apache. La ubicación varía según la configuración.
-
Verifica que las direcciones IP del cliente estén registradas en el encabezado X-Forwarded-For.
Equilibradores de carga de aplicación y equilibradores de carga clásicos con agentes de escucha HTTP/HTTPS (NGINX)
Para añadir el encabezado HTTP X-Forwarded-For y configurar los registros de acceso al servidor web, sigue estos pasos:
-
Abre el archivo de configuración de NGINX con un editor de texto. Suele encontrarse en la ubicación /etc/nginx/nginx.conf.
-
En la sección LogFormat, añade $http_x_forwarded_for, como se muestra en el siguiente ejemplo:
http { ... log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; ... } -
Guarda los cambios.
-
Vuelve a cargar el servicio NGINX. En el caso de Amazon Linux 2 o RHEL, ejecuta el siguiente comando:
systemctl reload nginxNota: El comando para volver a cargar el servicio NGINX es diferente en otros sistemas. Los comandos para volver a cargar NGINX son similares a los comandos para volver a cargar el servicio Apache de la sección anterior.
-
Abre los registros de acceso al servidor web NGINX. La ubicación varía según la configuración.
-
Verifica que las direcciones IP del cliente estén registradas en el encabezado X-Forwarded-For.
Equilibradores de carga clásicos con agentes de escucha TCP/SSL (Apache)
Para configurar la compatibilidad con el protocolo proxy, sigue estos pasos:
-
Utiliza el editor de texto para abrir la configuración de Apache. La ubicación varía según la configuración, por ejemplo, /etc/httpd/conf/httpd.conf para Amazon Linux y RHEL o /etc/apache2/apache2.conf para Ubuntu.
-
Asegúrate de que la configuración de Apache cargue el módulo mod_remoteip (disponible para la versión 2.4.31 y versiones posteriores de Apache). Para obtener más información, consulta Apache Module mod_remoteip en el sitio web de Apache. Este módulo incluye la directiva RemoteIPProxyProtocol. Para obtener más información, consulta RemoteIPProxyProtocol Directive (Directiva RemoteIPProxyProtocol) en el sitio web de Apache. En el archivo de configuración, comprueba si hay una línea similar a una de las siguientes:
Amazon Linux o RHEL
LoadModule remoteip_module modules/mod_remoteip.soUbuntu
LoadModule remoteip_module /usr/lib/apache2/modules/mod_remoteip.so -
Para confirmar que se carga el módulo mod_remoteip, ejecuta el siguiente comando:
$ sudo apachectl -t -D DUMP_MODULES | grep -i remoteip -
Revisa el resultado y verifica que contenga una línea similar a la siguiente:
remoteip_module (shared)Importante: Si el resultado no contiene esta línea, el módulo no se ha incluido ni cargado en la configuración. Asegúrate de activar el módulo antes de continuar.
-
Para activar la compatibilidad con el protocolo proxy, añade la siguiente línea al archivo de configuración de Apache:
RemoteIPProxyProtocol On -
Edita la sección LogFormat del archivo de configuración para capturar la dirección IP remota (%a) y el puerto remoto (%{remote}p:):
LogFormat "%h %p %a %{remote}p %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined -
Guarda los cambios.
-
Vuelve a cargar el servicio Apache. Según el sistema operativo, ejecuta uno de los siguientes comandos:
Sysvinit, sistemas basados en Debian (como Ubuntu) y SUSE (como SLES11)
# /etc/init.d/apache2 reloadSysvinit, sistemas basados en RPM (como RHEL 6 y Amazon Linux), excepto SUSE
# /etc/init.d/httpd reloadSystemd, sistemas basados en Debian (como Ubuntu) y SUSE (como SLES12)
# systemctl reload apache2Systemd, sistemas basados en RPM (como RHEL 7 y Amazon Linux 2), excepto SUSE
# systemctl reload httpd -
Abre los registros de acceso al servidor web Apache. La ubicación varía según la configuración.
-
Verifica que las direcciones IP del cliente estén registradas en el encabezado Proxy Protocol (Protocolo proxy).
-
Activa la compatibilidad con el protocolo proxy en la aplicación de destino.
Equilibradores de carga clásicos con agentes de escucha TCP/SSL (NGINX)
Para configurar la compatibilidad con el protocolo proxy, sigue estos pasos:
-
Abre el archivo de configuración de NGINX usando un editor de texto. Suele encontrarse en la ubicación /etc/nginx/nginx.conf.
-
Actualiza la línea listen de la sección server a proxy_protocol. Actualiza la línea log_format de la sección http para establecer proxy_protocol_addr:
http { ... log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$proxy_protocol_addr"'; access_log /var/log/nginx/access.log main; ... } server { ... listen 80 default_server proxy_protocol; ... } ... } -
Guarda los cambios.
-
Vuelve a cargar el servicio NGINX. En el caso de Amazon Linux 2 o RHEL, ejecuta el siguiente comando:
systemctl reload nginxNota: El comando para volver a cargar el servicio NGINX es diferente en otros sistemas. Los comandos para volver a cargar NGINX son similares a los comandos para volver a cargar el servicio Apache de la sección anterior.
-
Abre los registros de acceso al servidor web de NGINX. La ubicación varía según la configuración.
-
Verifica que las direcciones IP del cliente estén registradas en el encabezado Proxy Protocol (Protocolo proxy).
-
Activa la compatibilidad con el protocolo proxy en la aplicación de destino.
- Etiquetas
- Elastic Load Balancing
- Idioma
- Español

Contenido relevante
preguntada hace un año
preguntada hace un año
preguntada hace 8 meses
preguntada hace 10 meses
OFICIAL DE AWSActualizada hace 3 años