Как настроить кеш nginx, чтобы помочь браузеру Chrome
У меня есть проблема, когда браузеры Chrome не перезагружают обновленные javascript.
Это связано с тем, что в Chrome запрос никогда не отправляется на сервер.
Другие браузеры, которые я поддерживаю (Firefox, Edge, Safari), работают нормально; это происходит потому, что они отправляют заголовок If-Modified-Since.
Файл является частью коллекции статических ресурсов. Все архивируется с помощью nginx.
сайты-доступны / по умолчанию:
root /var/www;
index index.php index.html index.htm;
// some php stuff ...
(Может быть?) Соответствующая строка из /etc/nginx.conf
# Proxy cache
proxy_cache_path /var/tmp/nginxcache keys_zone=one:10m;
Завиток вывода для получения на JavaScript:
< HTTP/1.1 200 OK
* Server nginx/1.4.6 (Ubuntu) is not blacklisted
< Server: nginx/1.4.6 (Ubuntu)
< Date: Sun, 05 Aug 2018 11:52:44 GMT
< Content-Type: application/x-javascript
< Content-Length: 2350005
< Last-Modified: Sun, 05 Aug 2018 11:38:36 GMT
< Connection: keep-alive
< Vary: Accept-Encoding
< ETag: "5b66e1bc-23dbb5"
< Accept-Ranges: bytes
Есть ли в nginx конфигурация, которая может убедить Chrome сделать то же самое? Я изучил эти ответы: Установка заголовков expires для статического контента, обслуживаемого из nginx и https://stackoverflow.com/questions/17251503/set-expires-to-max-for-all-images-of-all-servers-in-nginx/17253805 но мои навыки регулярных выражений довольно слабые, и ответы довольно старые. Должен ли я попробовать:
location ~ \.js {
expires 1d;
add-header Pragma public
add-header Cache-control "public"
}
1 ответ
Благодаря помощи @Michael Hampton я добавил этот блок местоположения на сервер:
location ~* \.(:manifest|html?|json)$ {
expires 1d;
}
Так что мой index.html истекает через один день.
Я также начал создавать приложение с помощью gulp и gulp-rev, чтобы получить хэш версии для имени приложения, такого как app-xyzz56464.js, который затем находится в index.html.