【发布时间】:2012-01-09 05:59:31
【问题描述】:
我有一个有趣的问题。我的公司正在为客户托管一个小型应用程序服务器,他们希望限制对几个 IP 的访问。客户是一家有很多部门的大公司,每个部门都有自己的网络结构。
我不会详细介绍,但由于我公司的 Web 服务器内部结构,我们不能在 Apache 中使用常规的 allow,deny 语法。我们有负载均衡器,它们转发到 Web 服务器,然后转发到应用程序服务器本身。相反,我们在 Apache 配置中使用如下内容:
RewriteCond %{HTTP:X-Forwarded-For} !^213.212.45.54
我们使用 X-Forwarded-For 标头来匹配外部 IP。问题是我们客户的一个部门(称为 A 部门)的 Internet 设置要通过内部代理。他们的内部代理将每个用户的工作站 IP 转发到我们的网络服务器。这意味着这些用户的 X-Forwarded-For 标头看起来像这样:
10.123.16.23, 213.212.45.54, 172.20.162.2
地址 10 是他们网络中每个用户的工作站 IP,213 是该部门的 WAN IP,172 是我公司的负载均衡器。
我公司已经确认,如果我们将用户的工作站 IP 添加到 Apache 配置中,他们就可以毫无问题地访问该页面。但是,添加每个 IP 会很繁琐。
有没有办法使用正则表达式告诉 Apache 只关注中间 IP(WAN IP)?或者有没有更好的方法来配置 Apache?
【问题讨论】:
-
也许这会帮助您指出正确的方向,正则表达式 \s*(213\.\d+\.\d+\.\d+)\s* 匹配并返回中间 IP 213.212.45.54 所以你可以用它来触发你的 RewriteRule。
标签: regex apache http-headers ip rewrite