发现一个很奇怪的问题,通过反向代理访问openresty中access阶段的代码有问题。

136 views
Skip to first unread message

zm1...@126.com

unread,
Dec 2, 2015, 10:15:41 PM12/2/15
to openresty

测试场景如下:

  1. 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

     

  2. 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阶段的代码没有执行了?

     

     

Auto Generated Inline Image 1

YuanSheng Wang

unread,
Dec 3, 2015, 1:28:59 AM12/3/15
to open...@googlegroups.com
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

额外说一下,access 阶段适合用在准入策略处理,content 阶段才是内容生成。


--
--
邮件来自列表“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



--
Reply all
Reply to author
Forward
0 new messages