2012-01-09 32 views
0

我有一个有趣的问题。我的公司正在为客户端托管一个小型应用程序服务器,并且他们希望将访问权限限制为少数几个IP。客户是一个拥有多个部门的大公司,每个部门都有自己的网络结构。Apache允许/拒绝IP正则表达式

我不会深入细节,但是由于我公司的Web服务器的内部结构,我们不能在Apache中使用传统的允许,拒绝语法。我们有负载均衡器转发到Web服务器,然后转发到应用服务器本身。相反,我们在我们的Apache配置中使用类似以下的内容:

RewriteCond %{HTTP:X-Forwarded-For} !^213.212.45.54 

我们利用X-Forwarded-For头来匹配外部IP。问题是我们客户的一个部门(称为部门A)的互联网设置需要通过内部代理。他们的内部代理将每个用户的工作站IP转发给我们的Web服务器。这意味着,这些用户的X - 转发,对于头看起来是这样的:

10.123.16.23, 213.212.45.54, 172.20.162.2 

的10个地址在其网络中每个用户的工作站IP,213是该部门的广域网IP,和172是我公司的负载均衡器。

我的公司已经确认,如果我们将用户的工作站IP添加到Apache配置中,他们可以毫无问题地访问该页面。但是,添加每一个IP将是单调乏味的。

有没有办法告诉Apache只关注使用正则表达式的中间IP(WAN IP)?还是有更好的方法来配置Apache?

+1

也许这将帮助你指明正确的方向,正则表达式 中,\ s *(213 \。\ d + \。\ d + \。\ d +)\ s *, 比赛和返回中间IP 213.212.45.54 所以你可以用它来触发你的RewriteRule。 – 2012-01-09 06:32:33

回答

0

我还没有测试过这个,但是你可以构造一个正则表达式来在字段中的任何地方搜索你的IP字符串。你的正则表达式中的第一个^表示它必须匹配字符串的开头,在这里不是这种情况。

东西这么简单可以工作:

RewriteCond %{HTTP:X-Forwarded-For} !213\.212\.45\.54 

反斜线在点的前面,因为否则是必要的。匹配任何数字的任何字符,包括不匹配任何字符,它等价于通配符语法中的*。

像这样,如果在X-Forwarded-For头部的任何地方找到字符串213.212.45.54,则正则表达式将匹配。