このチュートリアルでは、静的ファイル(画像、CSS、Javascriptファイルなど)のExpiresHTTPヘッダーとCache-ControlHTTPヘッダーのmax-ageディレクティブを将来の日付に設定して、これらのファイルを将来の日付に設定するようにnginxを構成する方法について説明します。訪問者のブラウザによってキャッシュされます。これにより、帯域幅が節約され、Webサイトの表示が速くなります(ユーザーが2回目にサイトにアクセスすると、静的ファイルがブラウザのキャッシュから取得されます)。
1予備メモ
私はあなたが動作しているnginxセットアップを持っていると仮定しています、例えば。このチュートリアルに示されているように:Ubuntu 16.04LTSにPHP7とMySQL5.7(LEMP)を使用してNginxをインストールする
2nginxの構成
Expires HTTPヘッダーは、http {}、サーバー{}、ロケーション{}、またはロケーション{}ブロック内のifステートメント内に配置できるexpiresディレクティブを使用して設定できます。通常、静的ファイルのロケーションブロックで使用します。次のように:
location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
expires 365d;
}
上記の例では、すべての.jpg、.jpeg、.png、.gif、.ico、.css、および.jsファイルは、ブラウザーのアクセス時刻から365日後の日付のExpiresヘッダーを取得します。したがって、location {}ブロックに、ブラウザでキャッシュできる静的ファイルのみが実際に含まれていることを確認する必要があります。
変更後にnginxをリロードします:
/etc/init.d/nginx reload
有効期限ディレクティブでは、次の時間設定を使用できます。
- offを指定すると、ExpiresヘッダーとCache-Controlヘッダーが変更されなくなります。
- エポックはExpiresヘッダーを1970年1月1日00:00:01GMTに設定します。
- maxは、Expiresヘッダーを2037年12月31日23:59:59 GMTに設定し、Cache-Controlmax-ageを10年に設定します。
- @プレフィックスのない時間は、ブラウザのアクセス時間に対する有効期限を意味します。負の時間を指定できます。これにより、Cache-Controlヘッダーがno-cacheに設定されます。例:10日で有効期限が切れます。または14w3dの有効期限が切れます;
- @プレフィックスが付いた時刻は、HhまたはHh:Mmの形式で記述された絶対時刻の有効期限を指定します。Hの範囲は0〜24、Mの範囲は0〜59です。例:expires @ 15:34;
次の時間単位を使用できます:
- ミリ秒:ミリ秒
- s:秒
- m:分
- h:時間
- d:日数
- w:数週間
- M:月(30日)
- y:年(365日)
例:1時間30分で1時間30分、1年6か月で1時間6分。
また、遠い将来のExpiresヘッダーを使用する場合は、コンポーネントが変更されるたびにコンポーネントのファイル名を変更する必要があることに注意してください。したがって、ファイルをバージョン管理することをお勧めします。たとえば、ファイルjavascript.jsがあり、それを変更する場合は、ブラウザがファイルをダウンロードする必要があるように、変更されたファイルのファイル名(javascript-1.1.jsなど)にバージョン番号を追加する必要があります。ファイル名を変更しない場合、ブラウザはキャッシュから(古い)ファイルをロードします。
Expiresヘッダーをブラウザのアクセス時間(たとえば、expires 10d;)に基づく代わりに、ファイルの変更日に基づくこともできます(これは、ハードドライブに保存されている実際のファイルに対してのみ機能することに注意してください! )時間の前にある変更されたキーワードを使用する:
expires modified 10d;
3つのテスト
構成が機能するかどうかをテストするには、Firefoxブラウザの開発ツールのネットワーク分析機能を使用して、Firefoxを介して静的ファイル(画像など)にアクセスします。ヘッダー出力に、Expiresヘッダーとmax-ageディレクティブを含むCache-Controlヘッダーが表示されます(max-ageには秒単位の値が含まれます。たとえば、31536000は1年先です):
4つのリンク
- nginx HttpHeadersModule:http://wiki.nginx.org/HttpHeadersModule
作者について
FalkoTimmeはの所有者 Timme Hosting(超高速nginx Webホスティング)。彼はHowtoForge(2005年以降)の主任メンテナーであり、ISPConfig(2000年以降)のコア開発者の1人です。彼はまた、O'Reillyの本「LinuxSystemAdministration」にも寄稿しています。