我有一个性能不佳的网络应用程序,需要进行大规模扩展才能应对互联网的重担。
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 来阻止引荐流量。您应该能够修改配置以不同方式处理流量(即传递给不同的后端)