Мы используем несколько серверов Apache в качестве обратного прокси перед многочисленными серверами backend. Серверы backend отправляют заголовок ответа HTTP ("Cast"), который содержит внутреннее имя сервера backend.
В обратном прокси-сервере я хотел бы регистрировать содержимое заголовка ответа внутреннего сервера и предотвратить отправку заголовка клиенту.
Регистрация заголовка проста в установке %{Cast}o
в нашей пользовательской LogFormat
конфигурации. Также легко предотвратить отправку заголовка клиенту, используяHeader unset Cast
Единственная проблема в том, что при отключении заголовка его больше нельзя будет зарегистрировать.
Есть ли способ сохранить заголовок ответа бэкэнда в переменной, сбросить заголовок и зарегистрировать переменную?
Примечания
- В качестве обратных прокси-серверов используются серверы Apache 2.2 на RHEL 6 и 2.4 на RHEL7.
- Правила обратного прокси используют
ProxyPass
либоRewriteRule ... [P]
решение1
Раньше я использовал промежуточную запись VirtualHost в качестве обходного пути в подобных ситуациях, когда некоторые директивы не работали вместе:
Ваша текущая конфигурация может выглядеть так:
<VirtualHost *:80>
ServerName www.example.com
ProxyPass /app http://app.example.com/app
ProxyPassReverse /app http://app.example.com/app
</VirtualHost>
Измените его так, чтобы он указывал на промежуточный виртуальный хост, и удалите заголовок из ответов:
<VirtualHost *:80>
ServerName www.example.com
ProxyPass /app http://localhost:8000/app
ProxyPassReverse /app http://localhost:8000/app
Header unset Cast
</VirtualHost>
и новый виртуальный хост, на котором вы по-прежнему сможете регистрировать свои заголовки Cast:
Listen 127.0.0.1:8000
<VirtualHost 127.0.0.1:8000>
ServerName localhost
ProxyPass /app http://app.example.com/app
ProxyPassReverse /app http://app.example.com/appp
LogFormat %{X-Forwarded-For}o %{Cast}o ...
</VirtualHost>