Hi, folks!<br><br>I'm happy to announce that ngx_openresty's new stable version 1.0.11.28 has just been released. You can download the source tarball from the Download page on <a href="http://openresty.org" target="_blank">openresty.org</a>:<br>

<div class="gmail_quote"><br>
    <a href="http://openresty.org/#Download" target="_blank">http://openresty.org/#Download</a><br><br>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.<br>


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


<br>Special thanks go to all our contributors and users!<br><br>Here goes the complete change log, as compared to the last stable version, 1.0.10.48, released about two months ago.<br><div><ul><li> feature: bundle Piotr Sikora's <a href="https://github.com/FRiCKLE/ngx_coolkit/" title="CoolkitNginxModule - ZhangYichun, Mon 13 Feb 2012 08:59:00 PM CST" target="_blank">CoolkitNginxModule</a> 0.2rc1, which is also enabled by default.</li>


<li> feature: bundle <a href="https://github.com/agentzh/lua-resty-mysql" title="LuaRestyMySQLLibrary - ZhangYichun, Wed 29 Feb 2012 03:35:00 PM CST" target="_blank">LuaRestyMySQLLibrary</a> 0.06, which is enabled by default.</li>


<li> feature: bundle <a href="https://github.com/agentzh/lua-resty-redis" title="LuaRestyRedisLibrary - ZhangYichun, Wed 29 Feb 2012 03:36:00 PM CST" target="_blank">LuaRestyRedisLibrary</a> 0.08, which is enabled by default.</li>


<li> feature: bundle <a href="https://github.com/agentzh/lua-resty-memcached" title="LuaRestyMemcachedLibrary - ZhangYichun, Wed 29 Feb 2012 03:36:00 PM CST" target="_blank">LuaRestyMemcachedLibrary</a> 0.06, which is enabled by default.</li>


<li> feature: bundle <a href="https://github.com/agentzh/lua-resty-upload" title="LuaRestyUploadLibrary - ZhangYichun, Wed 29 Feb 2012 03:39:00 PM CST" target="_blank">LuaRestyUploadLibrary</a> 0.02, which is enabled by default. thanks Taylor Weibley for sponsoring the development work.<br>


</li><li> feature: bundle <a href="https://github.com/agentzh/lua-resty-string" title="LuaRestyStringLibrary - ZhangYichun, Wed 29 Feb 2012 03:38:00 PM CST" target="_blank">LuaRestyStringLibrary</a> 0.05, which is enabled by default.</li>


<li> upgraded <a title="LuaNginxModule - ZhangYichun, Fri 26 Aug 2011 09:10:00 AM CST">LuaNginxModule</a> to 0.5.0rc21.<ul><li>
 feature: implemented the coroutine-based TCP and Unix Domain client 
socket API (aka the "cosocket" API) that is mostly compatible with the <a title="External link to http://w3.impa.br/~diego/software/luasocket/tcp.html" href="http://w3.impa.br/%7Ediego/software/luasocket/tcp.html" target="_blank">LuaSocket</a> library.</li>


<li> feature: implemented built-in connection pool support for the cosocket API.</li><li>feature: added new function <a title="External link to http://wiki.nginx.org/HttpLuaModule#ngx.req.socket" href="http://wiki.nginx.org/HttpLuaModule#ngx.req.socket" target="_blank">ngx.req.socket()</a>
 to return a cosocket object for the downstream connection so as to do 
streaming request body reading. thanks Taylor Weibley for sponsoring the
 development work.</li><li> feature: added new directive <a title="External link to http://wiki.nginx.org/HttpLuaModule#lua_http10_buffering" href="http://wiki.nginx.org/HttpLuaModule#lua_http10_buffering" target="_blank">lua_http10_buffering</a> which is <code>on</code> by default.</li>


<li> feature: added user flags support to the <a title="External link to http://wiki.nginx.org/HttpLuaModule#ngx.shared.DICT" href="http://wiki.nginx.org/HttpLuaModule#ngx.shared.DICT" target="_blank">shared dictionary API</a>. thanks Brian Akins.</li>


<li> feature: added new method <code>flush_all</code> to the shared dict. thanks Weiqiang Li.</li><li> feature: added the <a title="External link to http://wiki.nginx.org/HttpLuaModule#ngx.sha1_bin" href="http://wiki.nginx.org/HttpLuaModule#ngx.sha1_bin" target="_blank">ngx.sha1_bin</a> method which returns the binary form of the <code>SHA-1</code> digest.</li>


<li> feature: added constant <code>ngx.null</code> which is a <code>NULL</code> light userdata to represent <code>nil</code> values in Lua tables and etc. this is compatible with at least <a title="External link to http://www.kyne.com.au/~mark/software/lua-cjson.php" href="http://www.kyne.com.au/%7Emark/software/lua-cjson.php" target="_blank">lua-cjson</a> library's <code>cjson.null</code> constant.</li>


<li> feature: allow use of <code>ngx.null</code> in <a title="External link to http://wiki.nginx.org/HttpLuaModule#ngx.log" href="http://wiki.nginx.org/HttpLuaModule#ngx.log" target="_blank">ngx.log()</a> and <a title="External link to http://wiki.nginx.org/HttpLuaModule#print" href="http://wiki.nginx.org/HttpLuaModule#print" target="_blank">print()</a> arguments.</li>


<li> feature: added new constant <code>ngx.DECLINED</code>.</li><li> bugfix: we did not declare C variables at the beginning of the current code block in <code>ngx_http_lua_del_thread</code>, reported by runner-mei in <a title="External link to https://github.com/chaoslawful/lua-nginx-module/issues/93" href="https://github.com/chaoslawful/lua-nginx-module/issues/93" target="_blank">github issue #93</a>.</li>


<li> bugfix: incorrectly used <code>ngx_conf_log_error</code> by feeding <code>NGX_ERROR</code> as the first argument, as reported by runner-mei in <a title="External link to https://github.com/chaoslawful/lua-nginx-module/issues/92" href="https://github.com/chaoslawful/lua-nginx-module/issues/92" target="_blank">github issue #92</a>.</li>


<li> bugfix: spelling errors in Lua exception message text.</li><li> bugfix: <a title="External link to http://wiki.nginx.org/HttpLuaModule#access_by_lua" href="http://wiki.nginx.org/HttpLuaModule#access_by_lua" target="_blank">access_by_lua</a> could not work with the <code>satisfy any</code> configuration.</li>


<li> bugfix: now we recycle the special flush buffer and chain link for <a title="External link to http://wiki.nginx.org/HttpLuaModule#ngx.flush" href="http://wiki.nginx.org/HttpLuaModule#ngx.flush" target="_blank">ngx.flush</a> to prevent request-scoped memory leaks when emitting long data streams to the downstream.</li>


<li> bugfix: time stamps could overflow on 32-bit systems in the shared dict API; now we explicitly use 64-bit integers.</li><li> bugfix: the shared dict storage might leak memory in the store: <code>ngx_http_lua_shdict_lookup</code>
 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.</li><li> bugfix: the <code>exptime</code> argument to <code>shdict:set/add/etc</code> methods was incorrectly ignored when the <code>flags</code> argument is also specified. thanks the patch from Brian Akins.</li>


<li> bugfix: now we avoid using <code>luaL_checkstring</code> which could do another <code>long jump</code> on its own. thanks Wang Bin.</li><li>
 bugfix: when the parent request takes a request body, the subrequest 
does not take any bodies, and the subrequest's method is neither <code>PUT</code> nor <code>POST</code>, then the subrequest will no longer inherit the parent request's request body. thanks Ou Yuanning for reporting this issue.</li>


<li> bugfix: C macro directives were used inside a C macro argument which made (at least) gcc 3.2.3 unhappy. thanks Feng Bin.</li><li>bugfix: setting <code>ngx.header.last_modified</code> was not implemented fully. thanks Brian Akins.</li>
<li> optimize: removed a redundant piece of code for subrequest <code>headers_in</code> fixes in <code>ngx_http_lua_adjust_subrequest</code>.</li>

<li> optimize: introduced a minor optimization that we can save one <code>recv</code> call when the read event is active *and* the read event is not ready.</li><li>
 optimize: now we recycle the downstream output buffers to save memory 
and dynamic allocation times for long-running requests with huge 
outputs.</li><li> optimize: optimized the chain-link and buf recycle 
logic for the subrequest API and make it share free buffers with the 
cosocket API.</li><li> docs: documented the max concurrent subrequest count limitation and max error log line size limit.</li><li> docs: fixed various typos in docs. thanks Wang Bin.</li></ul></li><li> upgraded <a title="EchoNginxModule - ZhangYichun, Fri 26 Aug 2011 09:12:00 AM CST">EchoNginxModule</a> to 0.38rc2.<ul>


<li> bugfix: <a title="External link to http://wiki.nginx.org/HttpEchoModule#.24echo_request_body" href="http://wiki.nginx.org/HttpEchoModule#.24echo_request_body" target="_blank">$echo_request_body</a> variable was not able to work on arbitrary request body chains (i.e., more than 2 chain links), just like the standard <a title="External link to http://wiki.nginx.org/HttpCoreModule#.24request_body" href="http://wiki.nginx.org/HttpCoreModule#.24request_body" target="_blank">$request_body</a> variable that only processes the first two chain links. now <a title="External link to http://wiki.nginx.org/HttpEchoModule#.24echo_request_body" href="http://wiki.nginx.org/HttpEchoModule#.24echo_request_body" target="_blank">$echo_request_body</a> no longer has this limitation.</li>


</ul></li><li> upgraded <a title="SrcacheNginxModule - ZhangYichun, Fri 26 Aug 2011 09:11:00 AM CST">SrcacheNginxModule</a> to 0.13rc6.<ul><li> bugfix: fixed a typo in an error message text for response truncation check in <a title="External link to http://wiki.nginx.org/HttpSRCacheModule#srcache_store" href="http://wiki.nginx.org/HttpSRCacheModule#srcache_store" target="_blank">srcache_store</a>.</li>


<li> feature: now <a title="External link to http://wiki.nginx.org/HttpSRCacheModule#srcache_store" href="http://wiki.nginx.org/HttpSRCacheModule#srcache_store" target="_blank">srcache_store</a> discards responses that are obviously truncated when the actual output data is shorter than what is declared in its <code>Content-Length</code> response header. thanks Greg Grensteiner.</li>


<li> bugfix: the access phase handler actually ran in a phase later than the <code>access</code> phase.</li><li> bugfix: HTTP HEAD requests that lead to a cache hits would cause memory issues like invalid reads.</li></ul>


</li><li> upgraded <a title="Redis2NginxModule - ZhangYichun, Tue 06 Sep 2011 04:34:00 PM CST">Redis2NginxModule</a> to 0.08rc4.<ul><li> bugfix: redis "nil multi bulk replies" did not parse at all. thanks Guo Ying for reporting this issue.</li>


</ul></li><li> upgraded <a title="LuaRedisParserLibrary - ZhangYichun, Sun 28 Aug 2011 09:37:00 PM CST">LuaRedisParserLibrary</a> to 0.09rc7.<ul><li> bugfix: redis "nil multi bulk replies" did not parse at all. thanks Guo Ying for reporting this issue.</li>


<li> bugfix: remove unneeded string push operations. thanks Brian Akins.</li></ul></li><li> upgraded <a title="XssNginxModule - ZhangYichun, Tue 21 Jun 2011 05:07:00 PM CST">XssNginxModule</a> to 0.03rc9, <a title="RdsCsvNginxModule - ZhangYichun, Wed 31 Aug 2011 03:42:00 PM CST">RdsCsvNginxModule</a> to 0.05rc1, and <a title="Redis2NginxModule - ZhangYichun, Tue 06 Sep 2011 04:34:00 PM CST">Redis2NginxModule</a> to 0.08rc3, allowing enabling <code>DDEBUG=1</code> globally.</li>


<li> upgraded <a title="IconvNginxModule - ZhangYichun, Wed 22 Jun 2011 03:36:00 PM CST">IconvNginxModule</a> to 0.10rc7.<ul><li> bugfix: enabling <code>DDEBUG=1</code> globally lead to compilation errors.</li>
<li> bugfix: could not work with HTTP 1.0 requests.</li><li> optimize: only register output filters when the <code>iconv_filter</code> is actually used in the config file.</li></ul></li><li>upgraded <a title="PostgresNginxModule - ZhangYichun, Wed 22 Jun 2011 03:36:00 PM CST">PostgresNginxModule</a> to 0.9.<ul>


<li> bugfix: Fix compatibility with poll, select and /dev/poll event models.</li><li> bugfix: Fix compatibility with PostgreSQL 9.x.</li><li> bugfix: Fix compatibility with nginx-1.1.4+.</li></ul></li><li> bugfix: applied the official <a title="External link to http://luajit.org/download/beta9_hotfix1.patch" href="http://luajit.org/download/beta9_hotfix1.patch" target="_blank">hotfix #1 patch</a> for <a title="LuaJIT - ZhangYichun, Tue 21 Jun 2011 05:11:00 PM CST">LuaJIT</a> 2.0.0 beta9.</li>


<li> now we enable the <code>-DLUA_USE_APICHECK -DLUA_USE_ASSERT</code> flags for <a title="LuaJIT - ZhangYichun, Tue 21 Jun 2011 05:11:00 PM CST">LuaJIT</a> when the <code>--with-debug</code> option is specified.</li>
<li> apply the <a title="External link to https://github.com/agentzh/ngx_openresty/blob/master/patches/nginx-1.0.11-max_subrequests.patch" href="https://github.com/agentzh/ngx_openresty/blob/master/patches/nginx-1.0.11-max_subrequests.patch" target="_blank">max_subrequests patch</a> to allow the <code>NGX_HTTP_MAX_SUBREQUESTS</code> macro to be overridden from the outside and adjusted the default value from 50 to 200 because 50 is a little too conservative.</li>


<li> applied the upstream_pipelining patch to the nginx core, as discussed here: <a title="External link to http://mailman.nginx.org/pipermail/nginx-devel/2012-March/002040.html" href="http://mailman.nginx.org/pipermail/nginx-devel/2012-March/002040.html" target="_blank">http://mailman.nginx.org/pipermail/nginx-devel/2012-March/002040.html</a> this patch is required at least for the pipelined requests support in nginx upstream modules.</li>


<li>
 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 
information.</li><li> upgraded the Nginx core to 1.0.11.<ul><li> see the changes here: <a title="External link to http://nginx.org/en/CHANGES-1.0" href="http://nginx.org/en/CHANGES-1.0" target="_blank">http://nginx.org/en/CHANGES-1.0</a></li>

</ul></li></ul><p></p></div>As always, you're welcome to report bugs and feature requests either here or directly to me :)<br><br><span><span>OpenResty</span></span> (aka. <span><span>ngx_openresty</span></span>)
 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.<br>

<br>By taking advantage of various well-designed Nginx modules, <span><span>OpenResty</span></span>
 effectively 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+ 
connections.<br>

<br><span><span>OpenResty</span></span> 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.<br>

<br>You can find more details on the homepage of <span><span>ngx_openresty</span></span> here:<br><br>    <a href="http://openresty.org/" target="_blank">http://<span><span>openresty</span></span>.org</a><br>
<br>Enjoy!<br>-agentzh<br><br>
</div>