一个典型的互联网系统或云计算系统大量使用到关系型数据库、非关系型数据库、缓存、内存数据库等,以提供高速、高扩展性的服务,通常组成集群。以前协调这些系统开发是非常麻烦的,现在OpenResty提供的Nginx+Lua+Module的机制,使我们可以实现快速开发,让开发者着眼于应用,使用同一语言开发。在这种架构的应用领域里,其效率是其他语言和技术不能比拟的。
本章介绍OpenResty的组成及安装、配置方法。
OpenResty是一个基于Nginx与Lua的高性能Web平台,集成了大量精良的Lua库、第三方模块以及大多数的依赖项,用于方便地搭建能够处理超高并发、扩展性极高的动态Web应用、Web服务和动态网关。
OpenResty通过汇聚各种设计精良的Nginx模块(主要由OpenResty团队自主开发),从而将Nginx有效地变成一个强大的通用Web应用平台。这样,Web开发人员和系统工程师可以使用Lua脚本语言调动Nginx支持的各种C以及Lua模块,快速构造出足以胜任10K乃至1000K以上单机并发连接的高性能Web应用系统。
OpenResty致力于将服务器端应用完全运行于Nginx服务器中,充分利用Nginx的事件模型进行非阻塞I/O通信,不仅仅和HTTP客户端间的网络通信是非阻塞的,与MySQL、PostgreSQL、Memcached以及Redis等众多后端之间的网络通信也是非阻塞的。
因为OpenResty软件包的维护者也是其中打包的许多Nginx模块的作者,所以Open-Resty可以确保所包含的所有组件可以可靠地协同工作。
这些库都需要分别安装和配置,通过OpenResty可以把这些库和Nginx打包到一起,让研发者或使用者直接使用,从而省去配置和匹配的麻烦,所以我们推荐使用OpenResty进行Nginx下Lua开发环境的搭建。
所有组件均可以方便地被激活或禁止。绝大部分组件已内置在OpenResty安装包中,但也有一部分不包含在内。
上面4个模块默认并未启用,需要分别加入--with-lua51、--with-http_drizzle_module、--with-http_postgres_module和--with-http_iconv_module编译选项开启它们。
其余各组件编译选项,可对照OpenResty安装说明,按需启用。非必要时,不推荐启用标准Lua 5.1解释器,而应尽量使用LuaJIT组件。
在1.5.8.1版本之前,OpenResty默认使用标准Lua 5.1解释器。所以对于老版本,需要显式地加入--with-luajit编译选项(1.5.8.1以后的版本已默认开启)来启用LuaJIT组件。
本章介绍在CentOS 6.x上使用yum安装OpenResty方法,其他平台的安装方法请到官方网站( https://openresty.org/cn/installation.html )查看:
对于下列Linux发行版的种类和版本号,OpenResty提供官方的预编译包。
1)RHEL/CentOS。版本号支持的体系结构:
5. x x86_64,i386
6. x x86_64,i386
7. x x86_64
2)Fedora。版本号支持的体系结构:
23 x86_64,i386
24 x86_64,i386
25 x86_64,i386
26 x86_64,i386
在CentOS上使用yum安装OpenResty,需要首先安装资源库,这样就可以方便地安装OpenResty,以后也可以更新(通过yum update命令)。
创建一个名为/etc/yum.repos.d/OpenResty.repo的文件,内容如下:
[openresty] name=Official OpenResty Repository baseurl=https://copr-be.cloud.fedoraproject.org/results/openresty/openresty/epel-$releasever-$basearch/ skip_if_unavailable=True gpgcheck=1 gpgkey=https://copr-be.cloud.fedoraproject.org/results/openresty/openresty/pubkey.gpg enabled=1 enabled_metadata=1
也可以直接运行下面命令添加仓库:
sudo yum-config-manager --add-repo https://openresty.org/yum/centos/OpenResty.repo
国内用户可以把baseurl改成下面的链接,速度会更快:
baseurl=https://openresty.org/yum/openresty/openresty/epel-$releasever-$basearch/
或者运行下面命令直接添加仓库:
sudo yum-config-manager --add-repo https://openresty.org/yum/cn/centos/OpenResty.repo
使用下面命令列出资源库中所有的OpenResty包:
sudo yum --disablerepo="*" --enablerepo="openresty" list available
使用下面命令进行安装:
sudo yum install openresty
使用yum安装OpenResty可能会因为缺少GeoIP库失败,所以需要先运行下面命令安装GeoIP:
yum install GeoIP-devel
GeoIP库的安装可能会因为仓库里没有Extra库而失败,所以需要首先添加Extra库:
yum install epel-release
运行下面命令启动Nginx:
/usr/local/openresty/nginx/sbin/nginx -p /usr/local/openresty/nginx/
在浏览器里输入 http://127.0.0.1 (或主机IP),看到“Welcome to OpenResty!”表示已经启动成功。
可以进一步修改/usr/local/openresty/nginx/conf/nginx.conf,测试Lua是否正常工作,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 ' ngx.say("<p>hello, world</p>") '; } } }
然后运行下面命令重载配置文件:
/usr/local/openresty/nginx/sbin/nginx -p /usr/local/openresty/nginx/ -s reload
重载之前可以先测试一下配置文件的正确性:
/usr/local/openresty/nginx/sbin/nginx -p /usr/local/openresty/nginx/ -t
在浏览器里输入 http://127.0.0.1:8080 ,如果看到了“hello world”就表示可以正常工作了。
也可以使用CURL工具测试:
curl http://localhost:8080/ <p>hello, world</p>
OpenRestry安装成功后,包里的Nginx可以部署多个实例,可以实例化多个不同的服务:或用于对外提供服务,或用于不同的开发任务,或用于学习。
只需要把OpenRestry中的Nginx目录复制一份就可以启动不同的实例:
cp -r /usr/local/openrestry/nginx /usr/local/openrestry/nginx_9090
然后修改nginx_9090/conf/nginx.conf,把端口从8080修改为9090,把“hello world”修改为“hello world2”,修改完成后启动实例。
/usr/local/openrestry/nginx_9090/sbin/nginx -p /usr/local/openrestry/nginx_9090/
在浏览器里输入 http://127.0.0.1:9090 ,可以得到:
hello world2
表示新实例启动成功。
本章介绍了OpenResty应用,并介绍了OpenResty的组成、安装方法;另外,为了方便应用,介绍了在OpenResty下多Nginx实例的方法。OpenResty是一个流行的Nginx下Lua开发解决方案,使用非常广泛。通过本章的介绍,读者可以在后续的学习和工作中掌握OpenResty的使用方法,感受其带来的便利性。