科技常识:Nginx配置srcache_nginx模块搭配Redis建立缓存系统

2021-04-22 15:01:18
导读今天小编跟大家讲解下有关科技常识: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.confdaemonize yespidfile /var/run/redis-6379.pidport 6379bind 127.0.0.1timeout 0tcp-keepalive 0loglevel noticelogfile stdoutdatabases 16stop-writes-on-bgsave-error yesrdbcompression yesrdbchecksum yesdbfilename dump.rdbslave-serve-stale-data yesslave-read-only yesrepl-disable-tcp-nodelay noslave-priority 100maxmemory 8096mbmaxmemory-policy volatile-ttlappendonly noappendfsync everysecno-appendfsync-on-rewrite noauto-aof-rewrite-percentage 100auto-aof-rewrite-min-size 64mblua-time-limit 5000slowlog-log-slower-than 10000slowlog-max-len 128hash-max-ziplist-entries 512hash-max-ziplist-value 64list-max-ziplist-entries 512list-max-ziplist-value 64set-max-intset-entries 512zset-max-ziplist-entries 128zset-max-ziplist-value 64activerehashing yesclient-output-buffer-limit normal 0 0 0client-output-buffer-limit slave 256mb 64mb 60client-output-buffer-limit pubsub 32mb 8mb 60hz 10aof-rewrite-incremental-fsync yes

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

3. nginx配置

# vim nginx.confhttp{ 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.aidi.net.cn.conf;}# vim vhosts/test.aidi.net.cn.confupstream redis { server 127.0.0.1:6379; keepalive 512;} server { listen 80; server_name test.aidi.net.cn; index index.html index.htm index.php; root /data/test.aidi.net.cn/webroot; location ~ .*\.php { srcache_store_private on; srcache_methods GET; srcache_response_cache_control off; if ($uri ~ /aidi.net.cn/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.aidi.net.cn-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.aidi.net.cn-error.log; access_log /data/httplogs/test.aidi.net.cn-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, locationsrcache_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,不限制。

来源:爱蒂网

免责声明:本文由用户上传,如有侵权请联系删除!

猜你喜欢

最新文章