06 | OpenResty 中用到的 NGINX 知识
06 | OpenResty 中用到的 NGINX 知识
讲述:温铭
时长10:01大小9.15M
NGINX 配置
MASTER-WORKER 模式
执行阶段
二进制热升级
课外延伸
写在最后
赞 10
提建议
精选留言(21)
- HelloBug2019-06-08温铭老师,你好。看了这篇文章之后,有下面这些疑问,希望老师答疑解惑下。 1.nginx和openresty有什么版本对应关系?记得前两个版本号是相同的。 2.为什么openresty的版本越来越小?是为了表达有些功能不支持了吗? 3.openresty可执行文件是nginx可执行文件的软链接,本能的以为openresty的热升级就是nginx的热升级,openresty的热升级和nginx的热升级不一样吗? 4.nginx热升级步骤没有涉及到外部程序,这里说的热升级中依赖的外部程序是指什么呢? 5.init_by_lua预先加载模块,在请求的其他阶段就可以直接使用这个模块,这个模块此时相当于是全局变量?还有一个问题是,如果在一个请求的多个阶段重复加载某一模块,这个模块会重复加载,还是只加载一次? 6.nginx修改配置文件,需要重新加载;nginx又支持热部署,请问这里的本末倒置怎么个说法?:)展开
作者回复: 1. OpenResty 的版本号是跟着它所使用的 Nginx 来确定的,比如 OpenResty 的 1.15.8.1,使用的 Nginx 版本号就是 1.15.8,最后的 1 是 OpenResty 自己的小版本号; 2. OpenResty 的版本号是往上增加的,不太清楚越来越小是怎么看出来的呢? 3. 热升级步骤和 nginx 一致; 4. 这里的外部程序是指:你需要一个 nginx 之外的进程给 nginx 本身发送信号量,nginx 才能升级;而 OpenResty 有了特权进程之后,可以自己给master 进程发送信号量; 5. 相当于其他 worker 进程都已经加载过这个模块,不用重复加载;一个模块只会被加载一次,不管有多少请求来访问,和阶段无关; 6. 二进制热升级是很少用到的功能,但 nginx 支持了热部署;修改配置文件是常用的功能,但却需要 reload 才能生效。没有把常用的功能做到极致,所以我觉得有些本末倒置。
15 - TomShine2019-06-10OpenResty 的作者NGINX 教程可以在这个连接 https://openresty.net.cn/agentzh-nginx-guide.html 进行学习
作者回复: 👍
9 - John2019-06-07我正在做一个二次验证的风控,请教一个问题,op如何将一整个request序列化存储起来,并且在风控条件达到后,如滑动验证通过,再将其反序列化发送到上游服务?
作者回复: 感觉这个不用序列化存储,你可以在 access 阶段调用风控服务的 API 接口,把 request 内容传过去,等风控返回后,根据结果在决定是发送到上游,还是拒绝。 你可以看下本章节 OpenResty 11 个 `*_by_lua` 指令的图片。
共 2 条评论6 - emen2019-06-27温铭老师,您好。学习了这篇文章之后,对body_filter_by_lua存在疑问请老师解惑。拟想根据文中案例对返回报文进行加密,但发现body_filter_by_lua存在执行多次的情况,遇到此情况应如何处理?
作者回复: body_filter_by_lua 执行多次是正常的,因为响应体可能是 chunked 返回的。所以,如果你要对响应体整体加密的话,就要改为一次性返回,而不是 chunked 模式。
共 2 条评论6 - 天天~2019-06-07njs 的意义感觉在部署的时候大幅度简化运维的步骤。njs 或者没有 luajit 的性能,但对比之下,比 lua 的生态环境好太多太多了,js 的生态和入门的容易。
作者回复: 没错,除了 njs,还有 PHP 嵌入 nginx 的尝试,这些语言的普及度和生态比 Lua 好很多。OpenResty 要加油
共 4 条评论6 - 徐永健2019-06-07ngx改配置不需要重启啊。。
作者回复: 需要 reload
共 2 条评论4 - lidashuang2020-08-16lua好处语言小巧,js优势是生态丰富2
- nicknick2019-11-29是信号(signal)不是信号量(semaphore)3
- 卡卡2019-11-07可能想吸引更多开发者,如果推广的好,node.js估计没戏了!2
- 宝仔2019-06-16apache和nginx都是多进程吧!只是apache有预先开启多少个进程或者动态fork进程
作者回复: 是的,多谢指正
3 - 普罗米修斯2019-07-01老师,openresty可以只升级nginx吗,可以不升级openresty吧……如果有,请指点下,生产环境有漏洞需要我修复下,谢谢了🙏
作者回复: 最好不要怎么做,这样无法和开源的主线保持一致,而且不能保证所有功能是正常的。最好的方法是给官方提交 PR,合并到主线去。
2 - nanyun2019-06-16你好,一直在关注resty,想问一下nginx后面出的unit,和它对比有哪些优劣点。
作者回复: OpenResty 可以无痛的替换 nginx,同时提供了 Lua API 来做动态的控制,这个是它最大的优势。nginx unit 是为了微服务出的产品,两个感觉不在一个层面上。
2 - 冲野2019-06-13问个低级的问题:热升级的时候,已经建立的连接是继续保持吗?是不是因此才保留旧进程?
作者回复: 保留旧的 master 进程是为了方便回滚。旧的 worker 进程是不保留的。
2 - life_牛2019-06-10我服务是https的,做反向代理的话,需要在nginx的https模块吧?如果不在nginx 里面配置https证书如何用https的请求访问服务?
作者回复: 你想实现类似 cloudflare 的 Keyless 功能?不在 Nginx 中配置的话,就要增加代码逻辑,并在远端服务器配置,不然 https 握手就失败了。
1 - HelloBug2019-06-09关于看出openresty 版本越来越小 文中有这样一段话: 比如 NGINX 在 2018 年 3 月份发布的 1.13.10 版本中,增加了对 gRPC 的支持,但 OpenResty 在 2019 年 4 月份时的最新版本是 1.13.6.2,由此可以推断 OpenResty 还不支持 gRPC。 我把1.13.10看成了是openresty的版本了😂 不好意思,麻烦老师了~展开2
- 叫我图图就可以了2019-06-09好像有点小错误,apache才是那个多进程的。
作者回复: 多谢指正
1 - mrmsl2019-06-08Nginx NJS 几乎就要变得跟 OpenResty 几乎一样啦!
作者回复: 至少方向是对的
1 - 石仔2019-06-07js有大批的语法熟悉用户,只要能力够能就能大量实践
作者回复: 百花齐放
1 - 高燕军2022-08-07 来自江苏加解密的那个例子,有一点像nodejs的web框架express中的中间件模式1
- Kinga2019-06-22二进制热升级和配置文件reload更新,都需要给master发信号,不理解本末倒置的说法。作者是希望nginx能够自动检查到配置文件有变更,然后自动重新加载吗?
作者回复: 我的意思是配置文件的修改是一个更频繁的操作,而二进制热升级并不频繁。应该优先实现前者的热更新。
1