![haproxy 可以通过引用 URL 进行负载平衡吗?(过滤 Slashdot 场景)](https://linux22.com/image/560458/haproxy%20%E5%8F%AF%E4%BB%A5%E9%80%9A%E8%BF%87%E5%BC%95%E7%94%A8%20URL%20%E8%BF%9B%E8%A1%8C%E8%B4%9F%E8%BD%BD%E5%B9%B3%E8%A1%A1%E5%90%97%EF%BC%9F%EF%BC%88%E8%BF%87%E6%BB%A4%20Slashdot%20%E5%9C%BA%E6%99%AF%EF%BC%89.png)
我有一个性能不佳的网络应用程序,需要进行大规模扩展才能应对互联网的重担。
Haproxy 将用于将无状态 Web 请求分发到多台服务器。但是,流量仍然有限,我希望优先考虑真正的用户。
可以将 haproxy 配置为将流量从特定的引荐来源 URL 发送到特定的框吗?
例如,如果在新闻文章中提到了部署的网关,我可以将该文章中的流量重定向到一个快速静态 HTML 网站,并说一些类似“感谢您的关注,这里有一些信息”的话?
如果可能的话,也许有人可以分享配置文件中的相关片段。
答案1
是的,可以。从文档,
hdr_目录
hdr_dir(标题)
当其中一个标头包含一个用斜杠分隔或分隔的字符串时,返回 true。这用于执行文件名或目录名匹配,并且可以与 Referer 一起使用。有关标头匹配的更多信息,请参阅“hdr”。
因此,您可以检查 hdr_dir(referer)以查看它是否与特定路径匹配,如果匹配,则设置一个标志,然后根据该标志将流量发送到各个目的地。
acl slashdot hdr_dir(referer) -i /some/path
use_backend cluster1 if slashdot
use backend cluster2 if !slashdot
backend cluster1
server servera 192.168.0.50:80
backend cluster2
server serverb 192.168.0.51:80
未经测试。
答案2
我碰到这个帖子,其中讨论了使用如下设置:
acl invalid_referer hdr_sub(referer) -i -f /etc/haproxy/banned.haproxy.conf
block if invalid_referer
它应该返回 403 来阻止引荐流量。您应该能够修改配置以不同方式处理流量(即传递给不同的后端)