1

CodeIgniter に、GridFS から画像をプルする動的コンテンツ コントローラーがあります。サーバーはnginxを実行しており、nginx構成でキャッシュ制御ヘッダーを設定して、この動的コンテンツコントローラーによって提供される画像を7日間キャッシュしようとしています。nginx 構成で構成が正しく設定されていますが、ファイルがサーバー上に物理的に存在しないため、nginx から 404 ヘッダーを取得しています。

私のキャッシュ制御ディレクティブは次のとおりです。

location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
    expires 7d;
    log_not_found off;
}

log_not_found は、nginx が 404 エラーをログに記録しないようにするのに役立ちますが、ブラウザーに送信されるヘッダーは依然として 404 エラーです。phpの「header」機能でヘッダーを手動で設定してみましたが、nginxはphp-fpmを使っているため、変なことをしていました。

この状況でキャッシュ制御ヘッダーを適切に設定する方法について、誰かが正しい方向に向けることができますか? みんなありがとう=)

アップデート:

nginx conf を、すべての静的ファイルと動的コントローラー用の特別な場所に変更しました。

location ~ ^/(dres|js|css|art)/ {
    access_log off;
    expires 7d;
    add_header Cache-Control public;
    try_files $uri $uri/ /index.php?$args;
}

Nginxは静的ファイルに正しい有効期限ヘッダーを設定していますが、動的に出力される画像の有効期限ヘッダーを出力するためにfastcgiとnginxを取得することはできません。PHPファイルを提供するときに有効期限ヘッダーを許可するには、fastcgi構成に何かが欠けているに違いありません。

4

2 に答える 2

0

そのためにfastcgi_cacheを設定することになっていませんか?

于 2011-12-20T03:56:25.257 に答える
0

おおむね解決しました。PHPの「ヘッダー」機能を使用すると機能していることに気付きましたが、そうではないと思わせる他の問題がありました。これを動的画像コントローラーに追加しました。

// seconds, minutes, hours, days
$expires = (60*60*24*7);
header("Pragma: public");
header("Cache-Control: maxage=".$expires);
header('Expires: ' . gmdate('D, d M Y H:i:s', time()+$expires) . ' GMT');       

これで、少なくとも有効期限は、動的画像に必要なように機能しています。これらの動的イメージで 404 を取得せずに静的ファイルの有効期限を指定する方法はわかりませんが、今のところはこれで十分です。

于 2011-12-20T22:03:09.020 に答える