我一直在这个工作了一段时间,似乎无法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处理。
请记住:
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:
curl -H "Host: _host_wich_has_the_url_to_purge" -X PURGE http://_varnish_ip_:_varnish_port/_url_to_purge_
直接发送清除,避开CloudFlare 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的地址。