Nginx Lua脚本编写

4

Nginx 有一个非常酷的功能,就是可以通过在请求处理的各个阶段注入 Lua 脚本来控制它的行为。我成功地使用了 rewrite_by_lua/file 指令来检查传入请求的主体,并在下游 PHP 处理时注入额外的请求头信息。例如:

location /api{
  rewrite_by_lua_file "/path/to/rewrite.lua";
  lua_need_request_body "on";

然后在 rewrite.lua 文件中:

local uri = ngx.var.request_uri;
//examine the URI and inject additional headers
ngx.req.set_header('headerName','headerValue');

在这个阶段,我还可以注入响应头。例如:

local cookieData = "cookieName=value;path=/;";    
ngx.header['Set-Cookie'] = cookieData;

目前还没有遇到任何问题,但这并不是我想要做的。 我心中的工作流程如下:

  • 检查URI并注入额外的请求头。
  • 我的PHP脚本检查额外的请求头,根据需要处理传入数据,并可能注入额外的响应头。
  • 然后,我想在另一个Nginx Lua脚本中检查响应头并在那个阶段注入cookie。

通过我的PHP脚本注入额外的响应头根本不是问题。我认为为了检查这些额外的头,我只需要设置

location /api {
  header_filter_by_lua_file "path/to/header.lua";
}

使用 header.lua 完成以下操作:

local cookieData = "cookieName=value;path=/;";    
ngx.header['Set-Cookie'] = cookieData;

这个原则听起来很完美。然而,我发现我的header_filter_by_lua_file指令被忽略了——当我重新加载配置时,Nginx日志中没有报告任何错误。
我一定是做错了什么,但我不知道可能是什么。我在Ubuntu 14.10(x64)上使用nginx 1.6.2,Nginx是通过apt-get install nginx-extras安装的。
如果有人能够解释如何正确地使header_filter_by_*工作,我将非常感激。
1个回答

1

我没有原版Nginx,我在Ubuntu上安装了Nginx-extras。我的理解是这是安装了lua模块的Nginx。正如我在问题中所说的,rewrite_by_lua_filengx.都可以很好地工作。问题出在header_by_lua...。你是在暗示后者只能和OpenResty一起使用,而不是与** Nginx Extras**一起使用吗? - DroidOS

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接