May 12, 2013

Nginx Website (nginx)

nginx-1.2.9 legacy version has been released, addressing the information disclosure security problem in some previous nginx versions (CVE-2013-2070).

2013-05-13

nginx-1.2.9 legacy version has been released, addressing the information disclosure security problem in some previous nginx versions (CVE-2013-2070).

May 12, 2013 09:00 PM

May 06, 2013

April 24, 2013

Nginx Website (nginx)

Source code repository switched to Mercurial.

2013-04-25

Source code repository switched to Mercurial.

April 24, 2013 09:00 PM

April 23, 2013

April 15, 2013

Nginx Website (nginx)

nginx-1.3.16 development version has been released.

2013-04-16

nginx-1.3.16 development version has been released.

April 15, 2013 09:00 PM

April 10, 2013

Yichun Zhang (agentzh)

ngx_openresty devel version 1.2.7.5 released

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

    http://openresty.org/#Download

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

Below is the complete change log for this release, as compared to the last (devel) release, 1.2.7.3:
  • upgraded EchoNginxModule to 0.45.
  • upgraded DrizzleNginxModule to 0.1.5.
    • bugfix: compilation errors occurred with nginx 1.3.15. thanks Karl Blessing for reporting this issue.
    • docs: fixed a typo in the sample code for $drizzle_thread_id reported by 岚偑/yy秋叶.
    • docs: documented the config syntax for db passwords with special chars in them.
  • upgraded LuaNginxModule to 0.7.20.
    • feature: now we allow the "0" time argument in ngx.sleep().
    • feature: ngx.location.capture and ngx.location.capture_multi now return a lua table with the boolean field "truncated", which indicates whether the subrequest response body is truncated.
    • bugfix: request hung when rewrite cycled inngx.req.set_uri(uri, true) instead of throwing out an error log message and a 500 page properly. thanks Calin Don for the report.
    • bugfix: assignment to ngx.status did not take effect when the response status line had already been generated (by ngx_proxy or others). thanks eqiuno for reporting this issue.
    • bugfix: ngx.req.raw_header() would return the first part of the request body when request body was read before the call. thanks Matthieu Tourne for reporting this issue.
    • bugfix: ngx.req.raw_header() might not work properly in a subrequest.
    • bugfix: we would override the subrequest response status code later when error happens.
    • bugfix: the debug log message "lua set uri jump to <uri>" generated by ngx.req.set_uri(uri, true) was wrong for "<uri>" was the old URI.
  • upgraded LuaRestyMySQLLibrary to 0.13.
    • bugfix: 64-bit integer values in the MySQL packets (like last insert ids) could not be properly parsed due to the lack of support for 64-bit integers in LuaJIT's standard "bit" module. thanks Azure Wang for the patch implementing a temporary workaround.
    • docs: various typo fixes from Tor Hveem and doledoletree.
  • upgraded LuaRestyMemcachedLibrary to 0.11.
    • feature: added new method "touch" for the new Memcached command "touch". thanks merlin for the patch.
  • updated the upstream_truncation patch for the Nginx core.
    • bugfix: chunked upstream response bodies were treated as 502. thanks Andy Yuan for the report.
    • bugfix: request response status was changed to 502 after response header was sent in case of data truncation.
    • bugfix: the "last buf" (i.e., bufs with "last_buf" or "last_in_chain" set) should not be sent downstream in case of upstream data truncation.
  • updated the dtrace patch for the Nginx core.
    • feature: made the stap function ngx_chain_dump() print out info about the "last_buf" and "last_in_chain" flags in bufs and removed the old "<eof>" notation in the output.
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:

    http://openresty.org/

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:

    http://qa.openresty.org

Have fun!

April 10, 2013 10:13 AM

April 01, 2013

Nginx Website (nginx)

nginx-1.2.8 stable version has been released.

2013-04-02

nginx-1.2.8 stable version has been released.

April 01, 2013 09:00 PM

March 25, 2013

Nginx Website (nginx)

nginx-1.3.15 development version has been released, featuring experimental SPDY module.

2013-03-26

nginx-1.3.15 development version has been released, featuring experimental SPDY module.

March 25, 2013 09:00 PM

Yichun Zhang (agentzh)

ngx_openresty devel version 1.2.7.3 released

I am happy to announce that the new development version ofngx_openresty1.2.7.3, is now released:

    http://openresty.org/#Download

Below is the complete change log for this release, as compared to the last (devel) release, 1.2.7.1:
  • 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 this.
    • 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.matchngx.re.gmatchngx.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 resolve.
    • 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 asking.
  • upgraded EchoNginxModule to 0.44.
  • 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 feature.
  • bugfix: applied Lanshun Zhou's run_posted_requests_in_resolver patch to the Nginx core: http://mailman.nginx.org/pipermail/nginx-devel/2013-March/003476.html
  • bugfix: applied the official hotfix #1 patch for the bundled LuaJIT 2.0.1.
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:

    http://openresty.org/

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:

    http://qa.openresty.org

Enjoy!

March 25, 2013 03:53 PM

March 12, 2013

Nginx Website (nginx)

Packt is going to publish a book by Dimitri Aivaliotis "Mastering Nginx".

2013-03-13

Packt is going to publish a book by Dimitri Aivaliotis "Mastering Nginx".

March 12, 2013 09:00 PM

March 04, 2013

Nginx Website (nginx)

nginx-1.3.14 development version has been released.

2013-03-05

nginx-1.3.14 development version has been released.

March 04, 2013 09:00 PM

February 23, 2013

Yichun Zhang (agentzh)

ngx_openresty devel version 1.2.7.1 released

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

    http://openresty.org/#Download

Below is the complete change log for this release, as compared to the last (stable) release, 1.2.6.6:
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:

    http://openresty.org/

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:

    http://qa.openresty.org


Have fun!

February 23, 2013 03:12 PM

February 18, 2013

Nginx Website (nginx)

nginx-1.3.13 development version has been released, featuring support for proxying of WebSocket connections.

2013-02-19

nginx-1.3.13 development version has been released, featuring support for proxying of WebSocket connections.

February 18, 2013 09:00 PM

Yichun Zhang (agentzh)

ngx_openresty stable version 1.2.6.6 released

I am delighted to announce that the new stable version of ngx_openresty, 1.2.6.6, is just out:

    http://openresty.org/download/ngx_openresty-1.2.6.6.tar.gz

And the PGP signature file for this release tar ball is

    http://openresty.org/download/ngx_openresty-1.2.6.6.tar.gz.asc

The PGP public key (with ID A0E98066) has been uploaded to the key servers pgp.mit.edu and keys.gnupg.net.

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

Below is the complete change log for this release, as compared to the last (development) release, 1.2.6.5:
  • upgraded LuaNginxModule to 0.7.15.
    • bugfix: the original Lua VM error messages might get lost in case of Lua code crashes when user coroutines were used. thanks Dirk Feytons for the report.
    • diagnose: added more info about r->main->count to the debugging logs.
    • style: massive coding style fixes according to the Nginx coding style.
The following components are bundled:
  • LuaJIT-2.0.0
  • array-var-nginx-module-0.03rc1
  • auth-request-nginx-module-0.2
  • drizzle-nginx-module-0.1.4
  • echo-nginx-module-0.42
  • encrypted-session-nginx-module-0.02
  • form-input-nginx-module-0.07
  • headers-more-nginx-module-0.19
  • iconv-nginx-module-0.10rc7
  • lua-5.1.5
  • lua-cjson-1.0.3
  • lua-rds-parser-0.05
  • lua-redis-parser-0.10
  • lua-resty-dns-0.09
  • lua-resty-memcached-0.10
  • lua-resty-mysql-0.12
  • lua-resty-redis-0.15
  • lua-resty-string-0.08
  • lua-resty-upload-0.07
  • memc-nginx-module-0.13rc3
  • nginx-1.2.6
  • ngx_coolkit-0.2rc1
  • ngx_devel_kit-0.2.18
  • ngx_lua-0.7.15
  • ngx_postgres-1.0rc2
  • rds-csv-nginx-module-0.05rc2
  • rds-json-nginx-module-0.12rc10
  • redis-nginx-module-0.3.6
  • redis2-nginx-module-0.09
  • set-misc-nginx-module-0.22rc8
  • srcache-nginx-module-0.19
  • xss-nginx-module-0.03rc9
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:

    http://openresty.org/

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:

    http://qa.openresty.org

Enjoy!

February 18, 2013 12:59 PM

February 11, 2013

Nginx Website (nginx)

nginx-1.2.7 stable version has been released.

2013-02-12

nginx-1.2.7 stable version has been released.

February 11, 2013 09:00 PM

February 10, 2013

Valery Kholodkov (vkholodkov)

Queueing systems

Queueing systems manage and process queues of jobs. The presence of a queue implies that something cannot be done immediately and one has to wait until some resource is available. When you respond to an HTTP request you usually want … Continue reading

February 10, 2013 11:48 AM

February 09, 2013

Yichun Zhang (agentzh)

ngx_openresty devel version 1.2.6.5 released

I am happy to announce the new development version of ngx_openresty, 1.2.6.5:

    http://openresty.org/#Download

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

Below is the complete change log for this release, as compared to the last (development) release, 1.2.6.3:
  • upgraded SrcacheNginxModule to 0.19.
    • bugfix: HEAD and conditional GET requests would still fall back to content handler execution (leading to backend accesses) even in case of a cache hit. thanks Wang Lichao for reporting this issue.
    • style: massive coding style fixes.
  • upgraded LuaRestyUploadLibrary to 0.07.
    • bugfix: the boundary string could not be parsed if no space was present before the boundary=xxx parameter in the Content-Type request header. thanks chenshu for reporting this issue.
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:

    http://openresty.org/

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:

    http://qa.openresty.org

Have fun!

February 09, 2013 04:08 AM

February 04, 2013

Nginx Website (nginx)

nginx-1.3.12 development version has been released.

2013-02-05

nginx-1.3.12 development version has been released.

February 04, 2013 09:00 PM

Yichun Zhang (agentzh)

ngx_openresty devel version 1.2.6.3 released

I am delighted to announce the new development version of ngx_openresty, 1.2.6.3:

    http://openresty.org/#Download

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

Below is the complete change log for this release, as compared to the last (development) release, 1.2.6.1:
  • upgraded LuaNginxModule to 0.7.14.
    • feature: implemented named subpattern support in ngx.re.match, ngx.re.gmatch, ngx.re.sub, and ngx.re.gsub; also added new regex option D to allow duplicate named subpattern names. thanks Ray Bejjani for the patch.
    • feature: implemented the J regex option for the PCRE Javascript compatible mode in the ngx.re API. thanks lhmwzy for requesting this.
    • feature: setting ngx.header.HEADER after sending out the response headers now only produced an error message in the Nginx error logs and does not throw out a Lua exception. this should be handy for Lua development. thanks Matthieu Tourne for requesting this.
    • feature: automatic Lua 5.1 interpreter detection on OpenBSD 5.2. thanks Ilya Shipitsin for the patch.
    • refactor: when the Nginx core fails to send the "100 Continue" response in case of the "Expect: 100-continue" request header (or just running out of memory), ngx.req.read_body() will no longer throw out a "failed to read request body" Lua error but will just terminate the current request and returns the 500 error page immediately, just as what the Nginx core currently does in this case.
    • bugfix: because of the recent API behaviour changes in nginx 1.2.6+ and 1.3.9+, the "http request count is zero" alert might happen when ngx.req.read_body() was called to read the request body and Nginx failed to send out the "100 Continue" response (like client connection early abortion and etc). thanks stonehuzhan for reporting this issue.
    • bugfix: setting the "eof" argument (i.e., ngx.arg[2]) in body_filter_by_lua* for a subrequest could truncate the main request's response data stream.
    • bugfix: in body_filter_by_lua*, the "eof" argument (i.e., ngx.arg[2]) was never set in Nginx subrequests.
    • bugfix: for nginx 1.3.9+ compatibility, we return an error while using ngx.req.socket() to read the chunked request body (for now), because chunked support in the downstream cosocket API is still a TODO.
    • bugfix: for nginx 1.3.9+ compatibility, rewrite_by_lua* or access_by_lua* handlers might hang if the request body was read there, because the Nginx core now overwrites r->write_event_handler to ngx_http_request_empty_handler in its ngx_http_read_client_request_body API.
    • bugfix: for nginx 1.3.9+ compatibility, we now throw an error in ngx.req.init_body(), ngx.req.set_body_data(), and ngx.req.set_body_file() when calling them without calling ngx.req.read_body() or after calling ngx.req.discard_body().
    • bugfix: a compilation error would happen when building with an Nginx core patched by the SPDY patch 58_1.3.11 because the patch had removed a request field from the Nginx core. thanks Chris Lea for reporting this.
    • bugfix: we did not get the request reference counter (i.e., r->main->count) right when lua_need_request_body was turned on and nginx versions older than 1.2.6 or 1.2.9 were used.
    • optimize: we no longer traverse the captured body chain everytime we append a new link to it in ngx.location.capture and ngx.location.capture_multi.
    • docs: documented the ngx.quote_sql_str API.
  • upgraded SrcacheNginxModule to 0.18.
    • bugfix: we might serve a truncated srcache_fetch subrequest's response body as the cached response.
  • upgraded EchoNginxModule to 0.42.
    • feature: the echo_after_body directive is now enabled in Nginx subrequests (again).
    • bugfix: we did not set the "last_in_chain" buffer flag when echo_after_body was used in subrequests.
  • upgraded FormInputNginxModule to 0.07.
    • bugfix: Nginx might hang when it failed to send the "100 Continue" response for Nginx versions older than 1.2.6 (and those older than 1.3.9 in the 1.3.x series).
  • upgraded NginxDevelKit ot 0.2.18.
    • bugfix: various fixes for C89 compliance. also stripped some line-trailing spaces.
    • bugfix: guard macros were missing in the ndk_set_var.h header file.
    • bugfix: the ndk_string submodule failed to compile with gcc 4.6. thanks Jon Kolb for the patch.
    • bugfix: the ndk_set_var example did not use the new way in its config file. thanks Amos Wenger for the patch.
    • docs: fixes in README to reflect recent changes. thanks Amos Wenger for the patch.
  • applied Ruslan Ermilov's resolver_wev_handler_segfault_with_poll patch to the Nginx core bundled. see the related nginx-devel thread for details.
  • excluded the allow_request_body_updating patch from the Nginx core bundled.
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:

    http://openresty.org/

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:

    http://qa.openresty.org

Enjoy!

February 04, 2013 03:10 PM

February 03, 2013

Valery Kholodkov (vkholodkov)

Logging modules re-released!

Few months ago I shut down the pages of nginx socketlog module and nginx redislog module. This is due to excessive volume of support they required. Some people, however, found that these are interesting pieces of technology and I got … Continue reading

February 03, 2013 05:46 PM

Valery Kholodkov (vkholodkov)

Horizontal Partitioning

So how do you store a lot of data if there is already over your head? The simplest answer is: partition horizontally, in other words divide and conquer. In horizontal partitioning each data instance is stored on a single storage … Continue reading

February 03, 2013 02:28 PM

January 24, 2013

Valery Kholodkov (vkholodkov)

Comments are back!

Long time ago I disabled comments because I was getting a lot of spam. Apparently this was man-made spam, because they did go through CAPTCHA. Today I installed Social and also added Twitter and Facebook accounts. Please comment and follow!

January 24, 2013 07:18 PM

January 22, 2013

Valery Kholodkov (vkholodkov)

Reading list: Foundations of Statistical Natural Language Processing

Recently I was looking into making my NLP knowledge more solid and I found this book by reference: Foundations of Statistical Natural Language Processing. It’s a classic book and certainly it was a good read. Now, the topics it discusses … Continue reading

January 22, 2013 06:50 PM

January 09, 2013

Nginx Website (nginx)

nginx-1.3.11 development version has been released.

2013-01-10

nginx-1.3.11 development version has been released.

January 09, 2013 09:00 PM

January 05, 2013

Yichun Zhang (agentzh)

ngx_openresty devel version 1.2.6.1 released

I am delighted to announce the new development version of ngx_openresty, 1.2.6.1:

    http://openresty.org/#Download

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

Below is the complete change log for this release, as compared to the last (stable) release, 1.2.4.14:
  • upgraded the Nginx core to 1.2.6.
  • upgraded LuaNginxModule to 0.7.13.
    • bugfix: ngx.decode_args() might result in Lua string storage corruption. thanks Xu Jian for the report and Kindy Lin for the patch.
    • bugfix: using a key with underscores in ngx.header.KEY resulted in Lua string storage corruption. thanks rkearsley for reporting this issue.
    • bugfix: accessing ngx.var.VARIABLE allocated temporary memory buffers in the request memory pool, which could lead to unnecessarily large memory footprint; now it allocates such buffers via Lua GC.
    • feature: automatically detect LuaJIT 2.0 on FreeBSD by default. thanks rkearsley for the patch.
    • docs: explained why local foo = require "foo" is required for loading a Lua module. thanks rkearsley for asking.
    • docs: fixed a typo in the code sample for tcpsock:receiveuntil(). thanks Yecheng Fu for the patch.
    • docs: fixed a typo in the Lua code sample for ngx.re.gmatch (we forgot to add do there). thanks Guo Yin for reporting this issue.
  • upgraded LuaRestyUploadLibrary to 0.06.
    • optimize: use the pure lower-case form of the key content-type to index the headers table returned by ngx.req.get_headers() so as to avoid the overhead of calling the __index metamethod.
  • upgraded SrcacheNginxModule to 0.17.
    • bugfix: srcache_store would emit the misleading error message "srcache_store: skipped because response body truncated: N > 0" for HEAD requests (because a HEAD request's response never carries a body); it now just skips such responses silently. thanks Yang Jin for reporting this issue.
  • bugfix: when relative paths were used in --with-zlib=DIR, --with-libatomic=DIR, --with-md5=DIR, and --with-sha1=DIR, the build system of Nginx could not find DIR at all. thanks LazyZhu for reporting this issue.
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:

    http://openresty.org/

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:

    http://qa.openresty.org

Have fun!

January 05, 2013 03:43 PM

December 24, 2012

Nginx Website (nginx)

nginx-1.3.10 development version has been released. Merry Christmas!

2012-12-25

nginx-1.3.10 development version has been released. Merry Christmas!

December 24, 2012 09:00 PM

Yichun Zhang (agentzh)

ngx_openresty stable version 1.2.4.14 released

I am happy to announce the new stable version of ngx_openresty, 1.2.4.14:

    http://openresty.org/#Download

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

Below is the complete change log for this release, as compared to the last (development) release, 1.2.4.13:
  • upgraded LuaNginxModule to 0.7.9.
    • bugfix: assignment to ngx.status would always be overridden by the later ngx.exit() calls for HTTP 1.0 requests if lua_http10_buffering is on (the default setting). thanks chenshu for reporting this issue.
    • bugfix: there was a typo in the error message when accessing an Nginx variable that has not been defined.
    • docs: documented the request body automatic inheritance behaviour in ngx.location.capture.
    • docs: fixed incorrect dates shown in the code samples for ngx.http_time and ngx.parse_http_time. thanks Gosuke Miyashita for the patch.
  • upgraded LuaRestyUploadLibrary to 0.05.
    • bugfix: unexpected runtime exceptions would be thrown when resty.upload met a in-part header field line or a terminating boundary line that was too long. this bug had appeared in LuaRestyUploadLibrary 0.04 and OpenResty 1.2.4.7.
    • bugfix: resty.upload could not parse Content-Type request header values like boundary="simple boundary", that is, with double quotes around the boundary value.
    • optimize: marked internal auxiliary functions as Lua local functions.
The following components are bundled:
  • LuaJIT-2.0.0
  • array-var-nginx-module-0.03rc1
  • auth-request-nginx-module-0.2
  • drizzle-nginx-module-0.1.4
  • echo-nginx-module-0.41
  • encrypted-session-nginx-module-0.02
  • form-input-nginx-module-0.07rc5
  • headers-more-nginx-module-0.19
  • iconv-nginx-module-0.10rc7
  • lua-5.1.5
  • lua-cjson-1.0.3
  • lua-rds-parser-0.05
  • lua-redis-parser-0.10
  • lua-resty-dns-0.09
  • lua-resty-memcached-0.10
  • lua-resty-mysql-0.12
  • lua-resty-redis-0.15
  • lua-resty-string-0.08
  • lua-resty-upload-0.05
  • memc-nginx-module-0.13rc3
  • nginx-1.2.4
  • ngx_coolkit-0.2rc1
  • ngx_devel_kit-0.2.17
  • ngx_lua-0.7.9
  • ngx_postgres-1.0rc2
  • rds-csv-nginx-module-0.05rc2
  • rds-json-nginx-module-0.12rc10
  • redis-nginx-module-0.3.6
  • redis2-nginx-module-0.09
  • set-misc-nginx-module-0.22rc8
  • srcache-nginx-module-0.16
  • xss-nginx-module-0.03rc9
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:

    http://openresty.org/

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:

    http://qa.openresty.org

Have fun!

December 24, 2012 07:06 AM

December 12, 2012

Yichun Zhang (agentzh)

ngx_openresty devel version 1.2.4.13 released

I am happy to announce the new development version of ngx_openresty, 1.2.4.13:

    http://openresty.org/#Download

This is possibly the last devel release in the 1.2.4.x series if no regressions are reported.

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

Below is the complete change log for this release, as compared to the last (devel) release, 1.2.4.11:
  • upgraded LuaNginxModule to 0.7.8.
    • bugfix: ngx.req.set_body_file() might lead to memory issues because it directly used the storage of Lua strings allocated by the Lua GC (we should have allocated a new memory block on the Nginx side and copy the string data over).
  • upgraded LuaRestyMySQLLibrary to 0.12.
    • feature: convert the MySQL newdecimal typed fields to Lua numbers by default as requested by shedar.
    • optimize: marked the internal Lua function _recv_packet as a local function.
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:

    http://openresty.org/

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:

    http://qa.openresty.org

Enjoy!

December 12, 2012 04:04 AM

December 08, 2012

Yichun Zhang (agentzh)

ngx_openresty devel version 1.2.4.11 released

I am happy to announce the new development version of ngx_openresty, 1.2.4.11:

    http://openresty.org/#Download

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

Below is the complete change log for this release, as compared to the last (devel) release, 1.2.4.9:
  • upgraded LuaNginxModule to 0.7.7.
    • feature: added ngx.req.start_time() to return the request starting time in seconds (the milliseconds part is the decimal part just as in ngx.now). thanks Matthieu Tourne for the patch.
    • feature: setting ngx.status or calling ngx.exit(N) (where N >= 300) after sending out response headers no longer yields a Lua exception but only leaves an error message in the error.log file, which is useful for Lua land debugging. thanks Matthieu Tourne for requesting this.
    • feature: the user can now call ngx.exit(444) to abort pending subrequests in other "light threads" from within a "light thread".
    • feature: added new dtrace static probe http-lua-user-thread-wait.
    • bugfix: ngx.location.capture and ngx.location.capture_multi might hang infinitely because the parent request might not be waken up right after the first time the post_subrequest callback was called.
    • bugfix: the "light thread" object created by ngx.thread.spawn() or ngx.on_abort() might be prematurely collected by the Lua GC because we did not correctly register its coroutine object into the Lua regsitry table. this bug may crash the Lua VM and Nginx workers under load. thanks Zhu Dejiang for reporting this issue.
    • bugfix: ngx.thread.wait() might hang infinitely when more than 4 user "light threads" are created in the same request handler due to the incorrect use of ngx_array_t for ngx_list_t. thanks Junwei Shi for reporting this issue.
    • bugfix: when a user coroutine or user "light thread" dies with an error, our Lua backtrace dumper written in C may access one of its dead parent threads (if any) which could lead to segmentation faults.
    • bugfix: ngx.exit(N) incorrectly threw out Lua exceptions when N was 408, 499, or 444 and the response header was already sent. thanks Kindy Lin for reporting this issue.
    • bugfix: when the user callback function registered by ngx.on_abort() discarded the client abort event, the request would be aborted by force when the next client abort event happened.
    • bugfix: an English typo in the error message for init_by_lua*.
  • applied slab_alloc_no_memory_as_info.patch to lower the log level of the error message "ngx_slab_alloc() failed: no memory" from "crit" to "info".
  • bugfix: the upstream_pipelining patch introduced a regression that when upstream_next is in action, Nginx might hang. thanks Kindy Lin for reporting this issue.
  • bugfix: include the latest chagnes in the LuaJIT 2.0 git repository (up to git commit 2ad9834d).
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:

    http://openresty.org/

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:

    http://qa.openresty.org

Have fun!

December 08, 2012 04:23 PM

November 21, 2012

Yichun Zhang (agentzh)

ngx_openresty devel version 1.2.4.9 released

I am happy to announce the new development version of ngx_openresty, 1.2.4.9:

    http://openresty.org/#Download

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

Below is the complete change log for this release, as compared to the last (devel) release, 1.2.4.7:
  • upgraded LuaJIT to 2.0.0 final.
  • upgraded LuaNginxModule to 0.7.5.
    • bugfix: ngx.req.clear_header() would result in memory invalid reads when removing the 21st, 41st, 61st (and etc) request headers. thanks Umesh Sirsiwal for reporting this issue.
    • bugfix: ngx.log() would truncate the log messages which have null characters (\0) in it. thanks Wang Xi for reporting this issue.
    • docs: eliminated the use of package.seeall in code samples and also explicitly discouraged the use of it.
    • docs: documented the special case that client closes the connection before ngx.req.socket() finishes reading the whole body.
  • upgraded HeadersMoreNginxModule to 0.19.
    • bugfix: more_clear_input_headers would result in memory invalid reads when removing the 21st, 41st, 61st (and etc) request headers. thanks Umesh Sirsiwal for reporting this issue.
    • docs: fixed an issue in the sample code that tried to clear Transfer-Encoding which cannot actually be cleared. thanks koukou73gr.
  • upgraded LuaRestyStringLibrary to 0.08.
    • bugfix: the new() method in the resty.aes module might use a random key when the method option is omitted in the hash table argument. thanks wsser for the patch.
    • feature: we now return a second string describing the error when either iv or key is bad.
  • bugfix: ./configure --with-pcre=PATH did not accept relative paths as PATH. thanks smallfish for reporting this issue.
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:

    http://openresty.org/

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:

    http://qa.openresty.org

Enjoy!

November 21, 2012 07:43 AM

November 12, 2012

Yichun Zhang (agentzh)

ngx_openresty devel version 1.2.4.7 released

I am happy to announce the new development version of ngx_openresty, 1.2.4.7:

    http://openresty.org/#Download

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

Below is the complete change log for this release, as compared to the last (devel) release, 1.2.4.5:
  • upgraded LuaJIT to 2.0.0rc3.
  • upgraded LuaNginxModule to 0.7.4.
    • feature: added new directive lua_check_client_abort (default to off) for monitoring and processing the event that the client closes the (downstream) connection prematurely. thanks Zhu Dejiang for request this feature.
    • feature: added new Lua API ngx.on_abort() which is used to register user Lua function callback for the event that the client closes the (downstream) connection prematurely. thanks Matthieu Tourne for suggesting this feature.
    • feature: ngx.exit(N) can now abort pending subrequests when N = 408 (request time out) or N = 499 (client closed request) or N = -1 (error).
    • bugfix: The TCP/stream cosocket's connect() method could not detect errors like "connection refused" when kqueue was used (on FreeBSD or Mac OS X, for example). thanks smallfish for reporting this issue.
    • bugfix: reading operations on ngx.req.socket() did not return any errors when the request body got truncated; now we return the "client aborted" error.
  • upgraded LuaRestyDNSLibrary to 0.09.
    • refactor: avoided using package.seeall in Lua module definitions, which improves performance and also prevents subtle bad side-effects.
    • bugfix: a debugging output might be sent to stdout unexpectedly in some code path.
  • upgraded LuaRestyMemcachedLibrary to 0.10.
    • refactor: avoided using package.seeall in Lua module definitions, which improves performance and also prevents subtle bad side-effects.
    • docs: fixed typos in README. thanks cyberty for the patch.
  • upgraded LuaRestyRedisLibrary to 0.15.
    • refactor: avoided using package.seeall in Lua module definitions, which improves performance and also prevents subtle bad side-effects.
    • optimize: avoided using ipairs() which is slower than plain for i=1,N loops.
  • upgraded LuaRestyMySQLLibrary to 0.11.
    • refactor: avoided using package.seeall in Lua module definitions, which improves performance and also prevents subtle bad side-effects.
    • feature: now the new() method will return a string describing the error as the second return value in case of failures.
  • upgraded LuaRestyUploadLibrary to 0.04.
    • refactor: avoided using package.seeall in Lua module definitions, which improves performance and also prevents subtle bad side-effects.
  • upgraded LuaRestyStringLibrary to 0.07.
    • refactor: avoided using package.seeall in Lua module definitions, which improves performance and also prevents subtle bad side-effects.
    • docs: typo-fixes in the code samples from Bearnard Hibbins.
  • bugfix: Nginx upstream modules could not detect the "connection refused" error in time if kqueue was used; now we apply the upstream_test_connect_kqueue patch for the Nginx core.
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:

    http://openresty.org/

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:

    http://qa.openresty.org

Have fun!

November 12, 2012 12:34 PM

October 31, 2012

Yichun Zhang (agentzh)

ngx_openresty devel version 1.2.4.5 released

I am happy to announce the new development version of ngx_openresty, 1.2.4.5:

    http://openresty.org/#Download

Below is the complete change log for this release, as compared to the last (devel) release, 1.2.4.3:
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:

    http://openresty.org/

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:

    http://qa.openresty.org

Enjoy!

October 31, 2012 09:53 AM

October 18, 2012

Yichun Zhang (agentzh)

ngx_openresty devel version 1.2.4.3 released

I am happy to announce the new development version of ngx_openresty, 1.2.4.3:

    http://openresty.org/#Download

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

Below is the complete change log for this release, as compared to the last (devel) release, 1.2.4.1:
  • upgraded LuaJIT to 2.0.0 beta11.
  • upgraded LuaRestyMemcachedLibrary to 0.09.
    • optimize: we now use Lua's own table.concat() to do string concatenation for all the memcached requests instead of relying on the cosocket API (on the C level) because calling the Lua C API is much slower especially when LuaJIT is in use. now for simple test cases loaded by ab -k -c10, we get 11.3% overall performance boost.
  • upgraded LuaNginxModule to 0.7.2.
    • feature: now we can automatically detect the vendor-provided LuaJIT-2.0 package on Gentoo. thanks Il'ya V. Yesin for the patch. it is still recommended, however, to explicitly set the environments LUAJIT_INC and LUAJIT_LIB.
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:

    http://openresty.org/

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:

    http://qa.openresty.org

Have fun!

October 18, 2012 07:50 AM

October 15, 2012

Yichun Zhang (agentzh)

ngx_openresty devel version 1.2.4.1 released

I am happy to announce the new development version of ngx_openresty, 1.2.4.1:

    http://openresty.org/#Download

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

Below is the complete change log for this release, as compared to the last (stable) release, 1.2.3.8:
  • upgraded the Nginx core to 1.2.4.
  • upgraded LuaNginxModule to 0.7.1.
    • feature: implemented the "light threads" API, which allows asynchronous concurrent processing within a single Nginx request handler, based on automatically-scheduled Lua coroutines. thanks Lee Holloway for requesting this feature.
    • bugfix: ngx.re.gsub() might throw out the exception attempt to call a string value when the replace argument was a Lua function and the subject string was large. thanks Zhu Maohai for reporting this issue.
    • bugfix: older gcc versions might issue warnings like variable 'nrets' might be clobbered by 'longjmp' or 'vfork', like gcc 3.4.3 (for Solaris 11) and gcc 4.1.2 (for Red Hat Linux). thanks Wenhua Zhang for reporting this issue.
    • docs: added a warning for ngx.var.VARIABLE that memory is allocated in the per-request memory pool. thanks lilydjwg.
    • docs: made it clear why return is recommended to be used with ngx.exit(). thanks Antoine.
    • docs: massive wording improvements from Dayo.
  • now we add SrcacheNginxModule before both LuaNginxModule and HeadersMoreNginxModule so that the former's output filter runs after those of the latter.
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:

    http://openresty.org/

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:

    http://qa.openresty.org

Enjoy!

October 15, 2012 05:48 AM

October 09, 2012

Yichun Zhang (agentzh)

ngx_openresty stable version 1.2.3.8 released

I am happy to announce the new stable version of ngx_openresty, 1.2.3.8:

   http://openresty.org/#Download

This release is exactly the same as the last development release, 1.2.3.7.

This is the final release based on the Nginx 1.2.3 core. The next (development) release will be based on Nginx 1.2.4 (or later if exists).

Also, I'll start the new 0.7.x series for the ngx_lua module, which will include the new "light threads" API developed on the git "thread" branch of the ngx_lua project. You can see more on ngx_lua's "light threads" in the following post on the openresty-en mailing list:

    http://groups.google.com/group/openresty-en/browse_thread/thread/c14e27a459964056

You're still very welcome to comment on this new feature :)

The following components are bundled with this release:
  • LuaJIT-2.0.0-beta10
  • array-var-nginx-module-0.03rc1
  • auth-request-nginx-module-0.2
  • drizzle-nginx-module-0.1.4
  • echo-nginx-module-0.41
  • encrypted-session-nginx-module-0.02
  • form-input-nginx-module-0.07rc5
  • headers-more-nginx-module-0.18
  • iconv-nginx-module-0.10rc7
  • lua-5.1.5
  • lua-cjson-1.0.3
  • lua-rds-parser-0.05
  • lua-redis-parser-0.10
  • lua-resty-dns-0.08
  • lua-resty-memcached-0.08
  • lua-resty-mysql-0.10
  • lua-resty-redis-0.14
  • lua-resty-string-0.06
  • lua-resty-upload-0.03
  • memc-nginx-module-0.13rc3
  • nginx-1.2.3
  • ngx_coolkit-0.2rc1
  • ngx_devel_kit-0.2.17
  • ngx_lua-0.6.10
  • ngx_postgres-1.0rc2
  • rds-csv-nginx-module-0.05rc2
  • rds-json-nginx-module-0.12rc10
  • redis-nginx-module-0.3.6
  • redis2-nginx-module-0.09
  • set-misc-nginx-module-0.22rc8
  • srcache-nginx-module-0.16
  • xss-nginx-module-0.03rc9
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. See OpenResty's homepage for details:

    http://openresty.org/

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:

    http://qa.openresty.org

Enjoy!

October 09, 2012 07:14 AM

October 07, 2012

Yichun Zhang (agentzh)

ngx_openresty devel version 1.2.3.7 released

I am happy to announce the new development version of ngx_openresty, 1.2.3.7:

   http://openresty.org/#Download

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

Below is the complete change log for this release, as compared to the last (development) release, 1.2.3.5:
  • upgraded LuaNginxModule to 0.6.10.
    • feature: now ngx.req.get_headers() returns a Lua table with keys in the all-lower-case form by default. thanks James Hurst and Matthieu Tourne for the feature request.
    • feature: now ngx.req.get_headers() adds an __index metamethod to the resulting Lua table by default, which will automatically normalize the lookup key by converting upper-case letters and underscores in case of a lookup miss. thanks James Hurst and Matthieu Tourne for suggesting this feature.
    • feature: now ngx.req.get_headers() accepts a second (optional) argument, raw, for controlling whether to return the original form of the header names (that is, the original letter-case).
    • feature: added public C API functions ngx_http_shared_dict_get and ngx_http_lua_find_zone to allow other Nginx C modules or a patched Nginx core to directly access the shared memory dictionaries created by LuaNginxModule. thanks Piotr Sikora for requesting this feature.
    • bugfix: fixed a compilation warning in the TCP/stream cosocket codebase when using (at least) gcc 3.4.6 for MIPS. thanks Dirk Feytons for reporting this as GitHub issue #162.
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. See OpenResty's homepage for details:

    http://openresty.org/

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:

    http://qa.openresty.org

Have fun!

October 07, 2012 04:19 AM

October 02, 2012

Yichun Zhang (agentzh)

ngx_openresty devel version 1.2.3.5 released

I am happy to announce the new development version of ngx_openresty, 1.2.3.5:

   http://openresty.org/#Download

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

Below is the complete change log for this release, as compared to the last (development) release, 1.2.3.3:
  • upgraded LuaNginxModule to 0.6.8.
    • bugfix: ngx.re.gmatch might loop infinitely when the pattern matches an empty string. thanks Lance Li and xingxing for tracking this issue down.
    • bugfix: pattern matching an empty substring in ngx.re.gmatch did not match at the end of the subject string.
    • bugfix: ngx.re.gsub might enter infinite loops because it could not handle patterns matching empty strings properly.
    • bugfix: ngx.re.gsub incorrectly skipped matching altogether when the subject string was empty.
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. See OpenResty's homepage for details:

    http://openresty.org/

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:

    http://qa.openresty.org

Enjoy!

October 02, 2012 03:35 AM

September 28, 2012

Yichun Zhang (agentzh)

Test::Nginx 0.21 released

I've just uploaded Test::Nginx 0.21 to CPAN, which features embeded TCP/UDP testing server support and SystemTap integration for white-box testing:

    http://search.cpan.org/perldoc?Test::Nginx

It will appear on the CPAN mirror near you in the next few hours or so.

Special thanks go to all our contributors and users :)

Here's the complete change log for this release (compared to the last CPAN release, 0.20, released three months ago):
  • feature: added support for SystemTap: the SystemTap white-box testing mode is enabled by setting TEST_NGINX_USE_STAP=1 and by using new test sections "--- stap", "--- stap_out", and "--- stap_out_like".
  • feature: added support for new sections "--- udp_listen" and "--- udp_reply" for mocking an internal UDP server.
  • feature: added new section "--- udp_reply_delay" and also make "--- udp_reply_delay" and "--- timeout" sections accept time values with a time unit which can be either "s" or "ms".
  • feature: added new section "--- udp_query" to test if the UDP query sent to the embeded UDP server is expected.
  • feature: added new section "--- tcp_query_len" to work with mockeagain testing modes.
  • feature: added support for embedded TCP server by introducing new sections "--- tcp_listen", "--- tcp_query", "--- tcp_reply", and "--- tcp_reply_delay".
  • feature: added new section "--- tcp_no_close" to tell the embedded TCP server (if any) never close the connection actively. this is feature is mainly for mocking upstream reply read time out in the middle.
  • feature: added new section "--- log_level" to specify the error log level on a test-by-test basis.
  • bugfix: we might lose logs at config-time when TEST_NGINX_USE_HUP=1 because we sent HUP before USR1.
  • bugfix: be more tolarent when removing the nginx pid file while the nginx process is not running.
  • optimize: now we can automatically check the version of the current nginx configuration and retry dozens of times when TEST_NGINX_USE_HUP=1. this speed up the test suite in this mode a lot and also avoid accidental failures due to slow nginx reloads.
  • bugfix: try harder when failing to connect to the Nginx server.
  • refactor: now we use the standard "return" directive instead of "echo" for detecting nginx config reload completion for the "HUP reload" testing mode.
  • refactor: use waitpid() wherever possible.
  • bugfix: Parallel::ForkManager does not allow the user calling waitpid directly, or inifinite looping might happen when calling its start() method. now we no longer use this module any more and use the fork() builtin function exclusively.
  • bugfix: disabled the ending output "Looks like you ..." when the client socket timed out.
  • refactor: now we disabled the access log by default.
  • updated the bundled versions of Test::Builder and Test::More modules.
  • docs: documented the "--- skip_nginx" and "--- skip_nginx2" sections.  thanks Weibin Yao for requesting it.
This Perl module provides a test scaffold based on IO::Socket or LWP for automated testing in Nginx C module or ngx_lua-based Lua library development.

This class inherits from Test::Base, thus bringing all its declarative power to the Nginx C module testing practices.

Please check out the full documentation on CPAN:

    http://search.cpan.org/perldoc?Test::Nginx::Socket

All of our Nginx modules (as well as our lua-resty-* libraries) are using Test::Nginx to drive their test suites.

Please note that this module is completely different from the Test::Nginx module created by Maxim Dounin.

The git repository for this Perl module is hosted on GitHub:

    https://github.com/agentzh/test-nginx

Enjoy!

September 28, 2012 04:20 AM

Yichun Zhang (agentzh)

ngx_openresty devel version 1.2.3.3 released

I am happy to announce the new development version of ngx_openresty, 1.2.3.3:

   http://openresty.org/#Download

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

Below is the complete change log for this release, as compared to the last (development) release, 1.2.3.1:
  • upgraded LuaNginxModule to 0.6.7.
    • feature: implemented the shdict:flush_expired(max_count?) method for flushing out and removing expired items up to max_count (or unlimited when max_count == 0). thanks Brian Akins for the patch.
    • optimize: tcpsock:send() now calls c->send() instead of ngx_output_chain(), which gives about 4% ~ 5% performance boost for a simple test case accessing Redis for several times.
    • optimize: we now skip processing in the default write event handler when the write event is not ready.
    • refactor: the I/O scheduler has been rewritten to keep track of the coroutine associated with each (non-blocking) I/O operation automatically, which paves a way to the upcoming ngx.thread API (aka the "lightweight thread" API).
    • refactor: now we use a new Nginx subrequest model that bypasses ngx_http_postpone_filter_module completely, which paves a way for arbitrary order of outputting among subrequests and their parents when the ngx.thread API lands in the near future.
    • bugfix: the "http finalize non-active request" alerts might happen when subrequests were used. thanks Lance Li for reporting this issue.
    • bugfix: reset the subrequest status code when the ngx_http_upstream request in the subrequest fails due to timeout errors or premature connection close and etc. this fix also requires the nonbuffered-upstream-truncation patch for the Nginx core to cancel a limitation in ngx_http_upstream.
    • bugfix: fixed the gcc error -Werror=strict-aliasing in the Lua/LuaJIT bytecode loader when -O2 or above is used. thanks jinglong for the patch.
    • bugfix: the main request might be prematurely terminated if a subrequest issued by ngx.location.capture (or its friends) was finalized with error codes.
    • bugfix: the Nginx built-in resolver might not be destroyed in time when it was used by ngx.socket.tcp and ngx.socket.udp.
    • bugfix: coroutine.status() returned suspended for normal coroutines.
    • bugfix: coroutine.resume() did not return an error immediately when operating on normal coroutines.
    • bugfix: when the entry coroutine was yielded by coroutine.yield() then after it was resumed automatically its status would still be suspended.
    • bugfix: the write event timer might not be removed in time in ngx.flush(true) when ngx_handle_write_event failed.
    • bugfix: always remove the read event timer during downstream cosocket finalization if it is not removed yet.
    • bugfix: ngx.flush(true) might not return immediately when it should.
    • bugfix: the resume_handler field of the subrequest ctx was not properly initialized.
    • feature: added new dtrace static probes http-lua-user-coroutine-yield and http-lua-entry-coroutine-yield.
    • docs: fixed the documentation for ngx.req.set_header and made it clear that the modified request headers will be inherited by the subrequests by default. thanks James Hurst for reporting this issue.
    • docs: documented the trick for doing background asynchronous jobs by using ngx.eof() + keepalive_timeout 0. thanks Lance Li for the suggestion.
  • upgraded LuaRedisParserLibrary to 0.10.
    • bugfix: Lua stack overflow would happen when too many Redis arguments were passed into the build_query method. thanks Guo Yin for reporting this issue.
  • upgraded LuaRestyDNSLibrary to 0.08.
    • feature: added new method tcp_query to enforce pure TCP transportation for the DNS queries.
    • feature: added support for TCP retries when the UDP reply gets truncated.
    • feature: added support for PTR queries and records.
    • feature: added support for TXT queries and records.
    • feature: added support for NS queries and records.
    • bugfix: the udp resolver did not discard DNS replies with unmatched IDs for 128 times as originally designed.
  • upgraded LuaRestyRedisLibrary to 0.14.
    • optimize: now we do the string concatenation for Redis queries on the Lua land instead of on the C land, which gives 6% ~ 7% over-all performance boost when using LuaJIT 2.0 beta10.
    • docs: fixed a typo in the sample code. thanks xingxing for reporting it.
  • upgraded LuaRestyMemcachedLibrary to 0.08.
    • feature: added new option key_transform to the new method to allow the user to override the default escaping and unescaping methods for Memcached keys. thanks Matthieu Tourne for the patch.
    • bugfix: now the new method will return a string describing the error as the second return value in case of failures.
    • docs: added more documentation for the set_keepalive method.
    • docs: documented that this library cannot be used in those contexts where the LuaNginxModule cosocket API is unavailable.
    • docs: documented that storing the object instance into Lua module-level variables will result in failures for concurrent requests.
  • upgraded SrcacheNginxModule to 0.16.
    • bugfix: srcache_fetch would use truncated responses from MemcNginxModule or other upstream modules. this usually happened when the upstream read timer was expired or the upstream prematurely closed the connection. this fix also requires the nonbuffered-upsteram-truncation patch to cancel a limitation in the Nginx core. thanks Bryan Alger for reporting the issue.
    • bugfix: the main request response was not discarded by srcache_store when there was an error in the last minute (like a read-timeout error or premature connection close happens when ngx_http_upstream reads the upstream response body). this fix also requires the nonbuffered-upstream-truncation patch for the Nginx core to cancel a limitation in ngx_http_upstream.
    • bugfix: the main request might prematurely terminate if the srcache_store subrequest was finalized with error codes.
  • upgraded Redis2NginxModule to 0.09.
  • feature: updated the dtrace patch to add new static probe create-pool-done.
  • feature: updated the dtrace patch to include new tapset functions ngx_indent, ngx_http_subreq_depth, and ngx_http_req_parent.
  • bugfix: added the nonbuffered-upstream-truncation patch for the Nginx core to make ngx_http_upstream provide a way in the context of a subrequest to signal the parent of errors when upstream data truncation happens. thanks Bryan Alger for reporting this issue. (This is a temporary solution and I'll work on a new patch as per Maxim Dounin's suggestions.)
  • bugfix: applied the channel-uninit-params patch for the Nginx core to fix Valgrind/Memcheck warnings about unitialized bytes in the parameters of sendmsg.
  • feature: updated the allow_request_body_updating patch to define the HAVE_ALLOW_REQUEST_BODY_UPDATING_PATCH macro.
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. See OpenResty's homepage for details:

    http://openresty.org/

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:

    http://qa.openresty.org

Have fun!

September 28, 2012 03:25 AM

August 23, 2012

Yichun Zhang (agentzh)

ngx_openresty devel version 1.2.3.1 released

I am happy to announce the new development version of ngx_openresty, 1.2.3.1:

   http://openresty.org/#Download

Special thanks go to all our contributors and users for making this happen!

Below is the complete change log for this release, as compared to the last (stable) release, 1.2.1.14:
  • upgraded the Nginx core to 1.2.3.
  • upgraded LuaNginxModule to 0.6.2.
    • feature: (re)implemented the standard Lua coroutine API, which means that the user is now free to create and run their own coroutines within the boilerplate coroutine created automatically by LuaNginxModule. thanks chaoslawful and jinglong for the design and implementation.
    • feature: added new dtrace static probes for the user coroutine mechanism: http-lua-coroutine-create and http-lua-coroutine-resume.
    • feature: added new dtrace static probes for the cosocket mechanism: http-lua-socket-tcp-send-start, http-lua-socket-tcp-receive-done, and http-lua-socket-tcp-setkeepalive-buf-unread.
    • bugfix: the send timeout timer for downstream output was not deleted in time in our write event handler, which might result in request abortion for long running requests. thanks Demiao Lin (ldmiao) for reporting this issue.
    • bugfix: tcpsock:send() might send garbage if it was not the first call: we did not properly initialize the chain writer ctx for every send() call. thanks Zhu Dejiang for reporting this issue.
    • bugfix: the ngx_http_lua_probe.h header file was not listed in the NGX_ADDON_DEPS list in the config file.
    • optimize: removed unnecessary code that was for the old coroutine abortion mechanism based on Lua exceptions. we no longer need that at all because we have switched to using coroutine yield to abort the current coroutine for ngx.exec, ngx.exit, ngx.redirect, and ngx.req.set_uri(uri, true).
  • upgraded LuaRestyDNSLibrary to 0.06.
    • feature: added support for MX type resource records.
    • feature: unrecognized types of resource records will return their raw resource data (RDATA) as the rdata Lua table field.
  • upgraded LuaRestyRedisLibrary to 0.13.
    • feature: added new method read_reply, mostly for using the Redis Pub/Sub API.
    • feature: added new class method add_commands to allow adding support for new Redis commands on-the-fly. thanks Praveen Saxena for requesting this feature.
    • docs: added a code sample for using the Redis transactions.
  • upgraded DrizzleNginxModule to 0.1.4.
    • bugfix: the open socket #N left in connection alerts would appear in the nginx error log file when the MySQL/Drizzle connection pool was used and the worker process was shutting down.
  • upgraded PostgresNginxModule to 1.0rc2.
    • bugfix: the open socket #N left in connection alerts would appear in the nginx error log file when the PostgreSQL connection pool was used and the worker process was shutting down.
    • bugfix: removed the useless http-cache related code from ngx_postgres_upstream_finalize_request to suppress clang warnings.
  • added more dtrace static probes to the Nginx core: timer-add, timer-del, and timer-expire.
  • added more systemtap tapset functions: ngx_chain_next, ngx_chain_writer_ctx_out, ngx_chain_dump, and ngx_iovec_dump.
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. See OpenResty's homepage for details:

    http://openresty.org/

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:

    http://qa.openresty.org

Enjoy!

August 23, 2012 08:38 AM