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.2.

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

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

      • feature: compile debug.getmetatable(). Thanks to Karel

      • bugfix: Fix ABC elimination (for negative table indexes,
        for example).

      • bugfix: FFI: Fix compilation of reference field access.

      • bugfix: FFI: fixed frame traversal for backtraces with
        FFI callbacks.

      • bugfix: x86: lj_math_random_step() clobbers XMM regs on
        OSX Clang.

      • bugfix: fixed debug info for main chunk of stripped

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

    • feature: resty.core.regex: use “resty.lrucache” for the
      compiled regex cache for and in
      order to prevent pathalogical performance when the number of
      regexes has exceeded lua_regex_cache_max_entries.

    • optimize: resty.core.regex: removed one obsolete assertion
      that was for a LuaJIT bug (already fixed).

  • upgraded the lua-resty-dns library to 0.12.

    • feature: added support for the SRV resource record type (see
      RFC 2782). thanks Torbjörn Norinder for the patch.
  • upgraded the lua-resty-upstream-healthcheck library to 0.02.

    • bugfix: for bad status lines, we could throw out the “bad
      argument #2 to ‘sub’” error, reported by George Bashi.

    • doc: avoided using the “\r\n” sequence in Lua long brackets
      because Lua would squeeze it to “\n”, unfortunately. thanks
      George Bashi for the report.

    • doc: made it clear that multiple “upstream {}” blocks’
      checkers can share a single shm zone. thanks Robert P.
      for asking.

    • doc: now we need to turn off lua_socket_log_errors
      explicitly in code examples.

  • upgraded the lua-resty-lrucache library to 0.02.

    • feature: added an alternative implementation using FFI-based
      hash-table in the form of the new class
      “resty.lrucache.pureffi”, which is much faster than the
      default “resty.lrucache” class when there are a lot of key
      variations. thanks Shuxin Yang for the patch.
  • upgraded the ngx_lua module to 0.9.10.

    • feature: stream-typed cosockets are now full-duplex: a
      reader “light thread” and a writer “light thread” can
      operate on the same cosocket simultaneously. thanks shun
      zhang and aviramc for the original patches.

    • feature: added new API function ngx.thread.kill() for
      killing a user “light thread”. thanks aviramc for the
      original patch.

    • bugfix: the “coroutine” module table introduced by
      “require(‘coroutine’)” was not working in our Lua context.
      thanks Paul K and Pierre-Yves Gérardy for the report.

    • bugfix: fixed the initial size of the ngx.worker table and
      the misleading comment due to a copy&paste mistake. thanks
      Suraj Jaiswal for the report.

    • bugfix: the “coctx cleanup” handler might not be called
      before being overidden by other operations. this could
      happen when failing to yield in an error handler (for

    • bugfix: fixed an incorrect error message. thanks doujiang
      for the patch.

    • bugfix: fixed a compilation error regression when using the
      Microsoft Visual C/C++ compiler. thanks itpp16 for the

    • bugfix: we should use “c->buffered &
      NGX_HTTP_LOWLEVEL_BUFFERED” instead of “c->buffered” for
      testing if the downstream connection is busy writing.

    • bugfix: we did not handle an out-of-memory case in

    • bugfix: ngx_http_lua_chain_get_free_buf(): avoided returning
      zero-sized memory bufs.

    • bugfix: body_filter_by_lua*: we might incorrectly pass
      zero-size bufs (in the form of “special sync bufs”) at the
      beginning of a chain, which could get stuck in the buffer of
      “ngx_http_writer_filter_module” (or in other words, being
      “busy”) while could still get recycled in the content
      handler (like content_by_lua), leading to buffer
      corruptions. thanks westhood for the report and patch.

    • bugfix: we did not clear all the fields in the “ngx_buf_t” C
      struct when recycling chain link buffers.

    • bugfix: the _by_lua_file directives failed to load .lua
      files of exactly the size "n
      LUAL_BUFFERSIZE" bytes with the
      error “‘end’ expected (to close ‘function’ at line 1) near
      ‘’”. thanks kworr for the report.

    • change: now we always iterate through all the user light
      threads to ensure all threads are de-anchored even when the
      “uthreads” counter gets out of sync. also added an assertion
      on the “uthreads” counter.

    • change: now we turn off our C-land assertions by default
      unless the user explicitly specifies the C compiler option

    • change: throw out the “no memory” Lua error consistently
      (instead of “out of memory”) when failing to allocate on the
      nginx side.

    • change: we now still call “ngx_pfree()” in our own
      “pcre_free” hook.

    • doc: documented the “NGX_LUA_USE_ASSERT” and
      “NGX_LUA_ABORT_AT_PANIC” C macros.

    • doc: added performance notes to the sections for the ngx.var
      and ngx.ctx API.

    • doc: documented the types of Lua values that can be passed
      to the ngx.timer callback functions.

  • upgraded the ngx_form_input module to 0.09.

    • bugfix: fixed warnings from the Microsoft Visual C/C++
      compiler. thanks itpp16 for the report.
  • upgraded the ngx_echo module to 0.54.

    • bugfix: the “unknown option for echo_subrequest_async” error
      was thrown when Nginx variables were used in both the
      “method” argument and URI argument of the echo_subrequest
      directive (and etc). thanks Utkarsh Upadhyay for the report.

    • bugfix: fixed a misleading error message.

  • upgraded the ngx_srcache module to 0.28.

    • feature: log an error message when srcache_store subrequest
      has an error or returns a bad HTTP status code. thanks Yann
      Coleu for the report.

    • doc: typo fix from javasboy.

  • upgraded the ngx_memc module to 0.15.

    • bugfix: we did not log error messages for invalid values of
      $memc_flags, $memc_exptime, and $memc_value, leading to
      hard-to-debug HTTP 400 status errors. thanks Yann Coleu for
      the report.
  • bugfix: “./configure --without-lua_resty_dns” did not work as
    declared. thanks Vitaly for the report.

  • bugfix: use “cc” as the default C compiler for LuaJIT and Lua C
    libraries because modern FreeBSD 10 has no gcc by default and
    its clang is already featureful enough to compile everything.
    thanks Stefan P. for the suggestion.

  • change: “./configure --with-debug” now also passes the extra C
    to the the ngx_lua module build.

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:

Have fun!