Tim*_*nov 7 caching nginx nginx-config
案例:我有通过 HTTPS 的 REST API,我想在我的主机上配置基本的缓存代理服务来缓存 API 请求并像往常一样更快地获取相同的信息。
我的 Nginx 配置如下:
proxy_cache_path /tmp/cache levels=1:2 keys_zone=my_cache:10m max_size=10g
inactive=60m use_temp_path=off;
http {
server {
location /my_api/ {
proxy_redirect off;
proxy_buffering on;
proxy_ignore_headers X-Accel-Expires;
proxy_ignore_headers Expires;
proxy_ignore_headers Cache-Control;
proxy_cache my_cache;
proxy_pass https://example.com/myapi/;
}
}
}
Run Code Online (Sandbox Code Playgroud)
现在我正在比较 REST API 和我的本地代理服务的响应时间,并且 REST API 对远程服务的调用和对带有缓存的本地代理服务的响应时间是相同的,因此,这意味着缓存不会工作。另外,缓存目录是空的。
真实 API 的示例或请求(这不是真实情况):
curl "https://example.com/myapi/?key=1"
Run Code Online (Sandbox Code Playgroud)
代理请求示例:
curl "http://127.0.0.1:8080/myapi/?key=1"
Run Code Online (Sandbox Code Playgroud)
在 REST API 标头中我可以看到
cache-control: max-age=0, no-cache, no-store, must-revalidate
Run Code Online (Sandbox Code Playgroud)
Nginx 能以某种方式忽略它吗?
我应该在代理配置中更改哪些内容才能看到 REST API 的提升?我想知道这个问题是否与 HTTPS 流量有关?或者 REST API 的响应可能有一些 NoChaching 标头,或者响应的大小对于缓存来说太小?
终于找到了为我的 REST API 配置缓存的方法,以下是最终配置:
http {
proxy_cache_path /tmp/cache levels=1:2 keys_zone=my_cache:10m;
server {
listen 8080;
server_name localhost;
location /myapi {
proxy_buffering on;
proxy_ignore_headers Expires Cache-Control X-Accel-Expires;
proxy_ignore_headers Set-Cookie;
proxy_cache my_cache;
proxy_cache_valid 24h;
proxy_pass https://example.com/myapi;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8477 次 |
| 最近记录: |