Sublime Text只是编辑器,不运行Lua;resty.http连接异常需检查OpenResty环境配置:resolver未配置、lua_package_path路径错误、错误日志在nginx error.log而非Sublime控制台。

为什么resty.http在Sublime里“调试”不出连接异常
Sublime Text 本身不运行 Lua,更不执行 resty.http——它只是编辑器。所谓“调试连接异常”,实际是开发 OpenResty 网关脚本时,在本地改完 Lua 后 reload Nginx,发现 resty.http 报 failed to connect to upstream 或 timeout,但你却在 Sublime 里找不到任何可断点、可单步的地方。根本原因:错误不在编辑器里,而在 OpenResty 运行时环境配置中。
resolver 没配是第一漏点
OpenResty 默认不解析域名,resty.http 调用上游若用的是域名(比如 https://api.example.com),而 Nginx 配置里没写 resolver,就会直接报连接失败,和 Lua 代码逻辑无关。
- 必须在
http块或server块顶部显式声明:resolver 8.8.8.8 valid=30s; - 不要写在
location里——resolver不支持该作用域 - 如果内网环境,换成你 DNS 服务器地址(如
10.0.0.2),别硬套公网 DNS - 改完记得
nginx -t && nginx -s reload,否则不生效
构建系统能跑通 lua -v ≠ OpenResty 能加载 resty.http
你在 Sublime 里按 Ctrl+B 成功输出 Hello, Lua!,只说明系统 Lua 解释器通了;但 OpenResty 用的是自己的 LuaJIT + 自定义路径,resty.http 找不到,照样报 module 'resty.http' not found。
- 检查 Nginx 配置中是否设置了
lua_package_path,例如:lua_package_path "/usr/local/openresty/lualib/?.lua;;"; - 确认路径下真有
/usr/local/openresty/lualib/resty/http.lua(注意不是http/init.lua,老版本才用 init) - 如果用了
lua_code_cache off却仍加载旧模块,可能是文件系统缓存或 worker 进程未完全 reload,试nginx -s stop && nginx - 在
content_by_lua_block里加一行ngx.log(ngx.ERR, "resty.http ver:", require"resty.http"._VERSION),看 error.log 是否输出版本号
错误日志在哪看?别只盯着 Sublime 控制台
Sublime 的控制台(Ctrl+`)只显示插件 Python 日志,跟 OpenResty 的 Lua 运行完全无关。所有 resty.http 连接异常细节,都在 Nginx 的 error log 里。
- 先查
error_log配置位置:nginx -V 2>&1 | grep -o 'prefix=[^ ]*',然后拼出日志路径,通常是/usr/local/openresty/nginx/logs/error.log - 用
tail -f /path/to/error.log | grep http实时过滤 - 关键线索不止是 “connect failed”,还要留意 “DNS resolver timeout”、“no resolver defined”、“connection refused by upstream” —— 每种对应不同层级的问题
- 如果日志空空如也,检查
error_log级别是否设成了info或更高(error_log logs/error.log warn;会屏蔽 debug 级别)
真正卡住人的从来不是 Lua 语法,而是 resolver 没配、路径没对上、日志没盯准这三处。OpenResty 的网络调用链太长,从 DNS 解析、TCP 连接、SSL 握手到 HTTP 处理,每层都可能崩,而 Sublime 只负责让你把那行 local httpc = require"resty.http".new() 写对——剩下的,得靠 nginx -t、tail -f error.log 和 curl -v 交叉验证。


















