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

nginx 1.8.1 не кэширует с заголовком Vary Accept

У меня странное поведение кеширования nginx. Есть 2 отзыва. Первый перестал кэшировать, когда я обновил сервер с 1.6 до 1.8.1, другой кеширует, как и раньше. Первый (сломанный) имеет следующие заголовки ответа:

Разрешить → GET, HEAD, OPTIONS

Подключение → keep-alive

Кодирование содержимого → gzip

Content-Language → ru

Content-Type → приложение / json

Дата → Вт, 15 марта 2016 07:31:53 GMT

Сервер → nginx / 1.8.1

Передача-кодирование → фрагментировано

Варьировать →Accept, Accept-Language, Cookie, Accept-Encoding

X-Frame-Options → SAMEORIGIN

Другой ответ (который работает, как я ожидал) имеет следующие заголовки:

Подключение → keep-alive

Кодирование содержимого → gzip

Content-Language → ru

Content-Type → приложение / json

Дата → Вт, 15 марта 2016 07:32:40 GMT

Сервер → nginx / 1.8.1

Передача-кодирование → фрагментировано

Варьировать →Accept-Language, Cookie, Accept-Encoding

X-Frame-Options → SAMEORIGIN

В первом случае нет файлов cookie или заголовка Accept, а только

proxy_ignore_headers Vary

спас положение. С ним хорошо работает. Похоже на магию. Но что было не так, что мне не хватало? Ниже приведены текущие настройки:

proxy_pass    http://localhost:7050;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
limit_req zone=banka burst=5 nodelay;
proxy_cache   cache;
proxy_cache_valid 5m;
proxy_ignore_headers Vary;
    

Не знаю, исправили ли вы это, оставлю это здесь, если кому-то это понадобится.

В исходном коде Nginx установлено не более 42 символов, используемых заголовками Vary. В моем случае там 51 символ, поэтому мои заголовки Vary обрабатываются как Vary: * (no-cache). Установка максимума на 84 исправила это для меня.

Эта статья объясняет это более подробно.

https://thedotproduct.org/nginx-vary-header-handling/

Благодарим парня, разместившего эту короткую статью.