Я пытаюсь настроить 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
директива.