Сейчас на моих часах 23:50 по Москве, 12 октября. Примерно час назад (в 22:58 по Москве или 18:58 GMT) я выложил обновленную версию сайта на продакшн. При запросе
статического файла с расширением css с сервера от Nginx приходят следующие заголовки:
HTTP/1.1 200 OK
Server: nginx/1.4.2
Date: Sat, 12 Oct 2013 18:58:05 GMT
Content-Type: application/x-javascript
Content-Length: 131157
Last-Modified: Sat, 12 Oct 2013 22:09:50 GMT
Connection: keep-alive
Vary: Accept-Encoding
ETag: "5259c8ae-20055"
Expires: Sat, 12 Oct 2013 19:28:05 GMT
Cache-Control: max-age=1800
Accept-Ranges: bytes
На сервер стоит кеширование с expires 30m, что видно по разнице Date и Expires. При это дата последнего изменения файла показывается 22:09 GMT, но это дата в будущем (2 часа ночи 13 октября по Москве)!!! На самом деле файл был изменен в 22:09 по Москве и затем загружен на сервер. При этом утилита stat для файла выдает правильную дату:
Access: 2013-10-12 14:13:26.000000000 -0400
Modify: 2013-10-12 18:09:54.000000000 -0400
Change: 2013-10-12 14:13:26.000000000 -0400
Видимо в связи с неправильной датой заголовок Expires продолжает постоянно обновляться, следуя за Date. Вопрос — как исправить подобное поведение?
Настройки nginx:
location ~* \.(jpg|png|gif|jpeg|css|js|doc|pdf|xls|docx|xlsx|odt|odc|ico)$ {
root /var/lib/tomcat7/webapps/ROOT;
proxy_buffering on;
proxy_buffers 8 8k;
proxy_cache static;
proxy_cache_min_uses 1;
proxy_cache_use_stale error timeout invalid_header http_500 http_502 http_503 http_504 updating;
proxy_cache_valid 200 301 302 304 30m;
expires 30m;
}
Обновление от 13.10.2013 10:50: дата, указанная в Last-Modified была достигнута сервером, но Expires все равно продолжает показываться относительно Date, а не относительно Last-Modified. Т.е. если я ставлю expires 30m; — то каждый раз выдается заголовок: Expires: Date + 30m;