我使用 Apache/Shibboleth 向反向代理和 Web 客户端直接发送请求。当请求通过代理时,我会提取原始 IP 地址并尝试将其发送到 shibboleth。但是,这似乎无法正常工作。它仍然显示错误,提示 IP 地址与使用 IdP 进行身份验证时使用的 IP 地址不匹配。
我的 apache 配置中有以下位置块。我知道 REMOTE_ADDR 至少会被发送到 shibd,因为当我将其设置为 X-Forwarded-For 时,错误包括整个代理 IP 链,但以下内容不起作用,仅显示最后一个代理的 IP 地址与经过身份验证的 IP 不匹配。
<Location />
SetEnvIf X-FORWARDED-FOR "^.+$" DenyRequest
SetEnvIf Remote_Addr "^XXX\.XXX\.XXX\.XXX$" !DenyRequest
Order allow,deny
Deny from env=DenyRequest
Allow from all
SetEnvIf Remote_Addr "^(.+)$" RealAddress=$1
SetEnvIf X-Forwarded-For "^(\d{1,3}+\.\d{1,3}+\.\d{1,3}+\.\d{1,3}+).*" RealAddress=$1
RequestHeader set X-RealAddress %{RealAddress}e
AuthType shibboleth
ShibRequestSetting requireSession 1
ShibRequestSetting REMOTE_ADDR X-RealAddress
Require user
</Location>