Kami memiliki pengaturan ini di kami nginx.conf
cukup lama.
sendfile on;
Ketika kami telah memperbarui file mis /js/main.js
dan akses dari browser https://test.com/js/main.js?newrandomtimestamp , itu masih akan memuat versi yang lebih lama kecuali kami melakukan penyegaran penuh (cache yang jelas) dari browser kami.
Tetapi ketika kita mengubah pengaturan dari sendfile aktif; untuk mengirim file; browser akan memuat versi yang benar dari file yang diperbarui.
Untuk server web produksi kami, haruskah kami menggunakan sendfile pada; atau lepas dari file ;? Jika sendfile aktif; diperlukan (Mungkin karena alasan caching yang lebih baik? Kinerja lebih cepat?) lalu bagaimana mengatasi masalah yang disebutkan di atas?
Di bawah ini adalah nginx.conf
server produksi kami, dan kami menggunakan versi 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
dan drive VirtualBox (mis. Virtualbox.org/ticket/819 ). Mungkin ada masalah serupa dengan Amazon.Jawaban:
Mungkin ada solusi untuk masalah caching file Anda di level aplikasi. Ini masalah terkenal di dunia pengembangan JavaScript. Solusinya biasanya disebut sesuatu seperti "keluaran hashing".
Ide dasarnya adalah menambahkan hash dari isi file ke nama file sehingga file tersebut dianggap "baru" dan tidak ditemukan dalam cache.
Angular melakukannya saat membangun (lihat
--outputHashing
:).sumber
Ini sendiri, manifestasi yang jelas bahwa "masalah" ada di sisi klien.
sendfile
tidak ada hubungannya dengan caching, hanya bagaimana NGINX buffer / membaca file (mencoba memasukkan konten langsung ke "slot" jaringan, atau buffer isinya terlebih dahulu).Satu-satunya penjelasan yang masuk akal adalah bahwa browser spesifik Anda membuang
?newrandomtimestamp
sebagai parameter tanpa nilai, sehingga memuat sumber daya yang di-cache sama untukexample.com?blah
danexample.com?boo
.Jika Anda mencobanya, maka
https://example.com/js/main.js?v=newrandomtimestamp
skema harus memberikan konten yang lebih baru setiap saat.sumber
Anda csn juga menggunakan pengecualian dari caching file ini seperti yang saya lakukan
sumber