Ngx_openresty devel version 1.2.7.3 released

Hello!

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

http://openresty.org/#Download

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, 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 T. 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.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 T. 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 T. 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 T. 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 T. 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 T. 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 T. 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.

    • 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
      $echo_client_request_headers.

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

The HTML version of the change log with some helpful hyper-links can
be browsed here:

http://openresty.org/#ChangeLog1002007

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!
-agentzh

good news !

Posted at Nginx Forum:

Hello!

On Fri, Apr 5, 2013 at 7:02 PM, Bearnard Hibbins wrote:

  • Known issues:
    “Server” header still says 1.2.7.1 but is actually 1.2.7.3

I cannot reproduce it on my side:

$ curl -i localhost/lua
HTTP/1.1 200 OK
Server: ngx_openresty/1.2.7.3
Date: Sat, 06 Apr 2013 05:13:54 GMT
Content-Type: application/octet-stream
Transfer-Encoding: chunked
Connection: keep-alive

LuaJIT 2.0.1

Are you sure you’re using the new nginx executable? Please note that
“HUP reload” will not update the nginx executable.

lua-cjson is 2.1.0 and not 1.0.3 (not sure if thats a real issue)

I doubt.

Regards,
-agentzh