OpenResty(又称:ngx_openresty) 是一个基于 Nginx
与 Lua 的高性能可伸缩的 Web 平台,由中国人章亦春发起,它打包了标准的 Nginx 核心,很多的常用的第三方模块,以及它们的大多数依赖项。他基于其 OpenResty® 开源项目打造的高科技企业 OpenResty Inc. 位于美国硅谷中心。其主打的两个产品 OpenResty XRay(利用动态追踪技术的非侵入式的故障剖析和排除工具)和 OpenResty Edge(最适合微服务和分布式流量的全能型网关软件),广受全球众多上市及大型企业青睐。
通过揉和众多设计良好的 Nginx 模块,OpenResty 有效地把 Nginx 服务器转变为一个强大的 Web 应用服务器,基于它开发人员可以使用 Lua 编程语言对 Nginx 核心以及现有的各种 Nginx C 模块进行脚本编程,构建出可以处理一万以上并发请求的极端高性能的 Web 应用。
OpenResty 致力于将你的服务器端应用完全运行于 Nginx 服务器中,充分利用 Nginx 的事件模型来进行非阻塞 I/O 通信。不仅仅是和 HTTP 客户端间的网络通信是非阻塞的,与MySQL、PostgreSQL、Memcached 以及 Redis 等众多远方后端之间的网络通信也是非阻塞的。
360,UPYUN,阿里云,新浪,腾讯网,去哪儿网,酷狗音乐等都是 OpenResty 的深度用户。
这是第二代的 OpenResty,一般称之为 ngx_openresty,以便和第一代基于 Perl 和 Haskell 实现的 OpenResty 加以区别。章亦春和他的同事王晓哲一起设计了第二代的 OpenResty。在王晓哲的提议下,选择基于 nginx 和 lua 进行开发。
为什么要取 OpenResty 这个名字呢?OpenResty 最早是顺应 OpenAPI 的潮流做的,所以 Open 取自“开放”之意,而Resty便是 REST 风格的意思。虽然后来也可以基于 ngx_openresty 实现任何形式的 web service 或者传统的 web 应用。
也就是说 Nginx 不再是一个简单的静态网页服务器,也不再是一个简单的反向代理了。第二代的 openresty 致力于通过一系列 nginx 模块,把nginx扩展为全功能的 web 应用服务器。
ngx_openresty 是用户驱动的项目,后来也有不少国内用户的参与,从 openresty.org 的点击量分布上看,国内和国外的点击量基本持平。
ngx_openresty 目前有两大应用目标:
- 通用目的的 web 应用服务器。在这个目标下,现有的 web 应用技术都可以算是和 OpenResty 或多或少有些类似,比如 Nodejs, PHP 等等。ngx_openresty 的性能(包括内存使用和 CPU 效率)算是最大的卖点之一。
- Nginx 的脚本扩展编程,用于构建灵活的 Web 应用网关和 Web 应用防火墙。有些类似的是 NetScaler。其优势在于 Lua 编程带来的巨大灵活性。
这里是OpenResty的官网,包括OpenResty的安装包下载,不同操作系统的安装说明等供查阅。
1,安装
OpenResty 依赖库有: perl 5.6.1+, libreadline, libpcre, libssl。
所以我们需要先安装好这些依赖库,也非常简单:
apt-get install libreadline-dev libpcre3-dev libssl-dev perl
如果你的系统是 Centos 或 RedHat 可以使用以下命令:
yum install readline-devel pcre-devel openssl-devel
接下来下载安装包并解压安装
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
默认, --prefix=/usr/local/openresty
程序会被安装到/usr/local/openresty目录,
您可以指定各种选项,比如:
./configure --prefix=/opt/openresty \
--with-luajit \
--without-http_redis2_module \
--with-http_iconv_module \
--with-http_postgres_module
试着使用 ./configure --help
查看更多的选项。
配置文件(./configure script)运行出错可以到 build/nginx-VERSION/objs/autoconf.err
找到。 VERSION
的地方必须与OpenResty版本号相对应, 比如 1.9.7.1
。
您也可以选择通过rpm包安装,官网安装链接如下
本次演示通过yum安装,安装步骤如下:
CentOS 8 或者更老版本
# add the yum repo:
wget https://openresty.org/package/centos/openresty.repo
sudo mv openresty.repo /etc/yum.repos.d/openresty.repo
# update the yum index:
sudo yum check-update
然后就可以像下面这样安装软件包,比如 openresty
:
sudo yum install -y openresty
如果你想安装命令行工具 resty
,那么可以像下面这样安装 openresty-resty
包:
sudo yum install -y openresty-resty
命令行工具 opm
在 openresty-opm
包里,而 restydoc
工具在 openresty-doc
包里头。
列出所有 openresty
仓库里头的软件包:
sudo yum --disablerepo="*" --enablerepo="openresty" list available
2,配置
默认OpenResty安装在 /usr/local/openresty/ 熟悉Nginx大家都知道与Nginx的文件目录类似。
2.1 创建配置文件和日志存放的目录
mkdir -p /opt/local/logs /opt/local/conf
2.2 在conf目录下创建nginx.conf,并编辑内容如下
worker_processes 1;
error_log logs/error.log;
events {
worker_connections 1024;
}
http {
server {
listen 8080;
location / {
default_type text/html;
content_by_lua_block {
ngx.say("<p>hello, world</p>")
}
}
}
}
2.3 导入环境变量
vim ~/.bashrc
PATH=/usr/local/openresty/nginx/sbin:$PATH
export PATH
source ~/.bashrc
3,启动服务
cd /opt/local/
nginx -p `pwd`/ -c conf/nginx.conf
4,测试
curl http://localhost:8080/
输出结果如下,也可以通过浏览器访问
<p>hello, world</p>
说明OpenResty启动成功!
5,补充
OpenResty公司提供了可以快速排查基于Lua程序CPU、内存、磁盘高IO的排查工具OpenResty XRay,可以线上进行程序性能分析。
这里是一个官网的示例:
线上快速定位 CPU 最热的 Lua 代码路径(使用 OpenResty XRay)
OpenResty XRay支持High CPU , High Disk IO, High Latency, High Memory, Low CPU等在线实时分析。
OpenResty基于Lua语言扩展,参考资料如下