测试场景如下:
openresty中在nginx.conf中的代码为access_by_lua_file 'conf/test.lua';
test.lua的代码为:ngx.header.content_type = 'text/html'
ngx.say("ok")
直接访问机器1,这时候返回显示的是机器2上默认的index.html页面
直接访问机器2,这是显示的是ok
penresty中在nginx.conf中的代码为content_by_lua_file 'conf/test.lua';
test.lua的代码为:ngx.header.content_type = 'text/html'
ngx.say("ok")
直接访问机器1,这是显示的是ok
直接访问机器2,这是显示的是ok
这时候疑问就出来了。为什么通过反向代理访问,access阶段的代码没有执行了?
location = /hello {
access_by_lua_block {
ngx.say("access_by_lua_block")
}
content_by_lua_block {
ngx.say("content_by_lua_block")
}
}
验证结果:
➜ ~ curl '127.0.0.1:8866/hello' --http1.0
access_by_lua_block
content_by_lua_block
➜ ~ curl '127.0.0.1:8866/hello' --http1.1
access_by_lua_block
测试结果表明不同的 HTTP 协议版本对 access 阶段处理流程有差异。
按照官方 wiki 说明,修改代码:
location = /hello {
access_by_lua_block {
ngx.say("access_by_lua_block")
ngx.exit(ngx.HTTP_OK)
}
content_by_lua_block {
ngx.say("content_by_lua_block")
}
}
再次测试结果,符合预期:
➜ ~ curl '127.0.0.1:8866/hello' --http1.0
access_by_lua_block
➜ ~ curl '127.0.0.1:8866/hello' --http1.1
access_by_lua_block--
--
邮件来自列表“openresty”,专用于技术讨论!
订阅: 请发空白邮件到 openresty...@googlegroups.com
发言: 请发邮件到 open...@googlegroups.com
退订: 请发邮件至 openresty+...@googlegroups.com
归档: http://groups.google.com/group/openresty
官网: http://openresty.org/
仓库: https://github.com/agentzh/ngx_openresty
教程: http://openresty.org/download/agentzh-nginx-tutorials-zhcn.html