一、概念讲解
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,memcexptime表示缓存失效时间,以秒记。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.从缓存中读取比从服务器中读取快