Apache 환경 변수가있는 RequestHeader


13

Apache를로드 밸런서로 설정했습니다. 아파치가 X-Forwarded-Proto 헤더를 설정하고 싶었지만 작동하지 않습니다.

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

헤더는 null로 설정됩니다. 왜 그런지 알아?

답변:


15

늦었지만 여전히 똑같은 문제를 처리했으며 이것이 나를 위해 일했습니다.

RequestHeader set X_FORWARDED_PROTO 'https' env=HTTPS

문서는 말합니다 :

RequestHeader 지시문을 add, append 또는 set 인수와 함께 사용하면 작업이 수행 될 조건을 지정하기 위해 네 번째 인수가 사용될 수 있습니다. env = ... 인수에 지정된 환경 변수가 존재하거나 (또는 ​​환경 변수가 존재하지 않고 env =! ...가 지정된 경우) RequestHeader 지시문에 지정된 조치가 적용됩니다. 그렇지 않으면 지시문이 요청에 영향을 미치지 않습니다.

HTTPS 환경 변수는 SSL을 통해 요청한 경우에만 설정됩니다.


3
en.wikipedia.org/wiki/List_of_HTTP_header_fields 에 따르면 헤더에는 밑줄 대신 하이픈이 있어야합니다. RequestHeader는 X-Forwarded-Proto 'https'env = HTTPS를 설정합니다. 이것은 또한 Amazon의 ELB가 보내는 헤더입니다.
loevborg

9

당신은 그것을 원하지 않습니다; 헤더를 "HTTP / 1.1"(https 요청의 경우에도)으로 설정했습니다. 아마도 전달하는 모든 것에별로 유용하지 않을 것입니다.

http 및 https에 대해 다른 VirtualHost 블록이 있습니다. RequestHeader각각 의 설정을 하드 코딩하십시오 .

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

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

1
이것은 여전히 ​​환경 변수가 작동하지 않는 이유에 대한 질문에 대답하지 않습니다. 또한 포트와 다른 값을 보존하고 싶었습니다.이 중 일부는 하드 코딩 할 수 없습니다.
John Crenshaw

3

early키워드 를 사용하여이 문제를 해결할 수 있습니다 .

RequestHeader set X-Forwarded-Proto "https" early

그렇지 않으면 John Crenshaw가 제안한 것을 지시 RewriteRule대신 사용할 수 있습니다 ProxyPass.


1
아파치가 실제로이 헤더를 보내는 지 어떻게 디버깅 할 수 있습니까?
codecowboy

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.