Todos os produtos
Search
Central de documentação

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

Última atualização: Aug 26, 2026

Obtenha o endereço IP do cliente no cabeçalho HTTP X-Forwarded-For ao usar um listener de Camada 7 do CLB.

Como funciona

Os listeners de Camada 7 do CLB (HTTP/HTTPS) preservam o endereço IP do cliente no cabeçalho HTTP X-Forwarded-For. Os servidores de backend podem recuperar esse IP após a configuração.

O campo X-Forwarded-For tem o seguinte formato:

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

Nesse método, o endereço IP mais à esquerda na lista corresponde ao IP do cliente.

O CLB encerra a conexão HTTPS e se comunica com os servidores de backend via HTTP. Configure os servidores de backend apenas para HTTP, mesmo ao usar um listener HTTPS.

Procedimento

Pré-requisitos

Etapa 1: Verificar se o listener usa X-Forwarded-For

  1. Faça login no console do Classic Load Balancer (CLB).

  2. Na barra de navegação superior, selecione a região onde a instância está implantada.

  3. Na página Instances, localize a instância desejada e clique em seu ID.

  4. Na página Instance Details, clique na aba Listener, encontre o listener de Camada 7 desejado e clique em seu ID.

  5. Na página de detalhes do listener, verifique se a seção Custom HTTP Header inclui X-Forwarded-For: Retrieve Client IP.

    Por padrão, os listeners de Camada 7 do CLB usam o cabeçalho X-Forwarded-For para obter o endereço IP do cliente. Não é possível desativar esse recurso.

Etapa 2: Configurar os servidores de backend

  • Esta seção descreve como registrar o endereço IP do cliente nos logs de acesso do servidor de backend (por meio do campo X-Forwarded-For). As variáveis da camada de conexão (como $remote_addr do Nginx) continuam exibindo o IP de encaminhamento do CLB e não são afetadas.

  • Para substituir a variável da camada de conexão (como $remote_addr) pelo IP real do cliente e permitir que formatos de log existentes, controles de acesso e regras de limitação de taxa funcionem sem modificações, consulte Replace connection-layer addresses with client IPs (Nginx and Apache).

Servidor Nginx

Ambiente de exemplo: CentOS 7.9 com Nginx 1.20.1. Sua configuração pode ser diferente.

  1. Execute nginx -V | grep http_realip_module para verificar se o http_realip_module está instalado. O Nginx usa esse módulo para analisar registros X-Forwarded-For.

    Se a saída incluir --with-http_realip_module, o módulo está instalado. Prossiga para a próxima etapa.

    Exemplo de saída quando o 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'
    
    O http_realip_module está disponível desde o Nginx 1.0.4 (2011). Se você usa uma versão anterior, faça backup da sua configuração e atualize o Nginx.
    Caso o http_realip_module não esteja instalado, recompile o Nginx com o módulo ou reinstale-o usando um gerenciador de pacotes como yum.
  2. Edite o arquivo de configuração do Nginx. Execute nginx -t para localizar o caminho do arquivo. O padrão é /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. Execute o comando sudo nginx -s reload para recarregar a configuração do Nginx.

Servidor Apache

Ambiente de exemplo: CentOS 7.9 com Apache 2.4.6. Sua configuração pode ser diferente.

  1. Execute httpd -M | grep remoteip_module para verificar se o remoteip_module está instalado. O Apache usa esse módulo para analisar registros X-Forwarded-For.

    Se a saída incluir remoteip_module (shared), o módulo está instalado. Prossiga para a próxima etapa.

    O remoteip_module está disponível desde o Apache 2.4.0 (2012). Se você usa uma versão anterior, faça backup da sua configuração e atualize o Apache.
    Caso o remoteip_module não esteja instalado, recompile o Apache com o módulo ou reinstale-o usando um gerenciador de pacotes como yum.
  2. Edite o arquivo de configuração do Apache. O caminho padrão é /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. Execute o comando sudo systemctl restart httpd para reiniciar o service do Apache.

Servidor IIS

Ambiente de exemplo: Windows Server 2016. Sua configuração pode ser diferente.

  1. Baixe e descompacte o arquivo F5XForwardedFor.

  2. De acordo com a arquitetura do seu sistema operacional, copie F5XFFHttpModule.dll e F5XFFHttpModule.ini do diretório x86\ ou x64\ para um local com permissões de leitura do IIS.

  3. No Server Manager, abra o IIS Manager.

  4. Selecione o servidor e clique duas vezes em Modules.

  5. Clique em Configure Native Modules e, em seguida, clique em Register.

  6. Adicione o arquivo .dll baixado.

    1. Insira o nome do arquivo, selecione o caminho e clique em OK.

    2. O sistema seleciona automaticamente o módulo recém-registrado. Clique em OK.Register module

  7. Retorne à home do servidor e clique duas vezes no módulo Logging. Configure o formato de log para registrar o campo X-Forwarded-For.

    1. Clique em Select Fields.

      image.png

    2. No canto inferior esquerdo, clique em Add Field, adicione o campo de log e clique em OK.

      image.png

    3. No canto superior direito, clique em Apply para salvar as alterações.

  8. Reinicie o servidor IIS para que a configuração entre em vigor.

Etapa 3: Verificar a obtenção do IP do cliente

Siga as etapas correspondentes ao seu tipo de servidor.

Servidor Nginx

Verifique o log de acesso do Nginx para confirmar a obtenção do IP do cliente.

O caminho padrão para o log de acesso do Nginx é /var/log/nginx/access.log.

O IP mais à esquerda no campo $http_x_forwarded_for é o endereço IP do cliente.

image.png

Servidor Apache

Verifique o log de acesso do Apache para confirmar a obtenção do IP do cliente.

O caminho padrão para o log de acesso do Apache é /var/log/httpd/access_log.

O IP mais à esquerda no campo %{X-Forwarded-For}i é o endereço IP do cliente.

image.png

Servidor IIS

Verifique o log do IIS para confirmar a obtenção do IP do cliente.

Localize o caminho do arquivo de log no módulo Logging.

image.png

O IP mais à esquerda no campo X-Forwarded-For é o endereço IP do cliente.

image.png

Perguntas frequentes

Acesso frequente de IPs iniciados com 100

O sistema CLB encaminha solicitações externas para instâncias ECS de backend e realiza verificações de integridade. Ambos os tipos de solicitação têm origem no próprio sistema.

O sistema CLB usa o bloco CIDR reservado 100.64.0.0/10. Esse bloco é exclusivo da Alibaba Cloud e não representa riscos de segurança, mas explica o acesso frequente de IPs iniciados com 100.

Certifique-se de que o iptables e outros softwares de segurança em seus servidores não bloqueiem esse bloco CIDR.

Obtenção de IPs de cliente com WAF, CDN e GA

Se o tráfego passar por WAF, CDN ou Global Accelerator (GA) antes de chegar ao CLB, você ainda poderá usar o X-Forwarded-For para obter o IP do cliente. Esses serviços repassam o X-Forwarded-For por padrão, sem necessidade de configuração adicional.

Para evitar falsificação do X-Forwarded-For, use um cabeçalho personalizado para registrar o IP do cliente. Por exemplo, em uma arquitetura cliente > CDN > WAF > CLB > ECS, o CDN pode repassar o cabeçalho Ali-Cdn-Real-Ip. No WAF, selecione Specify header field como método de determinação do IP do cliente e defina o cabeçalho como Ali-Cdn-Real-Ip. Defina a variável de log do Nginx como $http_Ali_Cdn_Real_Ip.

Medidas adicionais de segurança:

  • Valide e filtre o cabeçalho XFF nos servidores de backend. Verifique o formato e os endereços IP e rejeite valores inválidos ou suspeitos.

  • Use firewalls e ACLs entre o CLB e os servidores de backend para filtrar solicitações maliciosas direcionadas ao cabeçalho XFF.

  • Use criptografia SSL/TLS para proteger as comunicações, incluindo a transmissão do cabeçalho XFF, contra ataques man-in-the-middle.

Obtenção de IPs de cliente em um ambiente ACK

Em um cluster do Container Service for Kubernetes (ACK), o método é o mesmo, mas alguns detalhes operacionais diferem. Network management FAQ.

Listener de Camada 4 vs Camada 7: comportamento do IP de source

Quando uma solicitação de cliente passa pelo CLB, o IP de source visível para os servidores de backend depende do tipo de listener:

Tipo de listener

Tratamento do IP de source

remote_addr visto pelo servidor de backend

Camada 4 (TCP/UDP)

O CLB repassa diretamente o IP de source do cliente

Endereço IP de source do cliente

Camada 7 (HTTP/HTTPS)

O CLB atua como proxy reverso e estabelece uma nova conexão TCP com o servidor de backend

IP de encaminhamento interno do CLB (faixa 100.64.0.0/10)

Com listeners de Camada 7, o CLB adiciona automaticamente o cabeçalho de solicitação HTTP X-Forwarded-For para transportar o endereço IP de source do cliente. Se $remote_addr no seu log de acesso do Nginx exibir um IP de encaminhamento interno do CLB na faixa 100.64.0.0/10 em vez do IP do cliente, trata-se de um comportamento esperado.

Substituir endereços da camada de conexão por IPs de cliente (Nginx e Apache)

Nginx

Por padrão, $remote_addr nos logs do Nginx registra o IP de encaminhamento interno do CLB (faixa 100.64.0.0/10). Para substituí-lo pelo IP real do cliente e permitir que formatos de log existentes, controles de acesso e regras de limitação de taxa funcionem sem modificações, use o módulo ngx_http_realip_module:

  1. Execute nginx -V | grep http_realip_module para verificar se o módulo está instalado.

  2. Adicione o seguinte ao bloco http no arquivo de configuração (padrão: /etc/nginx/nginx.conf):

    set_real_ip_from  100.64.0.0/10;
    real_ip_header    X-Forwarded-For;
    real_ip_recursive on;
  3. Execute sudo nginx -t para validar a configuração e, em seguida, execute sudo nginx -s reload para recarregá-la.

Após a configuração entrar em vigor, verifique o log de acesso (padrão: /var/log/nginx/access.log ) para confirmar que $remote_addr agora exibe o IP real do cliente.
Se o tráfego passar por múltiplos proxies, como WAF ou CDN, adicione as faixas de IP de source de cada camada de proxy a set_real_ip_from .
As solicitações de verificação de integridade (HEAD, sem X-Forwarded-For ) continuarão exibindo $remote_addr como 100.64.0.0/10 , o que é esperado.

Apache

Por padrão, %h nos logs do Apache registra o IP de encaminhamento interno do CLB. Para substituí-lo pelo IP real do cliente e permitir que formatos de log existentes e regras de controle de acesso Require ip funcionem sem modificações, use o módulo integrado mod_remoteip do Apache 2.4:

  1. Execute httpd -M | grep remoteip_module para verificar se o módulo está instalado.

  2. Adicione o seguinte ao arquivo de configuração (padrão: /etc/httpd/conf/httpd.conf):

    RemoteIPHeader       X-Forwarded-For
    RemoteIPTrustedProxy 100.64.0.0/10
  3. Execute sudo systemctl restart httpd para reiniciar o service do Apache.

Após a configuração entrar em vigor, verifique o log de acesso (padrão: /var/log/httpd/access_log ) para confirmar que %h agora exibe o IP real do cliente.
Se o tráfego passar por múltiplos proxies, como WAF ou CDN, adicione as faixas de IP de source de cada camada de proxy a RemoteIPTrustedProxy .
As solicitações de verificação de integridade (HEAD, sem X-Forwarded-For ) continuarão exibindo %h como 100.64.0.0/10 , o que é esperado.

Documentos relacionados

Outros tipos de balanceador de carga usam métodos diferentes: