【Nginx】设置nginx缓存

设置nginx缓存

nginx代理缓存

proxy cache属于服务端缓存,主要实现 nginx 服务器对客户端数据请求的快速响应。nginx 服务器在接收到被代理服务器的响应数据之后,一方面将数据传递给客户端,另一方面根据proxy cache的配置将这些数据缓存到本地硬盘上。当客户端再次访问相同的数据时,nginx服务器直接从硬盘检索到相应的数据返回给用户,从而减少与被代理服务器交互的时间。

配置说明

直接上配置示例

user nginx;
events{
 worker_connections 1024;  
}
http {
    #设置缓存路径和相关参数(必选)
    proxy_cache_path  /tmp/nginx/cache levels=1:2  keys_zone=mycache:10m max_size=10g;
    server {
        listen 80;
        location /cache  {
            proxy_pass http://192.168.1.135:8080;
            
            #引用缓存配置(必选)
            proxy_cache mycache;
      
            #对响应状态码为200 302的响应缓存100s
            proxy_cache_valid 200 302 100s;
            #对响应状态码为404的响应缓存200
            proxy_cache_valid 404 200s;
      
            #请求参数带有nocache或者comment时不使用缓存
            proxy_cache_bypass $arg_nocache $arg_comment;
            
            #忽略被代理服务器设置的"Cache-Control"头信息
            proxy_ignore_headers "Cache-Control"; 
      
            #对GET HEAD POST方法进行缓存 
            proxy_cache_methods GET HEAD POST;
            
            #当缓存过期时,当构造上游请求时,添加If-Modified-SinceIf-None-Match头部,值为过期缓存中的Last-Modified值和Etag值。
            proxy_cache_revalidate on;
            
            #当被代理服务器返回403时,nginx可以使用历史缓存来响应客户端,该功能在一定程度上能能够为客户端提供不间断访问
            proxy_cache_use_stale http_403;
      
            #默认开启,开启代理缓冲区(内存)
            proxy_buffering on;
            #设置响应头的缓冲区设为8k
            proxy_buffer_size 8k;
            #设置网页内容缓冲区个数为8,单个大小为8k
            proxy_buffers 8 8k;
            #设置当nginx还在读取被代理服务器的数据响应的同时间一次性向客户端响应的数据的最大为16k
            proxy_busy_buffers_size 16k;
            #临时文件最大为1024m
            proxy_max_temp_file_size 1024m;
            #设置一次往临时文件的大小最大为16k
            proxy_temp_file_write_size 16k;
            #设置临时文件存放目录
            proxy_temp_path /tmp/proxy_temp;
            
            #设置和被代理服务器连接的超时时间为60s
            proxy_connect_timeout 60;
            #设置向被代理服务器发送请求的超时时间为60s
            proxy_send_timeout 60;
            #设置从被代理服务器读取响应的超时时间为60s
            proxy_read_timeout 60;
            
            #添加缓存状态参数,方便测试是否命中缓存
            add_header Nginx-Cache $upstream_cache_status;
        }
    }
} 

proxy_cache_path

proxy_cache_path  /tmp/nginx/cache levels=1:2  keys_zone=mycache:10m max_size=10g;
  • /tmp/nginx/cache:缓存文件存放的路径。
  • levels : 默认所有缓存文件都放在同一个目录下时,会影响缓存的性能,大部分场景推荐使用2级目录来存储缓存文件,1和2表示用1位和2位16进制来命名目录名称。第一级目录用1位16进制命名,如b;第二级目录用2位16进制命名,如2b。所以一级目录有16个,二级目录有1616=256个,总目录数为16256=4096个。
  • key_zone : 在共享内存中设置一块存储区域来存放缓存的key字符串,这样nginx可以快速判断一个request是否命中或者未命中缓存,1m可以存储8000个key,10m可以存储80000个key;
  • max_size(可选) : 最大cache空间,如果不指定,会使用掉所有磁盘空间。当达到配额后,会删除最少使用的cache文件。
  • inactive(可选) : 未被访问文件在缓存中保留时间,本配置中如果60秒未被访问则不论状态是否为expired,缓存控制程序会删掉文件,默认为10分钟。
    然后在http,server或者location上下文中通过proxy_cache引用前面定义的proxy_cache_path:

add_header XXX $upstream_cache_status;

add_header可以添加缓存状态参数,方便测试是否命中缓存。此示例在响应客户端时添加Nginx-Cache HTTP标头。以下是$ upstream_cache_status的可能值:

  • MISS - 在缓存中找不到响应,因此从原始服务器获取。然后可以缓存响应。
  • BYPASS - 响应是从原始服务器获取的,而不是从缓存中提供的,因为请求与proxy_cache_bypass指令匹配(请参阅下面的“我可以通过我的缓存打孔吗?”)然后可以缓存响应。
  • EXPIRED - 缓存中的条目已过期。响应包含来自源服务器的新内容。
  • STALE - 内容过时,因为原始服务器未正确响应,并且已配置proxy_cache_use_stale。
  • UPDATING- 内容过时,因为当前正在更新条目以响应先前的请求,并且配置了proxy_cache_use_stale更新。
  • REVALIDATED - 启用了proxy_cache_revalidate指令,NGINX验证当前缓存的内容仍然有效(If-Modified-Since或If-None-Match)。
  • HIT - 响应包含直接来自缓存的有效新鲜内容。

验证缓存是否生效

在这里插入图片描述

通过观察返回头中Nginx-Cache的值,可以观察缓存状态,其中值为HIT代表命中缓存。

通过curl url -I 的方式也能观察返回头Nginx-Cache的值

eg:

curl http://ip:port/cache/  -I
Nginx作为一款流行的开源Web服务器,也可以用作反向代理和负载均衡器。如果你想要配置两台Nginx缓存服务器来进行负载均衡,可以按照以下步骤操作: 1. **配置多机节点**: - 在Nginx配置文件(如`nginx.conf`)中,设置两个不同的server块,每个代表一台服务器,指定它们的IP地址和端口号。 ```nginx server { listen 80; server_name cache_server1.example.com; location / { # 设置缓存相关的配置,如memcached、varnish等 proxy_pass http://backend1.example.com; } } server { listen 80; server_name cache_server2.example.com; location / { proxy_pass http://backend2.example.com; } } ``` 2. **轮询(Round Robin)均衡**: - 如果你想简单地按顺序轮流处理请求,可以在proxy_pass指令后加上`proxy_next_upstream error timeout`,这会根据错误或超时次数轮询到下一台服务器。 3. **哈希(Hash)负载均衡**: - 使用`proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;`来获取客户端的真实IP,然后通过`hash $remote_addr consistent`指令基于IP做哈希分布,保持同一个客户端请求始终流向同一台服务器。 4. **健康检查**: - 可以设置健康检查机制,比如通过ping或HTTP状态码判断后端服务器是否可用,避免将请求发送给不可用的服务器。 5. **监控与管理**: - 定期监控各服务器的负载情况,调整Nginx配置以达到最佳性能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值