一、openresty介绍
- OpenResty(也称为 ngx_openresty)是一个全功能的 Web 应用服务器。它打包了标准的 Nginx 核心,很多的常用的第三方模块,以及它们的大多数依赖项。
- 通过揉和众多设计良好的 Nginx 模块,OpenResty 有效地把 Nginx 服务器转变为一个强大的 Web 应用服务器,基于它开发人员可以使用 Lua 编程语言对 Nginx 核心以及现有的各种 Nginx C 模块进行脚本编程,构建出可以处理一万以上并发请求的极端高性能的 Web 应用。
- openresty功能:(1)根据lua脚本,可以对请求和响应进行改造(使用lua控制请求响应);(2)也可以做虚拟主机、反向代理、缓存,如果只是纯虚拟主机或者反向代理还是推荐用nginx;(3)web服务器。
- 简而言之,openresty其实就是对Nginx的又一次封装(个人理解),它集成了Nginx核心和常用模块,再基于lua这个脚本语言,让开发者对Nginx的功能扩展和定制不再困难。
二、nginx高速缓存
- 传统的缓存策略如下图所示,会容易造成nginx堵塞,因为处理请求都交给了PHP处理,进入了PHP的生命周期;
- 使用memc-nginx和srcache-nginx模块可以构建高效透明的缓存机制。高速的缓存策略如下图所示,请求处理都是nginx自己处理,Nginx可以跳过通过fastcgi和PHP通信的过程,直接从memcache中获取数据并返回;
三、openresty配置
1. 源码编译安装
首先从官网下载源码包:https://openresty.org/cn/download.html
[root@servera ~]# cd /root/Download/
[root@servera Download]# ls
openresty-1.17.8.2.tar.gz
[root@servera Download]# tar zxf openresty-1.17.8.2.tar.gz
[root@servera Download]# cd openresty-1.17.8.2/
[root@servera openresty-1.17.8.2]# ./configure
[root@servera openresty-1.17.8.2]# gmake
[root@servera openresty-1.17.8.2]# gmake install
2. 配置openresty
配置前提:要确保服务器上安装了memcached服务并开启服务,并且如果安装了nginx服务,要把nginx服务关闭,因为我们要使用openresty中的nginx模块实现。
(1)编辑openresty里面的nginx的配置文件:
[root@servera local]# cd /usr/local/openresty/
[root@servera openresty]# ls
bin COPYRIGHT luajit lualib nginx pod resty.index site
[root@servera openresty]# cd nginx/
[root@servera nginx]# ls
client_body_temp conf fastcgi_temp html logs proxy_temp sbin scgi_temp uwsgi_temp
[root@servera nginx]# vim conf/nginx.conf //在默认基础上添加以下内容
http {
upstream memcache {
server 127.0.0.1:11211; //定义添加一个负载均衡器,11211为memcache默认端口
keepalive 512;
}
server {
location /memc { //调用负载均衡器
internal; //表示只接受内部访问
memc_connect_timeout 100ms; //相应的超时时间
memc_send_timeout 100ms;
memc_read_timeout 100ms;
set $memc_key $query_string; //键值对的方式经行存储,$memc_key变量,它表示以什么作为key,这里使用内置的$query_string。
set $memc_exptime 300; //表示缓存失效时间五分钟,在实际应用中可以根据具体情况为不同的内容设置不同的过期时间。
memc_pass memcache;
}
location ~ \.php$ {
set $key $uri$args; //定义两个处理器,确定调用逻辑
srcache_fetch GET /memc $key; //输入拦截处理器 GET返回数据
srcache_store PUT /memc $key; //输出拦截控制器 put存入memcache
root html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
include fastcgi_params;
}
}
}
当所请求的uri以“.php"结尾时,首先到memcache中查询有没有以$uri$args为key的数据,如果有则直接返回;
否则,执行location的逻辑,如果返回的http状态码为200,则在输出前以$uri$args为key,将输入结果存入memcache。
[root@servera nginx]# /usr/local/openresty/nginx/sbin/nginx -t 检测语法
[root@servera nginx]# /usr/local/openresty/nginx/sbin/nginx //绝对路径开启
[root@servera nginx]# /usr/local/openresty/nginx/sbin/nginx -s reload //重载
(2)编辑php测试页:
[root@servera html]# pwd
/usr/local/openresty/nginx/html
[root@servera html]# vim index.php
<?php
phpinfo()
?>
(3)进行压力测试:
[root@workstation ~]# ab -c 1 -n 20000 http://192.168.1.136/index.php
(4)查看命中率:
[root@servera nginx]# cd /root/Download/memcache-4.0.5.2/
[root@servera memcache-4.0.5.2]# cp memcache.php /usr/local/openresty/nginx/html/
[root@servera memcache-4.0.5.2]# cd /usr/local/openresty/nginx/html/
[root@servera html]# vim memcache.php
$MEMCACHE_SERVERS[] = '127.0.0.1:11211'; //添加监控主机,此处只监控本机
#$MEMCACHE_SERVERS[] = 'mymemcache-server2:11211'; // add more as an array
[root@servera html]# /usr/local/openresty/nginx/sbin/nginx -s reload