繁体   English   中英

Apache允许/拒绝IP正则表达式

[英]Apache allow / deny IP regex

我有一个有趣的问题。 我的公司正在为客户端托管一台小型应用程序服务器,他们希望将访问权限限制为仅几个IP。 客户是一家拥有许多部门的大公司,每个部门都有自己的网络结构。

我不会详细介绍,但是由于我公司的Web服务器内部结构,我们无法在Apache中使用传统的allow,deny语法。 我们有负载均衡器,它们转发到Web服务器,然后再转发到应用程序服务器本身。 相反,我们在Apache配置中使用类似于以下内容的东西:

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

我们利用X-Forwarded-For标头来匹配外部IP。 问题是我们客户的一个部门(称为部门A)的Internet设置要经过内部代理。 他们的内部代理将每个用户的工作站IP转发到我们的Web服务器。 这意味着这些用户的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?

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

这样简单的事情就可以起作用:

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

在圆点前面必须加反斜杠,因为否则是。 匹配任何字符的任何数字,包括不匹配任何字符,这等效于通配符语法中的*。

这样,如果在X-Forwarded-For标头中的任意位置找到字符串213.212.45.54,则正则表达式将匹配。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM