我正在尝试将 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 配置中禁用了它。
答案1
事实证明,我没有仔细阅读文档。我没有意识到 expires 标头会覆盖常规缓存限制。我所要做的就是添加expires
到proxy_ignore_headers
指令中。