RequestHeader com variável de ambiente Apache


13

Eu tenho o Apache configurado como um balanceador de carga. Eu queria fazer o apache definir o cabeçalho X-Forwarded-Proto, mas isso não funciona:

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

O cabeçalho é definido como nulo. Alguma idéia do porquê?

Respostas:


15

Tarde, mas ainda assim, acabei de lidar com o mesmo problema, e isso funcionou para mim:

RequestHeader set X_FORWARDED_PROTO 'https' env=HTTPS

A documentação diz:

Quando a diretiva RequestHeader é usada com o argumento add, append ou set, um quarto argumento pode ser usado para especificar condições sob as quais a ação será executada. Se a variável de ambiente especificada no argumento env = ... existir (ou se a variável de ambiente não existir e env =! ... for especificada), a ação especificada pela diretiva RequestHeader entrará em vigor. Caso contrário, a diretiva não terá efeito sobre a solicitação.

Enquanto a variável de ambiente HTTPS é configurada apenas quando a solicitação é feita por SSL.


3
De acordo com en.wikipedia.org/wiki/List_of_HTTP_header_fields, o cabeçalho deve ter hífens em vez de sublinhados: RequestHeader define X-Forwarded-Proto 'https' env = HTTPS Este também é o cabeçalho que o ELB da Amazon envia.
loevborg

9

Você não quer isso; definiria o cabeçalho como "HTTP / 1.1" (mesmo em uma solicitação https) - provavelmente não é muito útil para o que você está passando.

Você tem diferentes blocos do VirtualHost para http e https; apenas codifique a RequestHeaderconfiguração em cada uma.

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

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

1
Isso ainda não responde à pergunta de por que as variáveis ​​de ambiente não estão funcionando. Eu também queria preservar a porta e alguns outros valores, alguns dos quais não podem ser codificados como este.
John Crenshaw

3

Você pode corrigir isso usando a earlypalavra-chave:

RequestHeader set X-Forwarded-Proto "https" early

Caso contrário, você pode fazer o que John Crenshaw sugeriu, que é o uso em RewriteRulevez de ProxyPassdiretivas.


1
Como posso depurar se o apache está realmente enviando esse cabeçalho?
Codecowboy

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.