HTTP リクエストのキャッシュ制御に Nginx を使用する方法
HTTP リクエストのキャッシュ制御は、Web サイトのパフォーマンスを最適化する重要な手段です。サーバーがリクエストを処理する回数を減らし、Web サイトの応答速度を向上させることができます。ウェブサイト。 Nginx は高性能な Web サーバーおよびリバース プロキシ サーバーとして柔軟なキャッシュ制御機能を提供しますので、本記事では Nginx を使用して HTTP リクエストのキャッシュ制御を行う方法を紹介します。
1. プロキシ キャッシュを利用する
Nginx では、上流サーバーからの応答結果をキャッシュし、上流サーバーへのリクエスト数を削減できるプロキシ キャッシュ機能を提供しています。プロキシ キャッシュを使用するには、次の設定を Nginx 設定ファイルに追加します。
http { proxy_cache_path /var/cache/nginx 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$uri$is_args$args; proxy_cache_valid 200 302 10m; proxy_cache_valid 404 1m; proxy_cache_use_stale error timeout updating http_500 http_502 http_503 http_504; proxy_ignore_headers Cache-Control; proxy_ignore_headers Set-Cookie; proxy_hide_header Set-Cookie; proxy_pass http://upstream_server; } ... } }
上記の設定では、proxy_cache_path
を使用してキャッシュ パスと関連パラメータを設定します。 levels=1:2
は、効率を向上させるためにキャッシュ パスにレベル 1 ディレクトリとレベル 2 ディレクトリを作成することを意味します。 keys_zone
は、キャッシュ領域の名前とメモリ サイズを設定するために使用され、実際のニーズに応じて調整できます。 max_size
はキャッシュ領域の最大容量を示し、inactive
はキャッシュの有効期限を示します。つまり、60 分以内にアクセスされなかったキャッシュは削除されます。 use_temp_path=off
は一時パスを無効にすることを意味し、これによりパフォーマンスが向上します。
特定のサーバー構成で、location
ディレクティブを使用してキャッシュする必要がある URL を指定します。 proxy_cache
命令はキャッシュの有効化を示し、proxy_cache_key
命令はキャッシュ キー値を指定します。キャッシュ キー値を結合するために複数の変数を使用できます。 proxy_cache_valid
さまざまな HTTP ステータス コードのキャッシュ有効期間を指定します。たとえば、ステータス コード 200 および 302 の応答結果は 10 分以内、ステータス コード 404 の応答結果は 1 分以内に有効です。 proxy_cache_use_stale
上流サーバーでエラー、タイムアウト、または更新が発生した場合に、期限切れのキャッシュを使用するかどうかを指定するために使用されます。 proxy_ignore_headers
および proxy_hide_header
ディレクティブを使用すると、応答ヘッダー内の特定の属性を無視または非表示にすることができます。
構成が完了したら、Nginx サービスを再起動して構成を有効にします。このとき、Nginx は一致した URL をキャッシュし、再度同じ URL をリクエストした場合には、上流サーバーに再度リクエストすることなく、キャッシュから直接応答結果を取得します。
2. ブラウザ キャッシュの使用
プロキシ キャッシュに加えて、ブラウザ キャッシュを使用してネットワーク リクエストを減らすこともできます。 Nginx は、応答ヘッダーに Cache-Control
と Expires
を設定することでブラウザーのキャッシュ動作を制御できます。
例は次のとおりです:
http { ... server { ... location /static/ { expires max; add_header Cache-Control public; } ... } }
上記の構成では、expires
ディレクティブは max
に設定されています。これは、有効期限が切れることを意味します。応答結果の値は最大値に設定されます。つまり、有効期限が切れることはありません。 add_header
ディレクティブは、応答結果に Cache-Control
ヘッダーを追加し、それを public
に設定し、パブリック キャッシュが許可されていることを示します。
特定の URL 一致ルールでは、さまざまなニーズに応じてさまざまなキャッシュ戦略を設定できます。たとえば、静的リソースは通常頻繁に変更されないため、expires
を長い時間に設定してブラウザがリソースをキャッシュできるようにする一方で、動的に生成されたページはキャッシュしないように、またはキャッシュを短く設定することができます。時間。
3. 条件付きキャッシュを使用する
条件付きキャッシュは、クライアントとサーバー間の通信メカニズムであり、リクエストの条件に基づいてキャッシュを使用するかどうかを決定できます。 Nginx は、応答ヘッダーに Last-Modified
と ETag
を設定し、リクエストに If-Modified-Since
と If-None-Match を設定します。ヘッダー。
条件付きキャッシュを実装します。
例は次のとおりです:
http { ... server { ... location / { if_modified_since before; add_header ETag "123456"; if_none_match $http_if_none_match; if_modified_since off; ... } ... } }
上記の構成では、if_modified_since
ディレクティブを使用して、If-Modified-since
が有効かどうかを判断します。リクエストヘッダーの内容がサーバーよりも前である set Last-Modified
; add_header
命令は、リソースの一意性を識別するための ETag
ヘッダーを追加します。 ##if_none_match 命令は、リクエスト ヘッダーの
If-None-Match がサーバーによって設定された
ETag と一致するかどうかを判断するために使用されます。および
if_none_match 命令はそれぞれ ##If-Modified-Since
および If-None-Match
リクエスト ヘッダーの値に対応します。 条件付きキャッシュを設定すると、クライアントがリクエストを送信したときに、クライアントから返される
Last-Modified
と
に基づいてキャッシュを使用するかどうかを判断できます。サーバ。リソースが変更されていない場合、サーバーは 304 Not Modified
を返すことができ、クライアントはキャッシュからリソースを取得します。リソースが変更されている場合、サーバーは新しいリソースを返します。 4. キャッシュ戦略
キャッシュ動作をより適切に制御するために、さまざまな URL に応じてさまざまなキャッシュ戦略を設定できます。一般に、静的リソースの URL は安定しているため、キャッシュの有効期限を長く設定できますが、動的ページの URL は頻繁に変更される可能性があるため、キャッシュの有効期限を短く設定できます。
例は次のとおりです。
http { ... server { ... location /static/ { expires 7d; add_header Cache-Control public; } location /dynamic/ { expires 1h; add_header Cache-Control no-cache; } ... } }
上記の構成では、
/static/で始まる URL は静的リソースに一致し、有効期限を 7 日に設定し、許可されます。パブリック キャッシュ。
/dynamic/ で始まる URL は動的リソースに一致し、有効期限を 1 時間に設定し、キャッシュを無効にします。 合理的なキャッシュ戦略により、ユーザーが最新のリソースを確実に入手できるようにしながら、Web サイトのパフォーマンスを向上させることができます。
要約
Nginx を使用して HTTP リクエストのキャッシュ制御を行うことは、Web サイトのパフォーマンスを最適化する効果的な手段です。プロキシ キャッシュ、ブラウザ キャッシュ、および条件付きキャッシュにより、サーバーへのリクエストの数が削減され、Web サイトの応答速度が向上します。特定のキャッシュ戦略では、より良いユーザー エクスペリエンスを提供するために、さまざまな URL に応じてさまざまなキャッシュ有効期限を設定する必要があります。
参考: https://nginx.org/
以上がNginx を使用して HTTP リクエストのキャッシュ制御を行う方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。