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

Слишком долгое кеширование Nginx

Я пытаюсь настроить Nginx как простой прокси-сервер кеширования для DarkSky, чтобы я мог не превышать лимит 1000 в день. Однако у меня возникла проблема, из-за которой он, похоже, не соблюдает proxy_cache_valid директивы и кэшируется намного дольше, чем указано. Вот мой файл конфигурации:

worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       mime.types;
    default_type  application/octet-stream;

    sendfile        on;
    keepalive_timeout  65;

    proxy_cache_path /var/apicache keys_zone=apicache:10m max_size=1g inactive=120m use_temp_path=off;
    proxy_cache_valid any 1m;
    proxy_cache_background_update off;
    proxy_ignore_headers Cache-Control;

    server {
        listen       8765;
        listen       [::]:8765;
        server_name  darksky;

        location /api {
                    proxy_pass https://api.darksky.net/forecast/<myapikey>;
                    proxy_cache apicache;
        }
    }
}

Я уверен, что что-то делаю неправильно, но хоть убей не могу понять, что именно. nginx -t счастлив, так что это не проблема синтаксиса.

Вот как выглядят заголовки ответов от darksky:

HTTP/2.0 200 OK
date: Thu, 28 Mar 2019 23:06:50 GMT
content-type: application/json; charset=utf-8
x-authentication-time: 1ms
cache-control: max-age=3600
expires: Fri, 29 Mar 2019 00:06:50 +0000
x-forecast-api-calls: 104
x-content-type-options: nosniff
x-response-time: 37.548ms
vary: Accept-Encoding
content-encoding: gzip
X-Firefox-Spdy: h2

Я не вижу ничего, что могло бы вызвать проблемы, кроме, возможно, Cache-Control, но я отключил это в конфигурации Nginx.

Оказывается, я плохо читал документацию. Я не понимал, что заголовок expires отменяет обычное ограничение кеширования. Все, что мне нужно было сделать, это добавить expires к proxy_ignore_headers директива.