Todos los productos
Search
Centro de documentos

Server Load Balancer:Retrieve client IP addresses with a CLB Layer 7 listener

Última actualización: Sep 03, 2026

Obtenga la dirección IP del cliente desde el encabezado HTTP X-Forwarded-For al utilizar un listener de capa 7 de CLB.

Funcionamiento

Los listeners de capa 7 de CLB (HTTP/HTTPS) conservan la dirección IP del cliente en el encabezado HTTP X-Forwarded-For. Los servidores backend pueden obtener esta IP tras la configuración correspondiente.

El campo X-Forwarded-For tiene el siguiente formato:

X-Forwarded-For: <client IP address, proxy-server-1-IP, proxy-server-2-IP, ...>

Al emplear este método, la dirección IP más a la izquierda en la lista corresponde a la dirección IP del cliente.

CLB finaliza la conexión HTTPS y se comunica con los servidores backend mediante HTTP. Configure los servidores backend exclusivamente para HTTP, incluso si utiliza un listener HTTPS.

Procedimiento

Requisitos previos

Paso 1: Comprobar que el listener utiliza X-Forwarded-For

  1. Inicie sesión en la consola de Classic Load Balancer (CLB).

  2. En la barra de navegación superior, seleccione la región donde se despliega la instancia.

  3. En la página Instances, localice la instancia objetivo y haga clic en su ID.

  4. En la página Instance Details, haga clic en la pestaña Listener, busque el listener de capa 7 objetivo y haga clic en su ID.

  5. En la página de detalles del listener, compruebe que la sección Custom HTTP Header incluye X-Forwarded-For: Retrieve Client IP.

    De forma predeterminada, los listeners de capa 7 de CLB usan el encabezado X-Forwarded-Para para obtener la dirección IP del cliente. Esta función no se puede deshabilitar.

Paso 2: Configurar los servidores backend

  • Esta sección describe cómo registrar la dirección IP del cliente en los registros de acceso del servidor backend (mediante el campo X-Forwarded-For). Las variables de nivel de conexión (como $remote_addr en Nginx) siguen mostrando la IP de reenvío de CLB y no se ven afectadas.

  • Si desea reemplazar la variable de nivel de conexión (como $remote_addr) por la IP real del cliente para que los formatos de registro existentes, las reglas de control de acceso y los límites de tasa funcionen sin modificaciones, consulte Replace connection-layer addresses with client IPs (Nginx and Apache).

Servidor Nginx

Entorno de ejemplo: CentOS 7.9 con Nginx 1.20.1. Su configuración podría ser diferente.

  1. Ejecute nginx -V | grep http_realip_module para comprobar si http_realip_module está instalado. Nginx utiliza este módulo para analizar los registros de X-Forwarded-For.

    Si la salida incluye --with-http_realip_module, el módulo está instalado. Continúe con el siguiente paso.

    Salida de ejemplo si http_realip_module está instalado

    nginx version: nginx/1.20.1
    built by gcc 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC) 
    built with OpenSSL 1.1.1k  FIPS 25 Mar 2021
    TLS SNI support enabled
    configure arguments: --prefix=/usr/share/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib64/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --http-client-body-temp-path=/var/lib/nginx/tmp/client_body --http-proxy-temp-path=/var/lib/nginx/tmp/proxy --http-fastcgi-temp-path=/var/lib/nginx/tmp/fastcgi --http-uwsgi-temp-path=/var/lib/nginx/tmp/uwsgi --http-scgi-temp-path=/var/lib/nginx/tmp/scgi --pid-path=/run/nginx.pid --lock-path=/run/lock/subsys/nginx --user=nginx --group=nginx --with-compat --with-debug --with-file-aio --with-google_perftools_module --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_degradation_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_image_filter_module=dynamic --with-http_mp4_module --with-http_perl_module=dynamic --with-http_random_index_module --with-http_realip_module --with-http_secure_link_module --with-http_slice_module --with-http_ssl_module --with-http_stub_status_module --with-http_sub_module --with-http_v2_module --with-http_xslt_module=dynamic --with-mail=dynamic --with-mail_ssl_module --with-pcre --with-pcre-jit --with-stream=dynamic --with-stream_ssl_module --with-stream_ssl_preread_module --with-threads --with-cc-opt='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -m64 -mtune=generic' --with-ld-opt='-Wl,-z,relro -specs=/usr/lib/rpm/redhat/redhat-hardened-ld -Wl,-E'
    
    http_realip_module está disponible desde Nginx 1.0.4 (2011). Si usa una versión anterior, haga una copia de seguridad de su configuración y actualice Nginx.
    Si http_realip_module no está instalado, recompile Nginx con el módulo o reinstale Nginx mediante un gestor de paquetes como yum.
  2. Edite el archivo de configuración de Nginx. Ejecute nginx -t para encontrar la ruta del archivo. La ruta predeterminada es /etc/nginx/nginx.conf.

    http {
      # Make sure that the log_format includes $http_x_forwarded_for. This variable records the value of X-Forwarded-For.
      log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                          '$status $body_bytes_sent "$http_referer" '
                          '"$http_user_agent" "$http_x_forwarded_for"';
      
      # ...
    }
    
  3. Ejecute el comando sudo nginx -s reload para recargar la configuración de Nginx.

Servidor Apache

Entorno de ejemplo: CentOS 7.9 con Apache 2.4.6. Su configuración podría ser diferente.

  1. Ejecute httpd -M | grep remoteip_module para comprobar si remoteip_module está instalado. Apache utiliza este módulo para analizar los registros de X-Forwarded-For.

    Si la salida incluye remoteip_module (shared), el módulo está instalado. Continúe con el siguiente paso.

    remoteip_module está disponible desde Apache 2.4.0 (2012). Si usa una versión anterior, haga una copia de seguridad de su configuración y actualice Apache.
    Si remoteip_module no está instalado, recompile Apache con el módulo o reinstale Apache mediante un gestor de paquetes como yum.
  2. Edite el archivo de configuración de Apache. La ruta predeterminada es /etc/httpd/conf/httpd.conf.

    # ...
    <IfModule log_config_module>
    	# Add %{X-Forwarded-For}i to record X-Forwarded-For information.
      LogFormat "%{X-Forwarded-For}i %h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
      LogFormat "%{X-Forwarded-For}i %h %l %u %t \"%r\" %>s %b" common
    	#...
    </IfModule>
    # ...
  3. Ejecute el comando sudo systemctl restart httpd para reiniciar el servicio de Apache.

Servidor IIS

Entorno de ejemplo: Windows Server 2016. Su configuración podría ser diferente.

  1. Descargue y descomprima el archivo F5XForwardedFor.

  2. Según la arquitectura de su sistema operativo, copie F5XFFHttpModule.dll y F5XFFHttpModule.ini desde el directorio x86\ o x64\ hacia una ubicación con permisos de lectura para IIS.

  3. En Server Manager, abra IIS Manager.

  4. Seleccione el servidor y haga doble clic en Modules.

  5. Haga clic en Configure Native Modules y luego en Register.

  6. Agregue el archivo .dll descargado.

    1. Introduzca el nombre del archivo, seleccione la ruta y haga clic en OK.

    2. El sistema selecciona automáticamente el módulo recién registrado. Haga clic en OK.Register module

  7. Regrese a la página principal del servidor y haga doble clic en el módulo Logging. Configure el formato de registro para incluir el campo X-Forwarded-For.

    1. Haga clic en Select Fields.

      image.png

    2. En la esquina inferior izquierda, haga clic en Add Field, agregue el campo de registro y luego haga clic en OK.

      image.png

    3. En la esquina superior derecha, haga clic en Apply para guardar los cambios.

  8. Reinicie el servidor IIS para que la configuración surta efecto.

Paso 3: Verificar la obtención de la IP del cliente

Siga los pasos correspondientes a su tipo de servidor.

Servidor Nginx

Revise el registro de acceso de Nginx para verificar la obtención de la IP del cliente.

La ruta predeterminada del registro de acceso de Nginx es /var/log/nginx/access.log.

La IP más a la izquierda en el campo $http_x_forwarded_for es la dirección IP del cliente.

image.png

Servidor Apache

Revise el registro de acceso de Apache para verificar la obtención de la IP del cliente.

La ruta predeterminada del registro de acceso de Apache es /var/log/httpd/access_log.

La IP más a la izquierda en el campo %{X-Forwarded-For}i es la dirección IP del cliente.

image.png

Servidor IIS

Revise el registro de IIS para verificar la obtención de la IP del cliente.

Encuentre la ruta del archivo de registro en el módulo Logging.

image.png

La IP más a la izquierda en el campo X-Forwarded-For es la dirección IP del cliente.

image.png

Preguntas frecuentes

Acceso frecuente desde IPs que comienzan con 100

El sistema CLB reenvía solicitudes externas a las instancias ECS backend y realiza comprobaciones de estado. Ambos tipos de solicitudes se originan en el sistema.

El sistema CLB utiliza el bloque CIDR reservado 100.64.0.0/10. Este bloque es exclusivo de Alibaba Cloud y no representa ningún riesgo de seguridad, pero explica el acceso frecuente desde IPs que comienzan con 100.

Asegúrese de que iptables y otro software de seguridad en sus servidores no bloqueen este bloque CIDR.

Obtención de IPs de cliente con WAF, CDN y GA

Si el tráfico pasa por WAF, CDN o Global Accelerator (GA) antes de llegar a CLB, aún puede usar X-Forwarded-For para obtener la IP del cliente. Estos servicios transmiten X-Forwarded-For de forma predeterminada sin necesidad de configuración adicional.

Para evitar la suplantación de X-Forwarded-For, utilice un encabezado personalizado para registrar la IP del cliente. Por ejemplo, en una arquitectura cliente > CDN > WAF > CLB > ECS, CDN puede pasar el encabezado Ali-Cdn-Real-Ip. En WAF, seleccione Specify header field como método de determinación de la IP del cliente y establezca el encabezado en Ali-Cdn-Real-Ip. Configure la variable de registro de Nginx como $http_Ali_Cdn_Real_Ip.

Medidas de seguridad adicionales:

  • Valide y filtre el encabezado XFF en los servidores backend. Compruebe el formato y las direcciones IP, y rechace los valores no válidos o sospechosos.

  • Utilice firewalls y ACL entre CLB y los servidores backend para filtrar solicitudes maliciosas dirigidas al encabezado XFF.

  • Emplee cifrado SSL/TLS para proteger las comunicaciones, incluida la transmisión del encabezado XFF, contra ataques de intermediario.

Obtención de IPs de cliente en un entorno ACK

En un clúster de Container Service for Kubernetes (ACK), el método es el mismo, pero algunos detalles operativos difieren. Network management FAQ.

Listener de capa 4 frente a capa 7: comportamiento de la IP de origen

Cuando una solicitud de cliente pasa por CLB, la IP de origen visible para los servidores backend depende del tipo de listener:

Tipo de listener

Manejo de la IP de origen

remote_addrvisible para el servidor backend

Capa 4 (TCP/UDP)

CLB transmite directamente la IP de origen del cliente

Dirección IP de origen del cliente

Capa 7 (HTTP/HTTPS)

CLB actúa como proxy inverso y establece una nueva conexión TCP con el servidor backend

IP de reenvío interno de CLB (rango 100.64.0.0/10)

Con los listeners de capa 7, CLB agrega automáticamente el encabezado de solicitud HTTP X-Forwarded-For para transportar la dirección IP de origen del cliente. Si $remote_addr en su registro de acceso de Nginx muestra una IP de reenvío interno de CLB en el rango 100.64.0.0/10 en lugar de la IP del cliente, este es el comportamiento esperado.

Reemplazo de direcciones de nivel de conexión por IPs de cliente (Nginx y Apache)

Nginx

De forma predeterminada, $remote_addr en los registros de Nginx registra la IP de reenvío interno de CLB (rango 100.64.0.0/10). Para reemplazarla por la IP real del cliente y permitir que los formatos de registro existentes, el control de acceso y las reglas de limitación de tasa funcionen sin modificaciones, utilice el módulo ngx_http_realip_module:

  1. Ejecute nginx -V | grep http_realip_module para verificar que el módulo esté instalado.

  2. Agregue lo siguiente al bloque http en el archivo de configuración (predeterminado: /etc/nginx/nginx.conf):

    set_real_ip_from  100.64.0.0/10;
    real_ip_header    X-Forwarded-For;
    real_ip_recursive on;
  3. Ejecute sudo nginx -t para validar la configuración y luego ejecute sudo nginx -s reload para recargarla.

Una vez que la configuración surta efecto, revise el registro de acceso (predeterminado: /var/log/nginx/access.log ) para confirmar que $remote_addr ahora muestra la IP real del cliente.
Si el tráfico pasa por múltiples proxies como WAF o CDN, agregue los rangos de IP de origen de cada capa de proxy a set_real_ip_from .
Las solicitudes de comprobación de estado (HEAD, sin X-Forwarded-For ) seguirán mostrando $remote_addr como 100.64.0.0/10 , lo cual es el comportamiento esperado.

Apache

De forma predeterminada, %h en los registros de Apache registra la IP de reenvío interno de CLB. Para reemplazarla por la IP real del cliente y permitir que los formatos de registro existentes y las reglas de control de acceso Require ip funcionen sin modificaciones, utilice el módulo integrado mod_remoteip de Apache 2.4:

  1. Ejecute httpd -M | grep remoteip_module para verificar que el módulo esté instalado.

  2. Agregue lo siguiente al archivo de configuración (predeterminado: /etc/httpd/conf/httpd.conf):

    RemoteIPHeader       X-Forwarded-For
    RemoteIPTrustedProxy 100.64.0.0/10
  3. Ejecute sudo systemctl restart httpd para reiniciar el servicio de Apache.

Una vez que la configuración surta efecto, revise el registro de acceso (predeterminado: /var/log/httpd/access_log ) para confirmar que %h ahora muestra la IP real del cliente.
Si el tráfico pasa por múltiples proxies como WAF o CDN, agregue los rangos de IP de origen de cada capa de proxy a RemoteIPTrustedProxy .
Las solicitudes de comprobación de estado (HEAD, sin X-Forwarded-For ) seguirán mostrando %h como 100.64.0.0/10 , lo cual es el comportamiento esperado.

Documentos relacionados

Otros tipos de load balancer utilizan métodos diferentes: