nginx + lua 的 跳转命令
1. ngx.redirect(uri, status?) 301/302外部重定向
redirect 为外部重定向,有两种形式:
rewrite ^ /foo? redirect; # nginx config 在 rewrite 阶段重定向
等价于
return ngx.redirect('/foo'); -- Lua code
rewrite ^ /foo? permanent; # nginx config
等价于
return ngx.redirect('/foo', ngx.HTTP_MOVED_PERMANENTLY) -- Lua code
301 Moved Permanently
永久移动。请求的资源已被永久的移动到新URI,返回信息会包括新的URI,浏览器会自动定向到新URI。今后任何新的请求都应使用新的URI代替。
302 Found
临时移动。与301类似。但资源只是临时被移动。客户端应继续使用原有URI。
2. ngx.exec() 内部重定向
exec 会直接跳转到另一个 location 做处理,但是不会 返回 调用 它的地方。
3. 子请求
res = ngx.location.capture( location,args ) 返回一个包含四个元素的Lua表 res.status res.header res.body res.truncated
ngx.location.capture 是非阻塞的,ngx.location.capture可以用来完成http请求,当调用使用此命令,当前请求会跳转到location 去执行,最后会返回。