openresty 调试技巧

偶尔会因为业务需要,对 nginx http 请求做一些特定的处理,使用 openresty 可以办到很多使用 nginx 难以处理的问题。

但是,如果对 openresty 的调试如果不熟悉,遇到一些编码错误的时候,就很难定位问题,解决问题。

这里简单的整理几条技巧,通过他们可以比较容易的对 openresty 进行调试。

一、搭建 openresty 的环境

这部分参考 openresty 的编译说明操作即可。

二、配置 nginx.conf, 便于调试

  1. 打开错误输出:
    在 nginx 配置文件的顶部,添加:
error_log stderr debug;
  1. 关闭守护进程:
    在 nginx 配置文件的顶部,添加:
daemon off;
  1. 关闭 lua_code_cache:
    lua_code_cache 默认是开启的,在生产环境中也必须开启,这样能够提高 nginx 的运行效率,但是在开发环境,可以打开,这样,当你对 lua 脚本的内容进行改变的时候,无需重启 nginx, lua 脚本就能生效。

二、如何自定义输出 nginx 日志

在你的 lua 脚本中,你可能想对执行过程中对某个变量进行输出,此时,你可以使用 nginx.log() 方法。

nginx 的日志级别如下:

ngx.STDERR 标准输出
ngx.EMERG 紧急报错
ngx.ALERT 报警
ngx.CRIT 严重,系统故障, 触发运维告警系统
ngx.ERR 错误,业务不可恢复性错误
ngx.WARN 提醒, 业务中可忽略错误
ngx.NOTICE 提醒, 业务中比较重要信息
ngx.INFO 信息, 业务琐碎日志信息, 包含不同情况判断等
ngx.DEBUG 调试

示例:

ngx.log(ngx.ERR, “num:”, num)
ngx.log(ngx.INFO, ” string:”.. str)

三、调试 lua 函数

建议下载软件 ZeroBraneStudio , 对 lua 函数进行单独的调试。

四、需要熟悉 nginx 的常用变量

五、需要熟悉 nginx 的执行阶段

六、为了调试,你需要有一个启动 openresty 测试环境的脚本

#!/bin/bash

sudo /usr/local/opt/openresty/bin/openresty  -p  /data/www/nginx/dev/ -c conf/nginx.conf