使用Cloudflare时,似乎清除不起作用(Cloudflare返回403 Forbidden)。
这是我在网上搜索解决方案时得到的:
"问题是当你使用cloudflare时,varinsh不会获得发送者的原始IP。相反,它获得了cloudflare的IP。因此无法进行清洗。我们需要告诉清漆发件人的原始IP。"
在vcl_recv中添加以下这些行
if(req.restarts == 0){
if(req.http.X-Forwarded-For){
set req.http.X-Forwarded-For = req.http.X-Forwarded-For +"," + client.ip;
其他{
set req.http.X-Forwarded-For = client.ip;
}
}
if(req.method ==" PURGE" || req.url ==" / purge"){
#用您的IP替换这些IP
if(req.http.X-Forwarded-For!〜"(209.152.41.21 | 105.45.120.37)"){
return(synth(405,"此IP不允许发送PURGE
请求。"));
}
禁令(" req.url~ /");
返回(清除);
}
我试过这个解决方案,但它没有用。
答案 0 :(得分:0)
这个问题很旧,但仍然可以使用答案。 :-)您找到的报价部分正确。原因如下:
您的设置可能类似于以下内容:
------ --------- ------------ ------
| WP | <- | Varnish | <- | CloudFlare | <--- | User |
------ --------- ------------ ------
清除的方法有两种:
第二种情况可以成功导致清除。如果您有触发缓存清除/无效的插件,则该插件将来自可预测的IP地址。实际上,如果您在与WP相同的服务器上运行varnish,则IP地址将为[127.0.0.1]。有一个nice implementation for this situation。
第一种情况的问题(直接从CloudFlare清除)是CloudFlare has many IP addresses,您必须保持最新。但更重要的是,没有什么可以阻止不良行为者也使用CloudFlare创建服务,该服务也将被允许向您的服务器发送清除请求,基本上使此安全性变得毫无价值。
由于X-Forwarded-For基本上只是沿途所有以前IP地址的列表,因此也很容易伪造和绕过。
由于对IP地址的过滤并不能直接通过CloudFlare进行,因此您可以选择使用作为清除请求的一部分发送的令牌/秘密。 (即,仅允许使用以下特殊网址:
if (req.url == "/purge-719179c7-6226-4b87-9503-1b6d54d5fea5") {...
和其他一些Guid)。有人可能会说这仍然不安全,但可能比允许所有CloudFlare IP更好。