Apache-Httpd

如何使用 SSL 直通在反向代理中添加 X-Forwarded-for 標頭

  • January 5, 2021

設置如下:

  • 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- 正如您(錯誤地)在反向代理的配置中所做的那樣。

引用自:https://unix.stackexchange.com/questions/627492