RequestHeader con variabile d'ambiente Apache


13

Ho Apache impostato come bilanciamento del carico. Volevo che apache impostasse l'intestazione X-Forwarded-Proto, ma questo non funziona:

RequestHeader set X-Forwarded-Proto "%{SERVER_PROTOCOL}e"

L'intestazione viene impostata su null. Qualche idea sul perché?

Risposte:


15

In ritardo ma comunque, ho appena affrontato lo stesso problema e questo ha funzionato per me:

RequestHeader set X_FORWARDED_PROTO 'https' env=HTTPS

La documentazione dice:

Quando si utilizza la direttiva RequestHeader con l'argomento add, append o set, è possibile utilizzare un quarto argomento per specificare le condizioni in base alle quali verrà intrapresa l'azione. Se esiste la variabile di ambiente specificata nell'argomento env = ... (o se la variabile di ambiente non esiste e viene specificata env =! ...), l'azione specificata dalla direttiva RequestHeader avrà effetto. In caso contrario, la direttiva non avrà alcun effetto sulla richiesta.

Mentre la variabile di ambiente HTTPS è impostata solo quando la richiesta viene effettuata tramite SSL.


3
Secondo en.wikipedia.org/wiki/List_of_HTTP_header_fields l'intestazione dovrebbe contenere trattini anziché caratteri di sottolineatura: RequestHeader imposta X-Forwarded-Proto 'https' env = HTTPS Questa è anche l'intestazione che ELB di Amazon invia.
loevborg,

9

Non lo vuoi; imposterà la tua intestazione su "HTTP / 1.1" (anche su una richiesta HTTPS) - probabilmente non molto utile per qualsiasi cosa tu stia passando.

Hai diversi blocchi VirtualHost per http e https; basta codificare le RequestHeaderimpostazioni in ognuna.

<VirtualHost *:80>
    RequestHeader set X-Forwarded-Proto "http"
    ...
</VirtualHost>

<VirtualHost *:443>
    RequestHeader set X-Forwarded-Proto "https"
    ...
</VirtualHost>

1
Questo non risponde ancora alla domanda sul perché le variabili di ambiente non funzionino. Volevo anche preservare la porta e alcuni altri valori, alcuni dei quali non possono essere codificati in questo modo.
John Crenshaw,

3

Puoi risolvere questo problema usando la earlyparola chiave:

RequestHeader set X-Forwarded-Proto "https" early

Altrimenti, puoi fare ciò che John Crenshaw ha suggerito, che è l'uso al RewriteRuleposto delle ProxyPassdirettive.


1
Come posso eseguire il debug se Apache sta effettivamente inviando questa intestazione?
codecowboy,

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.