web-dev-qa-db-ja.com

FastCGIキャッシュは常にミスです

だから、私はこのようにFastCGIキャッシュを設定しました:

location ~ \.php(/.*)?$ {
    fastcgi_cache RWI;
    fastcgi_cache_valid 200 60m;

    set $nocache 0;
    if ($request_method = POST)
    {
        set $nocache 1;
    }

    if ($http_cookie ~ (rwi_userid*|rwi_password*)) {
        set $nocache 1;
    }

    if ($request_uri ~* "/(vb/admincp/)") {
        set $nocache 1;
    }

    fastcgi_no_cache $nocache;
    fastcgi_cache_bypass $nocache;

    fastcgi_split_path_info ^((?U).+\.php)(/?.+)$;
    fastcgi_param PATH_INFO $fastcgi_path_info;
    fastcgi_pass "unix:/var/www/vhosts/system/{domain}/php-fpm.sock";
    include /etc/nginx/fastcgi.conf;
}

そして、私が持っているserver{}ブロックの上に:

fastcgi_cache_path /var/cache/nginx levels=1:2 keys_zone=RWI:100m inactive=60m;
fastcgi_cache_key "$scheme$request_method$Host$request_uri";
add_header X-Cache $upstream_cache_status;

問題は私のPHPスクリプト(vBulletin)が常にプラグマとキャッシュ制御privateを送信していることです。上記の場合、これらのヘッダーを無視してFastCGIにキャッシュを使用させる方法はありますか?ルールは適用されませんか?私はこのキャッシュの可能性にちょっと迷っています。

4

Nginxは、HTTP中間キャッシュ仕様を順守するためのリバースプロキシとして使用される場合、一連のヘッダーを解釈します。これは、次のヘッダーがアプリの返信に存在する場合、説明したようにキャッシュの動作を変更することを意味します。

  • 「X-Accel-Expires」ヘッダーフィールドは、応答のキャッシュ時間を秒単位で設定します。ゼロの値は、応答のキャッシュを無効にします。値が@プレフィックスで始まる場合、エポックからの絶対時間を秒単位で設定します。この時間までは、応答がキャッシュされます。

  • ヘッダーに「X-Accel-Expires」フィールドが含まれていない場合、キャッシュのパラメーターはヘッダーフィールド「Expires」または「Cache-Control」で設定できます。

  • ヘッダーに「Set-Cookie」フィールドが含まれている場合、そのような応答はキャッシュされません。

  • ヘッダーに「Vary」フィールドと特別な値「*」が含まれている場合、そのような応答はキャッシュされません(1.7.7)。ヘッダーに別の値の「Vary」フィールドが含まれている場合、そのような応答は、対応する要求ヘッダーフィールドを考慮してキャッシュされます(1.7.7)。

ただし、nginxは fastcgi_ignore_headers ディレクティブ。これをオフにしたい場合。だからあなたが探しているのは:fastcgi_ignore_headers Cache-Control Pragma;

8
Xavier Lucas