Я использую Nginx для обслуживания статических файлов (а также в качестве обратного прокси для моего NodeJS express RestAPI). Проблема в том, что когда я отправляю на сервер новый коммит git, пользователи все равно будут получать старые (последней версии) файлы. На данный момент обходной путь заключается в том, что пользователь очищает кеш в браузере.
Что могло быть причиной этого? Я предполагаю, что это неправильная конфигурация кеширования на стороне сервера? См. Ниже мою конфигурацию nginx (базовая + включает).
Как вы можете видеть ниже, статические файлы (.html, .js, .css) находятся в / var / www / frontend.
##
# Basic Settings
##
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
# server_tokens off;
# server_names_hash_bucket_size 64;
# server_name_in_redirect off;
include /etc/nginx/mime.types;
default_type application/octet-stream;
listen 80;
server_name **REMOVED_FOR_PRIVACY_REASONS**;
proxy_cache_valid 404 1m;
location / {
root /var/www/frontend;
index index.html
try_files try_files $uri $uri/ =404;
#proxy_cache backcache;
#proxy_cache_bypass $http_cache_control;
#add_header X-Proxy-Cache $upstream_cache_status;
}
location /api/ {
proxy_pass http://127.0.0.1:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
Я думаю, что это не неправильная конфигурация кеширования на стороне сервера. Статические файлы автоматически кэшируются браузером. Вам нужно какое-то статическое управление версиями файлов, чтобы браузер мог читать ваши измененные источники:
<link src="/static/style.css?v=xxxx">
<script language="javascript" type="text/javascript" src="/js/app.js?v=xxxx"></script>
Я тоже думаю, что это связано с кешированием на стороне клиента.
Я бы начал отладку с помощью firebug или чего-то подобного, загрузил страницу и проверил заголовки кеширования (etag / last-modified / cache-control / expires).
Пока мы занимаемся этим, я нашел действительно хороший документ о HTTP-кешировании:
https://www.mnot.net/cache_docs/
Сделано одним из парней, которые, тем не менее, создают стандарт HTTP.
В дополнение к другим ответам взгляните на хешбастер, инструмент, написанный на Python, для решения подобных проблем. Описание гласит: «hashbuster - это инструмент для добавления строки запроса с очисткой кеша для URL в ваших файлах HTML.
Если вы вносите много изменений в действующие веб-сайты, кеши браузера и прокси, вероятно, станут проклятием вашего существования. Если вам когда-либо приходилось указывать клиенту очистить кеш браузера, чтобы увидеть ваш последний код, то hashbuster для вас ».
Вы можете вызвать инструмент, например, через git post-receive хук на вашем сервере.