[ANN] ngx_openresty stable version released!

agentzh agentzh at gmail.com
Sun Mar 25 07:41:39 UTC 2012

Hi, folks!

I'm happy to announce that ngx_openresty's new stable version has
just been released. You can download the source tarball from the Download
page on openresty.org:


This is the first (and also the last) stable version of ngx_openresty based
on the Nginx 1.0.11 core. Future versions will be based on the latest Nginx
stable version.

This version features the new "cosocket API" shipped with the ngx_lua
module as well as various new Lua client libraries based on that (for
Memcached, Redis, MySQL, and others), which are all 100% nonblocking.

Special thanks go to all our contributors and users!

Here goes the complete change log, as compared to the last stable version,, released about two months ago.

   - feature: bundle Piotr Sikora's
which is also enabled by default.
   - feature: bundle
which is enabled by default.
   - feature: bundle
which is enabled by default.
   - feature: bundle
which is enabled by default.
   - feature: bundle
which is enabled by default. thanks Taylor Weibley for sponsoring the
   development work.
   - feature: bundle
which is enabled by default.
   - upgraded LuaNginxModule to 0.5.0rc21.
      - feature: implemented the coroutine-based TCP and Unix Domain client
      socket API (aka the "cosocket" API) that is mostly compatible with the
      - feature: implemented built-in connection pool support for the
      cosocket API.
      - feature: added new function
return a cosocket object for the downstream connection so as to do
      streaming request body reading. thanks Taylor Weibley for sponsoring the
      development work.
      - feature: added new directive
      on by default.
      - feature: added user flags support to the shared dictionary
      thanks Brian Akins.
      - feature: added new method flush_all to the shared dict. thanks
      Weiqiang Li.
      - feature: added the
which returns the binary form of the
      SHA-1 digest.
      - feature: added constant ngx.null which is a NULL light userdata to
      represent nil values in Lua tables and etc. this is compatible with
      at least lua-cjson<http://www.kyne.com.au/%7Emark/software/lua-cjson.php>library's
      cjson.null constant.
      - feature: allow use of ngx.null in
      print() <http://wiki.nginx.org/HttpLuaModule#print> arguments.
      - feature: added new constant ngx.DECLINED.
      - bugfix: we did not declare C variables at the beginning of the
      current code block in ngx_http_lua_del_thread, reported by runner-mei
      in github issue
      - bugfix: incorrectly used ngx_conf_log_error by feeding NGX_ERROR as
      the first argument, as reported by runner-mei in github issue
      - bugfix: spelling errors in Lua exception message text.
      - bugfix:
not work with the satisfy
      any configuration.
      - bugfix: now we recycle the special flush buffer and chain link for
      ngx.flush <http://wiki.nginx.org/HttpLuaModule#ngx.flush> to prevent
      request-scoped memory leaks when emitting long data streams to the
      - bugfix: time stamps could overflow on 32-bit systems in the shared
      dict API; now we explicitly use 64-bit integers.
      - bugfix: the shared dict storage might leak memory in the store:
      ngx_http_lua_shdict_lookup incorrectly assumed that nodes with
      identical keys are linked together, which might not be true after tree
      re-balancing. thanks the patch from Lanshun Zhou.
      - bugfix: the exptime argument to shdict:set/add/etc methods was
      incorrectly ignored when the flags argument is also specified. thanks
      the patch from Brian Akins.
      - bugfix: now we avoid using luaL_checkstring which could do another long
      jump on its own. thanks Wang Bin.
      - bugfix: when the parent request takes a request body, the
      subrequest does not take any bodies, and the subrequest's method
is neither
      PUT nor POST, then the subrequest will no longer inherit the parent
      request's request body. thanks Ou Yuanning for reporting this issue.
      - bugfix: C macro directives were used inside a C macro argument
      which made (at least) gcc 3.2.3 unhappy. thanks Feng Bin.
      - bugfix: setting ngx.header.last_modified was not implemented fully.
      thanks Brian Akins.
      - optimize: removed a redundant piece of code for subrequest
      headers_in fixes in ngx_http_lua_adjust_subrequest.
      - optimize: introduced a minor optimization that we can save one
recvcall when the read event is active *and* the read event is not
      - optimize: now we recycle the downstream output buffers to save
      memory and dynamic allocation times for long-running requests with huge
      - optimize: optimized the chain-link and buf recycle logic for the
      subrequest API and make it share free buffers with the cosocket API.
      - docs: documented the max concurrent subrequest count limitation and
      max error log line size limit.
      - docs: fixed various typos in docs. thanks Wang Bin.
   - upgraded EchoNginxModule to 0.38rc2.
      - bugfix:
was not able to work on arbitrary request body chains (i.e., more
      than 2 chain links), just like the standard
that only processes the first two chain links. now
longer has this limitation.
   - upgraded SrcacheNginxModule to 0.13rc6.
      - bugfix: fixed a typo in an error message text for response
      truncation check in
      - feature: now
responses that are obviously truncated when the actual output data
      is shorter than what is declared in its Content-Length response
      header. thanks Greg Grensteiner.
      - bugfix: the access phase handler actually ran in a phase later than
      the access phase.
      - bugfix: HTTP HEAD requests that lead to a cache hits would cause
      memory issues like invalid reads.
   - upgraded Redis2NginxModule to 0.08rc4.
      - bugfix: redis "nil multi bulk replies" did not parse at all. thanks
      Guo Ying for reporting this issue.
   - upgraded LuaRedisParserLibrary to 0.09rc7.
      - bugfix: redis "nil multi bulk replies" did not parse at all. thanks
      Guo Ying for reporting this issue.
      - bugfix: remove unneeded string push operations. thanks Brian Akins.
   - upgraded XssNginxModule to 0.03rc9, RdsCsvNginxModule to 0.05rc1, and
   Redis2NginxModule to 0.08rc3, allowing enabling DDEBUG=1 globally.
   - upgraded IconvNginxModule to 0.10rc7.
      - bugfix: enabling DDEBUG=1 globally lead to compilation errors.
      - bugfix: could not work with HTTP 1.0 requests.
      - optimize: only register output filters when the iconv_filter is
      actually used in the config file.
   - upgraded PostgresNginxModule to 0.9.
      - bugfix: Fix compatibility with poll, select and /dev/poll event
      - bugfix: Fix compatibility with PostgreSQL 9.x.
      - bugfix: Fix compatibility with nginx-1.1.4+.
   - bugfix: applied the official hotfix #1
   LuaJIT 2.0.0 beta9.
   - now we enable the -DLUA_USE_APICHECK -DLUA_USE_ASSERT flags for
LuaJITwhen the
   --with-debug option is specified.
   - apply the max_subrequests
allow the
   NGX_HTTP_MAX_SUBREQUESTS macro to be overridden from the outside and
   adjusted the default value from 50 to 200 because 50 is a little too
   - applied the upstream_pipelining patch to the nginx core, as discussed
patch is required at least for the pipelined requests support in nginx
   upstream modules.
   - applied the null-character-fixes patch from the mainstream. The bug
   did result in a disclosure of previously freed memory if upstream server
   returned specially crafted response, potentially exposing sensitive
   - upgraded the Nginx core to 1.0.11.
      - see the changes here: http://nginx.org/en/CHANGES-1.0

As always, you're welcome to report bugs and feature requests either here
or directly to me :)

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.

By taking advantage of various well-designed Nginx modules,
OpenRestyeffectively turns the Nginx server into a powerful web app
server, in which
the web developers can use the Lua programming language to script various
existing Nginx C modules and Lua modules and construct extremely
high-performance web applications that is capable to handle 10K+

OpenResty aims to run your server-side web app completely in the Nginx
server, leveraging Nginx's event model to do non-blocking I/O not only with
the HTTP clients, but also with remote backends like MySQL, PostgreSQL,
Memcached, and Redis.

You can find more details on the homepage of ngx_openresty here:


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.nginx.org/pipermail/nginx/attachments/20120325/883f6bd3/attachment-0001.html>

More information about the nginx mailing list