OpenResty从入门到实战
温铭
OpenResty软件基金会主席,《OpenResty 最佳实践》作者
立即订阅
4333 人已学习
课程目录
已完结 52 讲
0/4登录后,你可以任选4讲全文学习。
开篇词 (1讲)
开篇词 | OpenResty,为你打开高性能开发的大门
免费
入门篇 (14讲)
01 | 初探OpenResty的三大特性
02 | 如何写出你的“hello world”?
03 | 揪出隐藏在背后的那些子项目
04 | 如何管理第三方包?从包管理工具luarocks和opm说起
05 | [视频]opm项目导读
06 | OpenResty 中用到的 NGINX 知识
07 | 带你快速上手 Lua
08 | LuaJIT分支和标准Lua有什么不同?
09 | 为什么 lua-resty-core 性能更高一些?
10 | JIT编译器的死穴:为什么要避免使用 NYI ?
11 | 剖析Lua唯一的数据结构table和metatable特性
12 | 高手秘诀:识别Lua的独有概念和坑
13 | [视频]实战:基于FFI实现的lua-resty-lrucache
14 | 答疑(一):Lua 规则和 NGINX 配置文件产生冲突怎么办?
API篇 (11讲)
15 | OpenResty 和别的开发平台有什么不同?
16 | 秒杀大多数开发问题的两个利器:文档和测试案例
17 | 为什么能成为更好的Web服务器?动态处理请求和响应是关键
18 | worker间的通信法宝:最重要的数据结构之shared dict
19 | OpenResty 的核心和精髓:cosocket
20 | 超越 Web 服务器:特权进程和定时任务
21 | 带你玩转时间、正则表达式等常用API
22 | [视频]从一个安全漏洞说起,探寻API性能和安全的平衡
23 | [视频]导读lua-resty-requests:优秀的lua-resty-*是如何编写的?
24 | 实战:处理四层流量,实现Memcached Server
25 | 答疑(二):特权进程的权限到底是什么?
测试篇 (5讲)
26 | 代码贡献者的拦路虎:test::nginx 简介
27 | test::nginx 包罗万象的测试方法
28 | test::nginx 还可以这样用?
29 | 最容易失准的性能测试?你需要压测工具界的“悍马”wrk
30 | 答疑(三)如何搭建测试的网络结构?
性能优化篇 (16讲)
31 | 性能下降10倍的真凶:阻塞函数
32 | 让人又恨又爱的字符串操作
33 | 性能提升10倍的秘诀:必须用好 table
34 | 特别放送:OpenResty编码指南
35 | [视频]实际项目中的性能优化:ingress-nginx中的几个PR解读
36 | 盘点OpenResty的各种调试手段
37 | systemtap-toolkit和stapxx:如何用数据搞定“疑难杂症”?
38 | [视频]巧用wrk和火焰图,科学定位性能瓶颈
39 | 高性能的关键:shared dict 缓存和 lru 缓存
40 | 缓存与风暴并存,谁说缓存风暴不可避免?
41 | lua-resty-* 封装,让你远离多级缓存之痛
42 | 如何应对突发流量:漏桶和令牌桶的概念
43 | 灵活实现动态限流限速,其实没有那么难
44 | OpenResty 的杀手锏:动态
45 | 不得不提的能力外延:OpenResty常用的第三方库
46 | 答疑(四):共享字典的缓存是必须的吗?
API网关篇 (4讲)
47 | 微服务API网关搭建三步曲(一)
48 | 微服务API网关搭建三步曲(二)
49 | 微服务API网关搭建三步曲(三)
50 | 答疑(五):如何在工作中引入 OpenResty?
结束语 (1讲)
结束语 | 行百里者半九十
OpenResty从入门到实战
登录|注册

03 | 揪出隐藏在背后的那些子项目

温铭 2019-05-31
你好,我是温铭。
我们先来揭晓上一节最后留下的思考题,如何把 Lua 代码从 nginx.conf 里面抽取出来,保持代码的可读性和可维护性呢?
操作其实很简单。
我们先在 geektime 的工作目录下,创建一个名为 lua 的目录,专门用来存放代码:
$ mkdir lua
$ cat lua/hello.lua
ngx.say("hello, world")
然后修改 nginx.conf 的配置,把 content_by_lua_block 改为 content_by_lua_file:
pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
server {
listen 8080;
location / {
content_by_lua_file lua/hello.lua;
}
}
}
}
最后,重启 OpenResty 的服务就可以了:
$ sudo kill -HUP `cat logs/nginx.pid`
你可以使用 curl ,验证是否返回了预期的结果。至于后面 Lua 代码的变更,你就可以直接修改 hello.lua 这个文件,而不是 nginx.conf 了。
其实,在上面这个小例子里面,也有几个有趣的地方:
content_by_lua_file lua/hello.lua; 里面写的是相对路径,那么 OpenResty 是如何找到这个 Lua 文件的?
Lua 代码内容的变更,需要重启 OpenResty 服务才会生效,这样显然不方便调试,那么有没有什么即时生效的方法呢?
如何把 lua 代码所在的文件夹,加入到 OpenResty 的查找路径中呢?
这几个问题,我鼓励你先自己思考一下,它们都可以在官方文档里面找到答案。这也是为什么,我一直强调文档的重要性。
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《OpenResty从入门到实战》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(26)

  • oatlmy
    看了温大15年底的文章《OpenResty的现状、趋势、使用及学习方法》,对比在三年半后的这几篇文章中讲到的特性模块,真是太优秀了!

    作者回复: 加油:)

    2019-06-01
    4
  • 红鲤鱼与绿鲤鱼与驴baci
    sudo kill -HUP cat logs/nginx.pid
     代码 应该是
    sudo kill -HUP `cat logs/nginx.pid` 吧

    作者回复: 是的,多谢指正

    2019-05-31
    4
  • 石仔
    之前项目需要做个nginx为基础的api网关,我用了nginx + lua-nginx-module模块 模拟kong的编码结构做了一个半吊子的实践。当时的文档和生态都没有现在丰富,都是摸着石头过河,现在终于找到宝了,能让我系统化的窥探这架构了,非常感谢作者

    作者回复: 专栏最后也会搭建一个 api 网关:)

    2019-05-31
    4
  • Kone
    需要出一本书,OpenResty开发权威指南
    2019-05-31
    2
  • [root@localhost geektime]# sudo kill -HUP `cat logs/nginx.pid`
    [root@localhost geektime]# curl -i 127.0.0.1:8080
    HTTP/1.1 404 Not Found
    Server: openresty/1.15.8.1
    Date: Wed, 19 Jun 2019 14:41:34 GMT
    Content-Type: text/html
    Content-Length: 159
    Connection: keep-alive

    <html>
    <head><title>404 Not Found</title></head>
    <body>
    <center><h1>404 Not Found</h1></center>
    <hr><center>openresty/1.15.8.1</center>
    </body>
    </html>
    [root@localhost geektime]#
    为什么我运行出来是404??

    作者回复: 看看 error.log 的信息,是不是 lua 代码没有被找到?

    2019-06-19
    5
    1
  • 小飞哥 ‍超級會員
    为什么我openresty -v之后只有一条,我没有后面几行?

    作者回复: 大写的 V

    2019-06-14
    1
  • 业余草
    这是第3张了。但是我看到现在我还没有看懂这个名字的来历。就是现在有人问的话,我也是一脸懵逼啊。

    作者回复: OpenResty 的名字来历?
    OpenResty 最早是雅虎中国的一个公司项目,起步于 2007 年 10 月。当时兴起了 OpenAPI 的热潮,于是春哥想做一个类似的东西,可以支持各种 Web Service 的需求。
    Open 取自 OpenAPI, Resty 取自 rest API。

    2019-06-05
    1
  • 初音未来
    老师你好,lua_code_cache 打开之后怎么解决lua代码更新及时生效的问题呢

    作者回复: 后面会讲到代码热更新

    2019-06-05
    1
  • Panda
    分析项目结构 如庖丁解牛
    2019-06-01
    1
  • 王金全
    我在macOS下,按照官方文档安装,按照例子执行,logs/nginx.pid找不到,能找到/usr/local/var/run/openresty.pid文件,不知道是不是有问题?

    作者回复: nginx.conf 中是否有 pid 的设置呢?

    2019-06-01
    1
  • 写点啥呢
    请问老师,lua_package_path似乎配置的是lua依赖的搜索路径,对于content_by_lua_file, 我试验发现它只在prefix下去根据指令提供的文件相对路径去搜索,而不会到lua_package_path下搜索,不知道我的理解对不对?

    作者回复: 是的,你的理解是对的

    2019-08-29
    1
  • ZeroIce
    初学者对于这些模块有什么作用,听起来一脸懵

    作者回复: 慢慢来,现有一个印象。用到的话才能理解深入

    2019-08-03
  • 王金全
    lua_package_path 老师能否给个demo,自己配的不生效

    作者回复: 可以看下这个例子:https://github.com/iresty/apisix/blob/master/conf/nginx.conf#L22

    2019-06-15
  • 大裤衩子
    Openresty可执行文件是nginx的一个软连接?这样的话为什么不直接基于本地已经装好的nginx呢?

    作者回复: 因为这里的 nginx 并不等同于官方的 nginx,而是把很多 c 模块打包重新生成的。
    所以,为了和你本地已经安装好的 nginx 做区分,就做了一个软链接,名字是 OpenResty

    2019-06-05
  • 我是张鹏
    为什么通过yum安装openresty 后,bin目录下没有restydoc

    作者回复: yum 下需要单独安装:sudo yum install openresty-doc

    2019-06-05
  • mrmsl
    `restydoc` 太赞了

    作者回复: yep

    2019-06-03
    1
  • 王金全
    指定pid就可以了,02节例子中没有指定pid

    作者回复: 是的,指定 pid 就行

    2019-06-03
  • howei
    配置文件有个权限问题,如果不指定user 用户默认是nobody 无法执行lua 文件就会报错[error] 31322#31322: *1 failed to load external Lua file "/root/geektime/lua/hello.lua": cannot open /root/geektime/lua/hello.lua: Permission denied, client: 127.0.0.1, server: ,

    作者回复: 可以更换个目录来存放 lua 代码,或者指定 user

    2019-06-02
  • 我也曾是少年
    老师,我才接触opnrestry,有没有什么书籍,系统的学习下,烦请老师推介下

    作者回复: 这方面书不多,建议从官方文档和本专栏入手

    2019-06-02
  • 老师你好,我发现在geektime文件中有很多以_temp结尾的文件夹,这些文件夹有什么作用吗?
    2019-06-01
收起评论
26
返回
顶部