OpenResty 之安装测试
- 2019 年 11 月 28 日
- 筆記
OpenResty 之前一直比较关注,后来在工作中也有幸简单的使用过,稳定性和易用性给了我深刻的印象。
有时回想起曾经接触过很多有趣的项目和技术,但大部分都浮于表面,很多都是给自己找借口, 想之后有时间再深入研究分享下,却由于自己的懒惰大部分都不了了之。
要不再给我一次机会, 让我们从头开始一起加油?
mac 系统快速安装
brew install openresty/brew/openresty
resty 命令
resty 命令快速测试
resty -e "ngx.say('hello world')" output: hello world
resty命令背后的操作
#查看 openstry 进程 ps -ef|grep openrestry output: /usr/local/Cellar/openresty/1.15.8.2/nginx/sbin/nginx -p /tmp/resty_MnSJsgRCEI/ -c conf/nginx.conf
“我们看到有个 nginx 启动进程, 其实内部执行了 nginx 命令, -p 指定了一个新的临时目录作为前缀路径. 当进程执行完毕后自动销毁
我们在代码中加入 sleep 查看临时目录里面存了些什么
resty -e "os.execute('sleep '..12) ngx.say('hello world')"

编写项目
nginx.conf 配置中加入 lua 代码
events { worker_connections 1024; } http { server { listen 8080; location /test { content_by_lua ' ngx.say("hello, world") '; } } }
我们使用 openresty 命令启动项目
# 当前目录作为前缀工作目录启动 openresty -p `pwd` -c conf/nginx.conf # 重启 openresty -s reload
我们可以使用 openresty -h 具体的参数含义

“-p 的含义可简单理解为指定项目的工作目录, -c 指定 nginx 配置.
curl 请求测试
curl -i http://127.0.0.1:8080/test HTTP/1.1 200 OK Server: openresty/1.15.8.2 Date: Sun, 10 Nov 2019 14:53:14 GMT Content-Type: text/plain Transfer-Encoding: chunked Connection: keep-alive hello, world
content_by_lua_file
上面例子我们的 lua 代码和 nginx 配置耦合混用在一起, 这不是一个好的习惯.
下面我们通过调用 lua 脚本文件的方式来实现简单输出
nginx.conf
location /test { content_by_lua_file lua/test.lua; }
我们看到 content_by_lua_file 指定了相对目录下的 lua/test.lua 文件, 那具体 lua 绝对目录应该建在什么地方呢?
我们可以通过 restydoc 命令快速查看下 content_by_lua_file 的解释:

“通过上图我们看到了这个参数的语法和作用域, 还记得上面我们在启动服务的时候指定了 -p 参数, 工作目录前缀参数, 他会从这个目录下去找 lua目录下的 test.lua
如果我们想换成其他路径可以使用绝对路径
location /test { content_by_lua_file /Users/xxxx/Desktop/kong/lua/test.lua; }
继续看上图发现 content_by_lua_file 还支持第二个参数, 也可以这样使用
location /test { lua_code_cache off; content_by_lua_file test.lua /Users/wenba/Desktop/kong/lua; }
如何让你的 lua 代码即时生效
我们发现每次修改完 lua 代码,都需要重启 openresty, 如果我们在开发环境中, 如何充分发挥出脚本的开发高效率呢?
我们可以使用 lua_code_cache 指令, 将它设置为关闭即可
location /test { lua_code_cache off; content_by_lua_file lua/test.lua; }