使用シナリオ:
プロジェクト ページでは、頻繁に変更されない大量のデータを読み込む必要があります。パーソナライズされたカスタマイズは必要ありません。データはリクエストごとに動的に生成されます。リクエストのルートとパラメータに基づいて結果をキャッシュし、nginx キャッシュを使用するとリクエスト速度が大幅に向上します。
基本
コンテンツ キャッシュを有効にするには、proxy_cache_path と proxy_cache を構成するだけです。前者はキャッシュ パスと構成を設定するために使用され、後者はキャッシュ パスと構成を設定するために使用されます。キャッシュを有効にするために使用されます。
http { ... proxy_cache_path /path/to/cache levels=1:2 keys_zone=my_cache:10m max_size=10g inactive=60m use_temp_path=off; server { proxy_cache mycache; location / { proxy_pass http://localhost:8000; } } }
対応するパラメータの説明:
1. キャッシュに使用されるローカル ディスク ディレクトリは、/path/to/cache/
2 です。 .levels は、/path/to/cache/ に 2 レベルのディレクトリ階層を設定します。多数のファイルを 1 つのディレクトリに配置すると、ファイル アクセスが遅くなる可能性があるため、ほとんどの展開では 2 レベルのディレクトリ階層を推奨します。レベルパラメータが設定されていない場合、nginx はすべてのファイルを同じディレクトリに配置します。
3.keys_zone キャッシュ キーとメタデータの保存に使用される共有メモリ領域を設定します。これはタイマーの使用と似ています。キーのコピーをメモリに配置すると、nginx はディスクを取得せずにリクエストがヒットかミスかを迅速に判断できるため、取得速度が大幅に向上します。 1MB のメモリ空間には約 8,000 個のキーを保存できるため、上記で設定した 10MB のメモリ空間にはほぼ 80,000 個のキーを保存できます。
4.max_size はキャッシュの上限を設定します (上記の例では 10g)。これはオプションです。値を指定しないと、キャッシュが増大し、利用可能なディスク領域がすべて消費されてしまいます。キャッシュがこの制限に達すると、プロセッサはキャッシュ マネージャーを呼び出して、最も最近使用されていないファイルを削除し、キャッシュ スペースをこの制限以下に減らします。
5.inactive は、項目がアクセスされずにメモリ内に留まる時間を指定します。上の例では、ファイルが 60 分以内に要求されなかった場合、ファイルの有効期限が切れているかどうかに関係なく、キャッシュ管理によってそのファイルがメモリから自動的に削除されます。このパラメータのデフォルト値は 10 分 (10m) です。非アクティブなコンテンツは、期限切れのコンテンツとは異なることに注意してください。 nginx は、キャッシュ コントロール ヘッダー (この例では、cache-control:max-age=120) で指定された期限切れのコンテンツを自動的に削除しません。期限切れのコンテンツは、inactive で指定された時間内にアクセスされなかった場合にのみ削除されます。期限切れのコンテンツにアクセスすると、nginx は元のサーバーからコンテンツを更新し、対応する非アクティブ タイマーを更新します。
6.nginx は、キャッシュに書き込まれるファイルを最初に一時記憶領域に置きます。use_temp_path=off コマンドは、これらのファイルをキャッシュするときに同じディレクトリに書き込むように nginx に指示します。ファイル システム内での不必要なデータ コピーを避けるために、パラメータを off に設定することを強くお勧めします。 use_temp_path は、nginx1.7 バージョンと nginx plus r6 で導入されました。
最終的に、proxy_cache コマンドは、URL が場所の部分 (この場合は /) に一致するコンテンツのキャッシュを開始します。また、proxy_cache コマンドをサーバー セクションに追加すると、独自の proxy_cache コマンドが指定されていない場所にあるすべてのサービスにキャッシュが適用されます。
nginx キャッシュ関連プロセス
キャッシュには 2 つの追加の nginx プロセスが関係します:
cacheマネージャ キャッシュのステータスをチェックするために定期的に起動されます。キャッシュ サイズが proxy_cache_path の max_size パラメータで設定された制限を超える場合、キャッシュ マネージャーは最近アクセスしたデータを削除します。キャッシュ マネージャーの起動の間に、キャッシュされたデータの量が構成されたサイズを一時的に超える場合があります。
キャッシュ ローダーは、nginx の起動後に 1 回だけ実行されます。以前にキャッシュされたデータに関するメタデータを共有メモリ領域にロードします。キャッシュ全体を一度にロードすると、起動後の最初の数分間に nginx のパフォーマンスが低下するほどのリソースが消費される可能性があります。これを回避するには、proxy_cache_path ディレクティブに次のパラメータを含めてキャッシュの反復ロードを構成します:
loader_threshold - 反復期間 (ミリ秒単位) (デフォルトは次の 200)
loader_files - 1 回の反復中にロードされるアイテムの最大数 (デフォルトは 100)
loader_sleeps - 反復間の遅延 (ミリ秒単位) (デフォルトでは 50)
次の例では、反復は 300 ミリ秒間、または 200 個の項目が読み込まれるまで続きます:
proxy_cache_path /data/nginx/cache keys_zone=one:10m loader_threshold=300 loader_files=200;
その他の一般的に使用されるパラメーター
設定例:
proxy_cache_path /path/to/cache levels=1:2 keys_zone=my_cache:10m max_size=10g inactive=60m use_temp_path=off; server { ... location / { proxy_cache my_cache; # proxy_cache_key "$host$request_uri$cookie_user"; proxy_cache_min_uses 3; proxy_cache_methods get head post; proxy_cache_valid 200 302 10m; proxy_cache_valid 404 1m; # proxy_cache_valid any 5m; proxy_pass http://localhost:8000; } }
対応するパラメータの説明:
proxy_cache_methods 为指定要被缓存的请求方式的响应值,默认为 get 和 head,新增其他的需要一起列出来,如上示例所示。
proxy_cache_valid 为响应状态码的缓存时间,示例可以为每个状态码缓存指定时间,也可以使用 any 进行全部状态码的缓存。
清除缓存
需要提前加一个配置,用于标识使用 http purge 方法的请求并删除匹配的 url 对应的缓存。
1.在 http {} 上下文中创建新变量,例如 $purge_method, 他依赖于 $request_method 变量:
http { ... map $request_method $purge_method { purge 1; default 0; } }
2.在 location {} 块中,已经配置缓存的前提下,引入 proxy_cache_purge 参数来指定清除缓存请求的条件。例如在上一步指定的 $request_method
server { listen 80; server_name www.example.com; location / { proxy_pass https://localhost:8002; proxy_cache mycache; proxy_cache_purge $purge_method; } }
配置完并使之生效之后,就可以发送一条 purge 请求来让缓存失效了,例如:
curl -x purge -d – https://www.example.com/*
在该示例中,将清除具有公共 url 部分(由星号通配符指定)的资源。但这些缓存条目不会从缓存中完全删除:它们会保留在磁盘上,直到它们被视为不活动(由proxy_cache_path 中的 inactive参数决定)的时候才完全删除,或缓存清除器(由 proxy_cache_path 中的 purge 决定),或客户端尝试访问它们的时候。
以上がNginx コンテンツ キャッシュを構成する方法と一般的なパラメーター構成は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。