如果客户机IP为本地,则设置条件请求头。

问题描述 投票:0回答:1

我试图在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
apache header conditional-statements
1个回答
0
投票

我自己设法解决了这个问题,我可能可以使用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>
© www.soinside.com 2019 - 2024. All rights reserved.