在Nginx上使用Lua重定向到相同的URL(openresty setup)

时间:2015-06-30 11:00:02

标签: nginx lua openresty

我正在修改请求标头并在Lua中重定向它,我已经尝试了

 ngx.redirect("/")

 ngx.exec("/")

但我收到了以下错误:

attempt to call ngx.redirect after sending out the headers

是否有一种直接的方法来添加标头值并将其重定向到Lua中的其他位置?在文档中我没有找到任何适当的指令,有没有一种方法可以在使用 content_by_lua_file 时完成这样的事情?

我正在使用openresty。

1 个答案:

答案 0 :(得分:3)

来自redirect method documentation

  

请注意,此方法调用会终止当前请求的处理,并且必须在ngx.send_headers或ngx.print或ngx.say的显式响应正文输出之前调用它。

请检查或使用其他请求阶段处理程序,例如 rewrite_by_lua

至于设置标题,请使用ngx.header

E.g:

location /testRedirect {
   content_by_lua '
     ngx.header["My-header"]= "foo"
     return ngx.redirect("http://www.google.com")
   ';
}
  

curl http://127.0.0.1/testRedirect

输出:

HTTP/1.1 302 Moved Temporarily
Server: openresty
Date: Tue, 30 Jun 2015 17:34:38 GMT
Content-Type: text/html
Content-Length: 154
Connection: keep-alive
My-header: foo
Location: http://www.google.com

<html>
<head><title>302 Found</title></head>
<body bgcolor="white">
<center><h1>302 Found</h1></center>
<hr><center>nginx</center>
</body>
</html>

注意:大多数网站都不接受来自重定向的自定义标头,因此请考虑在该情况下使用Cookie。