设置如下:
- 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
- 正如您在反向代理配置中(错误地)所做的那样。