RequestHeader con la variable de entorno Apache


13

Tengo Apache configurado como equilibrador de carga. Quería que apache configurara el encabezado X-Fordered-Proto, pero esto no funciona:

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

El encabezado se establece en nulo. ¿Alguna idea de por qué?

Respuestas:


15

Tarde pero aún así, he tratado el mismo problema, y ​​esto funcionó para mí:

RequestHeader set X_FORWARDED_PROTO 'https' env=HTTPS

La documentación dice:

Cuando la directiva RequestHeader se usa con el argumento agregar, agregar o establecer, se puede usar un cuarto argumento para especificar las condiciones bajo las cuales se tomará la acción. Si la variable de entorno especificada en el argumento env = ... existe (o si la variable de entorno no existe y se especifica env =! ...), la acción especificada por la directiva RequestHeader surtirá efecto. De lo contrario, la directiva no tendrá efecto en la solicitud.

Si bien la variable de entorno HTTPS solo se establece cuando la solicitud se realiza a través de SSL.


3
De acuerdo con en.wikipedia.org/wiki/List_of_HTTP_header_fields, el encabezado debe tener guiones en lugar de guiones bajos: RequestHeader establece X-Fordered-Proto 'https' env = HTTPS Este es también el encabezado que envía el ELB de Amazon.
loevborg

9

No quieres eso; configuraría su encabezado en "HTTP / 1.1" (incluso en una solicitud https), probablemente no sea muy útil para lo que sea que esté pasando.

Tiene diferentes bloques de VirtualHost para http y https; simplemente codifique la RequestHeaderconfiguración en cada uno.

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

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

1
Esto todavía no responde a la pregunta de por qué las variables de entorno no funcionan. También quería preservar el puerto y algunos otros valores, algunos de los cuales no pueden codificarse así.
John Crenshaw

3

Puede solucionar esto usando la earlypalabra clave:

RequestHeader set X-Forwarded-Proto "https" early

De lo contrario, puede hacer lo que sugirió John Crenshaw, que es usar en RewriteRulelugar de ProxyPassdirectivas.


1
¿Cómo puedo depurar si Apache realmente está enviando este encabezado?
codecowboy

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.