2016-06-23 5 views
4

나는 기본적인 작업의 Nginx + SSI의 예를 설정하기 위해 노력하고있어 : (간결함을 위해, 단지 관련 부분)Nginx의/SSI 독립적 인 조각 캐싱

Nginx에의 설정을 :

ssi on; 
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:20m max_size=20m inactive=60m use_temp_path=off; 

server { 
    listen 80; 
    server_name localhost; 
    location/{ 
    proxy_cache my_cache; 
    proxy_set_header Host $host; 
    proxy_http_version 1.1; 
    proxy_buffering on; 
    proxy_pass http://127.0.0.1:81; 
    } 
} 

server { 
    listen 81; 
    root /path/to/root; 
    location ~ ^/.+\.php { 
    fastcgi_pass 127.0.0.1:9000; 
    } 
} 

ssi.php :

<?php 
header('Cache-Control: public, s-maxage=5'); 
?> 
Time: <?php echo time(); ?> 
Fragment time: <!--# include virtual="/time.php" --> 

time.php :

<?php 
header('Cache-Control: no-cache'); 
echo time(); 

시간 : 1,466,710,388 조각 시간 : 1,466,710,388

지금, 두 번째 나중에 내가 페이지 (ssi.php을) 기대는 여전히 캐시 할 수 있지만, time.php 조각은멋지게 작품을 포함 신선합니다 :

시간 : 1,466,710,388 조각 시간 : 1,466,710,389

그것은 완전히 SSI 페이지가 조각과 함께 업데이트 된 후 5 초에 동일하게 유지하지만 6,

:

시간 : 1,466,710,393 조각 시간 : 내가 전에 이런 짓을 한 1,466,710,393

ESI와 Varnish를 사용하고 SSI와 동일하게 작동 할 것으로 기대합니다. 내가 이것을 가정하는데 틀린가? 온라인으로 답변을 찾을 수 없으며 다른 캐시 제어 헤더를 실험 해 보았습니다. 그러나 이것이 올바른 방법임을 확신합니다. 내가 여기서 무엇을 놓치고 있니?

답변

2

은 당신의 설정에 문제가 있습니다 : 당신이 SSI 인해 HTTP {} 수준에서 정의

ssi on; 

에, 두 서버 모두에서 사용할 수 있습니다. 그 결과 두 번째 서버 {}에서 SSI 지시문이 확장됩니다. 첫 번째 서버에 캐시 된 응답에는 SSI 지시문이 없으므로 (이미 확장되어 있음) 항상 동일한 상태로 유지됩니다. 당신이 포함 된 조각은 모든 요청에 ​​신선한 싶은 경우

, 당신은 ssi onproxy_cache my_cache과 함께 첫 번째 서버에

proxy_cache_path /path/to/cache keys_zone=my_cache:20m; 

server { 
    listen 80; 
    server_name first.example.com; 

    location/{ 
     proxy_pass http://127.0.0.1:81; 
     proxy_cache my_cache; 
     ssi on; 
    } 
} 

server { 
    listen 81; 
    server_name second.example.com; 

    location ~ ^/.+\.php { 
     fastcgi_pass 127.0.0.1:9000; 
    } 
} 

하는 것으로 :, 첫 번째 서버에서 SSI를 활성화 예컨대 있습니다. 이 방법은 nginx가 SSI 지시문을 사용하여 백엔드 응답을 캐싱하고 모든 요청에 ​​대해 SSI 처리를 다시 실행하며 필요할 경우 별도로 캐싱합니다.

+0

당신, 선생님! 나는 이것에 대해 포기했지만,'ssi on '지시어를 움직이는 것이 트릭을 만들었다.정말 고맙습니다. –

-1

너는 평범한 캐시를 위해 one string을 만들거나 테스트 페이지를 만들어야하고, PHP 생성 프로세스를로드하여 약 2 초 만에 생성해야한다. 및 출력 이미지 및 기타 정적 콘텐츠 페이지 ....

p.s. 서버 요청 스크립트 및 헤더 설정 때문에 관련성이 없습니다.