Intestazioni HTTP e Application Load Balancer - Sistema di bilanciamento del carico elastico

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Intestazioni HTTP e Application Load Balancer

Le richieste e le risposte HTTP utilizzano i campi intestazione per inviare informazioni sui messaggi HTTP. Le intestazioni HTTP vengono aggiunte automaticamente. I campi intestazione sono costituti da coppie nome-valore separati da due punti e intervallati da un ritorno a capo e un avanzamento riga. Un insieme standard di campi dell'intestazione HTTP è definito nella RFC 2616 intestazioni di messaggi. Sono anche disponibili intestazioni HTTP non standard che vengono aggiunte automaticamente e sono ampiamente utilizzate dalle applicazioni. Alcune delle intestazioni HTTP non standard hanno un prefisso X-Forwarded. Gli Application Load Balancer supportano le seguenti intestazioni X-Forwarded.

Per ulteriori informazioni sulle connessioni HTTP, consulta Routing della richiesta nella Guida per l'utente di Elastic Load Balancing.

X-Forwarded-For

L'intestazione della richiesta X-Forwarded-For consente di identificare l'indirizzo IP di un client quando utilizzi un sistema di bilanciamento del carico HTTP o HTTPS. Poiché i sistemi di bilanciamento del carico intercettano il traffico tra client e server, i log di accesso al server contengono solo l'indirizzo IP del sistema di bilanciamento del carico. Per visualizzare l'indirizzo IP del client, utilizza l'attributo routing.http.xff_header_processing.mode. Questo attributo consente di modificare, mantenere o rimuovere l'intestazione X-Forwarded-For nella richiesta HTTP prima che Application Load Balancer la invii alla destinazione. I valori possibili per questo attributo sono append, preserve e remove. Il valore predefinito per questo attributo è append.

Importante

L'X-Forwarded-Forintestazione deve essere utilizzata con cautela a causa dei potenziali rischi per la sicurezza. Le voci possono essere considerate affidabili solo se aggiunte da sistemi adeguatamente protetti all'interno della rete.

Modalità di elaborazione

Append

Per impostazione predefinita, Application Load Balancer memorizza l'indirizzo IP del client nell'intestazione della richiesta X-Forwarded-For e passa l'intestazione al server. Se l'intestazione della richiesta X-Forwarded-For non è inclusa nella richiesta originale, il sistema di bilanciamento del carico ne crea una con l'indirizzo IP del client come valore della richiesta. Altrimenti, il load balancer aggiunge l'indirizzo IP del client all'intestazione esistente e quindi passa l'intestazione al server. L'intestazione della richiesta X-Forwarded-For può contenere più indirizzi IP separati da virgole.

L'intestazione della richiesta X-Forwarded-For assume la seguente forma:

X-Forwarded-For: client-ip-address

Di seguito è riportata un'intestazione della richiesta X-Forwarded-For di esempio per un client con l'indirizzo IP 203.0.113.7.

X-Forwarded-For: 203.0.113.7

Di seguito è riportato un esempio di intestazione di X-Forwarded-For richiesta per un client con un indirizzo di. IPv6 2001:DB8::21f:5bff:febf:ce22:8a2e

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

Quando l'attributo di conservazione della porta del client (routing.http.xff_client_port.enabled) è abilitato nel sistema di bilanciamento del carico, l'intestazione della richiesta X-Forwarded-For include il client-port-number aggiunto al client-ip-address, separato da due punti. L'intestazione assume così la seguente forma:

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

Si noti IPv6 infatti che quando il sistema di bilanciamento del carico aggiunge il client-ip-address all'intestazione esistente, racchiude l'indirizzo tra parentesi quadre.

Di seguito è riportato un esempio di intestazione di X-Forwarded-For richiesta per un client con un IPv4 indirizzo e un numero di porta di. 12.34.56.78 8080

X-Forwarded-For: 12.34.56.78:8080

Di seguito è riportato un esempio di intestazione di X-Forwarded-For richiesta per un client con un IPv6 indirizzo 2001:db8:85a3:8d3:1319:8a2e:370:7348 e un numero di porta di. 8080

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

Preserve

La modalità preserve nell'attributo garantisce che l'intestazione X-Forwarded-For nella richiesta HTTP non venga modificato in alcun modo prima di essere inviata alle destinazioni.

Rimuovi

La modalità remove nell'attributo rimuove l'intestazione X-Forwarded-For nella richiesta HTTP prima di inviarla alle destinazioni.

Se si abilita l'attributo di conservazione della porta del client (routing.http.xff_client_port.enabled) e inoltre si seleziona preserve o remove per l'attributo routing.http.xff_header_processing.mode, l'Application Load Balancer sovrascrive l'attributo di conservazione della porta del client. Mantiene l'intestazione X-Forwarded-For invariata o la rimuove, a seconda della modalità selezionata, prima di inviarla alle destinazioni.

La tabella seguente mostra esempi dell'intestazione X-Forwarded-For che la destinazione riceve quando si seleziona la modalità append, preserve o remove. In questo esempio, l'indirizzo IP dell'ultimo hop è 127.0.0.1.

Descrizione della richiesta Richiesta di esempio append preserve remove
La richiesta viene inviata senza intestazione XFF GET /index.html HTTP/1.1 Host: example.com X-Forwarded-For: 127.0.0.1 Non presente Non presente
La richiesta viene inviata con un'intestazione XFF e un indirizzo IP client. 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 Non presente
La richiesta viene inviata con un'intestazione XFF con più indirizzi IP client. 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 Non presente
Console
Per gestire l'intestazione X-Forwarded-For
  1. Apri la EC2 console Amazon all'indirizzo https://console.aws.amazon.com/ec2/.

  2. Seleziona Sistemi di bilanciamento del carico nel riquadro di navigazione.

  3. Selezionare il load balancer.

  4. Nella scheda Attributi, scegli Modifica.

  5. Nella sezione Configurazione del traffico, in Gestione dei pacchetti, per l'X-Forwarded-For intestazione, scegli Aggiungi (impostazione predefinita), Conserva o Rimuovi.

  6. Scegli Save changes (Salva modifiche).

AWS CLI
Per gestire l'intestazione X-Forwarded-For

Usa il modify-load-balancer-attributescomando con l'routing.http.xff_header_processing.modeattributo. I valori possibili sono append, preserve e remove. Il valore predefinito è append.

aws elbv2 modify-load-balancer-attributes \ --load-balancer-arn load-balancer-arn \ --attributes "Key=routing.http.xff_header_processing.mode,Value=preserve"
CloudFormation
Per gestire l'X-Forwarded-Forintestazione

Aggiorna la AWS::ElasticLoadBalancingV2::LoadBalancerrisorsa per includere l'routing.http.xff_header_processing.modeattributo. I valori possibili sono append, preserve e remove. Il valore predefinito è 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

L'intestazione della richiesta X-Forwarded-Proto consente di identificare il protocollo (HTTP o HTTPS) utilizzato da un client per connettersi al tuo load balancer. I log di accesso al server contengono solo il protocollo utilizzato tra il server e il load balancer; non contengono informazioni sul protocollo utilizzato tra il client e il load balancer. Per determinare il protocollo utilizzato tra il client e il load balancer, utilizzare l'intestazione della richiesta X-Forwarded-Proto. Elastic Load Balancing archivia il protocollo utilizzato tra il client e il load balancer nell'intestazione della richiesta X-Forwarded-Proto e passa l'intestazione al server.

La tua applicazione o il tuo sito Web può utilizzare il protocollo memorizzato nell'intestazione della richiesta X-Forwarded-Proto per eseguire il rendering di una risposta che reindirizza all'URL appropriato.

L'intestazione della richiesta X-Forwarded-Proto assume la seguente forma:

X-Forwarded-Proto: originatingProtocol

L'esempio seguente contiene un'intestazione della richiesta X-Forwarded-Proto per una richiesta originata dal client come richiesta HTTPS:

X-Forwarded-Proto: https

X-Forwarded-Port

L'intestazione della richiesta X-Forwarded-Port consente di identificare la porta di destinazione utilizzata dal client per connettersi al load balancer.