Ngx_lua v0.1.2: rewrite_by_lua/access_by_lua fixes and new features

Hi, folks!

I’m happy to announce the v0.1.2 release of our ngx_lua module. You
can download the release tarball from the module’s download page:

http://github.com/chaoslawful/lua-nginx-module/downloads

This release contains the following changes:

  • Fixed a bug in rewrite_by_lua (introduced in ngx_lua v0.1.0) and
    access_by_lua (introduced in ngx_lua v0.1.1) that it always sends out
    a default response headers even if there’s no user outputs in the
    rewrite/access Lua handlers. Thanks Roman V…

  • The response headers returned from “ngx.location.capture” now
    support multi-value headers, like “Set-Cookie”. The value is a Lua
    (array) table that holds all the values in the order that they appear.
    For instance, if the subrequest response headers contains the
    following lines:

    Set-Cookie: a=3
    Set-Cookie: foo=bar
    Set-Cookie: baz=blah

    Then res.header[“Set-Cookie”] will be evaluted to the table value
    {“a=3”, “foo=bar”, “baz=blah”}.
    Thanks neilljordan ( neilljordan · GitHub ).

  • rewrite_by_lua_file, access_by_lua_file, and content_by_lua_file now
    support nginx variables in the path value. For example:

    use nginx var in code path

    WARN: contents in nginx var must be carefully filtered,

    otherwise there’ll be great security risk!

    location ~ ^/app/(.+) {
    content_by_lua_file /path/to/lua/app/root/$1.lua;
    }

    Thanks Xiaozhe Wang (chaoslawful).

  • Fixed support for HTTP 1.0 requests. Sometimes you may want to use
    nginx’s standard ngx_proxy module to proxy requests to another nginx
    machine configured by a location with content_by_lua. Because
    proxy_pass only supports the HTTP 1.0 protocol, we have to know the
    length of your response body and set the Content-Length header before
    emitting any data out. ngx_lua will automatically recognize HTTP 1.0
    requests and try to send out an appropriate Content-Length header for
    you, at the first invocation of ngx.print() and ngx.say, assuming all
    the response body data is in a single call of ngx.print() or ngx.say.
    So if you want to support HTTP 1.0 clients like ngx_proxy, do not call
    ngx.print() or ngx.say() multiple times, try buffering the output data
    yourself wherever needed. This behavior is the same as the ngx_echo
    module.

Please also note that rewrite_by_lua will not work with nginx 0.8.41 ~
0.8.53.

Because the rewrite_by_lua and access_by_lua directives are very new,
be prepared to hit some hidden bugs. And you’re very welcome to report
any issues that you meet on your side.

ngx_lua is an nginx C module that embeds the Lua or LuaJIT interpreter
into the nginx core and you can find the latest source code and the
complete documentation here

https://github.com/chaoslawful/lua-nginx-module

Enjoy!
-agentzh