通过CloudFlare将清漆清除至清漆

我一直在这个工作了一段时间,似乎无法find任何解决scheme。

我坐在我的nginx服务器前面的清漆,CloudFlare坐在前面。

当我发出一个curl -X PURGE主机时,CloudFlare会挑选它,当然会拒绝503错误。 如果我使用direct.host来绕过CloudFlare,它会触发Varnish服务器,并接受请求,但它不会执行任何操作,因为不使用direct.host,所以caching中没有任何内容。

我使用的是WordPress,并且有一个WordPress Varnish Purge插件,它说要将以下行添加到wp-config.php

 define('VHP_VARNISH_IP','127.0.0.1') 

这是特别与代理服务器和/或CloudFlare,以确保请求去清漆服务器而不是CloudFlare,但似乎没有帮助。

任何人以前看到这个,有什么想法?

你的问题是清除请求正在被ClodFlare而不是Varnish处理。

请记住:

  • 在清漆3中​​,你应该使用purge; 而不是set obj.ttl = 0s;
  • 清漆将使用vcl_hash来parsing对象。 在Varnish 3中,默认情况下,这意味着req.url将与HTTP“主机”头一起使用,或者如果不存在,则服务器IP:

     sub vcl_hash { hash_data(req.url); if (req.http.host) { hash_data(req.http.host); } else { hash_data(server.ip); } return (hash); } 
  • 您可以覆盖vcl_hash以符合您的需求

请看一下文件[2]和清除书本信息[3]的禁令和清除

在我看来,你必须select:

  1. 直接使用curl -H "Host: _host_wich_has_the_url_to_purge" -X PURGE http://_varnish_ip_:_varnish_port/_url_to_purge_直接发送清除,避开CloudFlare
  2. 尝试将CloudFlare IP范围添加到您的acl purge (不推荐),并指示CloudFlare将此类请求传递给清漆。

[1] https://www.varnish-cache.org/docs/3.0/reference/vcl.html#examples

[2] https://www.varnish-cache.org/docs/3.0/tutorial/purging.html

[3] https://www.varnish-software.com/static/book/Cache_invalidation.html#removing-a-single-object

FWIW插件说,把你的光油服务器的IP(在http://wordpress.org/plugins/varnish-http-purge/faq/ )。 “您的Varnish IP必须是Varnish正在监听的IP地址之一,如果您使用多个IP地址,或者您已经自定义ACL,则需要select与其他设置不冲突的IP地址。 ,如果你有清漆在公共和私人IP上听,你就要select私人的。另一方面,如果你告诉Varnish听0.0.0.0(即“听你的每一个接口”),你会需要检查你设置的清除ACL允许的IP(通常是127.0.0.1又名本地主机),并使用它(即127.0.0.1)。

当您手动运行清除命令时,即通过CURL,你放入什么来使其工作?

Cloudflare,当你把他们的DNS,将设置direct.yourdomain.com。 您应该能够直接发送PURGE到该地址,这将绕过Cloudflare并直接击中您的Varnish服务器。 请确保您拥有的任何ACL块允许您发送PURGE的地址。