Nginx配置srcache_nginx模块搭配Redis建立缓存系统的方法

这篇“Nginx配置srcache_nginx模块搭配redis建立缓存系统的方法”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Nginx配置srcache_nginx模块搭配Redis建立缓存系统的方法”文章吧。

创新互联是网站建设专家,致力于互联网品牌建设与网络营销,专业领域包括网站设计、成都网站建设、电商网站制作开发、小程序定制开发、微信营销、系统平台开发,与其他网站设计及系统开发公司不同,我们的整合解决方案结合了恒基网络品牌建设经验和互联网整合营销的理念,并将策略和执行紧密结合,且不断评估并优化我们的方案,为客户提供全方位的互联网品牌整合方案!

1. nginx模块

--add-module=../modules/ngx_devel_kit-0.2.18 
--add-module=../modules/set-misc-nginx-module-0.22rc8 
--add-module=../modules/srcache-nginx-module-0.22 
--add-module=../modules/redis-nginx-module-0.3.6 
--add-module=../modules/redis2-nginx-module-0.10

2. redis安装配置

# vim redis.conf
daemonize yes
pidfile /var/run/redis-6379.pid
port 6379
bind 127.0.0.1
timeout 0
tcp-keepalive 0
loglevel notice
logfile stdout
databases 16
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename dump.rdb
slave-serve-stale-data yes
slave-read-only yes
repl-disable-tcp-nodelay no
slave-priority 100
maxmemory 8096mb
maxmemory-policy volatile-ttl
appendonly no
appendfsync everysec
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
lua-time-limit 5000
slowlog-log-slower-than 10000
slowlog-max-len 128
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-entries 512
list-max-ziplist-value 64
set-max-intset-entries 512
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
activerehashing yes
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit slave 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
hz 10
aof-rewrite-incremental-fsync yes

由于只把redis当做缓存使用,因此没有启用持久化。

3. nginx配置

# vim nginx.conf
http
{
    include    mime.types;
    default_type application/octet-stream;
 
    log_format main '$remote_addr - $remote_user [$time_local] "$request" '
                    '"$status" $body_bytes_sent "$http_referer" '
                    '"$http_user_agent" "$http_x_forwarded_for" '
                    '"$gzip_ratio" $request_time $bytes_sent $request_length';
 
    log_format srcache_log '$remote_addr - $remote_user [$time_local] "$request" '
                '"$status" $body_bytes_sent $request_time $bytes_sent $request_length '
                '[$upstream_response_time] [$srcache_fetch_status] [$srcache_store_status] [$srcache_expire]';
 
    set_real_ip_from 10.0.0.0/8;
    real_ip_header x-forwarded-for;
 
    include     vhosts/test.jb51.net.conf;
}
# vim vhosts/test.jb51.net.conf
upstream redis {
    server 127.0.0.1:6379;
    keepalive 512;
}
 
server
    {
    listen    80;
    server_name test.jb51.net;
    index index.html index.htm index.php;
    root /data/test.jb51.net/webroot;
 
    location ~ .*\.php {
        srcache_store_private on;
        srcache_methods get;
        srcache_response_cache_control off;
 
        if ($uri ~ /jb51.net/pp.php$){
            set $key $request_uri;
            set_escape_uri $escaped_key $key;
            srcache_fetch get /redis $key;
            srcache_default_expire 172800;
            srcache_store put /redis2 key=$escaped_key&exptime=$srcache_expire;
 
            #add_header x-cached-from $srcache_fetch_status;
            #set_md5 $md5key $key;
            #add_header x-md5-key $md5key;
            #add_header x-cached-store $srcache_store_status;
            #add_header x-key $key;
            #add_header x-query_string $query_string;
            #add_header x-expire $srcache_expire;
 
 access_log /data/httplogs/test.jb51.net-photo-access.log srcache_log;
        }
 
        include fastcgi_params;
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_index index.php;
        fastcgi_connect_timeout 60;
        fastcgi_send_timeout 180;
        fastcgi_read_timeout 180;
        fastcgi_buffer_size 128k;
        fastcgi_buffers 4 256k;
        fastcgi_busy_buffers_size 256k;
        fastcgi_temp_file_write_size 256k;
        fastcgi_intercept_errors on;
        fastcgi_param script_filename $document_root$fastcgi_script_name;
        fastcgi_split_path_info ^(.+\.php)(.*)$;
        fastcgi_param path_info $fastcgi_path_info;
     }
 
    location = /redis {
        internal;
        set_md5 $redis_key $args;
        redis_pass redis;
    }
 
    location = /redis2 {
        internal;
 
        set_unescape_uri $exptime $arg_exptime;
        set_unescape_uri $key $arg_key;
        set_md5 $key;
 
        redis2_query set $key $echo_request_body;
        redis2_query expire $key $exptime;
        redis2_pass redis;
    }
 
    error_log /data/httplogs/test.jb51.net-error.log;
    access_log /data/httplogs/test.jb51.net-aceess.log main;
 
}

4. 测试
没有做缓存状态:

Nginx配置srcache_nginx模块搭配Redis建立缓存系统的方法

有做缓存状态:

Nginx配置srcache_nginx模块搭配Redis建立缓存系统的方法

5. 响应头状态
第一次请求:

Nginx配置srcache_nginx模块搭配Redis建立缓存系统的方法

再次请求:

Nginx配置srcache_nginx模块搭配Redis建立缓存系统的方法

6. 查看redis是否缓存以及过期时间

Nginx配置srcache_nginx模块搭配Redis建立缓存系统的方法

ps:srcache-nginx-module模块指令说明:
srcache_fetch
语法:srcache_fetch ?
默认值:no
配置段:http, server, location, location if
查询缓存。返回200说明缓存命中,直接从缓存响应客户端请求。非200需要后端程序处理。
srcache_fetch_skip
语法:srcache_fetch_skip
默认值:srcache_fetch_skip 0
配置段:http, server, location, location if
支持nginx变量。当这个参数值不为空和不等于0,则从缓存取数据过程被无条件跳过。
srcache_store
语法:srcache_store ?
默认值:no
配置段:http, server, location, location if
将当前请求的响应存入缓存。可以使用srcache_store_skip和srcache_store_max_size指令禁用缓存。不管是响应状态行,响应头,响应体都会被缓存。默认情况下,下列特殊响应头不会被缓存:

  • connection

  • keep-alive

  • proxy-authenticate

  • proxy-authorization

  • te

  • trailers

  • transfer-encoding

  • upgrade

  • set-cookie

可以使用srcache_store_pass_header、srcache_store_hide_header指令来控制哪些头要缓存哪些不要。

注意:即使所有的响应数据被立即发送,当前的nginx请求生命周期未必完成,直到srcache_store子请求完成。这意味着服务器端延迟关闭tcp连接,或下一个请求服务发送同一个tcp连接。
srcache_store_max_size
语法:srcache_store_max_size
默认值:srcache_store_max_size 0
配置段:http, server, location, location if
当响应体超过该值,将不会缓存。
当后端缓存存储有对缓存数据做硬限制,这个指令非常有用。比如memcached服务器,上限是1m。
默认值0,不限制。
srcache_store_skip
语法:srcache_store_skip
默认值:srcache_store_skip 0
配置段:http, server, location, location if
支持nginx变量。当这个参数值不为空和不等于0,则从存入缓存过程被无条件跳过。
srcache_store_statuses
语法:srcache_store_statuses ..
默认值:srcache_store_statuses 200 301 302
配置段:http, server, location, location if
该指令控制那些状态码响应被缓存。
srcache_header_buffer_size
语法:srcache_header_buffer_size
默认值:srcache_header_buffer_size 4k/8k
配置段:http, server, location, location if
在序列化响应头时控制头缓冲大小。默认大小为页面大小,通常为4k或8k,取决于具体平台。
注意:该大小是以每个头的,因此,需要足够大来容纳最大响应头。
srcache_store_hide_header
语法:srcache_store_hide_header


默认值:no
配置段:http, server, location, location if
默认情况下,除了以下头缓存所有响应头:

  • connection

  • keep-alive

  • proxy-authenticate

  • proxy-authorization

  • te

  • trailers

  • transfer-encoding

  • upgrade

  • set-cookie

可以隐藏多个响应头,不区分大小写。如

srcache_store_hide_header x-foo;
srcache_store_hide_header last-modified;

srcache_store_pass_header

语法:srcache_store_pass_header


默认值:no
配置段:http, server, location, location if
默认情况下,除了以下头缓存所有响应头:

  • connection

  • keep-alive

  • proxy-authenticate

  • proxy-authorization

  • te

  • trailers

  • transfer-encoding

  • upgrade

  • set-cookie

可以缓存多个响应头,不区分大小写。如

srcache_store_pass_header set-cookie;
srcache_store_pass_header proxy-autenticate;

srcache_methods
语法:srcache_methods ...
默认值:srcache_methods get head
配置段:http, server, location
srcache_ignore_content_encoding
语法:srcache_ignore_content_encoding on|off
默认值: srcache_ignore_content_encoding off
配置段:http, server, location, location if
内容是否编码。
建议后端服务器禁用gzip/deflate压缩。在nginx.conf配置:

proxy_set_header accept-encoding "";

srcache_request_cache_control
语法:srcache_request_cache_control on|off
默认值:srcache_request_cache_control off
配置段:http, server, location
当该指令为on时,请求头cache-control和pragma按照下面的方法处理:
1. srcache_fetch查询缓存操作时,当请求头cache-control: no-cache 、 pragma: no-cache 将跳过。
2. srcache_store存入缓存操作时,当请求头cache-control: no-store将跳过。
当该指令为off时,将禁用此功能,对于繁忙的站点依赖缓存加速被认为是最安全的。
srcache_response_cache_control
语法:srcache_response_cache_control on|off
默认值:srcache_response_cache_control on
配置段:http, server, location
当该指令为on时,响应头cache-control和expires按照下面的方法处理:

cache-control: private skips srcache_store,
cache-control: no-store skips srcache_store,
cache-control: no-cache skips srcache_store,
cache-control: max-age=0 skips srcache_store,
expires:  skips srcache_store.

该指令优先级比srcache_store_no_store,srcache_store_no_cache,srcache_store_private高。
srcache_store_no_store
语法:srcache_store_no_store on|off
默认值:srcache_store_no_store off
配置段:http, server, location
开启该指令,将强制响应头cache-control: no-store。默认为关闭。
srcache_store_no_cache
语法:srcache_store_no_cache on|off
默认值:srcache_store_no_cache off
配置段:http, server, location
开启该指令,将强制响应头cache-control: no-cache。默认为关闭。
srcache_store_private
语法:srcache_store_private on|off
默认值:srcache_store_private off
配置段:http, server, location
开启该指令,将强制响应头cache-control: private。默认为关闭。
srcache_default_expire
语法:srcache_default_expire

以上就是关于“Nginx配置srcache_nginx模块搭配Redis建立缓存系统的方法”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注创新互联行业资讯频道。


网页名称:Nginx配置srcache_nginx模块搭配Redis建立缓存系统的方法
文章来源:http://pwwzsj.com/article/jdedsc.html