2016-06-23 10 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(); 

ザ・がうまく作品が含まれています

時間:1466710388 フラグメント時間:1466710388今

を、第二後、私はまだキャッシュされるページ(ssi.php)が、time.phpフラグメントを期待します新鮮されるように:

時間:1466710388 フラグメント時間:1466710389

それは完全にSSIページがフラグメントと一緒に更新された後5秒間、同じまましかし

時間:1466710393 フラグメント時間:私は前にこれをやった1466710393

ESIとVarnishを使用し、SSIと同じように動作することを期待してください。これを仮定するのは間違っていますか?私はこのためにオンラインで答えを見つけることができず、さまざまなキャッシュ制御ヘッダーを試しましたが、これが正しい方法であると確信しています。私はここで何が欠けていますか?

答えて

2

は、あなたの設定に問題があります:あなたはSSIが原因のhttp {}レベルで定義された

ssi on; 

に、両方のサーバーで有効になっています。これにより、SSIディレクティブが2番目のサーバー{}に展開されます。最初のサーバーにキャッシュされたレスポンスにはSSIディレクティブが含まれていないため(既に展開されているため)、常に同じ状態を維持します。

あなたは付属のフラグメントは、すべてのリクエストに応じて新鮮になりたい場合は、あなただけの最初のサーバでSSIを有効にする必要があり、例えば:

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 onproxy_cache my_cacheと一緒に、最初のサーバーであること。このようにして、nginxはSSI指令でバックエンド応答をキャッシュし、すべての要求に対してSSI処理をやり直します。

+0

あなたは素晴らしいです!私はこれをあきらめていましたが、 'ssi on'指令を動かすことはやりました。どうもありがとうございます。 –

-1

あなただけone string equvalent CACHのためかどうか、あなたが約2秒ページを生成し得るためにテストページ、および負荷PHPのプロセスを作成必要なキャッシュします。出力画像やその他の静的コンテンツを表示する。

p.s.サーバーの要求スクリプトとヘッダーが設定されているため、関連性はありません。

関連する問題