我们使用多台 Apache 服务器作为众多后端服务器的反向代理。后端服务器发送一个 HTTP 响应标头(“Cast”),其中包含后端服务器的内部名称。
在反向代理中,我想记录后端服务器响应标头的内容并阻止该标头被发送到客户端。
只需插入%{Cast}o
我们的自定义LogFormat
配置,记录标头就很简单。此外,通过使用Header unset Cast
唯一的问题是,当取消设置标题时,它就无法再被记录。
有没有办法将后端的响应标头存储在变量中,取消设置标头并记录变量?
笔记
- 用作反向代理的 Apache 服务器是 RHEL 6 上的 Apache 2.2 和 RHEL7 上的 Apache 2.4
- 反向代理规则
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>