Nginxのキャッシュ:proxy_Cacheとfastcgi_cache

4258 ワード

proxy_Cacheとfastcgi_CacheはNginxのキャッシュを構成し、proxy_Cacheは主に逆エージェントに使用される場合、バックエンドの内蔵ソースサーバをキャッシュします.静的および動的を含む任意のコンテンツであり、キャッシュはnginxとバックエンドの通信回数を減少させ、伝送時間とバックエンドのブロードバンドを節約します.fastcgi_Cacheは主にFastCGIの動的プログラムをキャッシュするために用いられ,phpが生成した動的コンテンツ,fastcgi_Cacheキャッシュはnginxとphpの通信回数を減らし、memcachedなどのキャッシュよりもphpとデータベース(mysql)の圧力を軽減します.両者の機能は基本的に同じです.
機能上、NginxはすでにSquidが持つWebキャッシュ加速機能、指定されたURLキャッシュをクリアする機能を備えている.性能の上で、NginxはマルチコアCPUの利用に対して、Squidに勝って少なくありません.また,リバースエージェント,負荷バランシング,ヘルスチェック,バックエンドサーバのフェイルオーバ,Rewrite書き換え,使いやすさにおいても,NginxはSquidよりはるかに強力である.これにより、1台のNginxを「ロード・バランシング・サーバ」と「Webキャッシュ・サーバ」として同時に使用できます.
実際の状況に合わせてproxy_を使用することができますCacheとfastcgi_CacheはNginxの負荷等化システムを構築する.
FastCGIの技術原理は、「短生存期間アプリケーション」とは何か、「長生存期間アプリケーション」とは何かを理解することです.まずCGI技術から始めます.以下はCGI技術の理論です.お客様がCGIを要求するたびに、Webサーバはオペレーティングシステムに新しいCGIプロセスの生成を要求します.CGIが要求を満たすと、サーバはこのプロセスを殺します.サーバは、クライアントに対する各リクエストに対して、このようなプロセスを繰り返します.FastCGI技術の理論は、FastCGIプログラムが生成されると、明確に終了するまで顧客の要求を満たすのに十分な仕事を続けることができるということです.連携処理でプログラムのパフォーマンスを向上させる場合は、Webサーバに複数のFastCGIアプリケーションのコピーを実行するように要求できます.CGIはいわゆる短生存期間アプリケーションであり,FastCGIはいわゆる長生存期間アプリケーションである.FastCGIプログラムは新しいプロセスを絶えず生成する必要がないため、サーバの圧力を大幅に低減することができます.より高い応用効率を生み出す.多くの場合、1つのページが複数のデータ・スライスで構成され、ページの速度を向上させるために、別々にキャッシュするか、全体キャッシュ(いわゆるPage Cache)がNginx fastcgi_についてCache、ベースはNginx公式ドキュメントを参照できますhttp://wiki.nginx.org/HttpFcgiModuleでは、次のような典型的な方法があります.
fastcgi_temp_path /data/ngx_fcgi_tmp;
fastcgi_cache_path /data/ngx_fcgi_cache levels=2:2 keys_zone=ngx_fcgi_cache:512m inactive=1d max_size=40g;
fastcgi_cache_valid 200 301 302 1d;
fastcgi_cache_use_stale error timeout invalid_header http_500;
fastcgi_cache_key http://$host$request_uri;

各パラメータの意味を大まかに説明します.
  fastcgi_temp_path:fastcgi_の生成Cacheテンポラリファイルディレクトリfastcgi_cache_path:fastcgi_Cacheキャッシュディレクトリ、ディレクトリハッシュレベルを設定できます.たとえば、2:2に256*256ワードディレクトリが生成されます.keys_zoneはこのキャッシュスペースの名前で、cacheはどれだけのメモリ(このような人気のあるコンテンツnginxは直接メモリを入れて、アクセス速度を高めます)、inactiveはデフォルトの失効時間を表して、max_sizeは最大どれだけのハードディスク容量を使用するかを示し、fastcgi_に注意してください.Cacheキャッシュはfastcgi_に先に書きますtemp_pathはfastcgi_に移動cache_path、だからこの2つのディレクトリは0.8から同じパーティションにあるほうがいいです.9以降は異なるパーティションで使用できますが、同じパーティションを置くことをお勧めします.  fastcgi_cache_valid:キャッシュするhttpヘッダを定義するfastcgi_cache_use_stale:期限切れキャッシュfastcgi_を使用する場合の定義cache_key:fastcgiの定義Cacheのkey、例では要求されたURIをキャッシュのkeyとし、Nginxはこのkeyのmd 5をキャッシュファイルとし、キャッシュハッシュディレクトリが設定されている場合、Nginxは後ろから対応するビット数をディレクトリとして取得する.  fastcgi_Cache:どのキャッシュスペースでキャッシュを手動でクリアしますか?Nginxのサードパーティ拡張機能があります.https://github.com/FRiCKLE/ngx_cache_purge/キャッシュファイルを直接見つけて削除すればいいです.Nginx fastcgi_Cacheキャッシュはいいですが、いくつかのページでfastcgiを使いたいだけです.Cache、簡単です.2つの方法があります.1つはlocationでfastcgi_を定義することです.Cache、このように一定の規則を満たすurlだけがcacheを使うことができて、その他はできません;もう1つの方法は、キャッシュを必要としないページに、キャッシュ禁止のヘッダ情報を出力し、ColaPHPを使うと、直接$this->response->disableBrowserCache()具体的なコード:
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");

ほとんどがMemcache、Xcache、Proxy_Cache,FastCgi Cacheは構成方法を採用することが少ない1,新規フォルダにキャッシュファイルを格納mkdir/home/cache/fcgi-p(wwwの権限)2,nginxを修正する.confファイル(LNMPワンタッチパッケージディレクトリは/usr/local/nginx/conf/nginx.conf)でhttpレイヤに追加:fastcgi_cache_path/home/cache/fcgi levels=1:2 keys_zone=fcgi:15m inactive=1d max_size=1g; #15 mはメモリ占有1 gはハードディスク最大占有スペース3、vhostディレクトリの下にあるサイトファイルの変更
		location ~ .*\.(php|php5)?$
			{
				#try_files $uri =404;
				fastcgi_pass  unix:/tmp/php-cgi.sock;
				#fastcgi_index index.php;
				include fcgi.conf;
				#fastcgi_pass   127.0.0.1:9000;
				fastcgi_index  index.php;
				fastcgi_param  SCRIPT_FILENAME  /home/wwwroot/$fastcgi_script_name;  #        
				include        fastcgi_params;
				fastcgi_cache fcgi;
				fastcgi_cache_valid 200 302 301 1h;
				fastcgi_cache_valid any 1m;
				fastcgi_cache_min_uses 1;
				fastcgi_cache_use_stale error timeout invalid_header http_500;
				fastcgi_cache_key $request_method:$host$request_uri;
			}
/etc/init.d/nginx restart

5、サイトを開き、キャッシュディレクトリが大きくなっているかどうかを確認する
du -sh/home/cache/fcgi
変換元:http://blog.angryfox.com/?p=1930