RequestHeader avec la variable d'environnement Apache


13

J'ai installé Apache comme équilibreur de charge. Je voulais que Apache définisse l'en-tête X-Forwarded-Proto, mais cela ne fonctionne pas:

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

L'en-tête est défini sur null. Une idée pourquoi?

Réponses:


15

Tard mais quand même, je viens de traiter le même problème, et cela a fonctionné pour moi:

RequestHeader set X_FORWARDED_PROTO 'https' env=HTTPS

La documentation dit:

Lorsque la directive RequestHeader est utilisée avec l'argument add, append ou set, un quatrième argument peut être utilisé pour spécifier les conditions dans lesquelles l'action sera effectuée. Si la variable d'environnement spécifiée dans l'argument env = ... existe (ou si la variable d'environnement n'existe pas et env =! ... est spécifiée), l'action spécifiée par la directive RequestHeader prendra effet. Sinon, la directive n'aura aucun effet sur la demande.

Alors que la variable d'environnement HTTPS n'est définie que lorsque la demande est effectuée via SSL.


3
Selon en.wikipedia.org/wiki/List_of_HTTP_header_fields, l'en-tête devrait avoir des tirets plutôt que des traits de soulignement: RequestHeader set X-Forwarded-Proto 'https' env = HTTPS C'est également l'en-tête que l'ELB d'Amazon envoie.
loevborg du

9

Vous ne voulez pas ça; il définirait votre en-tête sur "HTTP / 1.1" (même sur une demande https) - probablement pas terriblement utile à tout ce que vous passez.

Vous avez différents blocs VirtualHost pour http et https; il suffit de coder en dur le RequestHeaderparamètre dans chacun.

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

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

1
Cela ne répond toujours pas à la question de savoir pourquoi les variables d'environnement ne fonctionnent pas. Je voulais également conserver le port et certaines autres valeurs, dont certaines ne peuvent pas être codées en dur comme ça.
John Crenshaw

3

Vous pouvez résoudre ce problème en utilisant le earlymot clé:

RequestHeader set X-Forwarded-Proto "https" early

Sinon, vous pouvez faire ce que John Crenshaw a suggéré, c'est-à-dire utiliser RewriteRuleau lieu de ProxyPassdirectives.


1
Comment puis-je déboguer si apache envoie réellement cet en-tête?
codecowboy

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.