我們使用多個 Apache 伺服器作為眾多後端伺服器前面的反向代理。後端伺服器發送 HTTP 回應標頭(“Cast”),其中包含後端伺服器的內部名稱。
在反向代理中,我想記錄後端伺服器回應標頭的內容並防止標頭髮送到客戶端。
%{Cast}o
透過插入我們的自訂LogFormat
配置來記錄標頭很簡單。此外,透過使用防止標頭髮送到客戶端很容易Header unset Cast
唯一的問題是,當取消設定標頭時,它無法再被記錄。
有沒有辦法將後端的回應標頭儲存在變數中,取消設定標頭並記錄變數?
筆記
- 用作反向代理的 Apache 伺服器是 RHEL 6 上的 Apache 2.2 和 RHEL7 上的 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>