我正在考虑各种布局,通过专用于代表 API 服务管理权限的前端服务器来公开各种 HTTP API 服务(在它们自己不同的服务器上运行)。
我考虑过各种选项,从经典的 Nginx、Apache 等到 HAProxy,再到各种 Python Web 服务器解决方案,如 Tornado、Twisted(这让我有机会轻松实现自己的 ACL 系统)。基本功能是高性能和可扩展性,以及管理细粒度 ACL 规则的能力(类似于HAProxy ACL 系统)
我想知道建议采用什么方法来设置我需要的内容,以及是否已经有专门用于此的现成解决方案(开源)。
(我是提出问题的用户)。感谢两位的回答。我刚刚发现了 mod_security 的功能。我要去读这本书。我不确定 WAF 是否是正确的工具,但我认为它是 ;)
我唯一担心的问题是当我应用规则更改时需要重新启动服务器。我希望这不是必需的。
HAProxy 似乎还不错,但我更喜欢跨平台的东西。我会尝试这两种解决方案。
答案1
你没有清楚地描述你的问题。haproxy 有什么问题?从你的陈述来看:
基本特征是高性能和可扩展性,以及管理细粒度 ACL 规则的能力。
我可以说,只要使用 haproxy 就没问题了。它是一款功能强大、灵活且开源的解决方案。你只需要确保它具有所有需要的功能。
答案2
我不太确定我是否理解了你的问题。你想根据各种因素过滤 HTTP 请求?
使用 Web 应用程序防火墙,在 apache 上使用 mod_security 进行过滤(mod_proxy 用于直通)。它非常强大且有效。示例:如果您正在使用 Web 服务/XML/SOAP/WSDL,那么您甚至可以将模板 XML 文件添加到 mod_security,它将根据该文件过滤请求内容。您可以将来自 mod_security 的请求转发到其他服务器、代理、阻止、拒绝、计数参数、值等
此外,您还可以使用像 squid 或 varnish 这样的反向代理,在 apache 上使用 mod_extract_forwarded 提取 REMOTE_ADDR 等等......