2026年11月13日
2026年11月13日
Nginxでスタティックファイルのキャッシュヘッダーを設定する方法
はじめに
ウェブサイトのパフォーマンス向上には、静的ファイル(画像やCSS、JavaScriptなど)を効率的にキャッシュすることも重要な要素です。Nginxはその点でも優れていますが、適切なキャッシュヘッダーを設定することでさらに効果を高めることができます。本記事では、Nginxを使って静的ファイルに適切なキャッシュヘッダーを設定する方法について解説します。
症状・背景
このテーマが必要になる主な場面は以下の通りです:
- ウェブサイトのパフォーマンス向上を目的として、静的ファイルのキャッシュを利用したい
- Nginxで静的ファイルを効率的に配信し、ユーザーからのリクエストを減らしたい
手順・設定方法
ステップ1: キャッシュヘッダーセットアップ
# Nginxのコンフィグレーションファイル(通常は /etc/nginx/nginx.conf または /etc/nginx/conf.d/ にある)を開く
sudo nano /etc/nginx/nginx.conf
# httpブロック内に以下を追加
http {
# 静的ファイルのキャッシュヘッダーを設定する
sendfile on;
aio threads;
directio 1024k;
# デフォルトのタイムアウトを設定
client_body_timeout 60s;
client_header_timeout 60s;
keepalive_timeout 70s;
send_timeout 60s;
# 静的ファイルに適用するキャッシュヘッダー
include /etc/nginx/conf.d/static_files.conf;
}
ステップ2: キャッシュヘッダーの詳細設定
# /etc/nginx/conf.d/static_files.conf ファイルを作成または編集
sudo nano /etc/nginx/conf.d/static_files.conf
# 静的ファイルに適用するキャッシュヘッダーを指定
location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
expires 30d;
add_header Cache-Control "public, max-age=2592000";
}
ステップ3: アプリケーションキャッシュヘッダー
# より複雑なアプリケーション向けのキャッシュヘッダーを設定する場合
location /app/static {
expires 365d;
add_header Cache-Control "public, max-age=31536000";
}
ステップ4: 設定適用と確認
# Nginxのコンフィグレーションを再読み込み
sudo nginx -t
sudo systemctl reload nginx
注意事項
- 安全性: ユーザーがアップロードしたファイルには注意を払ってください。不正なコンテンツはキャッシュされないよう、適切なアクセス制御を設定してください。
- パフォーマンス: 追加のキャッシュヘッダーはパフォーマンス向上に寄与しますが、過度な設定は逆効果になることもありますので注意が必要です。
- 監視: キャッシュの有効性を定期的に確認し、必要に応じて調整してください。
まとめ
1. sendfile on: Nginxがファイルシステムから直接ブラウザにファイルを送信します。
2. aio threads: マルチスレッドI/O操作を可能にします。
3. expires 30d: 静的ファイルに対するキャッシュの有効期限を設定します。
4. add_header Cache-Control "public, max-age=2592000": キャッシュが共有できるようにし、有効期限も設定します。
関連記事: