I have Apache set up as a load balancer. I wanted to make apache set the X-Forwarded-Proto header, but this doesn't work:

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

The header gets set to null. Any idea why?

link|improve this question
feedback

2 Answers

You don't want that; it'd set your header to "HTTP/1.1" (even on an https request) - probably not terribly useful to whatever you're passing to.

You have different VirtualHost blocks for http and https; just hardcode the RequestHeader setting in each.

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

<VirtualHost *:443>
    RequestHeader set X-Forwarded-Proto "https"
    ...
</VirtualHost>
link|improve this answer
This still doesn't answer the question of why the environment variables aren't working. I also wanted to preserve the port and some other values, some of which can't be hard coded like this. – John Crenshaw Apr 9 '11 at 10:25
feedback
up vote 1 down vote accepted

Found the cause. Turns out it is an order of operations issue. mod_rewrite is responsible for supplying these environment variables, but Apache doesn't process it until AFTER it handles any ProxyPass requests. Until then, it will just set null. The only workaround appears to be to do the proxying via mod_rewrite.

See http://www.gossamer-threads.com/lists/apache/users/267160?do=post_view_threaded#267160

link|improve this answer
feedback

Your Answer

 
or
required, but never shown

Not the answer you're looking for? Browse other questions tagged or ask your own question.