在 Apache 反向代理中記錄回應標頭而不將其傳送到客戶端

在 Apache 反向代理中記錄回應標頭而不將其傳送到客戶端

我們使用多個 Apache 伺服器作為眾多後端伺服器前面的反向代理。後端伺服器發送 HTTP 回應標頭(“Cast”),其中包含後端伺服器的內部名稱。

在反向代理中,我想記錄後端伺服器回應標頭的內容並防止標頭髮送到客戶端。

%{Cast}o透過插入我們的自訂LogFormat配置來記錄標頭很簡單。此外,透過使用防止標頭髮送到客戶端很容易Header unset Cast

唯一的問題是,當取消設定標頭時,它無法再被記錄。

有沒有辦法將後端的回應標頭儲存在變數中,取消設定標頭並記錄變數?

筆記

  • 用作反向代理的 Apache 伺服器是 RHEL 6 上的 Apache 2.2 和 RHEL7 上的 2.4
  • 反向代理規則使用ProxyPassRewriteRule ... [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>

相關內容