Emita a limpeza do verniz através do CloudFlare para verniz

1

Estou trabalhando nisso há algum tempo e não consigo encontrar nenhuma solução.

Eu tenho verniz sentado na frente do meu servidor nginx, com CloudFlare sentado na frente.

Quando eu emito uma onda -X PURGE host CloudFlare pega e, claro, nega-lo com um erro 503. Se eu usar o direct.host para ignorar o CloudFlare, ele acessa o servidor do Varnish e aceita o pedido, mas ele não faz nada desde o direct.host não é usado, então não há nada no cache para esse URL.

Estou usando o WordPress e há um plug-in WordPress Varnish Purge, que diz para adicionar a seguinte linha a wp-config.php :

define('VHP_VARNISH_IP','127.0.0.1')

Isso é especificamente para trabalhar com servidores proxy e / ou CloudFlare para garantir que a solicitação vá para o servidor Varnish em vez do CloudFlare, mas isso não parece ajudar.

Alguém já viu isso antes e tem alguma ideia?

    
por Michael 16.10.2013 / 08:55

3 respostas

2

O seu problema é que o pedido de eliminação está sendo tratado pelo ClodFlare em vez do verniz.

Tenha em mente que:

  • No Varnish 3, você deve usar purge; em vez de set obj.ttl = 0s;
  • O verniz resolverá o objeto usando vcl_hash . No Varnish 3 isto significa, por padrão [1], que o req.url será usado junto com o cabeçalho HTTP "Host" ou, se não estiver presente, o IP do servidor:

    sub vcl_hash {
      hash_data(req.url);
      if (req.http.host) {
        hash_data(req.http.host);
      } else {
        hash_data(server.ip);
      }
      return (hash);
    }
    
  • Você pode substituir vcl_hash para atender às suas necessidades

Por favor, dê uma olhada na documentação [2] e na informação do Livro de Varnish [3] em Bans & Remoções

Na minha opinião, você tem que opções:

  1. Emita as purgas diretamente para o verniz contornando CloudFlare, usando diretamente curl -H "Host: _host_wich_has_the_url_to_purge" -X PURGE http://_varnish_ip_:_varnish_port/_url_to_purge_
  2. Tente adicionar os intervalos de IP da CloudFlare ao seu acl purge (não recomendado) e instrua o CloudFlare a passar essas solicitações para o Verniz.

[1] link

[2] link

[3] link

    
por 19.10.2013 / 12:17
0

FWIW o plugin diz para colocar no IP do seu servidor Varnish (no link ). "Seu Varnish IP deve ser um dos IPs que o Varnish está escutando. Se você usa vários IPs ou personalizou suas ACLs, precisará escolher algo que não esteja em conflito com suas outras configurações. Por exemplo, , se você tem Varnish escutando em um IP público e privado, você vai querer escolher o private.Por outro lado, se você dissesse ao Varnish para escutar 0.0.0.0 (por exemplo, "listen on every interface you can") você precisa verificar qual IP você definiu sua ACL de eliminação para permitir (normalmente 127.0.0.1, também conhecido como localhost) e usá-la (ou seja, 127.0.0.1). "

Quando você executa o comando de eliminação manualmente, ou seja, via CURL, o que você coloca para que ele funcione?

    
por 18.10.2013 / 23:33
0

Cloudflare, quando você lhes entregar seu DNS, será configurado como direct.yourdomain.com. Você deve poder emitir a PURGE diretamente para esse endereço, que ignorará o Cloudflare e atingirá seu servidor Varnish diretamente. Certifique-se de que qualquer bloqueio de ACL permita o endereço para o qual você está enviando o PURGE.

    
por 25.10.2013 / 13:13