Nginxを使用して静的コンテンツを提供していますが、特定のルールを満たすすべてのファイルに期限ヘッダーを設定する方法はありますか?たとえば、拡張子が「.css」のすべてのファイルに期限ヘッダーを設定できますか?
いくつかのファイル拡張子に加えて、より完全なキャッシュヘッダーを使用することを好みます。 「?」プレフィックスは「非キャプチャ」マークであり、nginxは$ 1を作成しません。不要な負荷を軽減します。
location ~* \.(?:ico|css|js|gif|jpe?g|png)$ {
expires 30d;
add_header Pragma public;
add_header Cache-Control "public";
}
承認された回答によってファイルが表示されなくなる理由についてコメントするのに十分な評判はありませんが、私はそれを理解し、手助けしたいと思います!
短縮版:
グローバルなセットがない場合は、画像のロケーションブロックにルートディレクトリが指定されていることを確認してください。
以下のロングバージョン:
まず第一に、このソリューションを実装する私の方法は本当に この答え に似ていて、ルールを記述します(受け入れられた答えのように):
location ~* \.(?:ico|css|js|gif|jpe?g|png)$ {
expires 30d;
add_header Pragma public;
add_header Cache-Control "public";
}
ファイルにimg-cache.conf
次に、そのファイルをserver {...}
ディレクティブ。
私のsites-availableフォルダにあるsomesite.comの例:
#Image Caching
include /etc/nginx/conf/img-cache.conf;
そうすることで、実行している可能性のある複数のサイトにイメージキャッシングロケーションブロックを追加できます。
第二に、私は/ var/www /にpublic_htmlとして許可する2つのフォルダーが含まれているという状況があります-安全でトレーニングのため、サイトのサーバーディレクティブで特定のロケーションブロックを作成し、これらのフォルダーを単一化する必要があります。
そのため、グローバルルートディレクトリセットがありません。
したがって、画像の場所をブロックするとき、そこから画像を検索するためのルートディレクトリをブロックに提供していない可能性があります。
私の解決策はそれから:
location ~ ^/training.+\.(?:ico|css|js|gif|jpe?g|png)$ {
root /var/www/;
expires 7d;
add_header Pragma public;
add_header Cache-Control "public";
try_files $uri 404;
}
location ~ ^/.+\.(?:ico|css|js|gif|jpe?g|png)$ {
root /var/www/secure;
expires 7d;
add_header Pragma public;
add_header Cache-Control "public";
try_files $uri 404;
}
有効期限を最大に設定することもできます。ここに私がcssとjsに使用するディレクティブがあります。
# Set css and js to expire in a very long time
location ~* ^.+\.(css|js)$ {
access_log off;
expires max;
}
前述のすべての解決策は、異なるパスに対して異なるエイリアスを持つ可能性を否定します。また、すべての異なるキャッシュの有効期限を1か所に収めるために、nginxマップを次のように使用する必要があります。
...
# Expires mappings
map $sent_http_content_type $expires {
default off;
text/html Epoch;
text/css max;
application/javascript 7d;
~image/ max;
}
...
server {
listen ...;
expires $expires;
location /assets/ {
# It is now possible to serve some resources from different path
alias /var/www/my_other_path/
}
# and have them all have same expirations
location / {
try_files $uri $uri/ /index.html;
}
...
}
Off
はキャッシングを無効にし、Epoch
(UNIX Epochの場合)は常にリソースを再フェッチします。max
はブラウザーの最大値に日付を設定します。
〜image /は任意の画像タイプに一致します。
Nginxマップの詳細については、 http://nginx.org/en/docs/http/ngx_http_map_module.html を参照してください。
すべての静的ファイルのホームとなる場所が1つある場合、このようなことで十分です...
location /static {
your/location/to/static/files/static;
expires 30d;
add_header Cache-Control "public";
}
受け入れられた回答により、nginxは静的ファイルを見つけられませんでした。理由はよくわかりませんが、これは単純な代替手段です。