我使用 Cloudflare 在临时设置中管理 DNS,并经常在“仅 DNS”和“代理”状态之间切换。我让 Apache 监听端口 443,这会终止 SSL,然后 ProxyPass 返回端口 80 上的 Varnish。我在 Apache 2.4 中使用 mod_remoteip 来确保记录用户的真实 IP。这很容易按照说明完成这里通过设置 RemoteIPHeader CF-Connecting-IP 并对日志配置进行一些更改。只要我使用 Cloudflare 代理,一切就都运行良好。
但是,当我在 Cloudflare 中切换到仅 DNS 模式时,CF-Connecting-IP 中不再有值,我的访问日志显示 127.0.0.1。我可以通过设置 RemoteIPHeader X-Forwarded-For 来解决这个问题,然后一切又恢复正常了。但是每次切换 Cloudflare 代理状态时,我都必须更改 vhost 配置,我想避免这种情况。
在 vhost 中,我尝试在一个语句中设置 RemoteIPHeader,该语句检查 CF-Connecting-IP 是否为空,如果是则设置为 X-Forwarded-For,如下所示...
<if "-n %{HTTP:CF-Connecting-IP}">
RemoteIPHeader CF-Connecting-IP
</If>
<Else>
RemoteIPHeader X-Forwarded-For
</Else>
...但我的配置语法错误,显示“此处不允许使用 RemoteIPHeader”。我猜想我无法在 if 语句中设置 RemoteIPHeader。
是否有任何方法可以有条件地设置 RemoteIPHeader,以便如果 CF-Connecting-IP 为空,则设置为 X-Forwarded-For?或者有其他方法可以实现我想要实现的目标?
我陷入困境,希望得到任何帮助或想法。