RequestHeader с переменной окружения Apache

У меня Apache настроен как балансировщик нагрузки. Я хотел, чтобы apache установил заголовок X-Forwarded-Proto, но это не работает:

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

Заголовок получает значение null. Любая идея почему?

12 голосов | спросил John Crenshaw 9 AMpSat, 09 Apr 2011 06:58:07 +040058Saturday 2011, 06:58:07

4 ответа


2

Нашел причину. Оказывается, это порядок операций. mod_rewrite отвечает за поставку этих переменных окружения, но Apache не обрабатывает его, пока ПОСЛЕ того, как он обрабатывает любые запросы ProxyPass. До тех пор он просто установит нуль. Единственным обходным решением является проксирование через mod_rewrite.

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

ответил John Crenshaw 13 PMpWed, 13 Apr 2011 17:54:28 +040054Wednesday 2011, 17:54:28
12

Поздно, но все же, я только что рассмотрел ту же проблему, и это сработало для меня:

RequestHeader set X_FORWARDED_PROTO 'https' env=HTTPS

документация говорит:

  

Когда директива RequestHeader используется с добавлением, добавлением или установкой   аргумент, четвертый аргумент может быть использован для задания условий в   которые будут предприняты. Если указанная переменная среды   в аргументе env = ... существует (или если переменная окружения   не существует и указано env =! ...), то действие, указанное   Будет действовать директива RequestHeader. В противном случае, директива   не будет влиять на запрос.

Пока переменная среды HTTPS устанавливается только тогда, когда запрос выполняется через SSL.

ответил iNecas 30 52012vEurope/Moscow11bEurope/MoscowFri, 30 Nov 2012 17:55:14 +0400 2012, 17:55:14
9

Вы не хотите этого; он установил бы ваш заголовок на «HTTP /1.1» (даже по запросу https) - вероятно, не очень полезно для того, что вы проходите.

У вас есть разные блоки VirtualHost для http и https; просто установите код RequestHeader в каждом.

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

<VirtualHost *:443>
    RequestHeader set X-Forwarded-Proto "https"
    ...
</VirtualHost>
ответил Shane Madden 9 AMpSat, 09 Apr 2011 10:41:59 +040041Saturday 2011, 10:41:59
0

Вы можете исправить это, используя early ключевое слово:

RequestHeader set X-Forwarded-Proto "https" early

В противном случае вы можете сделать то, что предложил Джон Креншоу, который использует RewriteRule вместо ProxyPass.

ответил docwhat 7 PM00000070000004231 2012, 19:07:42

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132