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

Другие вопросы по тегам