我试图在Apache中设置一个请求头,请求头的值取决于客户端的IP地址,如果IP地址是本地的(私有范围),请求头的值应该是 "内部",否则应该是 "外部"。如果IP地址是本地的(私有范围),头的值应该是 "内部",否则应该是 "外部"
目前我已经配置好了。
RemoteIPHeader X-Forwarded-For
RemoteIPInternalProxy 172.24.x.x
X -Forwarded -For的值现在有客户的IP地址。另一部分应该可以用Apache的If then Else语法来解决,但我不知道如何检查X-Forwarded-For的值,并将其与所有的localprivate IP范围进行比较。
<If "????????'">
RequestHeader set My-Header "inside"
</If>
<Else>
RequestHeader set My-Header "outside"
</Else>
我正在运行。
Server version: Apache/2.4.6 (CentOS)
Server built: Aug 8 2019 11:41:18
我自己设法解决了这个问题,我可能可以使用an or语句来摆脱Elsifs,并在一个if中写下整个条件,但我喜欢这样的阅读方式。如果有更好的方法,我仍然有兴趣。
RemoteIPHeader X-Forwarded-For
RemoteIPInternalProxy 172.24.x.x #Loadbalancer IP
<If "%{REMOTE_ADDR} -ipmatch '010.000.000.000/8'">
RequestHeader set My-Header "inside"
</If>
<ElseIf "%{REMOTE_ADDR} -ipmatch '172.016.000.000/12'">
RequestHeader set My-Header "inside"
</ElseIf>
<ElseIf "%{REMOTE_ADDR} -ipmatch '192.168.000.000/16'">
RequestHeader set My-Header "inside"
</ElseIf>
<Else>
RequestHeader set My-Header "outside"
</Else>