この設定はnginx.conf
かなり長い間。
sendfile on;
ファイルを更新したとき。 /js/main.js
およびブラウザからのアクセス https://test.com/js/main.js?newrandomtimestamp 、ブラウザから完全に更新(キャッシュをクリア)しない限り、古いバージョンがロードされます。
しかし、sendfileから設定を変更すると、 sendfileをオフにします。ブラウザは、更新されたファイルの正しいバージョンをロードします。
実稼働Webサーバーでは、sendfileをオンに使用する必要があります。またはsendfile off ;? sendfileがオンの場合;上記の問題を解決するにはどうすればよいですか(キャッシュが改善されたためか、パフォーマンスが向上したかなど)。
以下はnginx.conf
本番サーバーで、バージョン1.7.5を使用しています。
user nginx;
worker_processes 2;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
worker_rlimit_nofile 51200;
events {
use epoll;
worker_connections 51200;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
client_max_body_size 8m;
sendfile on;
keepalive_timeout 65;
real_ip_header X-Forwarded-For;
set_real_ip_from 0.0.0.0/0;
large_client_header_buffers 4 32k;
gzip on;
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_http_version 1.1;
gzip_comp_level 2;
gzip_types text/plain application/x-javascript application/javascript text/css application/xml application/json;
gzip_vary on;
include /etc/nginx/conf.d/*.conf;
}
...ブラウザからフルリフレッシュ(キャッシュのクリア)を行わない限り。
これ自体、「問題」がクライアント側にあるという明確な兆候です。
sendfile
はキャッシングとは関係がなく、NGINXがファイルをバッファ/読み取りする方法のみです(コンテンツをネットワークの「スロット」に直接詰めるか、最初にコンテンツをバッファするかを試みます)。
唯一の妥当な説明は、特定のブラウザが?newrandomtimestamp
を値なしのパラメータとして破棄するため、example.com?blah
とexample.com?boo
のどちらにも同じキャッシュリソースをロードすることです。
試してみると、https://example.com/js/main.js?v=newrandomtimestamp
スキームすべき毎回新しいコンテンツを提供します。
アプリケーションレベルでのファイルキャッシュの問題に対する解決策があるかもしれません。これはJavaScript開発の世界では よく知られている 問題です。ソリューションは通常、「出力ハッシュ」のようなものと呼ばれます。
基本的な考え方は、ファイルの内容のハッシュをファイル名に追加して、ファイルが「新規」と見なされ、キャッシュに見つからないようにすることです。
Angularはビルド時にそれを行います(参照: --outputHashing
)。
あなたはcsnも私と同じようにこのファイルをキャッシュから除外します
location updater/serversettings.xml {
expires -1;
add_header 'Cache-Control' 'no-store, no-cache,
must-revalidate, proxy-revalidate, max-age=0';
}