正则表达式来限制 HAProxy 中的 URL

正则表达式来限制 HAProxy 中的 URL

我已成功将 Web 应用中的一个 URL 限制到某个受信任的 IP,方法是使用下面提到的 haproxy 配置中的配置

acl trusted-ip src -f /etc/haproxy/whitelist.lst    
acl protected-page url /abc /abc/    
acl allowed-page url /abc/api/
http-request deny if protected-page !allowed-page !trusted-ip

我希望所有用户都能访问“/abc/api”URL,而“/abc”仅对受信任的 IP 开放。这里的问题是,如果来自非受信任 IP 的任何人输入“/abc?something”,则 URL“/abc”会打开,为了避免这种情况,我修改了配置以

acl trusted-ip src -f /etc/haproxy/whitelist.lst
acl protected-page url_reg ^(?!\/abc\/api).*$
http-request deny if protected-page !trusted-ip

现在我能够解决上述问题,但“/abc/api”对任何人都无法访问。任何帮助都将不胜感激。

答案1

使用path而不是url

这将提取请求的 URL 路径,该路径从第一个斜杠开始,到问号之前结束(不包含主机部分)。典型用途是使用具有预取功能的缓存,以及需要从数据库聚合多个信息并将其保存在缓存中的门户。请注意,对于传出缓存,使用“url”会更明智。对于 ACL,它通常用于匹配精确的文件名(例如:“/login.php”)或使用派生形式的目录部分。另请参阅“url”和“base”获取方法。

ACL derivatives :
  path     : exact string match
  path_beg : prefix match
  path_dir : subdir match
  path_dom : domain match
  path_end : suffix match
  path_len : length match
  path_reg : regex match
  path_sub : substring match

相关内容