We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
当Ngnix的缓存被打开之后,Nginx会将符合规则的response存储到文件作为缓存,并且用其缓存去响应客户端,不需要每次都去服务端请求。
要开启缓存,需要在最顶级的http {}下配置proxy_cache_path。
http {}
proxy_cache_path
http { ... proxy_cache_path /data/nginx/cache keys_zone=one:10m; }
此处可以选择直接修改/etc/nginx/nginx.conf文件,如上代码所示添加。也可以直接在/etc/nginx/conf.d文件夹下创建新的conf文件,如settings.conf,内容如下:
/etc/nginx/nginx.conf
/etc/nginx/conf.d
settings.conf
proxy_cache_path /data/nginx/cache keys_zone=one:10m;
Nginx在缓存中使用到两个进程:
Nginx
cache manager
cache loeader
在如下案例中,迭代持续300ms或者直到200个项目已经被加载:
proxy_cache_path /data/nginx/cache keys_zone=one:10m loader_threshold=300 loader_files=200;
默认情况下,Nginx会在第一次缓存所有的GET和HEAD方法的请求的响应,使用字符串作为缓存的key,如果不同的请求使用同一个key,则会直接返回其对应的缓存数据。
GET
HEAD
默认的缓存key为:
proxy_cache_key $scheme$proxy_host$uri$is_args$args;
可以通过配置自定义,如下:
proxy_cache_key "$host$request_uri$cookie_user";
proxy_cache_min_uses 5;
默认缓存请求方法为GET和HEAD,通过如下添加POST方法。
POST
proxy_cache_methods GET HEAD POST;
默认情况下,响应会无限期的保存下来。只有当缓存大小超过限制或者超出缓存时间的情况下,缓存将会被清除。
proxy_cache_valid 200 302 10m; proxy_cache_valid 404 1m;
如果是匹配所有可以使用any:
any
proxy_cache_valid any 5m;
通过设置proxy_cache_bypass配置可以使Nginx不直接使用缓存返回客户端。配置中的每个参数都只是0和非0,只要一个参数不为0,都将不会使用缓存。
proxy_cache_bypass
0
proxy_cache_bypass $cookie_nocache $arg_nocache$arg_comment;
通过设置proxy_no_cache来使得响应完全不缓存,其参数和proxy_cache_bypass一样。
proxy_no_cache
proxy_no_cache $http_pragma $http_authorization;
对于proxy_cache_bypass和proxy_no_cache的参数,如$arg_nocache的意思为请求的url上携带nocache参数。
官方文档
Nginx Proxy Cache原理和最佳实践
关于nginx跳过缓存配置proxy_cache_bypass
The text was updated successfully, but these errors were encountered:
No branches or pull requests
一. 前言
当Ngnix的缓存被打开之后,Nginx会将符合规则的response存储到文件作为缓存,并且用其缓存去响应客户端,不需要每次都去服务端请求。
二. 开启缓存
1. 如何开启
要开启缓存,需要在最顶级的
http {}
下配置proxy_cache_path
。此处可以选择直接修改
/etc/nginx/nginx.conf
文件,如上代码所示添加。也可以直接在/etc/nginx/conf.d
文件夹下创建新的conf文件,如settings.conf
,内容如下:2. 参数详解
3. nginx初始化读取缓存配置
Nginx
在缓存中使用到两个进程:cache manager
:该进程周期性地检测缓存的状况,检测缓存的大小、数量等是否超过设置额度;cache loeader
:该进程只会在Nginx
启动后运行一次,加载之前的缓存文件的元数据到共享内存中。在启动时候一次加载整个缓存会消耗Nginx
启动时的性能,为了避免这种情况,可以在proxy_cache_path
中直接配置如下参数:在如下案例中,迭代持续300ms或者直到200个项目已经被加载:
三. 哪些请求会缓存
默认情况下,
Nginx
会在第一次缓存所有的GET
和HEAD
方法的请求的响应,使用字符串作为缓存的key,如果不同的请求使用同一个key,则会直接返回其对应的缓存数据。1. 修改缓存的key
默认的缓存key为:
可以通过配置自定义,如下:
2. 定义在缓存响应之前必须发出具有相同密钥的请求的最小次数
3. 定义缓存方法的请求
默认缓存请求方法为
GET
和HEAD
,通过如下添加POST
方法。四. 限制或者禁止缓存
默认情况下,响应会无限期的保存下来。只有当缓存大小超过限制或者超出缓存时间的情况下,缓存将会被清除。
1. 根据响应码设定存储时间
如果是匹配所有可以使用
any
:2. 忽略缓存
通过设置
proxy_cache_bypass
配置可以使Nginx
不直接使用缓存返回客户端。配置中的每个参数都只是0
和非0
,只要一个参数不为0
,都将不会使用缓存。3. 没有缓存
通过设置
proxy_no_cache
来使得响应完全不缓存,其参数和proxy_cache_bypass
一样。五. 参考文档
官方文档
Nginx Proxy Cache原理和最佳实践
关于nginx跳过缓存配置proxy_cache_bypass
The text was updated successfully, but these errors were encountered: