购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

第3章
OpenResty

一个典型的互联网系统或云计算系统大量使用到关系型数据库、非关系型数据库、缓存、内存数据库等,以提供高速、高扩展性的服务,通常组成集群。以前协调这些系统开发是非常麻烦的,现在OpenResty提供的Nginx+Lua+Module的机制,使我们可以实现快速开发,让开发者着眼于应用,使用同一语言开发。在这种架构的应用领域里,其效率是其他语言和技术不能比拟的。

本章介绍OpenResty的组成及安装、配置方法。

3.1 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开发环境的搭建。

3.2 OpenResty的组成

所有组件均可以方便地被激活或禁止。绝大部分组件已内置在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组件。

3.3 OpenResty的安装

本章介绍在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

1. 添加资源库

在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
2. 列出所有包

使用下面命令列出资源库中所有的OpenResty包:

sudo yum --disablerepo="*" --enablerepo="openresty" list available
3. 安装

使用下面命令进行安装:

sudo yum install openresty

使用yum安装OpenResty可能会因为缺少GeoIP库失败,所以需要先运行下面命令安装GeoIP:

yum install GeoIP-devel

GeoIP库的安装可能会因为仓库里没有Extra库而失败,所以需要首先添加Extra库:

yum install epel-release
4. 测试

运行下面命令启动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>

3.4 Nginx多实例

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

表示新实例启动成功。

3.5 小结

本章介绍了OpenResty应用,并介绍了OpenResty的组成、安装方法;另外,为了方便应用,介绍了在OpenResty下多Nginx实例的方法。OpenResty是一个流行的Nginx下Lua开发解决方案,使用非常广泛。通过本章的介绍,读者可以在后续的学习和工作中掌握OpenResty的使用方法,感受其带来的便利性。 tWu9K5N25CV7UH56bgxtwsPrf9b4tfD8scwbUYjMCF1GhTzBdNTon9XOdeP3xHBz

点击中间区域
呼出菜单
上一章
目录
下一章
×