Назад | Перейти на главную страницу

Выполнить очистку от лака через CloudFlare до Varnish

Я работаю над этим некоторое время и не могу найти никакого решения.

У меня лак сидит перед моим сервером nginx, а перед ним - CloudFlare.

Когда я запускаю узел curl -X PURGE, CloudFlare забирает его и, конечно же, отклоняет его с ошибкой 503. Если я использую direct.host для обхода CloudFlare, он попадает на сервер Varnish и принимает запрос, но ничего не делает, поскольку direct.host не используется, поэтому для этого URL-адреса в кеше ничего нет.

Я использую WordPress, и есть плагин WordPress Varnish Purge, он говорит, что нужно добавить следующую строку в wp-config.php:

define('VHP_VARNISH_IP','127.0.0.1')

Это специально предназначено для работы с прокси-серверами и / или CloudFlare, чтобы убедиться, что запрос поступает на сервер Varnish, а не на CloudFlare, но это, похоже, не помогает.

Кто-нибудь видел это раньше и есть идеи?

Ваша проблема в том, что запрос на очистку обрабатывается ClodFlare вместо Varnish.

Имейте в виду, что:

  • В Varnish 3 вы должны использовать purge; вместо того set obj.ttl = 0s;
  • Varnish разрешит объект с помощью vcl_hash. В Varnish 3 это означает по умолчанию [1], что req.url будет использоваться вместе с HTTP-заголовком «Host» или, если он отсутствует, 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] и информацию из Varnish Book [3] по Bans & Purges

На мой взгляд у вас есть варианты:

  1. Выполняйте чистки непосредственно в Varnish в обход CloudFlare, напрямую используя curl -H "Host: _host_wich_has_the_url_to_purge" -X PURGE http://_varnish_ip_:_varnish_port/_url_to_purge_
  2. Попробуйте добавить диапазоны IP CloudFlare в свой acl purge (не рекомендуется) и проинструктируйте CloudFlare передать такие запросы Varnish.

[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

Cloudflare, когда вы передадите им свой DNS, настроит direct.yourdomain.com. Вы должны иметь возможность отправить PURGE прямо на этот адрес, который обойдет Cloudflare и напрямую попадет на ваш сервер Varnish. Однако убедитесь, что все имеющиеся у вас блоки ACL разрешают адрес, с которого вы отправляете PURGE.

FWIW плагин говорит, что нужно ввести IP-адрес вашего сервера Varnish (в http://wordpress.org/plugins/varnish-http-purge/faq/ ). "Ваш IP-адрес Varnish должен быть одним из IP-адресов, которые прослушивает Varnish. Если вы используете несколько IP-адресов или настроили свои списки контроля доступа, вам нужно выбрать такой, который не конфликтует с другими вашими настройками. Например , если у вас есть Varnish, прослушивающий общедоступный и частный IP-адрес, вы захотите выбрать частный. С другой стороны, если вы укажете Varnish прослушивать 0.0.0.0 (т.е. "прослушивать каждый интерфейс, который вы можете"), вы бы необходимо проверить, какой IP-адрес разрешен для вашего ACL очистки (обычно 127.0.0.1, он же localhost), и использовать его (например, 127.0.0.1) ».

Когда вы запускаете команду очистки вручную, то есть через CURL, что вы добавляете, чтобы она работала?