使用Cloudflare时如何清除Varnish缓存?

时间:2017-10-26 13:53:19

标签: varnish cloudflare purge

使用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~ /");
         返回(清除);
}
我试过这个解决方案,但它没有用。

1 个答案:

答案 0 :(得分:0)

这个问题很旧,但仍然可以使用答案。 :-)您找到的报价部分正确。原因如下:

您的设置可能类似于以下内容:

 ------      ---------      ------------            ------
|  WP  | <- | Varnish | <- | CloudFlare |   <---   | User |
 ------      ---------      ------------            ------

清除的方法有两种:

  1. 用户-> CloudFlare->清漆,或
  2. 用户-> CloudFlare->清漆-> WP-> WP插件->清漆。

第二种情况可以成功导致清除。如果您有触发缓存清除/无效的插件,则该插件将来自可预测的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更好。