静的ファイルをキャッシュするための Nginx 設定

静的ファイルをキャッシュするための Nginx 設定

AngularJS アプリケーションを正しく提供するために Nginx を構成する際に問題があります。サーバーは次のように構成されています。

www.example.com we have the landing page of the application
www.example.com/app we have the application itself

アプリケーションへのパスは次のとおりです。

/usr/share/nginx/html/example.com/app/

静的ファイルは次の場所にあります。

アセット

ここで、ランディング ページとアプリケーションの両方のすべての HTML ファイルのキャッシュを「no-cache」に設定し、すべての js、css、および画像ファイルのキャッシュを 60 日間に設定したいと思います。

これは私の現在の nginx サーバーの構成です:

server {
listen 80;

index index.html;

server_name example.com www.example.com;

location ~* \.(?:ico|css|js|gif|jpe?g|png)$ {
    expires 60d;
    add_header Pragma public;
    add_header Cache-Control "public, must-revalidate, proxy-revalidate";
}

location ^~ /app {
    alias /usr/share/nginx/html/example.com/app/public/;
    expires -1;
    add_header Pragma "no-cache";
}

location / {
    root /usr/share/nginx/html/example.com;
    expires -1;
    add_header Pragma "no-cache";
    add_header Cache-Control "no-store, no-cache, must-revalidate,  post-check=0, pre-check=0";
  }
}

ここで問題となるのは、location ディレクティブです。

location ~* \.(?:ico|css|js|gif|jpe?g|png)$

実行されることはないので、キャッシュは /app ディレクティブで定義されているように no-cache として設定されます。

何か案が?

ありがとう

答え1

nginx ドキュメントからの引用:

最も長く一致するプレフィックスの場所に「^~」修飾子がある場合、正規表現はチェックされません。

したがって、ここでの問題はlocation ^~ /app定義です。^修飾子により、nginx は画像の正規表現を無視します。

代わりにを使用する必要がありますlocation /app。この場所では正規表現のマッチングは必要なく、単純なプレフィックスのマッチングで十分です。

答え2

問題は「~*」だと思いますので、「~」だけを使ってみてください。例:

location ~ \.(?:ico|css|js|gif|jpe?g|png)$

関連情報