在 Apache 反向代理中记录响应标头而不将其发送到客户端

在 Apache 反向代理中记录响应标头而不将其发送到客户端

我们使用多台 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>

相关内容