私はAngular 2つのアプリケーションをこの方法でロケーションセクションを使用してnginxで提供しています:
location / {
try_files $uri $uri/ /index.html =404;
}
try_filesディレクティブは、ルートディレクトリで要求されたuriを見つけようとします。見つからない場合は、index.htmlを返します。
Index.htmlファイルのキャッシュを無効にする方法は?
Nginxという名前の場所を使用したソリューションを見つけました:
location / {
gzip_static on;
try_files $uri @index;
}
location @index {
add_header Cache-Control no-cache;
expires 0;
try_files /index.html =404;
}
location / {
try_files $uri $uri/ /index.html;
}
location = /index.html {
expires -1;
}
すばらしい回答をありがとうレム!彼が受け入れたソリューションを指摘しているように、ルートにアクセスするときにキャッシングヘッダーは追加されません。 www.example.com/。ただし、ディープリンクにアクセスすると追加されます。 www.example.com/some/path。
多くの掘り下げの後、これはngnixモジュールのデフォルトの動作 ngx_http_index_module のせいだと信じていますindex.htmlは、キャッシュコントロールヘッダーなしで提供されます。私が使用した回避策は、最初のロケーションブロックにindex.htmlを指定せずに、2番目のロケーションブロックからルート/を強制的に提供するインデックスディレクティブを含めることでした。
また、別の問題がありました。最初のロケーションブロックに、ディープリンクを壊すルートディレクティブを含めましたが、これも 悪いアイデア です。ルートディレクティブをサーバーレベルに移動しました。
これが役立つことを願っています、これが私の解決策です...
server {
listen 80;
server_name localhost;
root /usr/share/nginx/html;
location / {
add_header X-debug-whats-going-on 1;
index do-not-use-me.html;
try_files $uri @index;
}
location @index {
add_header X-debug-whats-going-on 2;
add_header Cache-Control no-cache;
expires 0;
try_files /index.html =404;
}
}
どのロケーションブロックがどのコンテンツを提供しているかを明確にするために、デバッグヘッダーを含めました。また、 add_headerディレクティブの直感的でない動作 に注意する価値があります。これは、ロケーションブロック外のすべてのリクエストにヘッダーを追加する場合にも不可欠です。
私のAngularアプリにはindex.htmlとnginxの設定への変更が含まれています。
index.html
<meta http-equiv="cache-control" content="max-age=0" />
<meta http-equiv="cache-control" content="no-cache" />
<meta http-equiv="expires" content="0" />
<meta http-equiv="expires" content="Tue, 01 Jan 1980 1:00:00 GMT" />
<meta http-equiv="pragma" content="no-cache" />
nginx.conf
location / {
try_files $uri $uri/ /index.html;
}
location ~ \.html$ {
add_header Cache-Control "private, no-cache, no-store, must-revalidate";
add_header Expires "Sat, 01 Jan 2000 00:00:00 GMT";
add_header Pragma no-cache;
}
ユーザーが「site.com」と「site.com/some/url」または「site.com/#/login」に移動したときに機能します。 「index.html」の変更は、主に安全な側にあります。
コンテンツタイプマッピングを使用できます(1つの.html
ファイル):
map $sent_http_content_type $expires {
default off;
text/html Epoch; # means no-cache
}
server {
expires $expires;
}