RequestHeader ze zmienną środowiskową Apache


13

Mam Apache skonfigurowany jako moduł równoważenia obciążenia. Chciałem, aby apache ustawił nagłówek X-Forwarded-Proto, ale to nie działa:

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

Nagłówek zostaje ustawiony na null. Masz pomysł, dlaczego?

Odpowiedzi:


15

Późno, ale wciąż miałem do czynienia z tym samym problemem i to zadziałało dla mnie:

RequestHeader set X_FORWARDED_PROTO 'https' env=HTTPS

Dokumentacja mówi:

Gdy dyrektywa RequestHeader jest używana z argumentem add, append lub set, można użyć czwartego argumentu, aby określić warunki, w których zostanie podjęte działanie. Jeśli istnieje zmienna środowiskowa określona w argumencie env = ... (lub jeśli zmienna środowiskowa nie istnieje i podano env =! ...), wówczas działanie określone w dyrektywie RequestHeader zostanie zastosowane. W przeciwnym razie dyrektywa nie będzie miała wpływu na wniosek.

Podczas gdy zmienna środowiskowa HTTPS jest ustawiana tylko wtedy, gdy żądanie jest przesyłane przez SSL.


3
Według en.wikipedia.org/wiki/List_of_HTTP_header_fields nagłówek powinien zawierać myślniki, a nie podkreślenia: RequestHeader ustawia X-Forwarded-Proto „https” env = HTTPS Jest to również nagłówek wysyłany przez ELB Amazon.
loevborg

9

Nie chcesz tego; ustawiłby nagłówek na „HTTP / 1.1” (nawet na żądanie https) - prawdopodobnie nie jest to szczególnie przydatne do tego, co przekazujesz.

Masz różne bloki VirtualHost dla http i https; po prostu zakoduj RequestHeaderustawienia w każdym z nich.

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

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

1
To wciąż nie odpowiada na pytanie, dlaczego zmienne środowiskowe nie działają. Chciałem również zachować port i kilka innych wartości, z których niektórych nie da się tak na stałe zakodować.
John Crenshaw,

3

Możesz to naprawić za pomocą earlysłowa kluczowego:

RequestHeader set X-Forwarded-Proto "https" early

W przeciwnym razie możesz zrobić to, co sugerował John Crenshaw, czyli użyć RewriteRulezamiast ProxyPassdyrektyw.


1
Jak mogę debugować, czy apache faktycznie wysyła ten nagłówek?
codecowboy

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.