Nginx キャッシュ設定例

Nginx キャッシュ設定例

Web アプリケーションの開発とデバッグを行う際には、テストのためにブラウザのキャッシュをクリアしたり、強制的に更新したりしなければならないという問題に遭遇することがよくあります。ここでは、Apache の no-cache 構成と nginx の no-cache 構成の設定をいくつか紹介します。一般的なキャッシュ設定には Cache-Control と Pragma の 2 つがあり、どちらも add_header を使用して設定されます。

nginx:
場所 ~ .*\.(css|js|swf|php|htm|html)$ {
add_header Cache-Control no-store;add_header Pragma no-cache;
}

サイト上で頻繁に変更されない静的コンテンツ (画像、JS、CSS など) の場合、サーバー上で有効期限を設定してブラウザ キャッシュを制御することで、帯域幅トラフィックを効果的に削減し、サーバーの負荷を軽減できます。

Nginx サーバーを例に挙げます。

場所 ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ {
#有効期限は30日間です。
#画像ファイルはほとんど更新されないので、有効期限が切れたときには大きな値を設定できます。
#頻繁に更新する場合は、小さく設定することもできます。
有効期限は30日です。
}
場所 ~ .*\.(js|css)$ {
有効期限は10日です。
}

[背景]: Expires は、Web サーバーの応答メッセージのヘッダー フィールドです。HTTP 要求に応答するときに、ブラウザーが有効期限前に再度要求することなくブラウザー キャッシュから直接データを取得できることをブラウザーに通知します。

関連情報

1. キャッシュ制御戦略

Cache-Control と Expires は同じ機能を持ち、どちらも現在のリソースの有効期間を示し、ブラウザーがブラウザー キャッシュからデータを直接取得するか、サーバーに要求を再送信してデータを取得するかを制御します。ただ、Cache-Control の方がオプションが多く、より詳細な設定が可能です。同時に設定する場合は、Expires よりも優先度が高くなります。

HTTP プロトコル ヘッダー Cache-Control :

値は、public、private、no-cache、no-store、no-transform、must-revalidate、proxy-revalidate、max-age のいずれかになります。

各メッセージ内の指示の意味は次のとおりです。

  • Public は、応答が任意のキャッシュによってキャッシュできることを示します。
  • プライベートは、単一ユーザーの応答メッセージの全体または一部を共有キャッシュで処理できないことを示します。これにより、サーバーは、この応答メッセージが他のユーザーのリクエストに対して有効になることなく、現在のユーザーに対する応答メッセージの一部のみを記述できるようになります。
  • no-cacheは、リクエストまたはレスポンスメッセージをキャッシュできないことを示します。
  • no-store は、重要な情報が誤って公開されるのを防ぐために使用されます。これをリクエスト メッセージで送信すると、リクエスト メッセージと応答メッセージの両方でキャッシュが使用されなくなります。
  • max-age は、クライアントが指定された時間 (秒単位) を超えない経過時間の応答を受け入れることができることを示します。
  • min-fresh は、クライアントが現在の時間と指定された時間の合計よりも短い応答時間の応答を受信できることを示します。
  • max-stale は、クライアントがタイムアウト期間を超えて応答メッセージを受信できることを示します。 max-stale メッセージ値を指定すると、クライアントは指定されたタイムアウト期間を超える応答メッセージを受信できます。

最終更新日/更新日以降

  • Last-Modified/If-Modified-Since は Cache-Control と組み合わせて使用​​する必要があります。
  • Last-Modified: この応答リソースの最終変更時刻を示します。リクエストに応答する際、Web サーバーはリソースが最後に変更された日時をブラウザーに通知します。
  • If-Modified-Since: リソースの有効期限が切れると (Cache-Control の max-age フラグを使用)、リソースに Last-Modified 宣言があることが判明した場合、Web サーバーへの次のリクエストには、リクエスト時間を示す If-Modified-Since ヘッダーが含まれます。リクエストを受信すると、Web サーバーは If-Modified-Since ヘッダーを見つけ、それを要求されたリソースの最終変更時刻と比較します。最終変更時間が比較的新しい場合は、リソースが再度変更されたことを意味し、リソース コンテンツ全体 (応答メッセージ本文に記述) が HTTP 200 で応答されます。最終変更時間が比較的古い場合は、リソースが変更されていないことを意味し、応答は HTTP 304 (本文は不要、閲覧時間を節約) で、ブラウザに保存されたキャッシュを引き続き使用するように指示します。

最終的に達成されるのは、次の 3 種類の HTML キャッシュ テクノロジを設定することと同等です。

<meta http-equiv="pragma" content="no-cache"/>
<meta http-equiv="Cache-Control" content="no-cache, must-revalidate"/> 
<meta http-equiv="有効期限" content="0"/>

Nginx キャッシュ設定の詳細事例については以上です。より関連性の高い Nginx キャッシュ設定については、123WORDPRESS.COM の過去の記事を検索するか、以下の関連記事を引き続き閲覧してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • Nginx でバージョン番号と Web ページのキャッシュ時間を非表示にする方法
  • nginxのリソースキャッシュ設定の詳細な説明
  • nginx proxy_cache バッチキャッシュクリアスクリプトの紹介
  • nginx キャッシュサーバーに静的ファイルを設定する方法
  • Nginxとブラウザキャッシュの扱い方

<<:  CSS3のbox-shadowプロパティの使い方の詳細な例

>>:  MySQL における TIMESTAMPDIFF ケースの詳細な説明

推薦する

JS ES6 変数分割代入の詳細な説明

目次1. 脱構築とは何か? 2. 配列の分割3. 配列モードと代入モードの統一4. デフォルト値の構...

CSSレイアウトにおけるフローティング問題に対する4つの解決策の詳細な説明

1. 原因:サブボックスをフロートに設定した後の効果: 青いボックスをフロートに設定すると、標準のド...

フォント宝庫 50 種類の素晴らしい無料英語フォントリソース パート 2

デザイナーは独自のフォント ライブラリを持っているため、プロジェクトの設計時にすぐに使用できます。今...

Mysql論理アーキテクチャの詳細な説明

1. 全体的なアーキテクチャ図他のデータベースと比較すると、MySQL は、そのアーキテクチャがさま...

Ubuntu で時刻同期に NTP を使用する

NTP は、ネットワーク上で時間を同期するための TCP/IP プロトコルです。通常、クライアントは...

Centos8 で yum を使用して mongodb 4.2 をインストールする方法

1. リポジトリファイルを作成するmongodb の公式インストール ドキュメントを参照し、次のスク...

Linux Autofs 自動マウント サービスのインストールと展開のチュートリアル

目次1. autofs サービスの紹介2. Autofsのインストールと展開3. Autofs効果の...

MySql におけるプロセス制御関数/統計関数/グループ化クエリの使用法の分析

これからの道のりは長く困難ですが、私は探求を続けます。また週末がやってきました。引き続き、皆さんと一...

JavaScript の高度なプログラミングの基本参照型

目次1. 日付2. 正規表現3. オリジナルパッケージタイプ序文:参照値(オブジェクト)は、 Dat...

Linux で nohup ログ出力が大きすぎる問題の解決方法の詳細な説明

最近、hadoop テスト クラスターで spark ストリーミング プログラムを実行し、その後、n...

Linux での nginx のインストール、展開、使用方法の詳細な説明

目次1. ダウンロード2. 展開3. Nginxログ関連の設定4. ファイルダウンローダーとして n...

html+vue+element-ui のスムーズさを 1 分で体験

テクノロジーファンHTMLウェブページ、知っておくべきYouyou が開発した vue フロントエン...

パーティショニングを使用して数十億のデータに対する MySQL データ処理を最適化する方法

MySQL が数千万のデータをクエリする場合、ほとんどのクエリ最適化の問題はインデックスを通じて解決...

Centos7にGitLabサーバーをインストールして展開する方法

私はここでCentOS 7 64ビットシステムを使用しています。CentOS 64ビットシステムを試...

LAMP ソースコードを使用したエンタープライズレベルのインストールチュートリアル

目次LAMPアーキテクチャ1.ランプの紹介2. WebサービスワークフローWebサーバーのリソースは...