haproxy 可以通过引用 URL 进行负载平衡吗?(过滤 Slashdot 场景)

haproxy 可以通过引用 URL 进行负载平衡吗?(过滤 Slashdot 场景)

我有一个性能不佳的网络应用程序,需要进行大规模扩展才能应对互联网的重担。

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 来阻止引荐流量。您应该能够修改配置以不同方式处理流量(即传递给不同的后端)

相关内容