- Edited
Hi, folks!
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 openresty.org:
http://openresty.org/#Download
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, 1.0.10.48, released about two months ago.
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, OpenResty 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.
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:
http://openresty.org
Enjoy!
-agentzh
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 openresty.org:
http://openresty.org/#Download
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, 1.0.10.48, released about two months ago.
- feature: bundle Piotr Sikora's CoolkitNginxModule 0.2rc1, which is also enabled by default.
- feature: bundle LuaRestyMySQLLibrary 0.06, which is enabled by default.
- feature: bundle LuaRestyRedisLibrary 0.08, which is enabled by default.
- feature: bundle LuaRestyMemcachedLibrary 0.06, which is enabled by default.
- feature: bundle LuaRestyUploadLibrary 0.02, which is enabled by default. thanks Taylor Weibley for sponsoring the development work.
- feature: bundle LuaRestyStringLibrary 0.05, 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 LuaSocket library.
- feature: implemented built-in connection pool support for the cosocket API.
- feature: added new function ngx.req.socket() 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.
- feature: added new directive lua_http10_buffering which is
on
by default. - feature: added user flags support to the shared dictionary API. thanks Brian Akins.
- feature: added new method
flush_all
to the shared dict. thanks Weiqiang Li. - feature: added the ngx.sha1_bin method which returns the binary form of the
SHA-1
digest. - feature: added constant
ngx.null
which is aNULL
light userdata to representnil
values in Lua tables and etc. this is compatible with at least lua-cjson library'scjson.null
constant. - feature: allow use of
ngx.null
in ngx.log() and 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 #93. - bugfix: incorrectly used
ngx_conf_log_error
by feedingNGX_ERROR
as the first argument, as reported by runner-mei in github issue #92. - bugfix: spelling errors in Lua exception message text.
- bugfix: access_by_lua could not work with the
satisfy any
configuration. - bugfix: now we recycle the special flush buffer and chain link for ngx.flush to prevent request-scoped memory leaks when emitting long data streams to the downstream.
- 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 toshdict:set/add/etc
methods was incorrectly ignored when theflags
argument is also specified. thanks the patch from Brian Akins. - bugfix: now we avoid using
luaL_checkstring
which could do anotherlong 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
norPOST
, 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 inngx_http_lua_adjust_subrequest
. - optimize: introduced a minor optimization that we can save one
recv
call when the read event is active *and* the read event is not ready. - optimize: now we recycle the downstream output buffers to save memory and dynamic allocation times for long-running requests with huge outputs.
- 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: $echo_request_body variable was not able to work on arbitrary request body chains (i.e., more than 2 chain links), just like the standard $request_body variable that only processes the first two chain links. now $echo_request_body no longer has this limitation.
- upgraded SrcacheNginxModule to 0.13rc6.
- bugfix: fixed a typo in an error message text for response truncation check in srcache_store.
- feature: now srcache_store discards 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.
- bugfix: enabling
- upgraded PostgresNginxModule to 0.9.
- bugfix: Fix compatibility with poll, select and /dev/poll event models.
- bugfix: Fix compatibility with PostgreSQL 9.x.
- bugfix: Fix compatibility with nginx-1.1.4+.
- bugfix: applied the official hotfix #1 patch for LuaJIT 2.0.0 beta9.
- now we enable the
-DLUA_USE_APICHECK -DLUA_USE_ASSERT
flags for LuaJIT when the--with-debug
option is specified. - apply the max_subrequests patch to 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 conservative. - applied the upstream_pipelining patch to the nginx core, as discussed here: http://mailman.nginx.org/pipermail/nginx-devel/2012-March/002040.html this 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 information.
- upgraded the Nginx core to 1.0.11.
- see the changes here: http://nginx.org/en/CHANGES-1.0
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, OpenResty 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.
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:
http://openresty.org
Enjoy!
-agentzh