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

кеширование прокси nginx не работает

Я проксирую внешний JSON api и пытаюсь кэшировать ответы прокси. Чтобы определить, работает ли прокси-кеш, я добавил

add_header X-Cached $upstream_cache_status;

и всегда вижу MISS стоимость.

Расположение моей конфигурации nginx:

location /api/tides {
  proxy_hide_header Cache-Control;
  proxy_ignore_headers Cache-Control;
  proxy_cache worldtidecache;
  proxy_set_header Host www.worldtides.info;
  proxy_pass https://example.com/api/$query_string;
  add_header X-Cached $upstream_cache_status;
}

До этого у меня proxy_cache_path устанавливать

proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=worldtidecache:100m max_size=1g inactive=48h use_temp_path=off;

www-data имеет доступ на чтение / запись к /var/cache/nginx

Я предполагаю, что proxy_buffering установлен на on поскольку у меня нет явных настроек для этого.

Конфигурация nginx действительна. Я тестировал это с nginx -c nginx.conf -t:

╰─sudo nginx -c nginx.conf -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Я проследил за error.log и access.log и я не вижу ничего, что указывало бы на то, почему кеширование не работает.

Заголовки, которые я получаю из ответа прокси:

Server: nginx/1.11.13
Date: Sun, 20 Aug 2017 14:01:59 GMT
Content-Type: text/json; charset=utf-8
Content-Length: 2976
Connection: keep-alive
Content-Encoding: gzip
X-Cloud-Trace-Context: 38faabaa5ada170536632bb55a0ddf00;o=1
Vary: Accept-Encoding
X-Cached: MISS

Я застрял на этом этапе. Я не знаю, что еще может привести к тому, что nginx не кешируется. В запросах не происходит перебора кеша, такого как уникальный параметр запроса, URL-адрес согласован для каждого запроса. Помимо установки заголовка для результата попытки кеширования, я не знаю другого способа записать, что делает кеширование прокси.

Твиттер спешит на помощь: https://twitter.com/btucker/status/899309118137057286

proxy_cache_valid any 48h;

Второе решение, поскольку @ bcardarella не сработало для меня

Добавить proxy_buffering on; в блок вашего местоположения

Источник: https://github.com/nginx-proxy/nginx-proxy/issues/800#issuecomment-383901151