memc_nginx+srcache_nginx+memcached构建透明的动态页面缓存

使用Nginx的srcache模块构建缓存服务器 Nginx是一个高性能的Web服务器和反向代理服务器,代理服务器,而src向代理服务器,而srcache模块是一个Nginx扩展模块,它提供了在Nginx中构建缓存服务器的功能。Nginx是一个高性能的Web服务器和反向代理服务器,而srcache模块是一个Nginx扩展模块,它提供了在Nginx中构建缓存服务器的功能。srcache模块并不是Nginx默认自带的模块,因此我们需要手动编译Nginx,并在编译过程中包含srcache模块。的缓存区域,并指定了缓存路径、缓存区域的大小和其他参数。 阅读详情

在上一节《nginx+memcached构建页面缓存应用》http://www.ttlsa.com/html/2418.html中,说道nginx只负责从memcached服务器中读取数据,要往memcached写入数据还得需要后台的应用程序来完成。使用memc-nginx和srcache-nginx模块就可以主动的向memcached添加缓存,对应用程序来说是透明的。大大的提高动态页面访问速度。第一次访问创建缓存,后续访问在缓存过期时间内,直接从memcached返回,不需要再次经过php-fpm处理。

nginx_memc模块与nginx_srcache模块配合使用,来提供缓存服务器后端的操作,在技术上,任何提供REST接口的模块都可以与nginx_srcache配合使用来获取和存储缓存子请求。

使用memcached作为后端缓存,需要注意memcached存储大小的限制,不得超过1M。为了使用更宽松的后端存储服务,建议使用redis等,参见《srcache_nginx+redis构建缓存系统》。

1. memc-nginx-module模块指令说明:
memc_pass
语法:memc_pass address:port or socket;
默认值:none
配置段:http, server, location, if
指定memcached服务器地址。

memc_cmds_allowed
语法:memc_cmds_allowed <cmd>…
默认值: none
配置段:http, server, location, if
列出允许访问的memcached命令。默认情况下,所有的memcached命令都可以访问。

memc_flags_to_last_modified
语法:memc_flags_to_last_modified on|off
默认值:off
配置段:http, server, location, if
读取memcached标识,并将其设置为Last-Modified头部值。对于有条件的get,nginx返回304未修改响应,以便节省带宽。

memc_connect_timeout
语法:memc_connect_timeout <time>
默认值:60s
配置段: http, server, location
与memcached服务器建立连接的超时时间。不得超过597 hours。

memc_send_timeout
语法:memc_send_timeout <time>
默认值:60s
配置段:http, server, location
设置发送请求到memcached服务器的超时时间。不得超过597 hours。

memc_read_timeout
语法:memc_read_timeout <time>
默认值:60s
配置段:http, server, location
定义从memcached服务器读取响应超时时间。不得超过597 hours。

memc_buffer_size
语法:memc_buffer_size <size>
默认值:4k/8k
配置段:http, server, location
读取从memcached服务器接收到响应的缓冲大小。

2. memcached支持的命令
memcached存储命令set、add、replace、prepend、append,以$memc_key作为键。$memc_exptime定义过期时间,默认值为0。$memc_flags作为标识,默认值为0,来建立相应的memcached查询。
如果$memc_value没有定义,那么请求的请求体将作为该值,除了incr和decr命令外。注意:如果$memc_value定义为空的字符串,那么该空字符串仍然被当做该值。
2.1 get $memc_key
使用键来检索值。

location /foo {
set $memc_cmd 'get';
set $memc_key 'my_key';
memc_pass 127.0.0.1:11211;
add_header X-Memc-Flags $memc_flags;
}
如果该键被找到,响应体为该键值,返回200。否则范围404 Not Found。如果发生错误或客户端错误或服务端错误,则返回502。标识码设置到$memc_flags变量。通常使用add_header指令来添加到响应头部。

2.2 set $memc_key $memc_flags $memc_exptime $memc_value
将请求体作为memcached值。如果另外指定值可以通过$memc_value变量来指定。

location /foo {
    set $memc_cmd 'set';
    set $memc_key 'my_key';
    set $memc_flags 12345;
    set $memc_exptime 24;
    memc_pass 127.0.0.1:11211;
}
或

location /foo {
    set $memc_cmd 'set';
    set $memc_key 'my_key';
    set $memc_flags 12345;
    set $memc_exptime 24;
    set $memc_value 'my_value';
    memc_pass 127.0.0.1:11211;
}

返回201,说明创建memcached缓存存储成功。返回200说明NOT_STORED。返回404说明NOT_FOUND。返回502说明发生错误或客户端错误或服务端错误。

memcached原始响应是响应体,404 NOT FOUND除外。

2.3 add $memc_key $memc_flags $memc_exptime $memc_value
和set命令相似

2.4 prepend $memc_key $memc_flags $memc_exptime $memc_value
和set命令相似

2.5 delete $memc_key
删除该键值

location /foo {
    set $memc_cmd delete;
    set $memc_key my_key;
 
    memc_pass 127.0.0.1:11211;
}

返回200说明删除成功。返回404说明NOT_FOUND。返回502说明发生错误或客户端错误或服务端错误。

2.6 delete $memc_key $memc_exptime
和delete命令相似。

2.7 incr $memc_key $memc_value
给指定的$memc_key对应的$memc_value增量。

location /foo {
set $memc_key my_key;
set $memc_value 2;
memc_pass 127.0.0.1:11211;
}

每次访问/foo将导致my_key的值加2。

返回200说明成功。返回404说明键Not Found。返回502说明发生错误或客户端错误或服务端错误。

2.8 decr $memc_key $memc_value
与incr相似。

2.9 flush_all
刷新memcached上所有的键。

location /foo {
set $memc_cmd flush_all;
memc_pass 127.0.0.1:11211;
}

2.10 flush_all $memc_exptime

与flush_all相似。

2.11 stats
输出memcached统计信息。

location /foo {
set $memc_cmd stats;
memc_pass 127.0.0.1:11211;
}

2.12 version
返回memcached版本信息。

location /foo {
set $memc_cmd version;
memc_pass 127.0.0.1:11211;
}

3. 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,不限制。

4. srcache-nginx-module变量
$srcache_expire
当前的响应存入缓存的过期时间。按照下面的方法计算:
1. 当响应头Cache-Control: max-age=N被指定,那么N将作为过期时间。
2. 如果响应头Expires被指定,那么该值与当前时间差作为过期时间。
3. 当既没有指定Cache-Control: max-age=N也没有指定Expires,那么使用 srcache_default_expire 指定的值。
如果超过srcache_max_expire指令值,那么此变量最终值为srcache_max_expire。

$srcache_fetch_status
获取缓存的三种状态值:HIT, MISS, BYPASS。

$srcache_store_status
存入缓存的两种状态值:STORE ,BYPASS。

5. 安装nginx_memc和nginx_srcache模块

# wget https:
//github.com/agentzh/memc-nginx-module/archive/master.zip
# wget https:
//github.com/agentzh/srcache-nginx-module/archive/master.zip
# ./configure --prefix=/usr/local/nginx-1.2.5 \
--add-module=../srcache-nginx-module
--add-module=../memc-nginx-module
# make
# make install

6. 配置

upstream memcacheds {
        server 10.1.240.166:22222;
}
server  {
        listen       8090;
        server_name  test.ttlsa.com;
        index index.html index.htm index.php;
        root  /data/wwwroot/www.ttlsa.com/webroot;
 
        location /memc {
                internal;
                memc_connect_timeout 100ms;
                memc_send_timeout 100ms;
                memc_read_timeout 100ms;
                set $memc_key $query_string;
                set $memc_exptime 120;
                memc_pass memcacheds;
                }
 
        location ~ .*\.php?$
        {
                if ($uri ~ /ttlsa/){
                        set $ttlsa_key $request_uri;
                        srcache_fetch GET /memc $ttlsa_key;
                        srcache_store PUT /memc $ttlsa_key;
                        add_header X-Cached-From $srcache_fetch_status;
                        add_header X-Cached-Store $srcache_store_status;
                }
                include fastcgi_params;
                fastcgi_pass  127.0.0.1:10081;
                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;
        }
}

7. 测试
7.1 第一次访问(404 Not found 创建缓存)

memc-nginx

7.2 后续访问(直接从缓存中响应)

memc-nginx

第一次访问创建缓存,后续访问在缓存过期时间内,直接从memcached返回,不需要再次经过php-fpm处理。大大提升动态页面访问速度。

《memc_nginx+srcache_nginx+memcached遇到的问题》
如需转载请注明出处:http://www.ttlsa.com/html/2460.html

缓存设置sc4.1 缓存设置sc4.1 用于2003系统 服务器 立即下载

相关推荐

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

主要介绍了Nginx配置srcache_nginx模块搭配Redis建立缓存系统的方法,文中关于Nginx模块和Redis数据库的安装就不再说明了,这里只关注配置搭建阶段,需要的朋友可以参考下

使用memc-nginx和srcache-nginx模块构建高效透明的缓存机制

为了提高性能,几乎所有互联网应用都有缓存机制,其中Memcache是使用非常广泛的一个分布式缓存系统。众所周知,LAMP是非常经典的Web架构方式,但是随着Nginx的成熟,越来越多的系统开始转型为LNMP(Linux+Nginx+MySQL+PHP with fpm),这是因为Nginx采用基于事件机制的I/O多路复用思想设计,在高并发情况下其性能远远优于默认采用prefork模式的Apache...

weixin_34332905的博客 321

Windows系统的Mamba环境配置详细教程(状态空间模型)

causal_conv1d也是安装mamba的依赖必须库。安装完成后,通过pip list可以查看到安装的库。Triton是安装mamba的依赖,需要先安装。上述工作准备好后,按下面步骤安装。直接根据离线文件安装即可。是自己的虚拟环境名字。

2301_77831163的博客 3674

nginx添加srcache-nginx模块进行页面缓存

最近对负载均衡、缓存这方面有比较大的兴趣,于是决定用redis作为nginx的缓存 期间在网上看了几篇博客,发现内容都基本一致,而我自己按照博客指示来不奏效的,可能我是自己问题 后来经过一系列的摸索,成功对页面进行了缓存,所以以此篇博客记录下来,也希望能帮助到有需要的人 nginx、redis的安装配置就不记录,只记录最核心关键的部分: 我的环境: 系统:Ubuntu 14.04

人地个仔的博客 2821

2025年普通人转向人工智能运维(AIOps)学习建议(附最新技术实践与资源)

AIOps不仅是技术的叠加,更是运维流程的重构。建议通过“学习-实践-反馈”循环,逐步从工具使用者成长为解决方案设计者。如需完整资源链接,可访问上述推荐的优快云博客及GitHub仓库。

资深全栈架构师,乐于在 优快云 分享技术见解,与大家携手共进,共攀技术巅峰! 3094

论文阅读笔记:Extended Vision Transformer (ExViT) for Land Use and Land Cover Classification

注意力机制驱动的深度模型最近取得了成功,如最具代表性的视觉转换器(ViT),吸引了一波高级研究来探索它们对更广泛领域的适应。然而,遥感(RS)领域中基于Transformer的方法更关注单模态数据,这可能会在充分利用不断增长的多模态地球观测数据时失去可扩展性。为此,我们提出了一种新的多模式深度学习框架,通过在最小修改的情况下扩展传统的ViT,针对土地利用和土地覆盖(LULC)分类任务。

嗑研狗的日常 945

nginx+memcached构建页面缓存应用

nginx的memcached_module模块可以直接从memcached服务器中读取内容后输出,后续的请求不再经过应用程序处理,如php-fpm、django,大大的提升动态页面的速度。nginx只负责从memcached服务器中读取数据,要往memcached写入数据还得需要后台的应用程序来完成,主动的将要缓存的页面缓存到memcached中,可以通过404重定向到后端去处理的。 ngx_

hegaoye308444582的博客 613

【正点原子I.MX6U-MINI移植篇】Ubuntu-base根文件系统移植构建过程详解(四)

能不能在ARM板上运行Ubuntu呢?答案肯定是可以的,Ubuntu是Linux系统的一种,可以简单的将Ubuntu理解为一个根文件系统,和我们用busybox、buildroot制作的根文件系统一样。因此移植Ubuntu也就是将Ubuntu根文件系统移植到我们的开发板上。

果果小师弟的博客 3767

nginx高速缓存

许多Web服务器还具有校验功能,就是当某些副本数据过期以后,先向后端服务器发送校验请求,后端服务器对这些数据进行校验,如果发现原数据和副本没有差别,则将过期副本重新置为可用副本。并且 使用 /usr/local/openresty/nginx/conf/nginx.conf -t 检测一下语法。进入cd /usr/local/openresty/nginx/conf 把之前nginx修改的文件 复制到当前文件里面。可以看见速度有明显的上升 实验成功 这个就叫做nginx的高速缓存。

weixin_55668888的博客 1283

运维系列【仅供参考】:微信版本过低 使用CheatEngine绕过

微信版本过低 使用CheatEngine绕过

weixin_54626591的博客 2133

SpringBoot+Vue+kkFileView实现文档管理(文档上传、下载、在线预览)

上面在使用OpenOffice实现doc、excel、ppt等文档的管理和预览。除此之外可用kkFileView实现包括且更多文档的预览。

BADAO_LIUMANG_QIZHI的博客 1万+

memc_nginx+srcache_nginx+memcached遇到的问题

为什么80%的码农都做不了架构师?>>> ...

weixin_34261739的博客 178

RK3568平台开发系列讲解(外设篇)CAN的使用

📢 本篇章带大家快速了解CAN的使用。

内核笔记 2352

openresty实现的高速缓存机制

文章目录nginx动态资源的缓存策略传统缓存策略高速缓存策略memc+scracheopenresty安装配置安装并启动memcached配置nginx(openresty)的反向代理 nginx动态资源的缓存策略 传统缓存策略 客户端通过http协议访问nginx(只能处理静态,动态php资源会调用php-pfm)nginx调用php进行处理,php将处理好的结果暂存在memcache,当外部又有相同处理请求时直接通过memcache将结果返回给php再返回给nginx,nginx再返回给客户端。 问

qq_42564122的博客 990

Visual Studio调试技巧与实用方法总结(实战经验分享)

本文根据多年的项目实战经验,详细介绍一些Visual Studio常用的高效调试手段与技巧。

dvlinker的技术专栏 3万+

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

srcache_nginx+redis构建缓存系统

本文将使用redis来作为缓存载体。nginx的srcache_nginx模块指令参数解释参见《memc_nginx+srcache_nginx+memcached构建透明的动态页面缓存》。1. nginx模块--add-module=../modules/ngx_devel_kit-0.2.18 --add-module=../modules/set-misc-ngi...

weixin_34417183的博客 122

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

php和memcached缓存模块扩展及openresty+memcached实现缓存

PHP模块扩展 [root@server1 ~]# tar zxf memcache-2.2.5.tgz [root@server1 ~]# vim .bash_profile [root@server1 ~]# source .bash_profile [root@server1 ~]# cd memcache-2.2.5 [root@server1 memcache-2.2....

Argued_D的博客 667

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

Nginx常见异常分析及配置优化

常见异常分析1、nginx不转发消息头header问题proxy_set_headerHost$host; proxy_set_headerX-Real-IP$remote_addr; proxy_set_headerX-Forwarded-Server$host;2、nginx 反向代理 proxy_set_header 自定义 header 头无效S...

开发者导航 796

Nginx cache初体验

前言 大家都知道cache对于网站性能的重要性,提高用户响应速度,减轻后端压力,节省资源等等。一谈到cache其实是个很大话题,从前端浏览器到最终响应请求的服务器可能要经过很多次跳转,每次跳转经过的服务器都有机会提供cache。单从成本上而言,越靠近用户的cache越经济,实际情况中都需要根据当前线上的业务部署情况,开发成本收益比,可维护...

weixin_34409741的博客 164

openresty

Memc nginx+srcache nginx+memcached构建透明的动态页面缓存 一.原理 一种高效的缓存策略是Nginx直接访问memcache,并用$uri和$args等Nginx内置变量设定缓存key规则,这样,当缓存命中 时,Nginx可以跳过通过fastcgi和PHP通信的过程,直接从memcache中获取数据并返回。memc-nginx和srcache- ngi...

weixin_30627341的博客 109

Nginx(openresty)+memcache构建页面缓存

測試 相當於nginx+memcache作爲web服務器(OpenResty) (1) [kiosk@foundation8 ~]$ ab -c 10 -n 5000 http://172.25.254.1/index.php (2) ab -c 10 -n 5000 http://172.25.254.1/example.php ...

yrx420909的博客 391

srcache_nginx redis 构建缓存系统应用一例

为什么80%的码农都做不了架构师?>>> ...

weixin_33901926的博客 192
上一篇: nginx+lua+redis构建高并发应用
下一篇: 在nginx中使用lua直接访问mysql和memcaced达到数据接口的统一
笑天居士
博客等级 码龄24年 292粉丝 136原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值