Apache-Httpd
如何使用 SSL 直通在反向代理中添加 X-Forwarded-for 標頭
設置如下:
DMZ 中的代理伺服器 (RHEL8 apache 2.4)
- 包含多個虛擬主機
- 每個虛擬主機都充當 LAN 中 Web 伺服器的反向代理
- 從代理到後端 Web 伺服器的連接通過 SSL 保護
區域網路中的後端伺服器(RHEL8 apache 2.4)
需要解決的問題 目前,後端伺服器的 apache 訪問日誌顯示的是代理的 IP,而不是原始客戶端 IP。我想確保將客戶端 IP(正在連接到代理)記錄在後端 apache 伺服器的訪問日誌中。
網路上的許多操作指南(例如How to get X-Forwarded-For IP 地址 in Apache Web Server)建議使用
RemoteIPHeader X-Forwarded-For
.但是,這似乎僅在與後端的代理連接使用 HTTP 時才有效。(關於 linode 論壇的討論。)
代理伺服器具有 SSL 證書的公鑰和私鑰。
如何配置代理伺服器以添加
X-Forwarded-for
標頭,同時保持與後端的 SSL 連接?代理伺服器的虛擬主機配置(IP 192.168.1.2):
<VirtualHost *:443> ServerName service.example.com SSLEngine on SSLCipherSuite AES256+EECDH:AES256+EDH SSLProtocol All -SSLv2 -SSLv3 SSLHonorCipherOrder On SSLCompression off SSLCertificateFile /etc/pki/tls/certs/service_example_com.crt SSLCertificateKeyFile /etc/pki/tls/private/service_example_com.key SSLCertificateChainFile /etc/pki/tls/certs/CA.crt SSLProxyEngine on ProxyPass / https://backend-1.anubex.com/ ProxyPassReverse / https://backend-1.anubex.com/ RemoteIPHeader X-Forwarded-For RemoteIPInternalProxy 192.168.1.2 </VirtualHost>
您顯示的不是 SSL 直通,而是反向代理的 SSL 終止以及從那裡到最終伺服器的另一個 HTTPS 連接。根據文件,這將自動將
X-Forwarded-Header
新請求添加到最終伺服器,因此不需要在反向代理上進行特殊配置。要
%a
在最終伺服器(Apache 也是)上實際記錄此標頭,必須相應地解釋代理設置的此標頭。對於這個mod_remoteip可以使用並且RemoteIPHeader
應該設置X-Forwarded-For
- 正如您(錯誤地)在反向代理的配置中所做的那樣。