[ANN] ngx_openresty mainline version released

Yichun Zhang (agentzh) agentzh at gmail.com
Sat Jan 11 05:44:12 UTC 2014

Hello folks!

I am happy to announce that the new mainline version of ngx_openresty,, is now released:


This is the first openresty release with the latest nginx 1.5.8 core
bundled. And we have a lot of components updated as usual, which
reflects the ongoing active development in this project.

Special thanks go to all our contributors for making this happen!

This release still reflects our current focus on stability and
performance improvements. Getting things right and fast is always of
our first priority. More speedup will come from both the ngx_lua
module and LuaJIT v2.1 soon. But we may also add more new features in
the near future to make more users happy :)

Below is the complete change log for this release, as compared to the
last (mainline) release,

 *   change: now we default to LuaJIT instead of the standard Lua 5.1
     interpreter. the "--with-luajit" option for "./configure" is now
     the default. To use the standard Lua 5.1 interpreter, specify
     the "--with-lua51" option explicitly. thanks smallfish for the

 *   bugfix: Nginx's built-in resolver did not accept fully qualified
     domain names (with a trailing dot).

 *   optimize: shortened the "Server" response header string
     "ngx_openresty" to "openresty".

 *   upgraded the Nginx core to 1.5.8.

     *   see the changes here: <http://nginx.org/en/CHANGES>

 *   upgraded LuaJIT to v2.1-20140109.

     *   bugfix: fixed ABC (Array Bounds Check) elimination. (Mike

     *   bugfix: fixed MinGW build. (Mike Pall)

     *   bugfix: x86: fixed stack slot counting for IR_CALLA (affects
         table.new). (Mike Pall) this could lead to random table
         field missing issues in LuaRestyMySQLLibrary on i386. thanks
         lhmwzy for the report.

     *   bugfix: fixed compilation of "string.byte(s, nil, n)". (Mike

     *   bugfix: MIPS: Cosmetic fix for interpreter. (Mike Pall)

 *   upgraded LuaNginxModule to 0.9.4.

     *   feature: allow use of ngx.exit() in the context of
         header_filter_by_lua* to perform a "filter finalization".
         but in this context ngx.exit() is an asynchronous operation
         and returns immediately.

     *   feature: added the optional 5th argument, "res_table", to
         ngx.re.match() which is the user-supplied result table for
         the resulting captures. This feature can give 12%+ speedup
         for simple ngx.re.match() calls with 4 submatch captures.

     *   feature: ngx.escape_uri() and ngx.unescape_uri() now accept
         a "nil" argument, which is equivalent to an empty string.

     *   feature: added new pure C API,
         "ngx_http_lua_ffi_max_regex_cache_size", for FFI-based
         implementations like LuaRestyCoreLibrary.

     *   change: ngx.decode_base64() now only accepts string

     *   bugfix: coroutines might incorrectly enter the "dead" state
         even right after creation with coroutine.create(). thanks
         James Hurst for the report.

     *   bugfix: segmentation fault might happen when aborting a
         "light thread" pending on downstream cosocket writes. thanks
         Aviram Cohen for the report.

     *   bugfix: we might try sending the response header again in
         ngx.exit() when the header was already sent.

     *   bugfix: subrequests initiated by ngx.location.capture()
         might send their own response headers more than once. this
         issue might also lead to the alert message "header already
         sent" and request aborts when nginx 1.5.4+ was used.

     *   bugfix: fixed incompatibilities in Nginx 1.5.8 which breaks
         the resolver API in the Nginx core.

     *   bugfix: fixed a compilation warning when PCRE is disabled in
         the build. thanks Jay for the patch.

     *   bugfix: we did not set the shortcut fields in
         "r->headers_in" for request headers in our subrequests
         created by ngx.location.capture*(), which might cause
         inter-operative issues with other Nginx modules. thanks
         Aviram Cohen for the original patch.

     *   optimize: we no longer clear the "lua_State" pointers for
         dead "light threads" such that their coroutine context
         structs could be reused by other "light threads" and user
         coroutines. this can lead to smaller memory footprint.

     *   doc: documented that the coroutine.* API can be used in
         init_by_lua* since 0.9.2. thanks Ruoshan Huang for the

 *   upgraded LuaRestyMemcachedLibrary to 0.13.

     *   optimize: saved one cosocket receive() call in the get() and
         gets() methods.

     *   bugfix: the Memcached connection might enter a bad state
         when read timeout happens because LuaNginxModule's cosocket
         reading calls no longer automatically close the connection
         in this case. thanks Dane Knecht for the report.

 *   upgraded LuaRestyRedisLibrary to 0.18.

     *   optimize: eliminated one (potentially expensive)
         "string.sub()" call in the Redis reply parser.

     *   bugfix: the Redis connection might enter a bad state when
         read timeout happens because LuaNginxModule's cosocket
         reading calls no longer automatically close the connection
         in this case.

 *   upgraded LuaRestyLockLibrary to 0.02.

     *   bugfix: the lock() method accepted nil keys silently.

 *   upgraded LuaRestyDNSLibrary to 0.11.

     *   bugfix: avoided use of the module() built-in to define the
         Lua module.

     *   bugfix: we did not reject bad domain names with a leading
         dot. thanks Dane Knecht for the report.

     *   bugfix: error handling fixes in the query and tcp_query

 *   upgraded LuaRestyCoreLibrary to 0.0.3.

     *   feature: updated to comply with LuaNginxModule 0.9.4.

     *   bugfix: resty.core.regex: the ngx.re API did not honour the
         lua_regex_cache_max_entries configuration directive.

     *   optimize: ngx.re.gsub used to use literal type string "const
         char *" in ffi.cast() which is expensive in interpreter
         mode. now we use the ctype object directly, which leads to
         11% in interpreter mode.

 *   upgraded EchoNginxModule to 0.51.

     *   bugfix: for Nginx 1.2.6+ and 1.3.9+, the main request
         reference count might go out of sync when Nginx's request
         body reader returned status code 300+. thanks Hungpu DU for
         the report.

     *   bugfix: echo_request_body truncated the response body
         prematurely when the request body was in memory (because the
         request reader sets "last_buf" in this case). thanks Hungpu
         DU for the original patch.

     *   bugfix: using $echo_timer_elapsed variable alone in the
         configuration caused segmentation faults. thanks Hungpu DU
         for the report.

     *   doc: typo fix in the echo_foreach_split sample code. thanks
         Hungpu DU for the report.

 *   upgraded DrizzleNginxModule to 0.1.7.

     *   bugfix: fixed most of warnings and errors from the Microsoft
         Visual C++ compiler, reported by Edwin Cleton.

 *   upgraded HeadersMoreNginxModule to 0.25.

     *   bugfix: fixed a warning from the Microsoft C compiler.
         thanks Edwin Cleton for the report.

     *   doc: documented the limitation that we cannot remove the
         "Connection" response header with this module. thanks
         Michael Orlando for bringing this up.

 *   upgraded SetMiscNginxModule to 0.24.

     *   bugfix: fixed the warnings from the Microsoft C compiler.
         thanks Edwin Cleton for the report.

 *   upgraded SrcacheNginxModule to 0.25.

     *   feature: now the value specified in srcache_store_skip is
         evaluated and tested again right after the end of the
         response body data stream is seen. thanks Eldar Zaitov for
         the patch.

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


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


We have run extensive testing on our Amazon EC2 test cluster and
ensured that all the components (including the Nginx core) play well
together. The latest test report can always be found here:


Enjoy and happy new year!

Best regards,

More information about the nginx mailing list