Назад | Перейти на главную страницу

Как настроить кеш 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;

Вывод Curl для доступа к 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 сделать то же самое? Я изучил эти ответы: Установка истекает заголовки для статического контента, обслуживаемого из nginx и https://stackoverflow.com/questions/17251503/set-expires-to-max-for-all-images-of-all-servers-in-nginx/17253805#17253805 но мои навыки регулярного выражения довольно плохи, а ответы довольно старые. Стоит ли попробовать:

location ~ \.js {
    expires 1d;
    add-header Pragma public
    add-header Cache-control "public"
}

Благодаря помощи @Michael Hampton я добавил на сервер этот блок местоположения:

    location ~* \.(:manifest|html?|json)$ {
        expires 1d;
    }

Таким образом, мой index.html истекает через день.

Я также начал создавать приложение с помощью gulp и gulp-rev, чтобы получить хэш версии для имени приложения, например app-xyzz56464.js, который затем находится в index.html.