openresty 笔记,openresty
openresty 笔记,openresty
ngx.exec转发只能访问nginx内部资源, 而且是get方式, ==rewrite
调用方法:
ngx.exec("/data/new_horizontal_overview1.jpg");
ngx.exec("/tomcat/test",'name=lizw&age=19790825');
ngx.exec("/tomcat/test",{name=lizw,age="19790825"});
注意, 都是get方式
[size=large]ngx.location.capture转发[/size]
GET方法
local request_method = ngx.var.request_method
local args = nil
--获取参数的值
if "GET" == request_method then
args = ngx.req.get_uri_args()
elseif "POST" == request_method then
ngx.req.read_body()
args = ngx.req.get_post_args()
end
--转发请求(仅限nginx内部有效)
a=args["a"]
b=args["b"]
local res = nil
--method get
res=ngx.location.capture("/tomcat/test", {args={a=a, b=b}})
ngx.say("status:", res.status, " response:", res.body)
POST方法
local request_method = ngx.var.request_method
local args = nil
--获取参数的值
if "GET" == request_method then
args = ngx.req.get_uri_args()
elseif "POST" == request_method then
ngx.req.read_body()
args = ngx.req.get_post_args()
end
--转发请求(仅限nginx内部有效)
a=args["a"]
b=args["b"]
local res = nil
--method post
--不用写参数, 参数在body里
res=ngx.location.capture("/tomcat/test", { method = ngx.HTTP_POST)
ngx.say("status:", res.status, " response:", res.body)
自适应参数和method
local request_method = ngx.var.request_method
local args = nil
--获取参数的值
if "GET" == request_method then
args = ngx.req.get_uri_args()
elseif "POST" == request_method then
ngx.req.read_body()
args = ngx.req.get_post_args()
end
--转发请求(仅限nginx内部有效)
a=args["a"]
b=args["b"]
local res = nil
--自动化
local method=nil
if "GET" == request_method then
method = ngx.HTTP_GET
res=ngx.location.capture("/tomcat/test", {method = method, args = ngx.req.get_uri_args()})
elseif "POST" == request_method then
method = ngx.HTTP_POST
res=ngx.location.capture("/tomcat/test", {method = method})
--参数随着body转过去了, 所以这里不需要 args = ...
end
ngx.say("status:", res.status, " response:", res.body)
[size=large]tcpcopy or capture_multi[/size]
local request_method = ngx.var.request_method
local args = nil
ngx.log(ngx.ERR, "start");
--获取参数的值
if "GET" == request_method then
args = ngx.req.get_uri_args()
elseif "POST" == request_method then
ngx.req.read_body()
args = ngx.req.get_post_args()
end
--转发请求(仅限nginx内部有效)
local res = nil
ngx.log(ngx.ERR, "doing");
local uri = ngx.var.uri
ngx.log(ngx.ERR, string.format("获取当前请求的url %s",uri))
--自动化
local method=nil
if "GET" == request_method then
method = ngx.HTTP_GET
res1,res2=ngx.location.capture_multi({
{"/tomcat/test", {method = method, args = ngx.req.get_uri_args()}},
{"/tomcat7/test", {method = method, args = ngx.req.get_uri_args()}}
})
elseif "POST" == request_method then
method = ngx.HTTP_POST
--post的参数在body里, 所以这里不用指定, 下游解body时自动获取
res1,res2=ngx.location.capture_multi({
{"/tomcat/test", {method = method}},
{"/tomcat7/test", {method = method}}
})
end
ngx.log(ngx.ERR, string.format("doing2, method: %s",method))
ngx.log(ngx.ERR, "end")
return ngx.say("status:", res1.status, " response:", res1.body)
评论暂时关闭