Hello! 2012/8/28 <sailo...@163.com>: > > 我建了一个proxy,在lua中使用capture,opt里指定args和method。但捕获发出去的包时,发现是uri里面加了参数,形如:http://xxx/?a=1&b=2 > 但通过浏览器请求时,应该是在request_body里面放参数,uri不变,我要怎么设置呢? > ngx.location.capture 的 args 参数是 URI 参数。如果你要指定请求体参数,可以设置 body 参数,细节请参见文档: http://wiki.nginx.org/HttpLuaModule#ngx.location.capture 你可能还需要为子请求设置 "Content-Type: application/x-www-form-urlencoded" 请求头。 > 另外,好像capture参数无法支持设置cookie,那在proxy_pass之前可以设置吗?要怎么做呢? > 子请求默认都是继承父请求的请求头的,所以你需要在调用 ngx.location.capture 之前,先通过 ngx.req.set_header() 先设置父请求的 Cookie 请求头。 另一种做法是在子请求的 location 里面通过 proxy_set_header 来添加 Cookie 请求,而 Cookie 的内容可以通过 ngx.location.capture 的 copy_vars 参数传递 nginx 变量的值: http://wiki.nginx.org/HttpProxyModule#proxy_set_header 更多细节,可以参见下面这个 thread 里的讨论: http://groups.google.com/group/openresty/browse_thread/thread/59d2c011dd366cc3/52e0055013a5e63a 另外,目前我的补丁队列中有一个用户补丁,为 ngx.location.capture 添加了 extra_headers 参数可以直接对子请求设置自己的请求头。近期我会抽空应用一下,届时就更简单了。 Best regards, -agentzh
Hello!2012/8/28 <sailo...@163.com>:>> 我建了一个proxy,在lua中使用capture,opt里指定args和method。但捕获发出去的包时,发现是uri里面加了参数,形如:http://xxx/?a=1&b=2> 但通过浏览器请求时,应该是在request_body里面放参数,uri不变,我要怎么设置呢?>ngx.location.capture 的 args 参数是 URI 参数。如果你要指定请求体参数,可以设置 body 参数,细节请参见文档: http://wiki.nginx.org/HttpLuaModule#ngx.location.capture你可能还需要为子请求设置 "Content-Type: application/x-www-form-urlencoded" 请求头。> 另外,好像capture参数无法支持设置cookie,那在proxy_pass之前可以设置吗?要怎么做呢?>子请求默认都是继承父请求的请求头的,所以你需要在调用 ngx.location.capture 之前,先通过ngx.req.set_header() 先设置父请求的 Cookie 请求头。另一种做法是在子请求的 location 里面通过 proxy_set_header 来添加 Cookie 请求,而 Cookie的内容可以通过 ngx.location.capture 的 copy_vars 参数传递 nginx 变量的值: http://wiki.nginx.org/HttpProxyModule#proxy_set_header更多细节,可以参见下面这个 thread 里的讨论: http://groups.google.com/group/openresty/browse_thread/thread/59d2c011dd366cc3/52e0055013a5e63a另外,目前我的补丁队列中有一个用户补丁,为 ngx.location.capture 添加了 extra_headers参数可以直接对子请求设置自己的请求头。近期我会抽空应用一下,届时就更简单了。Best regards,-agentzh
2012/8/28 <sailo...@163.com>:>> 我建了一个proxy,在lua中使用capture,opt里指定args和method。但捕获发出去的包时,发现是uri里面加了参数,形如:http://xxx/?a=1&b=2> 但通过浏览器请求时,应该是在request_body里面放参数,uri不变,我要怎么设置呢?>
ngx.location.capture 的 args 参数是 URI 参数。如果你要指定请求体参数,可以设置 body 参数,细节请参见文档:
http://wiki.nginx.org/HttpLuaModule#ngx.location.capture
你可能还需要为子请求设置 "Content-Type: application/x-www-form-urlencoded" 请求头。
> 另外,好像capture参数无法支持设置cookie,那在proxy_pass之前可以设置吗?要怎么做呢?>
子请求默认都是继承父请求的请求头的,所以你需要在调用 ngx.location.capture 之前,先通过ngx.req.set_header() 先设置父请求的 Cookie 请求头。
另一种做法是在子请求的 location 里面通过 proxy_set_header 来添加 Cookie 请求,而 Cookie的内容可以通过 ngx.location.capture 的 copy_vars 参数传递 nginx 变量的值:
http://wiki.nginx.org/HttpProxyModule#proxy_set_header
更多细节,可以参见下面这个 thread 里的讨论:
http://groups.google.com/group/openresty/browse_thread/thread/59d2c011dd366cc3/52e0055013a5e63a
另外,目前我的补丁队列中有一个用户补丁,为 ngx.location.capture 添加了 extra_headers参数可以直接对子请求设置自己的请求头。近期我会抽空应用一下,届时就更简单了。
Best regards,-agentzh