我已成功将 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