一 openresty中Lua与C代码交互
说明:该篇只是'粗略'的建立知识体系,后续在'深入学习C语言后'会进行'深入探讨'
题外话: nginx和openresty'各自'做各自的事情,尽量'不要冲突'
补充:
1) nginx与lua的配合最好,这与'lua的特性'有关
2) 目前与'js语言'的结合还有'欠缺','生态'还没建设起来
强调: 不是'所有的api'都可以出现在'所有'的指令中
++++++++++++ "分割线" ++++++++++++
深入学习openresty: 需要掌握'前置'知识
1) 'nginx'
2) lua、c、perl
3) 构建、开发、测试、部署
目的:为后面构建'waf'、'apigateway'打好基础
① lua FFI
1) openresty最'重要'的功能:
备注: 'lua代码'执行,实际上是通过'nginx的C函数'执行的
2) 而lua与nginx的C代码交互有'两种'方式
方式1: 'resty等'模块等都是'通过lua提供的ffi方式'与C代码交互 --> "常用"
3) 案例:以使用'lua-resty-string'模块的'resty.string'为例
② 系统级配置指令
1) lua_code_cache 仅仅针对'*_by_lua_file'文件是否cache,不能针对"block和''"
2) lua_package_path 用'lua'写的'lua外部库路径' --> ".lua文件"
3) lua_package_cpath 用'C'写的lua外部库路径 --> ".so"动态库文件
说明: 系统级的指令会影响'lua代码'的使用
++++++++++ "lua_code_cache off 生效的注意事项" ++++++++++
1) '调测'阶段,设置为'lua_code_cache off',修改代码后可以'实时'看到代码变化后的'效果'
备注: 生产采用'默认值 on'即可,否则'影响'性能
2) *.by_lua_file 引用的'lua文件',将'重新'加载
备注: 不会重新加载'*.by_lua_file file'中的'dofile'或'loadfile'加载的lua模块文件
ps: 可以将'dofile或loadfile'加载内容放到'init_by_lua*'或file中通过'require方式'加载
3) nginx.conf中'内联'编写的lua代码,除非'reload|restart',否则'不会'立即生效
形如: '*_by_lua'和'*_by_lua_lock'
③ 谈谈路径问题
1) '*_by_lua_file' 相对路径
备注: rpm包是相对'--prefix'指定的路径
++++++++++ "遗留的问题" ++++++++++
1) lua_package_path 与 'require'、'loadfile'、'dofile'关系
使用 require 函数加载模块时,会按照'lua_package_path'环境变量中设置的路径来搜索模块文件
2) package.path '和' lua_package_path关系?
备注:代码中通过 'package.path = package.path ..'形式'拼接' --> '动态改变'
lua_package_path lua_package_path lua_package_path
1) 'require'即在的模块'字符串'就会替换'对应的问号?'
2) $prefix 似乎'只能'用在'lua_package_path'中 --> 待'实验'
3) 探究';;'到底是'什么'?
4) 遗留: 如果在"shell环境设置 export LUA_PATH",然后启动'openresty',是否会引用?
说明: 'resty'只是openresty提供一个'小工具',不会加载'nginx.conf'配置文件
思考: init.lua通常用来'干什么'?
观察: 一个'奇怪'的现象
明确: 'LUA_PATH环境变量'会影响'resty'
遗留: require加载的模块中调用'shell'模块,涉及'LUA_PATH'环境变量,会影响后续模块查找吗?
④ ngx.config取得配置参数SDK
- ngx.config.subsystem
- ngx.config.debug
- ngx.config.prefix
- ngx.config.nginx_version
- ngx.config.nginx_configure
- ngx.config.ngx_lua_version
${prefix} --> openresty'特有的变量'
⑤ 答疑解惑
⑥ 扩展
1)nginx 'C函数'有'五类'返回值常量
备注:通常'用不到',lua代码'返回C函数'的数值'可能'用到
++++++++++ "innode"相关lnux 操作 ++++++++++
ll -i
find . -inum
df -i