OpenResty学习笔记01:认识OpenResty

一. 先挖个坑


 
本来只想着简单了解一下OpenResty,但在接触之后,发现确实太有意思了,为了不让自己半途而废,先发这第一篇学习笔记,算是给自己立个flag自勉一下。
本文所有关于OpenResty的描述都是根据本人的理解,一家之言,如果有哪位同行路过,并且对OpenResty有所了解,还望不吝指正!
 

二. 关于OpenResty的相关理解

 

  1. OpenResty并不是一个单独的开源产品,而是由一系列开源产品组成的一套服务端可编程平台(软件包);
  2. OpenResty的创始人叫章亦春(agentzh),真正的技术大神,目前在运营的公司官网:鸥锐软件
  3. OpenResty基于 NginxLuaJIT,核心是一个C模块:lua-nginx-module
  4. 在Nginx环境下单独安装了 lua-nginx-module 模块,并不等于在使用 OpenResty;
  5. 在OpenResty软件包内,包含了由OpenResty团队独立维护的 LuaJIT 分支,因为 LuaJIT 的创始人Mike Pall退休了(囧);
  6. 在OpenResty软件包内,还包含由OpenResty团队原创或独立维护的其他开源组件,目的是保证各模块(组件)的版本不会发生问题;
     

三. OpenResty的意义


 
要说OpenResty,就不得不从Nginx说起,在我所了解的业务范畴里,Nginx是目前最高效的Web服务器了。
既然Nginx已经这么优秀了,那还需要OpenResty闹哪样?
好问题,如果到目前为止你仍然认为Nginx足够优秀,功能也足够用,那么你确实暂时还不需要OpenResty。
反之如果你已经厌倦了 nginx.conf 中各种晦涩的指令和语法,或者希望能用一种更灵活的编程脚本来实现某些高级功能,就会发现OpenResty的出现恰到好处。
事实上OpenResty就是利用在Nginx的每个Worker中都引入一个 LuaJITVM 来实现这一切的。
相比Nginx独特的各种指令,Lua 看起来那么的赏心悦目,至于为啥是 Lua,而不是 JS 或者 Python,据说是因为性能更好。
但是Nginx官方并不这么认为,因为他们在2015年9月份推出了 NGINX JavaScriptnjs)模块,定位类似OpenResty,可以利用 JS 来对Nginx实现更复杂的扩展。
可惜的是 njs 并未采用Google的V8引擎,而是一个基于ECMAScript标准的定制化实现,对于一个WebCoder来说,非常期待 njs 的未来。
但在目前来看,Lua仍然是最好的选择,尽管它确实很小众。
可以说OpenResty是站了在巨人的肩膀上(Nginx + Lua),呈现出来的却不是简单的1+1的效果,更多惊喜等待着我去发现 😃
 

四. OpenResty适合做啥

 

  1. Web应用防火墙(WAF)
  2. 微应用API网关
  3. 网站集群访问控制
  4. 其他你想做的事
     

五. 环境安装


 

1. 安装依赖

 

yum -y install pcre-devel openssl-devel gcc curl

 

2. 下载OpenResty

 

cd /home/my
mkdir tools
cd tools
wget https://openresty.org/download/openresty-1.21.4.1.tar.gz

 
更多下载地址:http://openresty.org
官方推荐下载二进制版本,但作为学习的话,还是下载源码版更合适。
 

3. 解压缩

 

tar -xzvf openresty-1.21.4.1.tar.gz
cd openresty-1.21.4.1

 

4. 构建以及编译

 

./configure
make
make install

 
OpenResty默认将被安装到:/usr/local/openresty/
 
看一下安装完成之后的清单:

再继续查看一下 /usr/local/openresty/bin/ 目录里的清单:

可以看到,bin目录下的openresty是一个软连接,来自/usr/local/openresty/nginx/sbin/nginx
就是可以使用 openresty 来代替 nginx 命令。
 
为了以后操作方便,可以直接将目录 /usr/local/openresty/bin 添加到环境变量中:
 

vim /etc/profile

OPENRESTY_HOME=/usr/local/openresty
PATH=$PATH:$OPENRESTY_HOME/bin
export OPENRESTY_HOME PATH

source /etc/profile

 
最后再检查一下已安装的OpenResty版本:

openresty -V

 

六. HelloWorld


 

1. 最简单的HelloWorld

 

resty -e "ngx.say('hello world')"

 
在执行上面的语句之前,请确定已将目录 /usr/local/openresty/bin 添加到环境变量中。
以上语句执行完成后,会在控制台输出“hello world”,事实上 resty 命令在执行时会启动一个 nginx 进程,执行结束后,这个进程会自动关闭。
resty 作为OpenResty的 CLI,也被默认安装到了bin目录下。
OpenResty 的周边工具都是 Perl 编写的,这个 resty 也不例外。
resty 的功能很强大,想了解完整的列表,你可以查看 resty -h
 

2. 更正式的HelloWorld

 
先创建一个工作目录:

cd /home/my/work/hello

这个 hello 就是我们的第一个工作目录。
 
在这个目录中,再创建两个文件夹,分别存放配置文件 nginx.conf 和日志文件:

mkdir conf logs

 
为了可以保留每次测试的真实状态,我不想反复去修改默认的配置文件,而是创建一个新的 nginx.conf

vim conf/nginx.conf

 
然后输入以下初始化内容:

worker_processes  1;
error_log logs/error.log;
events {
    worker_connections 1024;
}
http {
    server {
        listen 8080;
        location /hello {
            default_type text/html;
            content_by_lua_block {
                ngx.say("<p>hello, world</p>")
            }
        }
    }
}

 
该配置文件中,将打开 8080 的监听端口,同时创建了一个名为 /hello 的服务。
下一步,启动OpenResty服务:
 

openresty -p `pwd`/ -c conf/nginx.conf

 
上面的命令中:
-p 参数将当前位置(/home/my/work/hello)设置为 nginx 的工作目录;
-c 参数将上面新建的配置文件指定为 nginx 的配置文件。
 
通过 curl 即可访问我们的第一个服务:curl localhost:8080/hello
当然也可以使用浏览器访问:localhost:8080/hello
 
最后关闭服务:

openresty -p `pwd`/ -c conf/nginx.conf -s quit

 
因为 openresty 是源自 nginx 的软连接,因此以上命令也可以用 nginx 替换 openresty,效果是一样的。
 
至此,我已经成功安装了 OpenResty,并且创建了第一个 hello world 测试服务。
下一步将尝试部署一个基于 OpenRestyWAF 模块。
 

七. 资源引用


 

  1. OpenResty中文官网
  2. OpenResty在GitHub主页
  3. 《OpenResty最佳实践》
  4. 鸥锐软件官网
     
posted @ 2023-04-26 17:06  网无忌  阅读(200)  评论(0编辑  收藏  举报