nginx之proxy_cached代理层缓存

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zwl18210851801/article/details/81735994

一、HTTP模块配置

proxy_buffering on;        #设置代理服务器(nginx)保存用户头信息的缓冲区大小

proxy_buffer_size 4k;    #设置代理服务器(nginx)保存用户头信息的缓冲区大小

proxy_buffers 4 32k;     #proxy_buffers缓冲区,网页平均在32k以下的话,这样设置

proxy_busy_buffers_size 64k;   #高负荷下缓冲大小(proxy_buffers*2)

proxy_connect_timeout  60s;   #默认值60s, nginx连接到后端服务器的连接超时时间。

proxy_read_timeout 60s;   #连接成功后_等候后端服务器响应时间_其实已经进入后端的排队之中等候处理(也可以说是后端服务器处理请求的时间)。

proxy_send_timeout  60s;    #后端服务器数据回传时间_就是在规定时间之内后端服务器必须传完所有的数据。

proxy_temp_file_write_size 64k;   #设定缓存文件夹大小,大于这个值,将从upstream服务器传

proxy_temp_path /nginx/proxy_temp;   #定义存储承载从代理服务器接收到的数据的临时文件定义目录

proxy_cache_path/data/nginx/tmp-test levels=1:2 keys_zone=tmp-test:100m inactive=7d max_size=1000g use_temp_path=off;

#参数说明:

#proxy_cache_path 缓存文件路径

#levels 设置缓存文件目录层次;levels=1:2 表示两级目录

#keys_zone 设置缓存名字和共享内存大小

#inactive 在指定时间内没人访问则被删除

#max_size 最大缓存空间,如果缓存空间满,默认覆盖掉缓存时间最长的资源。

#use_temp_path:如果为on,则内容首先被写入临时文件(proxy_temp_path ),然后重命名到proxy_cache_path指定的目录;如果设置为off,则内容直接被写入到proxy_cache_path指定的目录,如果需要cache建议off,则该特性是1.7.10提供的。

二、location模块配置

(1)location配置

        location = /cache {

          proxy_cache cache;

          proxy_cache_key $request_uri;

          proxy_cache_valid 200 5s;

               proxy_set_header Host $host:$server_port;

               proxy_set_header X-Real-IP $remote_addr;

               proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

         proxy_pass http://backend_tomcat/cache$is_args$args;

         add_header cache-status$upstream_cache_status;

        }

        #proxy_cache cache 使用名为cache的对应缓存配置

        #proxy_cache_valid  200 206 304 301 302 10d; 对httpcode为200…的缓存10天

        #proxy_cache_key $request_uri 定义缓存唯一key,通过唯一key来进行hash存取

        #proxy_set_header  自定义http header头,用于发送给后端真实服务器。

        #proxy_pass  指代理后转发的路径

        #add_header cache-status $upstream_cache_status在响应头中添加缓存命中的状态。

 (2)缓存相关配置

  1、proxy_cache:指定使用哪个共享内存区存储缓存信息。

     2、proxy_cache_key :设置缓存使用的key,默认为完整的访问URL,根据实际情况设置缓存key。

  3、proxy_cache_valid :为不同的响应状态码设置缓存时间。如果是proxy_cache_valid 5s,则200、301、302响应都将被缓存。

  4.proxy_cache_min_uses

  用于控制请求多少次后响应才被缓存。默认“proxy_cache_min_uses 1;”,如果缓存热点比较集中、存储有限,则可以通过修改该参数来来减少缓存数量和写磁盘次数。

  5.proxy_no_cache

  用于控制什么情况下响应不被缓存。比如配置“proxy_no_cache$args_nocache”,如果带的nocache参数值至少有一个不为空或者为0,则响应将不被缓存。

  6.proxy_cache_bypass

  类似于proxy_no_cache,但是,其控制什么情况不使用缓存的内容,而是直接到后端获取最新的内容。如果命中,则$upstream_cache_status为BYPASS。

  7.proxy_cache_use_stale

  当对缓存内容的过期时间不敏感,或者后端服务出问题时,即使缓存的内容不新鲜也总比返回错误给用户强(类似于托底),此时可以配置该参数,如“proxy_cache_use_stale error timeout http_500 http_502 http_503 http_504”,即如果出现超时、后端连接出错、500、502、503等错误时,则即使缓存内容已过期也先返回给用户,此时$upstream_cache_status为STALE。还有一个updating表示缓存已过期但正在被别的Nginx Worker进程更新,但先返回了过期内容,此时$upstream_cache_status为UPDATING。

  8.proxy_cache_revalidate

  当缓存过期后,如果开启了proxy_cache_revalidate,则会发出一次if-modified-since或if-none-match条件请求,如果后端返回304,则此时$upstream_cache_status为REVALIDATED,我们将得到两个好处,节省带宽和减少写磁盘的次数。

  9.proxy_cache_lock

  当多个客户端同时请求同一份内容时,如果开启proxy_cache_lock(默认off),则只有一个请求被发送至后端。其他请求将等待该请求的返回。当第一个请求返回后,其他相同请求将从缓存中获取内容返回。当第一个请求超过了proxy_cache_lock_timeout超时时间(默认为5s),则其他请求将同时请求到后端来获取响应,且响应不会被缓存(在1.7.8版本之前是被缓存的)。启用proxy_cache_lock可以应对Dog-pile effect(当某个缓存失效时,同时有大量相同的请求没命中缓存,而同时请求到后端,从而导致后端压力太大,此时限制一个请求去拿即可)。

  proxy_cache_lock_age是1.7.8新添加的,如果在proxy_cache_lock_age指定的时间内(默认为5s),最后一个发送到后端进行新缓存构建的请求还没有完成,则下一个请求将被发送到后端来构建缓存(因为1.7.8版本之后,proxy_cache_lock_timeout超时之后返回的内容是不缓存的,需要下一次请求来构建响应缓存)。

三、清理缓存

server {
        location / {
            proxy_pass         http://127.0.0.1:8000;
            proxy_cache        tmpcache;
            proxy_cache_key    $uri$is_args$args;
        }

        location ~ /purge(/.*) {
            allow              127.0.0.1;
            deny               all;
            proxy_cache_purge  tmpcache $uri$is_args$args;
        }
    }

  allow 127.0.0.1;#允许改IP访问

  deny 192.168.1.1;#禁止该IP访问

  deny all;#以deny all结尾 表示除了上面allow的其他都禁止

猜你喜欢

转载自blog.csdn.net/zwl18210851801/article/details/81735994
今日推荐