PHP アプリケーションからのヘッダーの競合により、FastCGI キャッシュが「MISS」になるのでしょうか?

PHP アプリケーションからのヘッダーの競合により、FastCGI キャッシュが「MISS」になるのでしょうか?

私は次のように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) が常に Pragma & Cache-Control を送信していることですprivate。上記のルールが適用されない場合に、これらのヘッダーを無視して FastCGI にキャッシュを使用させる方法はありますか? このキャッシュの可能性については、よくわかりません。

答え1

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

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

  • ヘッダーに「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;

関連情報