在 2012年3月10日 上午10:36,lhmwzy <lhm...@gmail.com> 写道:
> 尽量不要破坏了openresty本身的非阻塞
- 应该的,但是怎么避免?
进一步的:
- 哪些操作是阻塞的?
- 怎么进行非阻塞化?
- 怎么测试真正异步了?
...
这都是乱入后,需要直面的问题,,,
- 謝謝! 关键性建议吼!!!!
- inter-proxy 的方式,在固定的外部上游厂商时,方便
- 一般都是需要动态访问的,后一种,可能就常见了
其实,node 发展的这么快,就是因为大家可以快速完成一个npm 包,发布出来满足自个儿的需求
- 但是, lua-resty-* 的模块,是用 lua 实现的吼
- 这样就很方便大家来汇聚
- 不过,要参考什么接口规范,才能进入 openresty 大包呢?
- 推荐什么样的开发调试环境/界面/流程?
类似 http://readthedocs.org/docs/chaos2openresty/en/latest/ch01/try.html#id7
展示一下舒服的工作界面,以便大家也深迷进来吼,,
> Regards,
> -agentzh
--
人生苦短, Pythonic! 冗余不做,日子甭过!备份不做,十恶不赦!
俺: http://about.me/zoom.quiet
文字协议: http://creativecommons.org/licenses/by-sa/2.5/cn/
- inter-proxy 的方式,在固定的外部上游厂商时,方便
- 一般都是需要动态访问的,后一种,可能就常见了
其实,node 发展的这么快,就是因为大家可以快速完成一个npm 包,发布出来满足自个儿的需求
- 但是, lua-resty-* 的模块,是用 lua 实现的吼
- 这样就很方便大家来汇聚
- 不过,要参考什么接口规范,才能进入 openresty 大包呢?
- 推荐什么样的开发调试环境/界面/流程?
类似 http://readthedocs.org/docs/chaos2openresty/en/latest/ch01/try.html#id7
展示一下舒服的工作界面,以便大家也深迷进来吼,,
- 嗯嗯嗯,但是,组合到舒服,有个过程的,
- 具体展示一下真实的使用场景,直觉体验后,就容易入手
ps:
俺问的是 lua-resy-* 的开发流程:
- 是否每次修订,都需要重新加载到 openresty 中再重启 nginx?!
- 俺期待种直觉的脚本开发流程:
+ 先将空的合法组件,加入 openresty (具体怎么来?)
+ 启动 nginx
+ 修订 lua-resty-* 的 lua代码
^ -> 跑测试用例脚本
| |
+---------/ 根据日志反馈,继续
是也乎!?
ps:
俺问的是 lua-resy-* 的开发流程:
- 是否每次修订,都需要重新加载到 openresty 中再重启 nginx?!
- 这个記得的,
- 意思是 lua-resty-* 的模块,其实就是正常的 业务模块
- 可以先用标准的业务逻辑开发形式来调试
- 基本靠谱后,封装成 nginx 模块,进行加载?
> Lua 代码后都重启 nginx:
>
> http://wiki.nginx.org/HttpLuaModule#lua_code_cache
>
> 请不要重复提问,谢谢。
>
...
第一种方式还支持ssl,不过不能解压服务器端返回的gzip的内容,需要加个header。
另外访问一个域名下的多个url会麻烦点,是不是只能这样:proxy_pass $domain/$uri;
On 3月10日, 下午5时16分, agentzh <agen...@gmail.com> wrote:
> On Sat, Mar 10, 2012 at 10:40 AM, Zoom.Quiet <zoom.qu...@gmail.com> wrote:
> > 在 2012年3月10日 上午10:36,lhmwzy <lhm...@gmail.com> 写道:
> > > 尽量不要破坏了openresty本身的非阻塞
>
> > - 应该的,但是怎么避免?
> > 进一步的:
> > - 哪些操作是阻塞的?
> > - 怎么进行非阻塞化?
> > - 怎么测试真正异步了?
> > ...
> > 这都是乱入后,需要直面的问题,,,
>
> 非阻塞访问远方 http 服务有两种做法。下面以从 ngx_lua 中访问百度搜索为例,演示一下这两种做法:
>
> 1. 使用 nginx 子请求 + ngx_proxy 模块:
>
> resolver 114.114.114.114;
>
> location = /baidu {
> internal;
> proxy_passhttp://www.baidu.com/s?wd=$arg_query;
> lua-resty-mysql 库一样(见https://github.com/agentzh/lua-resty-memcached,还有https://github.com/agentzh/lua-resty-redis以及https://github.com/agentzh/lua-resty-mysql)
先尝试使用第一种内部代理:
- 不断的出错:
HTTPConnectionPool(host='localhost', port=9090): Max retries exceeded
with url: /=/pchk
配置:
location ~ ^/=/(\w+) {
content_by_lua_file conf/lua/$1.lua;
lua_code_cache off;
}
...
location = /pish {
internal ;
proxy_pass http://open.pc120.com/phish/?$arg_query ;
}
...
pchk.lua:
...
local genURL = KSC.genValidUrl(args.uri)
local res = ngx.location.capture("/pish?" .. genURL)
if res.status ~= 200 then
ngx.say("failed to query KSC: ", res.status, ": ", res.body)
return
end
html = res.body
ngx.say(res.body)
问题:
- 如果我可以组合成合法的参数 url 就可以不使用 { args = {}} 模式吧?
- 不过,这样一来是怎么和 location 配合呢?
- 比如,俺内部代理的是 http://open.pc120.com/phish/?a=XXX&b=YYY
- 那俺使用 ngx.location.capture 请求的是
/phish/?a=XXX&b=YYY
or
/phish/a=XXX&b=YYY
- 这种内部 url 获取处理中,怎么追查是哪里出问题了?
location = /pish/ {
internal ;
content_by_lua '
ngx.say(ngx.req.get_body_data)
';
proxy_pass http://open.pc120.com/phish/?$arg_query ;
}
这样加临时调试代码,也没有输出,,,
> --
> 邮件自: 列表“openresty”,专用于技术讨论!
> 发言: 请发邮件到 open...@googlegroups.com
> 退订: 请发邮件至 openresty+...@googlegroups.com
> 详情: http://groups.google.com/group/openresty
> 官网: http://openresty.org/
> 仓库: https://github.com/agentzh/ngx_openresty
> 建议: 提问的智慧 http://wiki.woodpecker.org.cn/moin/AskForHelp
- 是版本问题?需要俺使用更新的稳定版本 openresty?
先尝试使用第一种内部代理:
- 不断的出错:
HTTPConnectionPool(host='localhost', port=9090): Max retries exceeded
with url: /=/pchk
配置:
location ~ ^/=/(\w+) {
content_by_lua_file conf/lua/$1.lua;
lua_code_cache off;
}
...
location = /pish {
internal ;
proxy_pass http://open.pc120.com/phish/?$arg_query ;
}
...
pchk.lua:
...
local genURL = KSC.genValidUrl(args.uri)
local res = ngx.location.capture("/pish?" .. genURL)
if res.status ~= 200 then
ngx.say("failed to query KSC: ", res.status, ": ", res.body)
return
end
html = res.body
ngx.say(res.body)
问题:
- 如果我可以组合成合法的参数 url 就可以不使用 { args = {}} 模式吧?
- 不过,这样一来是怎么和 location 配合呢?
- 比如,俺内部代理的是 http://open.pc120.com/phish/?a=XXX&b=YYY
- 那俺使用 ngx.location.capture 请求的是
/phish/?a=XXX&b=YYY
or
/phish/a=XXX&b=YYY
- 这种内部 url 获取处理中,怎么追查是哪里出问题了?
location = /pish/ {
internal ;
content_by_lua '
ngx.say(ngx.req.get_body_data)
';
proxy_pass http://open.pc120.com/phish/?$arg_query ;
}
这样加临时调试代码,也没有输出,,,
在 2012年3月16日 下午5:40,Zoom.Quiet <zoom....@gmail.com> 写道:
> 在 2012年3月10日 下午5:16,agentzh <age...@gmail.com> 写道:
>> On Sat, Mar 10, 2012 at 10:40 AM, Zoom.Quiet >> 1. 使用 nginx 子请求 + ngx_proxy 模块:
>>
>> resolver 114.114.114.114;
>>
>> location = /baidu {
>> internal;
>> proxy_pass http://www.baidu.com/s?wd=$arg_query;
>> }
>>
>> location = /test {
>> content_by_lua '
>> local res =
>> ngx.location.capture("/baidu", { args = { query =
>> "openresty" }})
>> if res.status ~= 200 then
>> ngx.say("failed to query baidu: ", res.status, ": ",
>> res.body)
>> return
>> end
>> ngx.say(res.body)
>> ';
>> }
>>
>
使用 angentzh 提供的示范,则 error:
no resolver defined to resolve www.baidu.com, client: 127.0.0.1,
server: localhost, request: "POST /=/test HTTP/1.1", subrequest:
"/baidu", host: "localhost:9090"
- 是版本问题?需要俺使用更新的稳定版本 openresty?
- FT! 俺想 DNS 当前可用就没有配置吼,,
- 不明白的代码就没抄,,,
看来都有深意,先用起来,再理解,,,
- 是为了防止各种内部网络的乱解析?
> Regards,
> -agentzh
因为 Nginx 不会自动读取当前系统中的 DNS resolver 配置。
Regards,
-agentzh
- 这真心明白,只是怎么可以观察到 proxy_pass 真实进行请求的 url ?
- 以便明确lua 的处理是否正确?
- 使用了 114.114.114.114 后
- 已经可以正确获取内部 url 的返回
- 但是,一直报参数错误,不论俺自个儿拼,还是 自动生成 都是同样的服务端錯誤
{"success":0,"errno":-7,"msg":"appkey,q,sign,timestamp"}
- 这是金山云安全的正确反馈
- 说明缺少几个参数
- 其实,现在这种组织
- 将 location 当成了模块的显式界面,非常明确
- 但是, ngx.location.capture 发出的 url
- 或是 proxy_pass 真正处理的 url 全貌是什么,从哪儿获取,以便修正?
>> location = /pish/ {
>> internal ;
>> content_by_lua '
>> ngx.say(ngx.req.get_body_data)
>> ';
>> proxy_pass http://open.pc120.com/phish/?$arg_query ;
>> }
>> 这样加临时调试代码,也没有输出,,,
>>
>
> 一个 Nginx location 中只能有一个 Nginx 模块注册 content 处理程序,所以在这个 location 中,如果你用了
> proxy_pass 就不能用 content_by_lua,而如果用了 content_by_lua 就不能用 proxy_pass.
> 因为它们都注册的是 content handler (“内容处理程序”)。在我的《Nginx 配置指令的执行顺序(五)》教程中对此有详细的讨论:
>
- 是也乎,是也乎,又忘記了,看来要形成条件反射,对于不同阶段的顺序
> http://agentzh.org/misc/nginx/agentzh-nginx-tutorials-zhcn.html#02-NginxDirectiveExecOrder05
>
> Regards,
> -agentzh