[ANN] ngx_openresty devel version released

agentzh agentzh at gmail.com
Mon Mar 25 07:06:50 UTC 2013


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


Special thanks go to all our contributors and users for helping make
this release happen!

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

 *   upgraded LuaNginxModule to 0.7.18.

     *   feature: implemented ngx.req.http_version() that returns the
         HTTP version number for the current request. thanks Matthieu
         Tourne for requesting this.

     *   feature: implemented the ngx.req.raw_header() function for
         returning the original raw HTTP protocol header string
         received by Nginx. thanks Matthieu Tourne for requesting

     *   feature: added new methods safe_set and safe_add to
         ngx.shared.DICT objects, which never override existing
         unexpired items but immediately return nil and a "no memory"
         string message when running out of storage. thanks Matthieu
         Tourne for requesting this.

     *   feature: datagram Unix domain sockets created by
         ngx.socket.udp() can now receive data from the other
         endpoint via "autobind" on Linux. thanks Dirk Feytons for
         the patch.

     *   change: the ngx.re.match, ngx.re.gmatch, ngx.re.sub, and
         ngx.re.gsub functions used to throw Lua exceptions
         aggressively for all the error conditions; now they just
         return an additional Lua string describing the error for
         almost all common errors instead of throwing exceptions,
         including pcre compile-time and exec-time failures. thanks
         Matthieu Tourne for requesting this change.

     *   bugfix: use of ngx.req.socket() could make socket reading
         hang infinitely when the request did not take a request body
         at all (that is, when the Content-Length request header is
         missing). thanks Matthieu Tourne for reporting this issue.

     *   bugfix: when a non-table value was specified for the "args"
         option in the ngx.location.capture or
         ngx.location.capture_multi call, memory invalid access might
         happen, which resulted in garbage data at least. thanks
         Siddon Tang for reporting this issue.

     *   bugfix: when the Lua code using UDP/TCP cosockets + resolver
         was run in a subrequest, the subrequest could hang due to
         missing calls to "ngx_http_run_posted_requests" in the
         UDP/TCP cosocket resolver handler. thanks Lanshun Zhou for
         reporting this issue.

     *   bugfix: ngx.socket.udp: memory leaks or invalid memory
         accesses might happen when the DNS resolver failed to

     *   bugfix: rewrite_by_lua_no_postpone can only work globally
         and did not reject contexts like "server" and "location"
         configuration blocks. thanks Matthieu Tourne for reporting
         this issue.

     *   bugfix: (large) in-file request bodies could not be
         inherited correctly by multiple subrequests issued by
         ngx.location.capture. thanks Matthieu Tourne for reporting
         this issue.

     *   bugfix: ngx.req.get_headers(limit, true) would still return
         header names in the pure lower-case form when the "limit"
         argument was an integer. thanks Matthieu Tourne for
         reporting this issue.

     *   bugfix: ngx.re.match: when the "D" regular expression option
         was specified, an empty Lua table would always be created
         even when the named capture was actually empty. thanks
         Matthieu Tourne for reporting this issue.

     *   docs: made it explicit that redirecting to external domains
         is also supported in ngx.redirect(). thanks Ron Gomes for

 *   upgraded EchoNginxModule to 0.44.

     *   bugfix: $echo_client_request_headers was evaluated to only
         the last part of the request header when "large header
         buffers" were used.

     *   change: preserve the trailing "CR LF" at the end of the
         whole HTTP protocol header returned by

 *   upgraded Redis2NginxModule to 0.10.

     *   feature: allow use of the request body data in Nginx
         variables for main requests by always reading the request
         body automatically; we used to always discard the request
         body just like the standard ngx_memcached module. thanks
         Ristona Hua for sharing this usage.

     *   docs: updated the docs for the limitations on Redis pub/sub.
         thanks LazyZhu for pointing out the potential confusions.

     *   docs: now we recommend LuaRestyRedisLibrary instead when
         being used with LuaNginxModule.

 *   upgraded LuaRestyUploadLibrary to 0.08.

     *   bugfix: when multiple "Content-Type" request headers were
         given, a Lua exception would be thrown; now we just pick up
         the first one.

     *   docs: better error handling in the code sample. thanks
         wgm.china for the report.

 *   feature: applied the variables_in_redis_pass patch to
     RedisNginxModule 0.3.6 to allow use of Nginx variables in the
     redis_pass directive. thanks Diptamay Sanyal for requesting this

 *   bugfix: applied Lanshun Zhou's run_posted_requests_in_resolver
     patch to the Nginx core:

 *   bugfix: applied the official hotfix #1 patch for the bundled
     LuaJIT 2.0.1.

The HTML version of the change log with some 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 been running extensive testing on our Amazon EC2 test cluster
and ensure that all the components (including the Nginx core) play
well together. The latest test report can always be found here:



More information about the nginx mailing list