OpenResty实现LNMP的缓存前移(到达nginx前端层面)

一、概念讲解

1.OPenResty是一个基于Nginx与Lua的高性能Web平台,用于方便的搭建能够处理超高并发,扩展性极高的动态Web应用,Web服务和动态网关。通过汇聚各种设计精良的Nginx模块,从而将Nginx有效的变成一个强大的通用Web应用平台。这样,Web开发人员和系统工程师可以使用Lua脚本语言调用Nginx支持的各种C以及Lua模块,快速构造出足以胜任10k乃至1000k以上的单机并发连接的高性能Web应用系统
2.其目标是让Web服务直接跑在Nginx服务内部,充分利用Nginx的非阻塞I/O模型,不仅仅对HTTP客户端请求,甚至于对远程后端诸如MYSQL,PostgreSQL,Memcached以及Redis等都进行一致的高性能响应

二、缓存前移的实现

1.关闭nginx服务(其自身已经有nginx,所以需要把nginx关闭)

[root@server1 ~]# nginx -s stop

OpenResty实现LNMP的缓存前移(到达nginx前端层面)
2.解压openresty源码包(在官网下载源码包)

[root@server1 ~]# ls
[root@server1 ~]# tar zxf openresty-1.13.6.1.tar.gz

OpenResty实现LNMP的缓存前移(到达nginx前端层面)
3.进行编译和安装

[root@server1 ~]# cd openresty-1.13.6.1
[root@server1 openresty-1.13.6.1]# ls
#默认装在/usr/local下,不需要额外的参数
[root@server1 openresty-1.13.6.1]# ./configure 
#编译的可能会比较慢,因为有很多第三方模块,编译和安装和之前的不一样,可以在预编译环境创建好之后根据内容查看
[root@server1 openresty-1.13.6.1]# gmake && gmake install	

OpenResty实现LNMP的缓存前移(到达nginx前端层面)
OpenResty实现LNMP的缓存前移(到达nginx前端层面)
4.将之前的测试页面以及监控页面复制到openresty的指定目录下

[root@server1 openresty-1.13.6.1]# cd /usr/local/openresty/nginx/html/
[root@server1 html]# ls
[root@server1 html]# cp /usr/local/lnmp/nginx/html/index.php .
[root@server1 html]# cp /usr/local/lnmp/nginx/html/example.php .
[root@server1 html]# ls	

OpenResty实现LNMP的缓存前移(到达nginx前端层面)
注意:
/usr/local/openresty/nginx/html下的文件index.html表示访问页面正确时显示的页面,50x.html表示访问页面错误时显示的页面

5.编辑openresty的配置文件(此时的路径为/usr/local/openresty/nginx/conf)并检测配置文件是否有语法错误

[root@server1 html]# cd ../conf
[root@server1 conf]# vim nginx.conf
[root@server1 conf]# ../sbin/nginx -t

OpenResty实现LNMP的缓存前移(到达nginx前端层面)
配置文件中的更改的内容如下:

  2 user  nginx nginx;

 18         upstream memcache {
 19         server localhost:11211;
 20         keepalive 512;	只用ngnix做额外的服务器,现在呢需要接收请求后,将请求甩给模块(本机的11211端口),保持512个连接(不断开,single是单立模式,取消即可)
 21         }

 56         location /memc {
 57                 internal;       #内部的请求
 58                 memc_connect_timeout 100ms;     #连接超时
 59                 memc_send_timeout 100ms;        #发送超时
 60                 memc_read_timeout 100ms;        #读取超时
 61                 set $memc_key $query_string;    #键值对的形式存储
 62                 set $memc_exptime 300;
 63                 memc_pass memcache;
 64                 }

 78         location ~ \.php$ {
 79             set $key $uri$args;
 80             srcache_fetch GET /memc $key;   #读数据
 81             srcache_store PUT /memc $key;   #放数据
 82             root           html;
 83             fastcgi_pass   127.0.0.1:9000;
 84             fastcgi_index  index.php;
 85         #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
 86             include        fastcgi.conf;
 87         }

OpenResty实现LNMP的缓存前移(到达nginx前端层面)
OpenResty实现LNMP的缓存前移(到达nginx前端层面)
OpenResty实现LNMP的缓存前移(到达nginx前端层面)
OpenResty实现LNMP的缓存前移(到达nginx前端层面)

分析:
1.upstream属于handler,只是它不产生自己的内容,而是通过请求后端服务器得到的内容,所以才称为upstream(上游),请求并取得响应内容的整个过程已经被封装到nginx内部,所以upstream模块只需要开发若该回调函数,完成构造请求和解析响应等具体的工作,nginx将memcache缓存前移,客户端请求到来,先查看nginx缓存
2.所有请求都通过请求这个location来操作 memcache,memc-nginx-module存取memcache是基于http method语义的,
3.使用http的GET方法表示get、PUT方法表示set、这里我们将/memc设为internal表示只接受内部访问
4.不接收外部http请求,这是为了安全考虑,当然如果需要通过http协议开放外部访问,可以去掉internal然后使用deny和allow指令控制权限。比较重要的是memckey这个变量,它表示以什么作为key,这里我们直接使用Nginx内置的query_string来作为key,memcexptime5.30056. .phpmemc_exptime表示缓存失效时间,以秒记。 5.这里统一设为300(5分钟),在实际应用中可以根据具体情况为不同的内容设置不同的过期时间。 6.为“~ .phpmemce​xptime表示缓存失效时间,以秒记。5.这里统一设为300(5分钟),在实际应用中可以根据具体情况为不同的内容设置不同的过期时间。6.为“ .php”这个location配置了缓存,这表示所有以“.php”结尾的请求都会结果被缓存,当然这里只是示例需要,实际中一般不会这么配,而是为特定需要缓存的location配置缓存。

6.开启openresty服务并查看其是否开启

[root@server1 sbin]# ./nginx
[root@server1 sbin]# netstat -tnlp

OpenResty实现LNMP的缓存前移(到达nginx前端层面)

注意:
1.openresty中的服务./nginx开启或关闭服务只能在sbin目录下
2.nginx和./nginx是不同的,一个表示nginx,一个表示openresty,在开启服务或关闭服务时要特别注意,不然就开错了
3.nginx之前做过链接,所以在任何路径下都可以使用

[root@server1 conf]# cd ../sbin
[root@server1 sbin]# nginx -V
[root@server1 sbin]# ./nginx -V

OpenResty实现LNMP的缓存前移(到达nginx前端层面)

7.测试:在浏览器中输入网址,发现显示了OpenResty的相关页面(正确页面)
http://172.25.66.1/
OpenResty实现LNMP的缓存前移(到达nginx前端层面)

8.压力测试,可以发现,在memcache的缓存上再加一层缓存后,速度会大大提高,且出错率为0:

[root@server1 sbin]# ab -c 10 -n 5000 http://172.25.66.1/index.php
[root@server1 sbin]# ab -c 10 -n 5000 http://172.25.66.1/example.php

OpenResty实现LNMP的缓存前移(到达nginx前端层面)
OpenResty实现LNMP的缓存前移(到达nginx前端层面)
总结:
1.默认装在/usr/local下,不需要额外的参数
2.编译和安装和之前的不一样
3.编译的可能会比较慢,因为有很多第三方模块
4.其自身已经有nginx,所以需要把nginx关闭
5.只用ngnix做额外的服务器,现在呢需要接收请求后,将请求甩给模块(本机的11211端口),保持512个连接(不断开,single是单立模式,取消即可)
6.upstream表示添加上游服务
7.定义了正确的和错误的页面
8.从缓存中读取比从服务器中读取快

上一篇:openresty性能测试报告分析


下一篇:openresty中http请求body数据过大的处理方案