RequestHeader com a variável de ambiente Apache

12

Eu tenho o Apache configurado como um balanceador de carga. Eu queria fazer o apache configurar 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 ideia do porquê?

    
por John Crenshaw 09.04.2011 / 04:58

4 respostas

2

Encontrou a causa. Acontece que é uma questão de ordem de operações. O mod_rewrite é responsável pelo fornecimento dessas variáveis de ambiente, mas o Apache não o processa até DEPOIS que ele lida com quaisquer solicitações ProxyPass. Até então, apenas será definido como nulo. A única solução parece ser fazer o proxy via mod_rewrite.

Veja link

    
por 13.04.2011 / 15:54
12

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

RequestHeader set X_FORWARDED_PROTO 'https' env=HTTPS

A documentação diz:

When the RequestHeader directive is used with the add, append, or set argument, a fourth argument may be used to specify conditions under which the action will be taken. If the environment variable specified in the env=... argument exists (or if the environment variable does not exist and env=!... is specified) then the action specified by the RequestHeader directive will take effect. Otherwise, the directive will have no effect on the request.

Enquanto a variável de ambiente HTTPS é definida somente quando a solicitação é feita por meio de SSL.

    
por 30.11.2012 / 14:55
9

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

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

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

<VirtualHost *:443>
    RequestHeader set X-Forwarded-Proto "https"
    ...
</VirtualHost>
    
por 09.04.2011 / 08:41
0

Você pode corrigir isso usando a early palavra-chave:

RequestHeader set X-Forwarded-Proto "https" early

Caso contrário, você pode fazer o que John Crenshaw sugeriu, que é usar RewriteRule em vez de ProxyPass diretivas.

    
por 07.08.2012 / 17:07