
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)$