参考 https://github.com/openresty/lua-nginx-module 及其 OpenResty最佳实践 ,这里面包含上面部分API的翻译 ngx.location.capture Nginx 子请求是一种非常强有力的方式,它可以发起非阻塞的内部请求访问目标 location。目标 location 可以是配置文件中其他文件目录,或 任何 其他 nginx C 模块,包括 ngx_proxy 、 ngx_fastcgi 、 ngx_memc 、 ngx_postgres 、 ngx_drizzle ,甚至 ngx_lua 自身等等 。 需要注意的是,子请求只是模拟 HTTP 接口的形式, 没有 额外的 HTTP/TCP 流量,也 没有 IPC (进程间通信) 调用。所有工作在内部高效地在 C 语言级别完成。 子请求与 HTTP 301/302 重定向指令 (通过 ngx.redirect ) 完全不同,也与内部重定向 ((通过 ngx.exec ) 完全不同。 在发起子请求前,用户程序应总是读取完整的 HTTP 请求体 (通过调用 ngx.req.read_body 或设置 lua_need_request_body 指令为 on). 发送一个 POST 子请求,可以这样做: res = ngx.location.capture( '/foo/bar' , { method = ngx.HTTP_POST, body = 'hello, world' } ) 因为 Nginx 内核限制,子请求不允许类似 @foo 命名 location。请使用标准 location,并设置 internal 指令,仅服务内部请求。 其中@用来定义一个命名location。主要用于内部重定向,不能用来处理正常的请求。其用法如下: location / { try_files $uri $uri/ @custom } location @custom { # ...do something } 再看一个例子: local res = ngx.location.capture