2012-02-09 2 views
17

Я не вижу подобный вопрос, но извиняюсь, если я обманываю.Как отправить запрос на очистку в лаке

Мы используем кеш-лак в нашей системе, но хотим установить систему, в которой мы можем очистить отдельные страницы при их редактировании (довольно нормально). Мы пытались заставить его работать с использованием HTTP-заголовка. Итак, наш VCL настроен как:

acl purge { 
     "localhost"; 
#### Our server IP ##### 
} 

sub vcl_recv { 
    if (req.request == "PURGE") { 
      if (!client.ip ~ purge) { 
        error 405 "Not allowed."; 
      } 
      return (lookup); 
    } 
} 

sub vcl_hit { 
    if (req.request == "PURGE") { 
      purge; 
    } 
} 

sub vcl_miss { 
     if (req.request == "PURGE") { 
       purge; 
     } 
} 

Однако, я застрял на том, как на самом деле отправить запрос HTTP чистку. Мы используем PHP для веб-сайта, поэтому я попытался с помощью:

header("PL: PURGE/HTTP/1.0"); 
header("Host: url to purge"); 

Но это, кажется, не делать ничего (и varnishlog, кажется, не показывают ничего продувку).

Я также экспериментировал с cURL, но, опять же, он, похоже, не работает. Я пропустил что-то действительно основное здесь, или это базовый звук, то есть моя реализация прослушивается?

Большое спасибо,

ответ

30

Вам нужно пойти и сделать запрос HTTP.

проверялось, но должно быть по линиям (если вы хотите использовать локон, как вы упомянули):

$curl = curl_init("http://your.varnish.cache/url-to-purge"); 
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "PURGE"); 
curl_exec($curl); 
+2

Yup, PURGE - это HTTP-запрос, такой как GET или POST, хотя он публикует RFC 2616, но он используется кэшами контента и прокси-серверами, такими как Squid, Varnish и Apache Traffic Server. Быстрый google «PURGE curl_setopt» поднял [этот пример] (http://www.rwahyudi.com/linux/purge-squid-cache-using-curl-without-squidclient/). Наслаждайтесь :) – TerryE

+1

Большое спасибо вам обоим! Весьма признателен! :) – flukeflume

+1

Или для более специальных или сценариев подходов вы также можете использовать «curl -XPURGE» http: //your.varnish.cache/url-to-purge »' –

3

Вы также можете очистить с помощью командной строки. Используйте команду sudo varnishadm. Это откроет интерфейс командной строки Varnish. где вы можете ввести свою команду, чтобы очистить страницы в соответствии с вашими потребностями. Например, чтобы очистить домашнюю страницу, сделайте следующее:

[email protected]:/etc/varnish# sudo varnishadm 
200   
----------------------------- 
Varnish Cache CLI 1.0 
----------------------------- 
Linux,3.5.0-28-generic,x86_64,-sfile,-smalloc,-hcritbit 

Type 'help' for command list. 
Type 'quit' to close CLI session. 

varnish> ban.url ^/$ 
200 
+1

Нет, вы не можете очистить от varnishadm - только запрет, как в вашем примере. Запрет и чистка - это не те же функции, даже если конечный результат схож. – Clarence

-1

Возможно, я нахожусь в более новой версии, но то, что выше, не работает для меня. Это сделал:

sub vcl_hit { 
    if (req.request == "PURGE") { 
    ban("req.url ~ "+req.url); 
    error 200 "Purged."; 
    } 
} 
2

Быстрый, грязный и эффективный способ, чтобы отправить запрос на ОЧИСТИТЬ:

curl -v -k -X PURGE URL 

Вы действительно можете сделать небольшой скрипт с этим утверждением, а именно:

1) Развернуть редактор, в примере VI

vi varnish_purge_url.sh 

2) Введите следующий текст:

#!/bin/sh 

curl -v -k -X PURGE $1 

(не забудьте оставить пустую строку между первой и последней строками).

3) Сохраните файл и выйдите. Затем установите соответствующие атрибуты, чтобы выполнить его из оболочки:

chmod 750 varnish_purge_url.sh 

4) Вы хотите быть корень при создании и использовании этого скрипта. Если вы используете Ubuntu, не стесняйтесь добавлять sudo перед командами, когда это необходимо.

5) Способ применения прост:

./varnish_purge_url.sh URL 

Где URL является URL, чтобы очистить.

+0

Любая помощь здесь? :) http://stackoverflow.com/questions/35632607/is-the-http-verb-purge-idempotent –

Смежные вопросы