2014-01-07 4 views
1

현재 서버에는 여러 개의 가상 호스트가 있습니다. exec 명령을 포함하지 않는 PHP를 통해 캐시 삭제를 시도하고 있습니다. 나는 다음과 같은 명령 줄 명령을 실행하여 니스 캐시에서 개별 파일을 제거 할 수 있어요 : 나는 PHP로이 명령을 복제하려고광택 캐시 처리 cURL PHP와 명령 줄 비교 cURL

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

. 내가 /test.html을 게시하고

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); 

: 나는 다음과 같은 발생했다.

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

당신은 올바른 "호스트"발행하지 않는 HTTP 헤더를, 그래서 다음과 같은 라인 중 하나에 문제가있는 가정

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

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

긍정적 인 점은'CURLOPT_ENCODING'입니까? – castis

+0

이 경우 문제는 $ _SERVER [ 'SERVER_NAME']에 적절한 호스트 이름이 포함되어 있지 않습니다. 추적에서 볼 수 있듯이 – NITEMAN