Nginxキャッシュ5プログラム

  

nginxキャッシュ機能を書いたことがないようですが、共有したくない、これは悪い習慣です。

1.従来のキャッシュの1つ(404)

このメソッドは、nginx 404エラーをバックエンドに送信してから、proxy_storeを使用してバックエンドから返されたページを保存します。

設定:

location /{root /home /html /;#ホームディレクトリの有効期限1d;#ページの有効期限error_page 404 = 200 /fetch $ request_uri;#404は/fetchにリダイレクトDirectory}

location /fetch /{#404ここに内部;;#このディレクトリは外部に直接アクセスして有効期限1dを指定できないことを示します;#ページ有効期限エイリアス/home /html /;#仮想ディレクトリファイルシステムアドレスはlocaion /と同じでなければならず、proxy_storeはこのディレクトリにファイルを保存しますproxy_pass http://www.45it.com/;#バックエンドのアップストリームアドレス、/fetchもプロキシproxy_set_header Accept-Encoding '';#letバックエンドは圧縮の内容(gzipやdeflate)を返しません圧縮された内容を保存すると混乱を招きます。 Proxy_store on;##proxy proxy_temp_path /home /tmp; #tempディレクトリによって返されるファイルを保存するにはnginxを指定します。このディレクトリは/home /htmlと同じハードディスクパーティションにある必要があります。

nginxは/home /tmpと/home /htmlにファイルを書き込む権限を持っています。Linuxでは、nginxは一般に誰も実行しないように設定されるので、これら2つのディレクトリはnobodyに設定され、nobody user-specificに設定されます。もちろん、chmod 777を使うこともできますが、経験豊富なシステム管理者全員が777の使用をお勧めしません。

2、2つの伝統的なキャッシュ(!-e)

原則と404ジャンプは基本的に同じですが、より簡潔です:

location /{root /home /html /; proxy_store on; proxy_set_header Accept-Encoding ''; proxy_temp_path /home /tmp; if(!-f $ request_filename){proxy_pass http://www.45it.com/;}}

!-fを使用して、要求されたファイルがファイルシステムに存在しないかどうかを判断し、存在しない場合はproxy_passがバックエンドに送信され、戻り値もproxy_storeとともに保存されます。

従来の両方のキャッシュには、基本的に同じ長所と短所があります。短所1:read.php?id = 1のように、パラメータ付きの動的リンクはサポートされていません。ユーザーがread.php?id = 2にアクセスしたときに誤った結果が返されるように、ファイルシステムの下にread.phpとして保存します。同時に、それはhttp://www.45it.com/この形式のホームページと二次ディレクトリhttp://www.45it.com/sos/をサポートしていません、nginxがとても正直なので、そのような要求リンクをファイルに書くシステム、そしてこのリンクは明らかにディレクトリなので、保存は失敗します。これらの状況では、正しく保存するために書き換えの書き込みが必要です。デメリット2:nginxの内部では、キャッシュの有効期限やクリーンアップのメカニズムはなく、キャッシュされたファイルは永久にマシンに保存されます。この目的のために、シェルスクリプトを使用して定期的にクリーンアップしたり、phpなどの動的プログラムを作成してリアルタイムで更新することができます。デメリット3:キャッシュできるステータスコードは200個だけなので、バックエンドは301/302/404などのステータスコードを返しませんが、大量のアクセスが削除された疑似静的リンクがある場合は、浸透し続けます。バックエンドはたくさんのプレッシャーを受けます。デメリット4:nginxは自動的にメモリまたはハードディスクを記憶媒体として選択しません。もちろんすべてが設定によって決定されます。もちろん、現在のオペレーティングシステムにはオペレーティングシステムレベルのファイルキャッシュメカニズムがあるので、ハードディスクの同時読み取りについてあまり心配する必要はありません。結果として生じるIOパフォーマンスの問題。

nginxの伝統的なキャッシュの不利な点は、Squidのようなキャッシュソフトウェアとは異なる特徴を持っていることです。そのため、それはその利点と見なすこともできます。実稼働アプリケーションでは、Squidとのリンクをブロックすることはできず、nginxはそのアクセスをブロックすることができます(例:http://45it.com/?やhttp://45it.com)。 /Squidでは2つのリンクとして扱われるため、2つの侵入が発生し、リンクがhttp://45it.com/?1またはhttp://45it.com/になるかどうかにかかわらず、nginxは1回だけ保存されます。 123、バックエンドホストを効果的に保護するnginxキャッシュを渡すことができません。

nginxはリンクフォームをファイルシステムに非常に正直に保存するので、リンクについてはキャッシュの状態と内容をキャッシュマシンで簡単に確認でき、他のファイルと簡単に組み合わせることができます。 rsyncなどのマネージャは完全にファイルシステム構造です。

これら2つの伝統的なキャッシュはlinuxの下で/dev /shmにファイルを保存することができます一般的に、これも行うので、キャッシュをするためにシステムメモリを使い、期限切れのコンテンツをきれいにするためにメモリを使います。もっと早くなるでしょう。 /dev /shm /を使用するときは、/dev /shmパーティションを指すようにtmpディレクトリを指定するだけでなく、多数の小さなファイルやディレクトリがある場合は、メモリパーティションのiノード番号と最大容量を変更します。

mount -o size = 2500M -o nr_inodes = 480000 -o noatime、nodiratime -o remount /dev /shm

上記のコマンドは、デフォルトでは/dev /shmであるため、3Gメモリを搭載したマシンで使用されます。最大メモリはシステムメモリの半分の1500Mです、このコマンドはそれを2500Mに増やします、そしてiノードシステムiノードの数はデフォルトで十分でないかもしれません、しかし面白いことはそれが自由に調整できるということです。しかし、それで基本的には十分です。

3、memcachedキャッシュに基づく

nginxサポートmemcached。ただし、機能はそれほど強くはありませんが、パフォーマンスはまだ非常に優れています。

location /mem /{if($ uri〜" ^ /mem /([0-9A-Za-z _] *)$"){set $ memcached_key" $ 1" memcached_pa​​ss 192.168 .1.2:11211;} expires 70;}

この設定はhttp://45it.com/mem/abcにmemcachedのabcキーを指定してデータを取得します。

nginxは現在memcachedを書き込むためのメカニズムを持っていません。そのためmemcachedにデータを書き込むにはバックグラウンドの動的言語で行われ、404を使用してバックエンドにデータを書き込むことができます。

4、サードパーティ製プラグインに基づくncache

ncacheはSina Brothersによって開発された優れたプロジェクトです。squidキャッシュに似た機能のいくつかを実装するためにnginxとmemcachedを使います経験、あなたが参照することができます:

http://code.google.com/p/ncache/

5、nginxが新しく開発したproxy_cache関数

from nginx-0.7 .44バージョンの初めには、nginxはSquidに似たより規則的なキャッシュ機能をサポートしていますが、現在はまだ開発段階ですが、md5エンコーディングハッシュでリンクを保存するためです。 301/302は200以外の状態です。

設定:

最初にキャッシュスペースを設定します。

proxy_cache_path /path /to /cache levels = 1:2 keys_zone = NAME:10m無効= 5m max_size = 2m clean_time = 1m;

この設定はserverタグの外側にあることに注意してくださいレベルはキャッシュスペースがハッシュディレクトリの2つの層を持つことを指定します。 /path /to /cache /c /29 /b7f54b2df7773722d382f4809d65029c; keys_zoneはスペースに名前を付ける、10mはスペースサイズ、10mはキャッシュのデフォルト時間が5分、max_sizeは2mを超える2mを意味します。キャッシュされません; clean_timeはキャッシュが1分に1回クリーンアップされることを指定します。

location /{proxy_pass http://www.45it.com/;

proxy_cache NAME;#こ​​の名前を使ってこのキーゾーンを設定してください。

proxy_cache_valid 200 302 1h;#200と302 proxy_cache_valid 301 1d;#301ステータスコードで1日保存proxy_cache_valid任意の1m; #other保存で1分}

ps:0.7.44から0.7.51の安定版キャッシュをサポートいくつかのリンクへのアクセスにエラーがあるので、これらのバージョンは実稼働環境では使用しないのが最善です。現在nginx-0.7で知られているより安定したバージョンは0.7.39です。安定版0.6.36も最近のアップデートですが、0.7の新機能のいくつかを設定に使用していない場合は、バージョン0.6.36も使用できます。

Copyright © Windowsの知識 All Rights Reserved