OpenResty released

Hi folks!

I am happy to announce the new formal release,, of the OpenResty

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

Below is the complete change log for this release, as compared to the
last formal release,

  • upgraded the Nginx core to 1.7.0.

  • feature: bundled new Lua library, the lua-resty-lrucache library,
    is also enabled by default. see
    GitHub - openresty/lua-resty-lrucache: Lua-land LRU Cache based on LuaJIT FFI for more
    details. thanks Shuxin Yang for the help.

  • upgraded LuaJIT to v2.1-20140607:
    Tags · openresty/luajit2 · GitHub

    • imported Mike Pall’s latest bug fixes and features:

      • Fix frame traversal while searching for error function.

      • Fix FOLD rule for STRREF of SNEW.

      • FFI: Fix recording of indexing a struct pointer ctype
        object itself.

      • FFI: Another fix for cdata equality comparisons.

      • Fix FOLD rule for “string.sub(s, …) == k”.

      • x86: Fix code generation for unused result of

      • x64: Workaround for MSVC build issue.

      • PPC: Fix red zone overflow in machine code generation.

      • Fix compatibility issues with Illumos. Thanks to Theo

      • Add PS Vita port. Thanks to Anton Stenmark.

    • disabled trace stitching by default for now since it may
      trigger random lua stack corruptions when using with

    • feature: jit.dump: output Lua source location after every

    • feature: added internal memory-buffer-based trace
      entry/exit/start-recording event logging, mainly for
      debugging bugs in the JIT compiler. it requires
      “-DLUA_USE_TRACE_LOGS” when building.

    • feature: save “g->jit_base” to “g->saved_jit_base” before
      “lj_err_throw” clears “g->jit_base” which makes it
      impossible to get Lua backtrace in such states.

  • upgraded the lua-resty-core library to 0.0.7.

    • feature: implemented ngx.req.set_header() (partial:
      table-typed values not yet supported) and
      ngx.req.clear_header() with FFI in the resty.core.request

    • feature: implemented shdict:flush_all() with FFI in the

    • feature: implemented ngx.req.set_method() with FFI in

    • feature: implemented ngx.req.get_method() with FFI in

    • feature: implemented ngx.time() with FFI in resty.core.time.

    • feature: implemented ngx.req.start_time with FFI in

    • feature: implemented with FFI in resty.core.time.

  • upgraded the ngx_lua module to 0.9.8.

    • bugfix: the ngx.ctx table might be released prematurely when
      ngx.exit() was used to generate the response header. thanks
      Monkey Zhang for the report. now we always release ngx.ctx
      in our request pool cleanup handler.

    • bugfix: we did not call our coroutine cleanup handlers right
      after our coroutine completes (either successfully or
      unsuccessfully) otherwise segmentation fault might happen
      when the Lua VM throws out unexpected exceptions like
      “attempt to yield across C-call boundary”. thanks Lipin
      Dmitriy for the report.

    • bugfix: nginx does not guarentee the parent pointer of the
      rbtree root is meaningful, which could lead to inifinite
      loops when the ngx_lua module tried to abort pending timers
      prematurely (upon worker exit). thanks pengqi for the

    • bugfix: ngx.req.set_method(): we incorrectly modified
      “r->method” when the method ID was wrong.

    • bugfix: rewrite_by_lua* and access_by_lua* will now
      terminate the current request if the response header has
      already been sent (via calls like ngx.say and
      ngx.send_headers) at that point. thanks yaronli and Sophos
      for the report.

    • bugfix: issues in the error handling for pure C API
      functions for shared dict. thanks Xiaochen Wang.

    • feature: now we save the original pattern string pointer
      value into our “ngx_http_lua_regex_t” C struct, to help
      runtime regex profiling and debugging.

    • feature: allow use of 3rd-party pcre bindings in
      init_by_lua*. thanks ikokostya for the feature request.

    • feature: added pure C API functions to support the new
      FFI-based Lua API implemented in the lua-resty-core library.

    • feature: make use of the new shm API in nginx 1.5.13+ to
      suppress the “no memory” error logging when the shared
      dictionaries run out of memory.

    • feature: added C macro “NGX_LUA_ABORT_AT_PANIC” to allow
      generating a core dump when the Lua VM panics.

  • upgraded the ngx_srcache module to 0.27.

    • bugfix: we used to skip all the output header and body
      filters run before our filters (which unfortunately bypassed
      the standard ngx_http_not_modified_filter_module, for
      example). thanks Lloyd Zhou for the report.

    • feature: added new config directive srcache_store_ranges for
      storing 206 Partial Content responses generated by the
      standard ngx_http_range_filter_module.

  • bugfix: updated the dtrace patch because systemtap 2.5 no longer
    accepts the “-xnolib” option in its dtrace utility.

  • removed our bundled version of “ngx_http_auth_request_module”
    because recent versions of the nginx core already have it.
    thanks LazyZhu for the report.

  • bugfix: applied our patch for the nginx core to fix the long
    standing memory fragmentation issue for blocks larger than the
    page size in the nginx slab allocator:
    thanks Shuxin Yang for the help.

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: