在Nginx的Lua中实现字符串base64编码出现报错该如何解决?
问题排查与修复
核心错误点
- 语法混淆:
set_by_lua指令后单引号包裹的内容为纯Lua代码,错误地在Lua代码块中使用了Nginx原生配置的set $变量名语法,Lua语法不识别set指令和$变量前缀,这就是报错提示'=' expected near '$'的根因。 - 字符串拼接错误:Lua语言中字符串拼接运算符为
..,不是+,使用+会被识别为数值加法运算,后续运行也会抛出类型错误。
修正后代码
set_by_lua $base64_credential ' local es_username = os.getenv("ES_USERNAME") local es_pwd = os.getenv("ES_PWD") return ngx.encode_base64(es_username .. ":" .. es_pwd) ';
代码说明
- Lua中定义局部变量使用
local关键字直接赋值,无需额外的set指令,也不需要给变量添加$前缀 - 两个变量拼接使用
..运算符完成字符串拼接 - 环境变量读取逻辑保持不变,最终返回base64编码结果赋值给Nginx变量
$base64_credential
内容的提问来源于stack exchange,提问作者Joey Yi Zhao
相关产品推荐
相关产品推荐

