线上环境:openresty-1.9.7.3 模块版本ngx_lua-0.10.0
原因是有一个特殊请求uri,如下:
/Object.getPreview/hj-img/MjEzODI2MzgxNDc3OTIyMDM4NDIwMjk1NzI4MDA1MC5qcGc=/..%2f..%2f..%2f..%2f..%2f..%2f..%2f..%2f..%2f..%2f..%2f..%2fwindows/win.ini
使用了ngx.exec API跳转请求到别的location,内存疯涨后crash。
## 可复现最小化配置
location / {
content_by_lua_block {
return ngx.exec("/error_page/../windows/win.ini")
}
}
查看nginx日志有报unsafe URI错误,看了ngx_http_lua_ngx_exec的代码片段定位到如下代码:
if (ngx_http_parse_unsafe_uri(r, &uri, &args, &flags)
!= NGX_OK)
{
return NGX_HTTP_INTERNAL_SERVER_ERROR;
}
这个地方return 500 应该有问题的吧(vm的栈崩溃,还是别的问题呢?)
查看这个函数其他报错的地方都是调用的luaL_error API,是否应该这样使用呢?