2014-01-07 6 views
1

В настоящее время у нас на сервере несколько виртуальных хостов. Я пытаюсь выполнить очистку кэша через PHP, который не включает команду exec. Я могу Purge отдельных файлов в лаковом кэше, выполнив следующую команду в командной строке:Ларный кэш Очищение cURL PHP против командной строки cURL

curl -X PURGE -H "Host: domain.com" http://127.0.0.1/test.html 

Я пытаюсь повторить эту команду на PHP. Я вызвал следующее:

if (isset($_POST['PurgeURL'])) 
{ 
    $purgeurl = $_POST["PurgeURL"]; 
    $varnishurl = "http://127.0.0.1" . $purgeurl ; 
    $varnishhost = 'Host: ' . $_SERVER['SERVER_NAME']; 
    $varnishcommand = "PURGE"; 
    $curl = curl_init($varnishurl); 
    curl_setopt($curl, CURLOPT_CUSTOMREQUEST, $varnishcommand); 
    curl_setopt($curl, CURLOPT_ENCODING, $varnishhost); 
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, false); 
    $result = curl_exec($curl); 
    curl_close($curl); 

Я отправляю /test.html.

я получаю следующий ответ:

Error 200 Purged. 

Purged. 

Guru Meditation: 

XID: 1728013370 

Varnish cache server 

Но тогда файл не продуть. Есть идеи?

Вот лак Вход для запроса:

0 Debug  - "VCL_error(200, Purged.)" 
    28 SessionOpen c 127.0.0.1 54437 :80 
    28 ReqStart  c 127.0.0.1 54437 1728228985 
    28 RxRequest c PURGE 
    28 RxURL  c /test.html 
    28 RxProtocol c HTTP/1.1 
    28 RxHeader  c Host: 127.0.0.1 
    28 RxHeader  c Accept: */* 
    28 RxHeader  c Accept-Encoding: Host: domain.com 
    28 VCL_call  c recv 
    28 VCL_acl  c MATCH purge localhost 
    28 VCL_return c lookup 
    28 VCL_call  c hash 
    28 Hash   c /test.html 
    28 Hash   c 127.0.0.1 
    28 VCL_return c hash 
    28 VCL_call  c miss error 
    28 VCL_call  c error deliver 
    28 VCL_call  c deliver deliver 
    28 TxProtocol c HTTP/1.1 
    28 TxStatus  c 200 
    28 TxResponse c Purged. 
    28 TxHeader  c Server: Varnish 
    28 TxHeader  c Content-Type: text/html; charset=utf-8 
    28 TxHeader  c Retry-After: 5 
    28 TxHeader  c Content-Length: 383 
    28 TxHeader  c Accept-Ranges: bytes 
    28 TxHeader  c Date: Wed, 08 Jan 2014 14:42:33 GMT 
    28 TxHeader  c X-Varnish: 1728228985 
    28 TxHeader  c Age: 0 
    28 TxHeader  c Via: 1.1 varnish 
    28 TxHeader  c Connection: close 
    28 Length  c 383 
    28 ReqEnd  c 1728228985 1389192153.441481352 1389192153.441616535 0.000058413 0.000074863 0.000060320 
    28 SessionClose c error 
    28 StatSess  c 127.0.0.1 54437 0 1 1 0 0 0 245 383 
+0

Просьба предоставить след varnishlog запроса, чтобы увидеть заголовки, фактически полученные лаком – NITEMAN

ответ

0

Вы не выдают правильный «Host:» заголовок HTTP, поэтому я предполагаю, что есть проблема с одной из следующих строк:

$varnishhost = 'Host: ' . $_SERVER['SERVER_NAME']; 

curl_setopt($curl, CURLOPT_ENCODING, $varnishhost); 
+0

Вы уверены, что это должно быть 'CURLOPT_ENCODING'? – castis

+0

В этом случае проблема заключается в том, что $ _SERVER ['SERVER_NAME'] не содержит соответствующего имени хоста, как вы можете видеть на трассе – NITEMAN

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