Ngx_openresty devel version 1.0.15.11 released

Hi, folks!

After more than one week’s active development, I’m happy to announce
that the new development version of ngx_openresty, 1.0.15.11, is now
released:

OpenResty® - Open source

Below is the change log for this release, as compared to the last
release,
1.0.15.10:

  • upgraded LuaNginxModule to 0.5.0rc32.

    • bugfix: header_filter_by_lua and its friend would leak
      memory when it is the only directive of LuaNginxModule
      configured in a location and the ngx.ctx API is also used
      there.

    • bugfix: Lua global variables was dangerously shared by all
      the concurrent requests if the special “_G” table was used
      in all those *_by_lua and *_by_lua_file directives. thanks
      chaoslawful for the patches. but please also note that “_G”
      is still shared among all the requests if used in the
      context of Lua modules, just like all those Lua module level
      variables.

    • bugfix: the ngx.arg API was not usable within external Lua
      module files in set_by_lua or set_by_lua_file.

    • bugfix: unexpected values on the Lua stack might be
      concatenated when generating tracebacks for Lua errors and
      the Lua VM would crash when there happened to be values on
      the Lua stack that could not be concatenated (like “nil”).

    • bugfix: the Lua main thread stack might leak when
      header_filter_by_lua or header_filter_by_lua_file are used.

    • bugfix: the Lua VM might crash when calling the cosocket
      methods with a bad-typed “self” argument.

    • bufix: fixed the directive context for set_by_lua and
      set_by_lua_file. they really work in the contexts “server”,
      “server if”, “location”, and “location if”. thanks Liu
      Taihua.

    • feature: added new directives log_by_lua and log_by_lua_file
      to support user Lua code running at the “log” request
      processing phase. thanks Matthieu T. for the patches.

    • feature: added new directives body_filter_by_lua and
      body_filter_by_lua_file to allow the user implement nginx
      output body filters in pure Lua.

    • feature: added support for loading Lua/LuaJIT raw bytecode
      files automatically in all those *_by_lua_file config
      directives. thanks jinglong and chaoslawful for the patches.
      benchmark results have shown that, for very big Lua-based
      web applications, bytecode loading gives an order of
      magnitude speedup at first requests that trigger the Lua
      code loading.

    • feature: added new directive
      lua_transform_underscores_in_response_headers. thanks Kindy
      Lin.

    • optimize: now we no longer register the “ndk” and “ngx” API
      for set_by_lua* and header_filter_by_lua* at config time
      rather than request time. this makes these directives 200+%
      faster.

    • optimize: eliminated unnecessary string concatenations when
      generating tracebacks for Lua errors.

    • optimize: now we store the metatables for ngx.req.socket()
      and ngx.socket.tcp() objects into the Lua registry.

    • optimize: changed the string keys to light userdata for
      various tracking tables (coroutines table, regex cache
      table, cosocket connection pool table, ngx.ctx table, and
      etc). This gives minor performance improvement from
      eliminating key hashing and etc. thanks Dirk Feytons.

    • diagnosis: now we issue user-friendly error messages when
      the Nginx Lua APIs are used in the wrong configure directive
      contexts (e.g., using ngx.location.capture in set_by_lua).

    • docs: fixed a typo: ngx.now returns time of the resolution
      of milliseconds, rather than microseconds. thanks Wang Xi.

    • docs: added a note for installation with Lua 5.1 on ubuntu
      11.10. thanks Dan Sosedoff.

  • updated nginx-1.0.15-poll_del_event_at_exit.patch. thanks Maxim
    Dounin.

The HTML version of the change log with lots of useful hyper-links can
be browsed here:

http://openresty.org/#ChangeLog1000015

Special thanks go to all our contributors and users for helping make
this
happen :slight_smile:

OpenResty (aka. ngx_openresty) is a full-fledged web application server
by
bundling the standard Nginx core, lots of 3rd-party Nginx modules, as
well
as most of their external dependencies. See OpenResty’s homepage for
more
details:

http://openresty.org/

Enjoy!
-agentzh