Cabeçalhos HTTP e Application Load Balancers - Elastic Load Balancing

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Cabeçalhos HTTP e Application Load Balancers

As solicitações HTTP e as respostas HTTP usam campos de cabeçalho para enviar informações sobre as mensagens HTTP. Os cabeçalhos HTTP são adicionados automaticamente. Os campos de cabeçalho são pares de nome-valor separados por dois pontos e separados por um retorno de carro (CR) e um avanço de linha (LF). Um conjunto padrão de campos de cabeçalho HTTP está definido na RFC 2616, Cabeçalhos de mensagem. Também há a disponibilidade de cabeçalhos HTTP não padrão que são adicionados automaticamente e amplamente usados pelas aplicações. Alguns dos cabeçalhos HTTP não padrão possuem um prefixo X-Forwarded. Os Application Load Balancers são compatíveis com os seguintes cabeçalhos X-Forwarded.

Para obter mais informações sobre conexões HTTP, consulte Roteamento de solicitação no Manual do usuário do Elastic Load Balancing.

X-Forwarded-For

O cabeçalho da solicitação X-Forwarded-For ajuda você a identificar o endereço IP de um cliente quando usar um load balancer HTTP ou HTTPS. Como os balanceadores de carga interceptam o tráfego entre clientes e servidores, os logs de acesso do seu servidor vão conter apenas o endereço IP do balanceador de carga. Para ver o endereço IP do cliente, use o atributo routing.http.xff_header_processing.mode. Esse atributo permite que você modifique, preserve ou remova o cabeçalho X-Forwarded-For na solicitação HTTP antes que o Application Load Balancer envie a solicitação ao destino. Os valores possíveis para esse atributo são append, preserve e remove. O valor padrão desse atributo é append.

Importante

O cabeçalho X-Forwarded-For deve ser usado com cuidado devido ao potencial de riscos à segurança. As entradas só podem ser consideradas confiáveis se adicionadas por sistemas devidamente protegidos na rede.

Modo de processamento

Anexar

Por padrão, o Application Load Balancer armazena o endereço IP do cliente no cabeçalho de solicitação X-Forwarded-For e encaminha o cabeçalho para o seu servidor. Se o cabeçalho de solicitação X-Forwarded-For não estiver incluído na solicitação original, o balanceador de carga criará um com o endereço IP do cliente como o valor da solicitação. Caso contrário, o balanceador de carga anexará o endereço IP do cliente ao cabeçalho existente e encaminhará o cabeçalho para o seu servidor. O cabeçalho de solicitação X-Forwarded-For pode conter vários endereços IP separados por vírgula.

O cabeçalho de solicitação X-Forwarded-For leva a seguinte forma:

X-Forwarded-For: client-ip-address

Veja a seguir um exemplo de cabeçalho de solicitação X-Forwarded-For para um cliente com o endereço IP 203.0.113.7.

X-Forwarded-For: 203.0.113.7

Veja a seguir um exemplo de cabeçalho de X-Forwarded-For solicitação para um cliente com IPv6 endereço de2001:DB8::21f:5bff:febf:ce22:8a2e.

X-Forwarded-For: 2001:DB8::21f:5bff:febf:ce22:8a2e

Quando o atributo de preservação da porta do cliente (routing.http.xff_client_port.enabled) estiver habilitado no balanceador de carga, o cabeçalho X-Forwarded-For da solicitação incluirá o client-port-number anexado ao client-ip-address, separado por dois pontos. Em seguida, o cabeçalho adotará a seguinte forma:

IPv4 -- X-Forwarded-For: client-ip-address:client-port-number
IPv6 -- X-Forwarded-For: [client-ip-address]:client-port-number

Pois IPv6, observe que quando o balanceador de carga anexa o client-ip-address ao cabeçalho existente, ele coloca o endereço entre colchetes.

Veja a seguir um exemplo de cabeçalho de X-Forwarded-For solicitação para um cliente com um IPv4 endereço 12.34.56.78 e um número de porta de8080.

X-Forwarded-For: 12.34.56.78:8080

Veja a seguir um exemplo de cabeçalho de X-Forwarded-For solicitação para um cliente com um IPv6 endereço 2001:db8:85a3:8d3:1319:8a2e:370:7348 e um número de porta de8080.

X-Forwarded-For: [2001:db8:85a3:8d3:1319:8a2e:370:7348]:8080

Preservar

O modo preserve no atributo garante que o cabeçalho X-Forwarded-For na solicitação HTTP não seja modificado de nenhuma forma antes do envio para os destinos.

Remover

O modo remove no atributo remove o cabeçalho X-Forwarded-For na solicitação HTTP antes do envio para os destinos.

Se você habilitar o atributo de preservação da porta do cliente (routing.http.xff_client_port.enabled) e também selecionar preserve ou remove para o atributo routing.http.xff_header_processing.mode, o Application Load Balancer substituirá o atributo de preservação da porta do cliente. Dependendo do modo selecionado, ele mantém o cabeçalho X-Forwarded-For inalterado ou o remove antes de enviá-lo para os destinos.

A tabela a seguir mostra exemplos do cabeçalho X-Forwarded-For que o destino recebe quando você seleciona o modo append, preserve ou remove. Neste exemplo, o endereço IP do último salto é 127.0.0.1.

Descrição da solicitação Exemplo de solicitação append preserve remove
A solicitação é enviada sem cabeçalho XFF. GET /index.html HTTP/1.1 Host: example.com X-Forwarded-For: 127.0.0.1 Não está presente Não está presente
A solicitação é enviada com um cabeçalho XFF e um endereço IP do cliente. GET /index.html HTTP/1.1 Host: example.com X-Forwarded-For: 127.0.0.4 X-Forwarded-For: 127.0.0.4, 127.0.0.1 X-Forwarded-For: 127.0.0.4 Não está presente
A solicitação é enviada com um cabeçalho XFF e vários endereços IP do cliente. GET /index.html HTTP/1.1 Host: example.com X-Forwarded-For: 127.0.0.4, 127.0.0.8 X-Forwarded-For: 127.0.0.4, 127.0.0.8, 127.0.0.1 X-Forwarded-For: 127.0.0.4, 127.0.0.8 Não está presente
Console
Para gerenciar o X-Forwarded-For cabeçalho
  1. Abra o EC2 console da Amazon em https://console.aws.amazon.com/ec2/.

  2. No painel de navegação, selecione Balanceador de carga.

  3. Selecione o load balancer.

  4. Na guia Atributos, escolha Editar.

  5. Na seção Configuração de tráfego, em Tratamento de pacotes, para X-Forwarded-For cabeçalho, escolha Anexar (padrão), Preservar ou Remover.

  6. Escolha Salvar alterações.

AWS CLI
Para gerenciar o X-Forwarded-For cabeçalho

Use o comando modify-load-balancer-attributes com o atributo routing.http.xff_header_processing.mode. Os valores possíveis são append, preserve e remove. O padrão é append.

aws elbv2 modify-load-balancer-attributes \ --load-balancer-arn load-balancer-arn \ --attributes "Key=routing.http.xff_header_processing.mode,Value=preserve"
CloudFormation
Para gerenciar o X-Forwarded-For cabeçalho

Atualize o AWS::ElasticLoadBalancingV2::LoadBalancerrecurso para incluir o routing.http.xff_header_processing.mode atributo. Os valores possíveis são append, preserve e remove. O padrão é append.

Resources: myLoadBalancer: Type: AWS::ElasticLoadBalancingV2::LoadBalancer Properties: Name: my-alb Type: application Scheme: internal Subnets: - !Ref subnet-AZ1 - !Ref subnet-AZ2 SecurityGroups: - !Ref mySecurityGroup LoadBalancerAttributes: - Key: "routing.http.xff_header_processing.mode" Value: "preserve"

X-Forwarded-Proto

O cabeçalho da solicitação X-Forwarded-Proto ajuda você a identificar o protocolo (HTTP ou HTTPS) que um cliente usou para se conectar ao seu load balancer. Os logs de acesso do servidor contêm apenas o protocolo usado entre o servidor e o load balancer; eles não contêm informações sobre o protocolo usado entre o cliente e o load balancer. Para determinar o protocolo usado entre o cliente e o balanceador de carga, use o cabeçalho de solicitação X-Forwarded-Proto. O Elastic Load Balancing armazena o protocolo usado entre o cliente e o balanceador de carga no cabeçalho da solicitação X-Forwarded-Proto e encaminha o cabeçalho para seu servidor.

O aplicativo ou o site podem usar o protocolo armazenado no cabeçalho da solicitação X-Forwarded-Proto para renderizar uma resposta que redireciona para o URL apropriado.

O cabeçalho de solicitação X-Forwarded-Proto leva a seguinte forma:

X-Forwarded-Proto: originatingProtocol

O exemplo a seguir contém um cabeçalho de solicitação X-Forwarded-Proto para uma solicitação originada do cliente como solicitação de HTTPS:

X-Forwarded-Proto: https

X-Forwarded-Port

O cabeçalho de solicitação X-Forwarded-Port ajuda a identificar a porta de destino que o cliente usou para se conectar ao load balancer.