Varnish 允许从任何 IP 清除

Varnish allow purge from any IPs

我有一个清漆缓存服务器。我想只允许三个主机可以清除一个 url 或域。正如官方网站所说,我使用以下清漆配置进行清除:

    backend web_servers {
        .host = "192.168.1.20";
        .port = "80";
        .probe = backend_healthcheck;
    }


    acl purge {
            "localhost";
            "192.168.1.0"/24;
            "PUBLIC_IP";            
    }    

    sub vcl_recv {

        if (req.method == "PURGE")
            {
                    if (!client.ip ~ purge)
                    {
                            return(synth(405,"Not allowed."));
                    }
                    return (purge);
            }
## Rest of vcl_recv
}

问题是在执行以下 curl 命令时,我可以从任何 IP 地址清除 url:

curl -X PURGE "domain_name.com"

我只希望清除部分中列出的 IP 可以从管理端口 6082 清除 url,而不是来自端口 80 的任何其他 IP。感谢任何帮助。

我找到了问题的解决方案。一个愚蠢的错误。我的清漆服务器在代理后面,所以当我使用 "client.ip" 检查允许的 IP 地址时,所有 IP 都是 127.0.0.1。我删除了 ACL 清除并替换了以下行:

if (!client.ip ~ purge)
{
    return(synth(405,"Not allowed."));
}
return (purge);

这些:

if (req.http.X-Forwarded-For == "PUBLIC_IP, 127.0.0.1" || req.http.X-Forwarded-For == "192.168.1.2, 127.0.0.1")
{
    return (purge);
}
return(synth(405,"Not allowed."));

现在一切正常。