У мене Apache налаштований як балансир навантаження. Я хотів змусити Apache встановити заголовок X-Forwarded-Proto, але це не працює:
RequestHeader set X-Forwarded-Proto "%{SERVER_PROTOCOL}e"
Заголовок встановлюється на нуль. Будь-яка ідея чому?
У мене Apache налаштований як балансир навантаження. Я хотів змусити Apache встановити заголовок X-Forwarded-Proto, але це не працює:
RequestHeader set X-Forwarded-Proto "%{SERVER_PROTOCOL}e"
Заголовок встановлюється на нуль. Будь-яка ідея чому?
Відповіді:
Пізно, але все-таки я просто займався тим же питанням, і це працювало для мене:
RequestHeader set X_FORWARDED_PROTO 'https' env=HTTPS
Документація каже:
Коли директива RequestHeader використовується з аргументом додавання, додавання або встановлення, четвертий аргумент може бути використаний для визначення умов, за яких буде здійснено дію. Якщо змінна середовища, вказана в аргументі env = ..., існує (або якщо змінна середовища не існує, а env =! ... вказана), дія, визначена директивою RequestHeader, набере чинності. В іншому випадку директива не матиме впливу на запит.
Хоча змінна середовище HTTPS встановлюється лише тоді, коли запит робиться через SSL.
Ви цього не хочете; він встановить для вашого заголовка значення "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>
Ви можете виправити це за допомогою earlyключового слова:
RequestHeader set X-Forwarded-Proto "https" early
В іншому випадку ви можете зробити те, що запропонував Джон Креншо, а це використання RewriteRuleзамість ProxyPassдиректив.
Знайшов причину. Виявляється, це порядок видачі операцій. mod_rewrite відповідає за надання цих змінних середовища, але Apache не обробляє його, поки ПІСЛЯ не обробляє будь-які запити ProxyPass. До цього часу він просто встановить нуль. Єдине вирішення проблеми полягає в тому, щоб зробити проксінг через mod_rewrite.
Див. Http://www.gossamer-threads.com/lists/apache/users/267160?do=post_view_threaded#267160