Hi folks! I am happy to announce the new formal release, 1.13.6.2, of the OpenResty web platform based on NGINX and LuaJIT:
https://openresty.org/en/download.html The (portable) source code distribution, the Win32/Win64 binary distributions, and the pre-built binary Linux packages for Ubuntu, Debian, Fedora, CentOS, RHEL, Amazon Linux are provided on this Download page. Starting from this release, we provide official 64-bit Windows native binary package for OpenResty. We also provide new yum package repositories for Ubuntu 18.04 Bionic. The next OpenResty release will be based on the nginx core 1.13.12 or a version in the upcoming nginx 1.15.x series. Special thanks go to all our developers and contributors! And thanks OpenResty Inc. (https://openresty.com/ ) for sponsoring a lot of the OpenResty core development work. We have the following highlights in this release: 1. We now have full official support for the OpenSSL 1.1.0 series (the last tested version is OpenSSL 1.1.0h). 2. We now provide official 64-bit Windows native binary packages for OpenResty. 3. We now provide a new table.clone() builtin Lua API function in our bundled version of LuaJIT, which can also be JIT compiled. 4. We now provide UDP downstream cosocket API in our ngx_stream_lua module. Now the community can build high performance UDP server applications with Lua atop OpenResty. 5. New flush_all() method added to our lua-resty-lrucache Lua library. 6. Our resty command-line utility's startup/exit time is significantly reduced on *NIX systems. Now it takes only ~10ms to run a hello world program on a mid-2015 Macbook Pro. 7. We now avoid running Lua VM instances in NGINX's helper processes like "cache loader" and "cache manager" to reduce memory footprint in those processes. 8. New raw_client_addr() function added to the ngx.ssl Lua module. 9. New ngx.base64 module added to lua-resty-core with new Lua API functions encode_base64url() and decode_base64url(). 10. Various time-related Lua APIs provided by ngx_lua are now re-implemented via LuaJIT FFI in lua-resty-core so that they can be JIT compiled and run much faster. 11. New lua_add_variable config directive provided by the ngx_stream_lua module so that we can define new NGINX variables for the stream subsystem. 12. New add_header() Lua API has been added to the new ngx.resp Lua module to mimic NGINX's standard add_header directive on the Lua land. 13. Support for the optional "init_ttl" argument in shdict:incr() method so that when the key is missing we can add a default TTL value of our own. 14. Added the "local=on" and "local=/path/to/resolv.conf" options to the standard "resolver" config directive. This can enable the use of system-level nameserver configurations of /etc/resolv.conf, for example, in nginx's own nonblocking DNS resolver. The complete change log since the last (formal) release, 1.13.6.1: * win64: distributing official 64-bit Windows binary packages for OpenResty using the MSYS2/MinGW toolchain. * win32: now we build our official 32-bit Windows binary packages for OpenResty using the MSYS2/MinGW toolchain. * win32: upgraded pcre to 8.42 and openssl to 1.1.0h. * optimize: now the openresty build system ("./configure") automatically patches the resty command-line utility to use its own nginx binary so that it does not have to compute it at runtime (which is a bit expensive). this saves about 10ms (from for total 20ms to 10ms) for resty's startup time, as measured on a mid-2015 MBP. That's 50% reduction in total startup time! Yay! * win32/win64: enabled ngx_stream_ssl_preread_module in our binary builds. * bugfix: ./configure: relative paths in --add-dynamic-module=PATH option did not work. thanks catatsuy for the patch. * feature: added a patch for the nginx core to add the "local=on" and "local=/path/to/resolv.conf" options to the standard "resolver" config directive. This can enable the use of system-level nameserver configurations of /etc/resolv.conf, for example, in nginx's own nonblocking DNS resolver. thanks Datong Sun for the patch. * feature: added the "socket_cloexec" patch to ensure most of the nginx connections could be closed before child process terminates. thanks spacewander for the patch. * feature: added patches to the nginx core to make sure ngx_stream_ssl_preread_module will not skip the rest of the preread phase when SNI server name parsing was successful. thanks Datong Sun for the patch. * feature: ./configure: updated the stream subsystem related options from nginx 1.13.6. thanks hy05190134 for the patch. * feature: added the SSL "sess_set_get_cb" yielding support patch for OpenSSL 1.1.0d and beyond. thanks spacewander for the patch. * feature: applied the "init_cycle_pool_release" patch to nginx 1.13.6+ cores to make it valgrind or asan clean. * bugfix: we incorrectly removed the existing Makefile even for "./configure --help". thanks spacewander for the patch. * feature: added information about OpenResty's commercial support in the default index.html page. * opm: doc index: updated the LuaJIT 2.1's official docs to the latest version. * upgraded resty-cli to 0.21. * resty: got rid of prerequisite perl modules to improve startup time. Startup time has been significantly reduced on *NIX systems. No improvment on Win32 though. On my mid-2015 MBP, the "resty -e "print(1)"" command's total time can drop from ~36ms to ~10ms. *bugfix: when the signal is received but the child process is already gone, resty incorrectly returned non-zero return code and output "No such process" error. thanks Datong Sun for the patch. * upgraded opm to 0.0.5. * bugfix: opm get: curl via HTTP proxies would complain about "bad response status line received". The first "Connection established" response might not come with any response header entries at all. * upgraded ngx_lua to 0.10.13. * feature: ngx.req.get_post_args(), ngx.req.get_uri_args(), ngx.req.get_headers(), ngx.resp.get_headers(), and ngx.decode_args() now would return an error string, "truncated", when the input exceeds the "max_args"/"max_headers" limits. * feature: added support for the OpenSSL 1.1.0 serires. thanks Alessandro Ghedini for the original patch and the subsequent polishment work from Dejiang Zhu and spacewander. * feature: added the "init_ttl" argument to the pure C function for the shdict:incr() API. thanks Thibault Charbonnier for the patch. * feature: added support for the 308 status code in ngx.redirect(). thanks Mikhail Senin for the patch. * feature: ssl: support enabling TLSv1.3 via the lua_ssl_protocols config directive. thanks Alessandro Ghedini for the patch. * feature: "ngx_http_lua_ffi_set_resp_header()": now add an override flag argument to control whether to override existing resp headers. this feature is required by the new ngx.resp module's "add_header()" Lua API (in lua-resty-core). thanks spacewander for the patch. * feature: allowed sending boolean and nil values in cosockets. thanks spacewander for the patch. * feature: api.h: exposed the "ngx_http_lua_ffi_str_t" C data type for other Nginx C modules. * feature: logged the tcp cosocket's remote end address when tcpsock:connect() times out and "lua_socket_log_errors" is on. This feature makes debug connect timeout errors easier, since domain name may map to different ip address in different time. thanks spacewander for the patch. * bugfix: ngx.resp.get_headers(): the "max_headers" limit did not cover builtin headers. * bugfix: "ngx_http_lua_ffi_ssl_set_serialized_session()": avoided memory leak when calling it repeatly. * bugfix: we now throw a Lua exception when ngx.location.capture* Lua API is used inside an HTTP2 request since it is known to lead to hanging. * bugfix: nginx rewrite directive may initiate internal redirects without clearing any module ctx and rewrite_by_lua* handlers might think it was re-entered and thus it might lead to request hang. thanks twistedfall for the report. * bugfix: avoided sharing the same code object for identical Lua inlined code chunks in different phases due to chunk name conflicts. thanks yandongxiao for the report and spacewander for the patch. * bugfix: ngx.req.raw_header(): the first part of the header would be discarded when using single LF as delimiter and the number of headers is large enough. thanks tokers for the patch. * bugfix: pure C API for ngx.var assignment: we failed to output the error message length. this might lead to error buffer overreads. thanks Ka-Hing Cheung for the patch. * bugfix: the upper bound of port ranges should be 65535 instead of 65536. thanks spacewander for the patch. * bugfix: we did not always free up all connections when cleaning up socket pools. thanks spacewander for the patch. * bugfix: use of lua-resty-core's ngx.re API in init_by_lua* might lead to memory issues during nginx HUP reload when no lua_shared_dict directives are used and the regex cache is enabled. * change: switched to "SSL_version()" calls from "TLS1_get_version()". "TLS1_get_version" is a simple wrapper for "SSL_version" that returns 0 when used with DTLS. However, it was removed from BoringSSL in 2015 so instead use "SSL_version" directly. Note: BoringSSL is never an officially supported target for this module. "ngx_http_lua_ffi_ssl_get_tls1_version" can never be reached with DTLS so the behaviour is the same. thanks Tom Thorogood for the patch. * optimize: switched exptime argument type to 'long' in the shdict FFI API to mitigate potential overflows. thanks Thibault Charbonnier for the patch. * optimize: avoided the string copy in "ngx_http_lua_ffi_req_get_method_name()". * optimize: corrected the initial table size of req socket objects. thanks spacewander for the patch. * optimize: destroy the Lua VM and avoid running any init_worker_by_lua* code inside cache helper processes. thanks spacewander for the patch. * doc: fixed an error message typo in "set_der_priv_key()". thanks Tom Thorogood for the patch. * doc: mentioned that OpenResty includes its own version of LuaJIT which is specifically optmized and enhanced for OpenResty. * doc: some typo fixes from hongliang. * doc: setting ngx.header.HEADER no longer throws out an exception when the header is already sent out; it now just logs an error message. thanks yandongxiao for the patch. * doc: typo fixes from yandongxiao. * doc: typo fixes from tan jinhua. * doc: fixed a typo in a code comment. thanks Alex Zhang for the patch. * upgraded lua-resty-core to 0.1.15. * feature: implemented ngx.resp module and its function add_header(). The ngx.resp module's "add_header" works like the "add_header" Nginx directive. Unlike the "ngx.header.HEADER=" API, this method appends new header to the old one instead of overriding any existing ones. Unlike the "add_header" directive, this method overrides the builtin header instead of appending to it. thanks spacewander for the patch. * feature: the FFI version of the ngx.req.get_uri_args() and ngx.req.get_headers() API functions now would return an error string, "truncated", when the input exceeds the "max_args"/"max_headers" limits. * bugfix: ngx.re: fixed a "split()" corner case when successtive separator characters are at the end of the subject string. * bugfix: shdict: switched exptime argument type to 'long' to mitigate potential overflows. * bugfix: ngx.ssl.session: avoided memory leaks when calling set_serialized_session repeatly. thanks spacewander for the patch. * optimize: avoided an extra string copy in ngx.req.get_method(). thanks spacewander for the patch. * change: replaced "return error()" with "error()" to avoid stack unwinding upon Lua exceptions. this should give much better Lua backtrace for the errors. thanks spacewander for the patch. * bugfix: ngx.re: fixed a split() edge-case when using control characters in the regex. thanks Thibault Charbonnier for the patch. * feature: shdict:incr(): added the "init_ttl" argument to set the ttl of values when they are first created via the "init" argument. thanks Thibault Charbonnier for the patch. * feature: re-implemented the remaining time related Lua APIs with FFI (like ngx.update_time, ngx.http_time, ngx.parse_http_time, and etc.). thanks spacewander for the patch. * feature: ngx.errlog: added the raw_log() API function to allow the building of custom logging facilities. thanks Thibault Charbonnier for the patch. * feature: added new API function "get_master_pid()" to the ngx.process module. thanks chronolaw for the patch. * doc: typo fixes from chronolaw. * feature: added new resty.core.phase module to include the pure FFI version of the ngx.get_phase() API. thanks Robert Paprocki for the patch. * feature: added new ngx.base64 Lua module with the functions encode_base64url() and decode_base64url(). thanks Datong Sn for the patch. * bugfix: resty.core.var: ngx.var.VAR assignment might over-read the error msg buffer. thanks Ka-Hing Cheung for the patch. * optimize: use plain text string.find calls when we mean it. * feature: ngx.ssl: added new raw_client_addr() Lua API function. thanks ηεδΌ for the patch. * upgraded lua-cjson to 2.1.0.6. * optimize: improved forward-compatibility with older versions of Lua/LuaJIT. thanks Thibault Charbonnier for the patch. * bugfix: fixed the C compiler warning "SO C90 forbids mixed declarations and code" on older operating systems. * feature: set "cjson.array_mt" on decoded JSON arrays. this can be turned on via "cjson.decode_array_with_array_mt(true)". off by default for backward compatibility. thanks Thibault Charbonnier for the patch. * feature: added new cjson.array_mt metatable to allow enforcing JSON array encoding. thanks Thibault Charbonnier for the patch. * bugfix: fixed a -Wsign-compare compiler warning. thanks gnought for the patch. * upgraded lua-resty-lrucache to 0.08. * feature: added new method flush_all() to flush all the data in an existing cache object. thanks yang.yang for the patch. * upgraded lua-resty-dns to 0.21. * refactor: cleaned up some variable names and locals. thanks Thijs Schreijer for the patch. * bugfix: fixed issues with retrans not being honoured upon connection failures. thanks Thijs Schreijer for the patch. * feature: improved error reporting, making it more precise, and returning errors of previous tries. thanks Thijs Schreijer for the patch. * bugfix: fix parsing state after SOA record. Correct parsing of Additional Records failed due to a bad parsing state after processing a SOA record in the Authorative nameservers section. DNS response based on "dig @ns1.google.com SOA google.com". thanks Peter Wu for the patch. * bugfix: fix typo in SOA record field "minimum". Rename "mininum" to "minimum", fixes issue in original feature added with lua-resty-dns v0.19rc1. * upgraded lua-resty-string to 0.11. * feature: resty.aes: added compaibility with OpenSSL 1.1.0+. thanks spacewander for the patch. * upgraded ngx_stream_lua to 0.0.5. * feature: we now have raw request downstream cosocket support for scripting UDP servers. thanks Datong Sun for the patch. * feature: added the preread handler postponing feature. thanks Datong Sun for the patch. * feature: added new config directive lua_add_variable to allow adding changeable. thanks Datong Sun for the patch. * upgraded ngx_set_misc to 0.32. * bugfix: set_quote_pgsql_str: we did not escape the "$" character. thanks Yuansheng Wang for the patch. * refactor: made "ngx_http_pg_utf_islegal()" much better. * bugfix: fixed the "-Wimplicit-fallthrough" warinings from GCC 7. thanks Andrei Belov for the patch. * upgraded ngx_redis2 to 0.15. * bugfix: "ragel -G2" genreates C code which results in "-Werror=implicit-fallthrough" compilation errors at least with gcc 7.2. switched to "ragel -T1" instaed. * upgraded ngx_memc to 0.19 * bugfix: "ragel -G2" genreates C code which results in "-Werror=implicit-fallthrough" compilation errors at least with gcc 7.2. switched to "ragel -T1" instaed. * upgraded ngx_encrypted_session to 0.08. * feature: added support for OpenSSL 1.1.0. thanks spacewander for the patch. * upgraded ngx_rds_csv to 0.09. * bugfix: fixed the "-Werror=implicit-fallthrough" compilation errors at least with gcc 7.2. * upgraded ngx_drizzle to 0.1.11. * bugfix: fixed the "-Werror=implicit-fallthrough" compilation errors at least with gcc 7.2. * upgraded ngx_xss to 0.06. * bugfix: "ragel -G2" genreates C code which results in "-Werror=implicit-fallthrough" compilation errors at least with gcc 7.2. switched to "ragel -T1" instaed. * bugfix: fixed errors and warnings with C compilers without variadic macro support. * upgraded LuaJIT to 2.1-20180419: https://github.com/openresty/luajit2/tags * feature: implemented new API function "jit.prngstate()" for reading or setting the current PRNG state number used in the JIT compiler. * feature: implemented the table.clone() builtin Lua API. This change only support shallow clone. e.g local tab_clone = require "table.clone" local x = {x=12, y={5, 6, 7}} local y = tab_clone(x) -- ... use y here ... We observed 7% over-all speedup in the edgelang-fan compiler's compiling speed whose Lua is generated by the fanlang compiler. thanks Shuxin Yang for the patch and OpenResty Inc. for sponsoring this work. * imported Mike Pall's latest changes: * DynASM/x86: Add BMI1 and BMI2 instructions. * Fix rechaining of pseudo-resurrected string keys. * Clear stack after "print_jit_status()" in CLI. * Fix GCC 7 "-Wimplicit-fallthrough" warnings. * FFI: Don't assert on "#1LL" (Lua 5.2 compatibility mode only). * MIPS64: Fix soft-float +-0.0 vs. +-0.0 comparison. * Fix LuaJIT API docs for "LUAJIT_MODE_*". * Fix ARMv8 (32 bit subset) detection. * Fix "string.format("%c", 0)". * Fix "IR_BUFPUT" assembly. * MIPS64: Fix "xpcall()" error case. * ARM64: Fix "xpcall()" error case. * Fix saved bytecode encapsulated in ELF objects. * MIPS64: Fix register allocation in assembly of HREF. * ARM64: Fix assembly of HREFK. * Fix FOLD rule for strength reduction of widening. The HTML version of the change log with lots of helpful hyper-links can be browsed here: https://openresty.org/en/changelog-1013006.html OpenResty is a full-fledged web platform by bundling the standard Nginx core, LuaJIT, lots of 3rd-party Nginx modules and Lua libraries, as well as most of their external dependencies. See OpenResty's homepage for details: https://openresty.org/ We have run extensive testing on our Amazon EC2 test cluster and ensured that all the components (including the Nginx core) play well together. The latest test report can always be found here: https://qa.openresty.org/ We also always run our OpenResty Edge commercial software based on the latest open source version of OpenResty in our own global CDN network (dubbed "mini CDN") powering our openresty.org and openresty.com websites. See https://openresty.com/ for more details. Enjoy! Best regards, Yichun _______________________________________________ nginx mailing list nginx@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx