nginx proxy cache配置参数解读
序
本文主要解析一下nginx ngx_http_proxy_module中的cache相关配置参数。
proxy_cache
名称 | 默认配置 | 作用域 | 官方说明 | 中文解读 | 模块 |
---|---|---|---|---|---|
proxy_cache | proxy_cache off; | http, server, location | Defines a shared memory zone used for caching. The same zone can be used in several places. Parameter value can contain variables (1.7.9). The off parameter disables caching inherited from the previous configuration level. | 设置是否开启对后端响应的缓存,如果开启的话,参数值就是zone的名称,比如proxy_cache mycache | ngx_http_proxy_module |
proxy_cache_valid | 没有默认值,实例如proxy_cache_valid 200 302 10m; | http, server, location | Sets caching time for different response codes. | 针对不同的response code设定不同的缓存时间,如果不设置code,默认为200,301,302,也可以用any指定所有code | ngx_http_proxy_module |
proxy_cache_key | proxy_cache_key $scheme$proxy_host$request_uri; | http, server, location | Defines a key for caching | 给缓存设定key,默认值相当于proxy_cache_key $scheme$proxy_host$uri$is_args$args; | ngx_http_proxy_module |
proxy_cache_path | 没有默认值,实例proxy_cache_path /var/cache levels=1:2 keys_zone=imgcache:100m inactive=2h max_size=1g; | http | Sets the path and other parameters of a cache. Cache data are stored in files. The file name in a cache is a result of applying the MD5 function to the cache key. The levels parameter defines hierarchy levels of a cache: from 1 to 3, each level accepts values 1 or 2. | 指定缓存存储的路径,文件名为cache key的md5值,然后多级目录的话,根据level参数来生成,比如levels=1:2:3,第一个目录名取md5值的倒数第一个值,第二个目录名取md5值的第2和3个值,第三个目录名取md5值的第4,5,6个值;key_zone参数用来指定在共享内存中缓存的元数据的名称和内存大小,比如keys_zone=imgcache:100m,所有的缓存查找首先经过这里查找元数据,如果命中再去文件系统查找相应的缓存 ;inactive用来指定缓存没有被访问超时移除的时间,默认是10分钟,也可以自己指定比如inactive=2h ;max_size 用来指定缓存的最大值,超过这个值则会自动移除最近最少使用的缓存 | ngx_http_proxy_module |
proxy_cache_bypass | 没有默认值 | http, server, location | Defines conditions under which the response will not be taken from a cache. If at least one value of the string parameters is not empty and is not equal to “0” then the response will not be taken from the cache. | 指定哪些响应在某些值不为空或不为0的情况下不走缓存,比如proxy_cache_bypass $http\_pragma $http_authorization; | ngx_http_proxy_module |
proxy_cache_min_uses | proxy_cache_min_uses 1; | http, server, location | Sets the number of requests after which the response will be cached. | 指定在多少次请求之后才缓存响应内容 | ngx_http_proxy_module |
proxy_cache_use_stale | proxy_cache_use_stale off; | http, server, location | Determines in which cases a stale cached response can be used during communication with the proxied server. The directive’s parameters match the parameters of the proxy_next_upstream directive. | 指定在后端服务器在返回什么状态码的情况下可以使用过期的缓存,比如proxy_cache_use_stale error timeout invalid_header http_500 http_502 http_503 http_504; | ngx_http_proxy_module |
proxy_cache_lock | proxy_cache_lock off; | http, server, location | When enabled, only one request at a time will be allowed to populate a new cache element identified according to the proxy_cache_key directive by passing a request to a proxied server. Other requests of the same cache element will either wait for a response to appear in the cache or the cache lock for this element to be released, up to the time set by the proxy_cache_lock_timeout directive. | 默认不开启,开启的话则每次只能有一个请求更新相同的缓存,其他请求要么等待缓存有数据要么限时等待锁释放;nginx 1.1.12才开始有 | ngx_http_proxy_module |
proxy_cache_lock_timeout | proxy_cache_lock_timeout 5s; | http, server, location | Sets a timeout for proxy_cache_lock. When the time expires, the request will be passed to the proxied server, however, the response will not be cached. | 等待缓存锁超时之后将直接请求后端,结果不会被缓存 ; nginx 1.1.12才开始有 | ngx_http_proxy_module |
实例
http {
# we set this to be on the same filesystem as proxy_cache_path
proxy_temp_path /usr/local/nginx/proxy_temp;
# good security practice dictates that this directory is owned by the
# same user as the user directive (under which the workers run)
proxy_cache_path /usr/local/nginx/proxy_temp keys_zone=CACHE:10m levels=1:2 inactive=6h max_size=1g;
server {
location / {
# using include to bring in a file with commonly-used settings
include proxy.conf;
# referencing the shared memory zone defined above
proxy_cache CACHE;
proxy_cache_valid any 1d;
proxy_cache_bypass $http_pragma $http_authorization;
proxy_cache_min_uses 3;
proxy_cache_use_stale error timeout invalid_header updating http_500 http_502 http_503 http_504;
proxy_pass http://upstream;
}
}
}
doc
code-craft
spring boot , docker and so on 欢迎关注微信公众号: geek_luandun
推荐阅读
2022年终总结
最近两年开始陷入颓废中,博客也写的越来越少了。究其原因,主要还是陷入了职业倦怠期,最近一次跳槽感觉颇为失败,但是碍于给的薪资高,为了五斗米折腰,又加上最近行情不好,想要往外跳也跳不了,就这样子一直...
codecraft阅读 691
把 Go 放到 Nginx C module 之中
最近一段时间,我在做一件有趣的事情,让一个 Nginx C module 通过 Go 代码来访问 gRPC 服务。不得不感慨 Go 真的很流行,让人无法拒绝。之前我做 wasm-nginx-module 时就试图把 tinygo 跑在 Nginx 里面,这次则...
spacewander赞 2阅读 2.1k评论 2
化虹为桥 - Nginx 如何代理 UDP “连接”
众所周知,UDP 并不像 TCP 那样是基于连接的。但有些时候,我们需要往一个固定的地址发送多个 UDP 来完成一个 UDP 请求。为了保证服务端能够知道这几个 UDP 包构成同一个会话,我们需要在发送 UDP 包时绑定某个端...
spacewander赞 4阅读 729
[nginx] 实现域名代理
业务场景有两个系统A、B,A、B两系统均有独立域名,但对外只想暴露A域名。需要实现通过 A域名+B系统子路由 访问 系统B的子页面,图示如下。
DiracKeeko阅读 883
前端跨域问题解决办法, Nginx配置为例
💡 Tips:可以将多个系统融合成一个系统,无技术壁垒,可以像iframe一样实现功能组合● qiankun (阿里支持)● micro-app (京东支持)● wujie (腾讯支持)本人推荐● lingjie 携程支持
smallStone阅读 834
使用Python查询国内 COVID-19 疫情
有时我们只是想要一个速的工具来告诉当前疫情的情况,我们只需要最少的数据。 使用Python语言和tkinter图形化显示数据。首先,我们使用 Tkinter 库使我们的脚本可以图形化显示。使用 requests 库从 丁香园 获取数...
刘遄阅读 831
gitlab-ce使用nginx做反向代理的方式启用https
由于某些未知的原因,gitlab-ce的https近期出现了问题,被chrome识别出是非安全的连接。索性我们将了gitlab-ce的https改为http。但当下https基本上已经成为了标准,不启用https好像有点说不过去。
myskies阅读 763
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。