目录
OpenResty简介
OpenResty安装
OpenResty工作原理
Nginx和lua的简介
OpenResty是一个基于Linux的可伸缩的web平台,提供了很多高质量的第三模块。
OpenResty是一个强大的Web应用服务器,Web开发人员可以使用Lua脚本语言调动Nginx支持的各种C以及Lua模块,更主要的是在性能方面,OpenResty可以快速构造出足以胜任10K以上并发连接响应的超高性能Web应用系统。
OpenResty依赖库有:Perl5.6.1+,libreadline,libpcre,libssl
先安装好这些依赖库(基于Centos系统):
yum install readline-devel pcre-devel openssl-devel
接下我们可以在官方下载最新的 OpenResty 源码包并解压编译安装:
wget https://openresty.org/download/ngx_openresty-1.9.7.1.tar.gz # 下载
tar xzvf ngx_openresty-1.9.7.1.tar.gz # 解压
cd ngx_openresty-1.9.7.1/
./configure
make
make install
默认情况下程序被安装到/usr/local/openresty目录,可以使用./configure –help查看更多的配置选项。
安装完写一个实例
首先创建一个工作目录:
mkdir /home/www
cd /home/www/
mkdir logs/ conf/
其中logs用于存放日志,conf用于存放配置文件
接着我们在conf目录下创建一个nginx.conf文件。如下:
worker_processes 1;
error_log logs/error.log;
events {
worker_connections 1024;
}
http {
server {
listen 9000;
location / {
default_type text/html;
content_by_lua '
ngx.say("Hello, World!
")
';
}
}
}
启动openresty
默认情况下 openresty 安装在 /usr/local/openresty 目录中,启动命令为:
cd /home/www
/usr/local/openresty/nginx/sbin/nginx -p `pwd`/ -c conf/nginx.conf
实例:
如果没有任何输出,说明启动成功,-p 指定我们的项目目录,-c 指定配置文件。
接下来我们可以使用 curl 来测试是否能够正常运行:
curl http://localhost:9000/
输出结果:
Hello,world
然后运行完再通过浏览器进行访问一下:
如果浏览器访问不了,可能是防火墙问题
发现centos的防火墙改成了firewall,不再叫iptables,开放端口方法如下:
firewall-cmd --zone=public --add-port=80/tcp –permanent
然后再进行重启防火墙:
systemctl stop firewalld.service
systemctl start firewalld.service
再次刷新访问就可以了
若后续进程端口被占用可参考此文档进行解决:
https://blog.csdn.net/yufeng_lai/article/details/88819981
OpenResty又被称为ngx_openresty,是基于Nginx的核心Web应用程序服务器
OpenResty是基于Nginx和Lua的高性能Web平台,OpenResty通过汇聚各种设计精良的Nginx模块,从而将Nginx有效地变成一个强大的通用Web应用平台
OpenResty的目标是让Web服务直接运行在Nginx服务内部,充分利用Nginx的非堵塞I/O模型,不仅对HTTP客户端请求,甚至对远程后端DB都进行一系列的高性能响应。
OpenResty借助于Nginx的事件驱动模型和非堵塞IO,以实现高性能的Web应用程序
OpenResty使我们可以借助于Nginx的异步非阻塞达到使用Lua异步并发访问后端DB等服务
OpenResty使用ngx.location.capture_multi
极大地减少浏览器的HTTP连接数量,可以异步并发的访问后台接口
OpenResty运行原理
Nginx采用的是master-worker模型,也就是一个master进程管理多个worker进程,基本的时间处理都放在worker进程中,master进程负责全局初始化以及对worker进行的管理。
OpenResty中,每个worker进程使用一个LuaVM,当请求被分配到worker时,将在这个LuaVM中创建一个coroutine协程,协程之间数据隔离,每个协程都具有独立的全局变量。
OpenResty工作原理
OpenResty处理请求流程
Nginx会把一个请求分成不同阶段,第三方模块可以根据自己的行为,挂在到不同阶段中以达到自身目的。OpenResty采用了同样的特性,不同阶段有着不同的处理行为。
Nginx:
比apache占用更少的内存及资源
抗并发nginx处理请求异步非阻塞而apache则阻塞型高并发下nginx能保持低资源低消耗高性能
高度模块化设计编写模块相对简单
对于每个worker进程来说,独立的进程,不需要加锁,所以省掉了锁带来的开销,同时在编程以及问题查找时,也会方便很多。其次,采用独立的进程,可以让互相之间不会影响,一个进程退出后,其它进程还在工作,服务不会中断,master进程则很快启动新的worker进程。当然,worker进程的异常退出,肯定是程序有bug了,异常退出,会导致当前worker上的所有请求失败,不过不会影响到所有请求,所以降低风险。
Nginx是采用异步非阻塞的方式去处理请求的,什么是异步非阻塞呢?其实就是当一个线程调用出现等待的io之类的情况时,而不是阻塞在这里,而是去处理别的事情,等io准备好了,然后再去执行,具体的我就不在这里和大家描述了
lua
Lua脚本可以很容易的被C/C++代码调用,也可以反过来调用C/C++的函数,这使得Lua在应用程序中可以被广泛应用。不仅仅作为扩展脚本,也可以作为普通的配置文件,代替XML,Ini等文件格式,并且更容易理解和维护。
Lua由标准C编写而成,代码简洁优美,几乎在所有操作系统和平台上都可以编译,运行。一个完整的Lua解释器不过200k,在目前所有脚本引擎中,Lua的速度是最快的。这一切都决定了Lua是作为嵌入式脚本的最佳选择。