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

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

设置如下:

  • DMZ 中的代理服务器 (RHEL8 apache 2.4)
    • 包含多个虚拟主机
    • 每个虚拟主机充当 LAN 中 Web 服务器的反向代理
    • 从代理到后端 Web 服务器的连接通过 SSL 进行保护
  • 局域网中的后端服务器(RHEL8 apache 2.4)

要解决的问题 目前,后端服务器的apache访问日志显示的是代理的IP,而不是原始客户端IP。我想确保客户端IP(连接到代理的人)记录在后端apache服务器的访问日志中。

网络上有许多指南(例如如何在 Apache Web 服务器中获取 X-Forwarded-For IP 地址)建议使用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>

答案1

您显示的不是 SSL 直通,而是反向代理处的 SSL 终止,以及从那里到最终服务器的另一个 HTTPS 连接。根据文档这将自动添加X-Forwarded-Header到最终服务器的新请求中,因此不需要在反向代理上进行特殊配置。

要在最终服务器(Apache 也是如此)上实际记录此标头,%a必须相应地解释代理设置的此标头。为了这mod_remoteip可以使用并且RemoteIPHeader应该设置X-Forwarded-For- 正如您在反向代理配置中(错误地)所做的那样。

相关内容