OpenResty released

Hi guys!

I am happy to announce the new release of the OpenResty bundle:

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

Our current focus has still been on improving both performance and

And most of our OpenResty sub-projects’ git repositories have been
moved over to the GitHub account “openresty”:

Thanks Kindy Lin for acquiring this GitHub account :slight_smile:

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

  • upgraded the Nginx core to 1.5.12.

  • upgraded LuaJIT to v2.1-20140423 (see
    Releases · openresty/luajit2 · GitHub ).

    • bugfix: prevent adding side traces for stack checks. (Mike
      pall) this could cause internal assertion failure in the JIT
      compiler while replaying snapshots in very obscure cases:
      “lj_snap.c:497: lj_snap_replay: Assertion `ir->o == IR_CONV
      && ir->op2 == ((IRT_NUM<<5)|IRT_INT)’ failed.”

    • bugfix: fixed FOLD of string concatenations. (Mike Pall)
      this issue was reported by leafo and could lead to invalid
      string results in special cases while compiling string

    • bugfix: FFI: fixed cdata equality comparison against strings
      and other Lua types. (Mike Pall)

    • bugfix: fixed top slot calculation for snapshots with
      continuations. (Mike Pall) this was a bug in snapshot
      generation, but it only surfaced with trace stitching. it
      could cause Lua stack overwrites in special cases.

    • bugfix: PPC: don’t use mcrxr on PPE. (Mike Pall)

    • bugfix: prevent GC estimate miscalculation due to buffer
      growth. (Mike Pall)

    • bugfix: fixed the regression introduced by the previous fix
      for “reuse of SCEV results in FORL”. (Mike Pall) this could
      cause internal assertion failure in the JIT compiler:
      “lj_record.c:68: rec_check_ir: Assertion `op2 >= nk’

    • bugfix: fixed alias analysis for “table.len” vs.
      “table.clear”. (Mike Pall) this could cause “table.len” to
      return incorrect values (nonzero values) after “table.clear”
      was performed.

    • bugfix: fixed the compatibility with DragonFlyBSD. thanks
      lhmwzy for the patch.

    • feature: allow non-scalar cdata to be compared for equality
      by address. (Mike Pall)

  • upgraded LuaUpstreamNginxModule to 0.02.

    • bugfix: upstream names did not support taking a port number.
      thanks magicleo for the report.
  • upgraded Redis2NginxModule to 0.11.

    • change: now we always ignore client aborts for
      collaborations with other modules like SrcacheNginxModule.
      thanks akamatgi for the report.
  • upgraded LuaNginxModule to 0.9.7.

    • bugfix: when lua_code_cache was off, cosocket:setkeepalive()
      might lead to segmentation faults. thanks Kelvin Peng for
      the report.

    • refactor: improved the error handling and logging in the Lua
      code loader and closure factory.

    • change: added stronger assertions to the stream-typed
      cosocket implementation.

    • optimize: we no longer call “ngx_pfree()” in our own
      “pcre_free” hook.

    • optimize: we no longer clear the pointer “ctx->user_co_ctx”
      in “ngx_http_lua_reset_ctx”.

  • upgraded EchoNginxModule to 0.53.

    • bugfix: use of empty arguments after the “-n” option of the
      echo directive (and its friends) might cause subsequent
      arguments to get discarded. thanks Lice Pan for the report
      and fix.
  • upgraded FormInputNginxModule to 0.08.

    • bugfix: segmentation fault might happen when
      “set_form_input_multi” was used while no proper
      “Content-Type” request header was given.
  • upgraded LuaRestyWebSocketLibrary to 0.03.

    • optimize: added a minor optimization in the recv_frame()
      method. thanks yurnerola for the catch.
  • upgraded LuaRestyCoreLibrary to 0.0.6.

    • optimize: now we avoid constructing
      new Lua strings for the regex cache keys, which gives 5%
      speedup for trivial use cases.

    • optimize: avoided constructing a
      new Lua string for the regex cache key by switching over to
      a cascaded 2-level hash table, which gives 22% speedup for
      simple use cases.

  • upgraded LuaRestyLockLibrary to 0.03.

    • bugfix: prevented using cdata directly as table keys.
  • upgraded LuaRestyStringLibrary to 0.09.

    • bugfix: avoided using the “module” builtin function to
      define lua modules. thanks lhmwzy for the original 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:

Just a side note: I recently added the “Profiling page” to the site where you can find useful Flame Graph tools for
analyzing and optimizing OpenResty web apps’ online performance (as
well as ordinary nginx and even other C/C++ user processes):

We’ve been heavily relying on these tools to get our Lua CDN and Lua
WAF faster and faster in the past year at CloudFlare.

Have fun!