Nginx配置srcache_nginx模块搭配Redis建立缓存系统_nginx

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. 测试
没有做缓存状态:

有做缓存状态:

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

再次请求:

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

PS:srcache-nginx-module模块指令说明:
srcache_fetch
语法:srcache_fetch <method> <uri> <args>?
默认值:no
配置段:http, server, location, location if
查询缓存。返回200说明缓存命中,直接从缓存响应客户端请求。非200需要后端程序处理。
srcache_fetch_skip
语法:srcache_fetch_skip <flag>
默认值:srcache_fetch_skip 0
配置段:http, server, location, location if
<flag>支持nginx变量。当这个参数值不为空和不等于0,则从缓存取数据过程被无条件跳过。
srcache_store
语法:srcache_store <method> <uri> <args>?
默认值: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 <size>
默认值:srcache_store_max_size 0
配置段:http, server, location, location if
当响应体超过该值,将不会缓存。
当后端缓存存储有对缓存数据做硬限制,这个指令非常有用。比如memcached服务器,上限是1M。
默认值0,不限制。
srcache_store_skip
语法:srcache_store_skip <flag>
默认值:srcache_store_skip 0
配置段:http, server, location, location if
<flag>支持nginx变量。当这个参数值不为空和不等于0,则从存入缓存过程被无条件跳过。
srcache_store_statuses
语法:srcache_store_statuses <status1> <status2> ..
默认值:srcache_store_statuses 200 301 302
配置段:http, server, location, location if
该指令控制那些状态码响应被缓存。
srcache_header_buffer_size
语法:srcache_header_buffer_size <size>
默认值:srcache_header_buffer_size 4k/8k
配置段:http, server, location, location if
在序列化响应头时控制头缓冲大小。默认大小为页面大小,通常为4k或8k,取决于具体平台。
注意:该大小是以每个头的,因此,需要足够大来容纳最大响应头。
srcache_store_hide_header
语法:srcache_store_hide_header <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 <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 <method>...
默认值: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: <date-no-more-recently-than-now> 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 <time>
默认值:srcache_default_expire 60s
配置段:http, server, location, location if
控制默认过期时间。当响应头既没有Cache-Control: max-age=N也没有指定Expires时,允许的$srcache_expire变量值。
该值必须小于597hours。
srcache_max_expire
语法:srcache_max_expire <time>
默认值:srcache_max_expire 0
配置段:http, server, location, location if
控制最大缓存时间,此设置优先级高于其他计算方法。
该值必须小于597hours。
默认为0,不限制。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索nginx
, 缓存
, redis
, 配置
nginx配置
nginx redis 缓存、nginx redis lua缓存、nginx redis静态缓存、nginx redis 页面缓存、redis缓存和nginx缓存,以便于您获取更多的相关知识。

时间: 2024-09-20 00:24:54

Nginx配置srcache_nginx模块搭配Redis建立缓存系统_nginx的相关文章

nginx 配置 ssl 模块支持 https

SSL英文名为Secure Socket Layer,安全套接字层.SSL是一种数字证书,它使用ssl协议在浏览器和web server之间建立一条安全通道,数据信息在client与server之间的安全传输 在这之前,记得nginx编译安装时加参数–with-http_ssl_module,使得nginx支持ssl模块. 一.颁发证书 下面自行颁发不受浏览器信任的证书 cd /usr/local/nginx/conf/key 1.创建服务器私钥,并输入口令 openssl genrsa -de

详解Nginx服务器中配置Sysguard模块预防高负载的方案_nginx

nginx做为HTTP服务器,有以下几项基本特性: 处理静态文件,索引文件以及自动索引:打开文件描述符缓冲. 无缓存的反向代理加速,简单的负载均衡和容错. FastCGI,简单的负载均衡和容错. 模块化的结构.包括gzipping, byte ranges, chunked responses,以及 SSI-filter等filter.如果由FastCGI或其它代理服务器处理单页中存在的多个SSI,则这项处理可以并行运行,而不需要相互等待. Nginx专为性能优化而开发,性能是其最重要的考量,实

Ubuntu下Nginx配置ThinkPHP的Pathinfo和URl Rewrite模式_nginx

概述 在上一篇文章Nginx配置Thinkphp支持URL Rewrite中已经介绍了如何配置Nginx支持ThinkPHP的URL Rewrite,但是上文针对的是Centos平台,这次因为某些特殊的原因,服务器环境必须用ubuntu,本来以为和Cetons中一模一样,但是配置完了发现不能使用,所以就百度了一些文章. 配置方法TP官方解决方案 复制代码 代码如下: location ~ .php         {                 #原有代码                  

Nginx用ngx_cache_purge模块缓存加速 支持html伪静态页面

Nginx缓存加速步骤如下 一.添加模块 本文分享的 Nginx 缓存需要额外编译 ngx_cache_purge 模块.至于下载模块.重新编译后面会讲. 二.Nginx配置 要用这个缓存功能,建议重新弄一个 server 模块(替换之前的),如下代码是张戈博客目前正在使用的规则(已删除了我自定义的伪静态规则,避免混淆视听): #####################################################################################

nginx静态压缩模块ngx_http_gzip_static_module配置及使用

nginx静态压缩和apache gzip压缩类似,原理也差不多,本文我们来介绍一下nginx静态压缩模块ngx_http_gzip_static_module的一些使用方法. 在搭建squid网页加速的时候,对于大的css 或者js要进行压缩,然后再进行缓存,这样能够提高减小下载量提高页面响应速度.如果你用的是squid 3.0以前的版本并且用的是 ngnix server的话可能会碰到如下问题: 不用squid直接打开页面则客户端返回的是压缩的状态,如果启用squid加速会发现下载下来的页面

在Nginx中配置image filter模块来实现动态生成缩略图_nginx

先来看一下什么是nginx的image filter模块. HttpImageFilterModule用来裁剪过大的图片到指定大小,是nginx自带模块,默认不会开启 开启HttpImageFilterModule需要在编译要带上参数 --with-http_image_filter_module 该模块主要有两个指令: 语法: image_filter (test | size | resize width height | crop width height) 默认是: 无 可出现的上下文:

Apache/Nginx配置浏览器缓存静态文件的详情教程

网页使用缓存最明显的好处就是:减少页面加载时间.减少服务器负载. 浏览器是否使用缓存.缓存多久,是由服务器控制的.准确来说,当浏览器请求一个网页(或者其他资源)时,服务器发回的响应的「响应头」部分的某些字段指明了有关缓存的关键信息. Cache-Control Cache-ControlHTTP 响应头是 HTTP 1.1 协议新增的指令,每个资源都可以通过设定 Cache-Control 来建立缓存策略.通常,可为它指定一个max-age,表示缓存的最长时间,单位为秒.例如,若设定Cache-

Nginx和nginx-http-access模块防盗链配置与使用

此篇文章是关于nginx-http-access模块的延伸内容,就如何安装与配置nginx-accesskey防盗链进行了详细的说明,nginx.conf的配置文件也可做为参考,nginx下载认证的配置与使用供大家研究学习与借鉴. 注意:此文整理于互联网,未经过实际的安装测试,所以难免会有错误,如你在阅读本文并在测试的过程中遇到问题,欢迎至风信网官方以下地址进行反馈(http://www.ithov.com/member/article_add.php),我们将与您一起寻找正确的答案. 安装Ng

Nginx服务器中配置GeoIP模块来拦截指定国家IP_nginx

最近有一个网站项目需求:需要屏蔽国内的方问请求.花时间研究了一下这方面的资料.目前找到的最佳方法就是使用 Nginx 的 GeoIP 模块来实现地区的识别.然后配置相关国家的 ISO 名称,禁止访问即可.记录一下相关过程. 编译 GeoIP 组件 maxmind 提供的免费版数据库已经可以满足需求,在使用数据库前,需要先编译 GeoIP 组件: wget http://geolite.maxmind.com/download/geoip/api/c/GeoIP-1.4.8.tar.gz ./co