Nginx не обновляет файл после повторного изменения.Старый последний измененный заголовок возвращается - PullRequest
0 голосов
/ 12 июня 2018

У меня есть веб-приложение, и есть интерфейс, где я могу обновить логотип магазина.Когда я обновляю логотип, я получаю новый файл с новым заголовком last-modified:

enter image description here

Nginx возвращает исправленный обновленный файл.

После этого я снова обновляю логотип.Но я получаю старый логотип со старым last-modified, хотя файл URL логотипа был изменен (вы можете увидеть метку времени запроса в конце URL):

enter image description here

Если я выполняю прямой запрос через браузер, то получаю обновленный файл:

enter image description here

Это видно по размеру файла через длину содержимого.

Моя конфигурация nginx для изображений:

location ~* ^.+\.(jpg|jpeg|svg|gif|png)$ {
       expires 10d;     
       try_files $uri @app;
}

Я не понимаю, что я делаю неправильно.Пожалуйста, помогите мне.Заранее спасибо

Ответы [ 3 ]

0 голосов
/ 14 августа 2019

Исходя из моего опыта, это, вероятно, не проблема nginx, а обычное поведение браузера.

Браузеры могут обновлять саму страницу, если вы ее принудительно используете, но ссылки на файлы не всегда заполняются, а файлыобслуживаются из кэша.
Если мне нужно несколько раз изменить файлы, такие как изображения, таблицы стилей или файлы сценариев, я открываю дополнительную вкладку для соответствующего файла и заполняю ее перед страницей, содержащей этот файл.

Если у вас есть доступ к серверу, который следует учитывать при упоминании nginx, можно уменьшить max-age до нескольких секунд или установить no-cache -заголовок для файла.Тогда браузер всегда будет обслуживать самую новую версию.

0 голосов
/ 14 августа 2019

Измените конфигурацию nginx, чтобы уменьшить срок действия.Вы видите, что разница между Expires и Last-Modified составляет 10 дней, что отражено в файле конфигурации.

location ~* ^.+\.(jpg|jpeg|svg|gif|png)$ {
   expires 1M;     
   try_files $uri @app;
}
0 голосов
/ 08 августа 2019

Недостаточно информации для определения основной причины проблемы;Я также представляю, что все новые люди, которые приходят к этому вопросу, сталкиваются с проблемой, немного отличающейся от описанной выше.

Nginx имеет директиву http://nginx.org/r/if_modified_since, вы можете взглянуть на исходный кодреализация в ngx_http_not_modified_filter_module.c :: ngx_http_not_modified_header_filter () .

В общем, только потому, что URL имеет измененный параметр эпохи (часть ? со временем UNIX в качестве конечного слага), вовсе не означает, что должен быть предоставлен новый ресурс, поэтому определить, что nginx неверен, просто потому, что URL-адрес отличается между двумя первыми фотографиями, но время Last-Modified одинаковое, это не правильно.Аналогичным образом, на последнем третьем рис. Показан ответ 304 Not Modified, однако в ответе нет информации о заголовках If-Modified-Since или If-None-Match, и приписывание фотографии не имеет никакого смысла, либо.

...