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

我正在尝试修改请求标头并在Lua中将其重定向,

 ngx.redirect("/")

 ngx.exec("/")

但我收到以下错误

attempt to call ngx.redirect after sending out the headers

有没有一种简单的方法添加标头值并将其重定向到Lua中的其他位置?在文档中我没有找到任何合适的指令,是否仍可以在使用content_by_lua_file的同时完成类似的操作?

我正在使用openresty.

最佳答案
redirect method documentation

Note that this method call terminates the processing of the current request and that it must be called before ngx.send_headers or explicit response body outputs by either ngx.print or ngx.say.

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

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

例如:

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

curl 07002

输出

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.

相关文章

一、Linux下Nginx的安装 1.去官网&#160;http://nginx.org/download/下载对应的Nginx安装包,推荐使...
一、空格:默认匹配、普通匹配 location / { root /home; } 二、= :精确匹配(表示匹配到 /home/resou...
``` nginx -c 配置文件路径 ``` ``` /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.con...
前言 nginx可所谓是如今最好用的软件级别的负载均衡了。通过nginx的高性能,并发能力强,占用内存下的特...
1.ngnix概念 Nginx是一款高性能的http 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器。由俄...
博客园从今天上午就开始报502错误 , 他的原因还不知道 , 暂时先说下我们遇到502的排查情况 最大的可能性...