【问题标题】:Apache allow / deny IP regexApache 允许/拒绝 IP 正则表达式
【发布时间】: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


【解决方案1】:

我尚未对此进行测试,但您可以构建一个正则表达式,在该字段的任何位置搜索您的 IP 字符串。正则表达式中的第一个 ^ 意味着它必须匹配字符串的开头,这里不是这种情况。

像这样简单的东西可以工作:

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

点前的反斜杠是必须的,否则 .匹配任意数量的任意字符,包括不匹配任何字符,它相当于通配符语法中的 *。

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

【讨论】:

    猜你喜欢
    • 2016-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-20
    • 1970-01-01
    • 2023-03-11
    相关资源
    最近更新 更多