我如何 return 对 Varnish 级别的特定文件的所有请求进行 500 响应?

How can I return a 500 response for all requests to a specific file at the Varnish level?

背景:

我们的网络结构将所有流量引入 Varnish 安装,然后根据先前管理员设置的规则将流量传输到 5 个不同的 Web 服务器之一。我对清漆没有太多经验。

昨晚我们被对特定文件的请求轰炸了。这个文件是我们限制到一组特定服务器的文件,由于某些原因,它直接 link 到我们的主数据库。显然,这不是最佳选择,因此我们的网站受到了相当大的打击。我试图做的,但失败了,是在 Varnish VCL 中编写一个代码块,该代码块将 return 对该文件的每个请求进行 500 响应,然后我可以在攻击期结束后将其注释掉。

问题:

该语法是什么?我已经完成了我的谷歌搜索,但在这一点上我认为这是我对 Varnish 了解不够的事实,无法正确地表达我的搜索,所以我没有找到我需要的信息。

您可以定义自己的 vcl_recv,在您的配置中的任何其他 vcl_recv 之前,重新加载 Varnish,您应该会得到您正在寻找的行为。

sub vcl_recv {
    if (req.url ~ "^/path/to/file(\?.*)?$") {
        return (synth(500, "Internal Server Error"));
    }
}