微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

在这里插入图片描述


2.解压openresty源码包(在官网下载源码包)

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

在这里插入图片描述


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	

在这里插入图片描述


在这里插入图片描述


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	

在这里插入图片描述


注意:
/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

在这里插入图片描述


配置文件中的更改的内容如下:

  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         }

在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


在这里插入图片描述

分析:
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

在这里插入图片描述

注意:
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

在这里插入图片描述

7.测试:在浏览器中输入网址,发现显示了OpenResty的相关页面(正确页面)
http://172.25.66.1/

在这里插入图片描述

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

在这里插入图片描述


在这里插入图片描述


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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐