<?xml version="1.0"?>
<rss version="2.0">
<channel>
<title>OpenResty</title>
<description>a fast web app server by extending nginx </description>
<language>en</language>
<copyright>Copyright 2013 YichunZhang</copyright>
<pubDate>Mon, 10 Jun 2013 22:33:17 GMT</pubDate>
<lastBuildDate>Mon, 10 Jun 2013 22:33:17 GMT</lastBuildDate>
<docs>http://blogs.law.harvard.edu/tech/rss</docs>
<generator>TiddlyWiki 2.6.2</generator>
<item>
<title>Changes</title>
<description>&lt;a tiddler=&quot;Changes&quot; commandname=&quot;permalink&quot; class=&quot;button command_permalink&quot; title=&quot;Permalink for this tiddler&quot; href=&quot;javascript:;&quot;&gt;permalink&lt;/a&gt;&lt;br&gt;&lt;ul&gt;&lt;li&gt; &lt;a tiddlylink=&quot;ChangeLog1002008&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#ChangeLog1002008&quot; href=&quot;null#ChangeLog1002008&quot; class=&quot;externalLink null&quot;&gt;Release 1.2.8.x&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a tiddlylink=&quot;ChangeLog1002007&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#ChangeLog1002007&quot; href=&quot;null#ChangeLog1002007&quot; class=&quot;externalLink null&quot;&gt;Release 1.2.7.x&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a tiddlylink=&quot;ChangeLog1002006&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#ChangeLog1002006&quot; href=&quot;null#ChangeLog1002006&quot; class=&quot;externalLink null&quot;&gt;Release 1.2.6.x&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a tiddlylink=&quot;ChangeLog1002004&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#ChangeLog1002004&quot; href=&quot;null#ChangeLog1002004&quot; class=&quot;externalLink null&quot;&gt;Release 1.2.4.x&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a tiddlylink=&quot;ChangeLog1002003&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#ChangeLog1002003&quot; href=&quot;null#ChangeLog1002003&quot; class=&quot;externalLink null&quot;&gt;Release 1.2.3.x&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a tiddlylink=&quot;ChangeLog1002001&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#ChangeLog1002001&quot; href=&quot;null#ChangeLog1002001&quot; class=&quot;externalLink null&quot;&gt;Release 1.2.1.x&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a tiddlylink=&quot;ChangeLog1000015&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#ChangeLog1000015&quot; href=&quot;null#ChangeLog1000015&quot; class=&quot;externalLink null&quot;&gt;Release 1.0.15.x&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a tiddlylink=&quot;ChangeLog1000011&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#ChangeLog1000011&quot; href=&quot;null#ChangeLog1000011&quot; class=&quot;externalLink null&quot;&gt;Release 1.0.11.x&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a tiddlylink=&quot;ChangeLog1000010&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#ChangeLog1000010&quot; href=&quot;null#ChangeLog1000010&quot; class=&quot;externalLink null&quot;&gt;Release 1.0.10.x&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a tiddlylink=&quot;ChangeLog1000009&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#ChangeLog1000009&quot; href=&quot;null#ChangeLog1000009&quot; class=&quot;externalLink null&quot;&gt;Release 1.0.9.x&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a tiddlylink=&quot;ChangeLog1000008&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#ChangeLog1000008&quot; href=&quot;null#ChangeLog1000008&quot; class=&quot;externalLink null&quot;&gt;Release 1.0.8.x&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a tiddlylink=&quot;ChangeLog1000006&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#ChangeLog1000006&quot; href=&quot;null#ChangeLog1000006&quot; class=&quot;externalLink null&quot;&gt;Release 1.0.6.x&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a tiddlylink=&quot;ChangeLog1000005&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#ChangeLog1000005&quot; href=&quot;null#ChangeLog1000005&quot; class=&quot;externalLink null&quot;&gt;Release 1.0.5.x&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a tiddlylink=&quot;ChangeLog1000004&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#ChangeLog1000004&quot; href=&quot;null#ChangeLog1000004&quot; class=&quot;externalLink null&quot;&gt;Release 1.0.4.x&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a tiddlylink=&quot;ChangeLog8054&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#ChangeLog8054&quot; href=&quot;null#ChangeLog8054&quot; class=&quot;externalLink null&quot;&gt;Release 0.8.54.x&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;</description>
<link>null#Changes</link>
<pubDate>Mon, 10 Jun 2013 22:33:17 GMT</pubDate>

</item>
<item>
<title>ChangeLog1002008</title>
<description>&lt;a tiddler=&quot;ChangeLog1002008&quot; commandname=&quot;permalink&quot; class=&quot;button command_permalink&quot; title=&quot;Permalink for this tiddler&quot; href=&quot;javascript:;&quot;&gt;permalink&lt;/a&gt;&lt;br&gt;&lt;h1&gt; Stable Release 1.2.8.6 - 10 June 2013&lt;/h1&gt;&lt;ul&gt;&lt;li&gt; upgraded &lt;a tiddlylink=&quot;LuaJIT&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#LuaJIT&quot; href=&quot;null#LuaJIT&quot; class=&quot;externalLink null&quot;&gt;LuaJIT&lt;/a&gt; to 2.0.2.&lt;ul&gt;&lt;li&gt; changes: &lt;a target=&quot;_blank&quot; title=&quot;External link to http://luajit.org/changes.html&quot; href=&quot;http://luajit.org/changes.html&quot; class=&quot;externalLink&quot;&gt;http://luajit.org/changes.html&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;The following components are bundled:&lt;br&gt;&lt;ul&gt;&lt;li&gt; LuaJIT-2.0.2&lt;/li&gt;&lt;li&gt; array-var-nginx-module-0.03rc1&lt;/li&gt;&lt;li&gt; auth-request-nginx-module-0.2&lt;/li&gt;&lt;li&gt; drizzle-nginx-module-0.1.5&lt;/li&gt;&lt;li&gt; echo-nginx-module-0.45&lt;/li&gt;&lt;li&gt; encrypted-session-nginx-module-0.03&lt;/li&gt;&lt;li&gt; form-input-nginx-module-0.07&lt;/li&gt;&lt;li&gt; headers-more-nginx-module-0.20&lt;/li&gt;&lt;li&gt; iconv-nginx-module-0.10&lt;/li&gt;&lt;li&gt; lua-5.1.5&lt;/li&gt;&lt;li&gt; lua-cjson-1.0.3&lt;/li&gt;&lt;li&gt; lua-rds-parser-0.05&lt;/li&gt;&lt;li&gt; lua-redis-parser-0.10&lt;/li&gt;&lt;li&gt; lua-resty-dns-0.09&lt;/li&gt;&lt;li&gt; lua-resty-memcached-0.11&lt;/li&gt;&lt;li&gt; lua-resty-mysql-0.13&lt;/li&gt;&lt;li&gt; lua-resty-redis-0.15&lt;/li&gt;&lt;li&gt; lua-resty-string-0.08&lt;/li&gt;&lt;li&gt; lua-resty-upload-0.08&lt;/li&gt;&lt;li&gt; memc-nginx-module-0.13rc3&lt;/li&gt;&lt;li&gt; nginx-1.2.8&lt;/li&gt;&lt;li&gt; ngx_coolkit-0.2rc1&lt;/li&gt;&lt;li&gt; ngx_devel_kit-0.2.18&lt;/li&gt;&lt;li&gt; ngx_lua-0.8.2&lt;/li&gt;&lt;li&gt; ngx_postgres-1.0rc2&lt;/li&gt;&lt;li&gt; rds-csv-nginx-module-0.05rc2&lt;/li&gt;&lt;li&gt; rds-json-nginx-module-0.12rc10&lt;/li&gt;&lt;li&gt; redis-nginx-module-0.3.6&lt;/li&gt;&lt;li&gt; redis2-nginx-module-0.10&lt;/li&gt;&lt;li&gt; set-misc-nginx-module-0.22rc8&lt;/li&gt;&lt;li&gt; srcache-nginx-module-0.21&lt;/li&gt;&lt;li&gt; xss-nginx-module-0.03rc9&lt;/li&gt;&lt;/ul&gt;&lt;h1&gt; Devel Release 1.2.8.5 - 23 May 2013&lt;/h1&gt;&lt;ul&gt;&lt;li&gt; upgraded &lt;a tiddlylink=&quot;LuaNginxModule&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#LuaNginxModule&quot; href=&quot;null#LuaNginxModule&quot; class=&quot;externalLink null&quot;&gt;LuaNginxModule&lt;/a&gt; to 0.8.2.&lt;ul&gt;&lt;li&gt; feature: added &lt;code&gt;ngx.HTTP_MKCOL&lt;/code&gt;, &lt;code&gt;ngx.HTTP_COPY&lt;/code&gt;, &lt;code&gt;ngx.HTTP_MOVE&lt;/code&gt;, and other WebDAV request method constants; also added corresponding support to &lt;a target=&quot;_blank&quot; title=&quot;External link to http://wiki.nginx.org/HttpLuaModule#ngx.req.set_method&quot; href=&quot;http://wiki.nginx.org/HttpLuaModule#ngx.req.set_method&quot; class=&quot;externalLink&quot;&gt;ngx.req.set_method&lt;/a&gt; and &lt;a target=&quot;_blank&quot; title=&quot;External link to http://wiki.nginx.org/HttpLuaModule#ngx.location.capture&quot; href=&quot;http://wiki.nginx.org/HttpLuaModule#ngx.location.capture&quot; class=&quot;externalLink&quot;&gt;ngx.location.capture&lt;/a&gt;. thanks Adallom Roy for the patch.&lt;/li&gt;&lt;li&gt; feature: allow injecting new user Lua APIs (and overriding existing Lua APIs) in the &quot;ngx&quot; table.&lt;/li&gt;&lt;li&gt; bugfix: &lt;a target=&quot;_blank&quot; title=&quot;External link to http://wiki.nginx.org/HttpLuaModule#ngx.req.set_body_file&quot; href=&quot;http://wiki.nginx.org/HttpLuaModule#ngx.req.set_body_file&quot; class=&quot;externalLink&quot;&gt;ngx.req.set_body_file()&lt;/a&gt; always enabled Direct I/O which caused the alert message &quot;fcntl(O_DIRECT) ... Invalid argument&quot; in error logs on file systems lacking the Direct I/O support.  thanks Matthieu Tourne for reporting this issue.&lt;/li&gt;&lt;li&gt; bugfix: buffer corruption might happen in &lt;a target=&quot;_blank&quot; title=&quot;External link to http://wiki.nginx.org/HttpLuaModule#ngx.req.set_body_file&quot; href=&quot;http://wiki.nginx.org/HttpLuaModule#ngx.req.set_body_file&quot; class=&quot;externalLink&quot;&gt;ngx.req.set_body_file()&lt;/a&gt; when Nginx upstream modules were used later because &lt;a target=&quot;_blank&quot; title=&quot;External link to http://wiki.nginx.org/HttpLuaModule#ngx.req.set_body_file&quot; href=&quot;http://wiki.nginx.org/HttpLuaModule#ngx.req.set_body_file&quot; class=&quot;externalLink&quot;&gt;ngx.req.set_body_file()&lt;/a&gt; incorrectly set &lt;code&gt;r-&amp;gt;request_body-&amp;gt;buf&lt;/code&gt; to the in-file buffer which could get reused by &lt;code&gt;ngx_http_upstream&lt;/code&gt; for its own purposes.&lt;/li&gt;&lt;li&gt; bugfix: no longer automatically turn underscores (_) to dashes (-) in header names for &lt;a target=&quot;_blank&quot; title=&quot;External link to http://wiki.nginx.org/HttpLuaModule#ngx.req.set_header&quot; href=&quot;http://wiki.nginx.org/HttpLuaModule#ngx.req.set_header&quot; class=&quot;externalLink&quot;&gt;ngx.req.set_header&lt;/a&gt; and &lt;a target=&quot;_blank&quot; title=&quot;External link to http://wiki.nginx.org/HttpLuaModule#ngx.req.clear_header&quot; href=&quot;http://wiki.nginx.org/HttpLuaModule#ngx.req.clear_header&quot; class=&quot;externalLink&quot;&gt;ngx.req.clear_header&lt;/a&gt;. thanks aviramc for the report.&lt;/li&gt;&lt;li&gt; bugfix: segmentation fault might happen in nginx 1.4.x when calling &lt;a target=&quot;_blank&quot; title=&quot;External link to http://wiki.nginx.org/HttpLuaModule#ngx.req.set_header&quot; href=&quot;http://wiki.nginx.org/HttpLuaModule#ngx.req.set_header&quot; class=&quot;externalLink&quot;&gt;ngx.req.set_header&lt;/a&gt; on the &lt;code&gt;Cookie&lt;/code&gt; request headers because recent versions of Nginx no longer always initialize &lt;code&gt;r-&amp;gt;headers_in.cookies&lt;/code&gt;. thanks Rob W for reporting this issue.&lt;/li&gt;&lt;li&gt; bugfix: fixed the C compiler warning &quot;argument 'nret' might be clobbered by 'longjmp' or 'vfork'&quot; when compiling with Ubuntu 13.04's gcc 4.7.3. thanks jacky and Rajeev's reports.&lt;/li&gt;&lt;li&gt; bugfix: temporary memory leaks might happen when using &lt;a target=&quot;_blank&quot; title=&quot;External link to http://wiki.nginx.org/HttpLuaModule#ngx.escape_uri&quot; href=&quot;http://wiki.nginx.org/HttpLuaModule#ngx.escape_uri&quot; class=&quot;externalLink&quot;&gt;ngx.escape_uri&lt;/a&gt;, &lt;a target=&quot;_blank&quot; title=&quot;External link to http://wiki.nginx.org/HttpLuaModule#ngx.unescape_uri&quot; href=&quot;http://wiki.nginx.org/HttpLuaModule#ngx.unescape_uri&quot; class=&quot;externalLink&quot;&gt;ngx.unescape_uri&lt;/a&gt;, &lt;a target=&quot;_blank&quot; title=&quot;External link to http://wiki.nginx.org/HttpLuaModule#ngx.quote_sql_str&quot; href=&quot;http://wiki.nginx.org/HttpLuaModule#ngx.quote_sql_str&quot; class=&quot;externalLink&quot;&gt;ngx.quote_sql_str&lt;/a&gt;, &lt;a target=&quot;_blank&quot; title=&quot;External link to http://wiki.nginx.org/HttpLuaModule#ngx.decode_base64&quot; href=&quot;http://wiki.nginx.org/HttpLuaModule#ngx.decode_base64&quot; class=&quot;externalLink&quot;&gt;ngx.decode_base64&lt;/a&gt;, and &lt;a target=&quot;_blank&quot; title=&quot;External link to http://wiki.nginx.org/HttpLuaModule#ngx.encode_base64&quot; href=&quot;http://wiki.nginx.org/HttpLuaModule#ngx.encode_base64&quot; class=&quot;externalLink&quot;&gt;ngx.encode_base64&lt;/a&gt; in tight Lua loops because we allocated memory in nginx's request memory pool for these methods.&lt;/li&gt;&lt;li&gt; optimize: &lt;a target=&quot;_blank&quot; title=&quot;External link to http://wiki.nginx.org/HttpLuaModule#ngx.escape_uri&quot; href=&quot;http://wiki.nginx.org/HttpLuaModule#ngx.escape_uri&quot; class=&quot;externalLink&quot;&gt;ngx.escape_uri&lt;/a&gt; now runs faster when the input string contains no special bytes to be escaped.&lt;/li&gt;&lt;li&gt; testing: added custom test scaffold t::TestNginxLua which subclasses &lt;a target=&quot;_blank&quot; title=&quot;External link to http://search.cpan.org/perldoc?Test%3A%3ANginx%3A%3ASocket&quot; href=&quot;http://search.cpan.org/perldoc?Test%3A%3ANginx%3A%3ASocket&quot; class=&quot;externalLink&quot;&gt;Test::Nginx::Socket&lt;/a&gt;. it supports the environment &lt;code&gt;TEST_NGINX_INIT_BY_LUA&lt;/code&gt; which can be used to add more custom Lua code to the value of the &lt;a target=&quot;_blank&quot; title=&quot;External link to http://wiki.nginx.org/HttpLuaModule#init_by_lua&quot; href=&quot;http://wiki.nginx.org/HttpLuaModule#init_by_lua&quot; class=&quot;externalLink&quot;&gt;init_by_lua&lt;/a&gt; directive in the Nginx configuration.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt; upgraded &lt;a tiddlylink=&quot;SrcacheNginxModule&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#SrcacheNginxModule&quot; href=&quot;null#SrcacheNginxModule&quot; class=&quot;externalLink null&quot;&gt;SrcacheNginxModule&lt;/a&gt; to 0.21.&lt;ul&gt;&lt;li&gt; bugfix: responses with a status code smaller than all the status codes specified in the &lt;a target=&quot;_blank&quot; title=&quot;External link to http://wiki.nginx.org/HttpSRCacheModule#srcache_store_statuses&quot; href=&quot;http://wiki.nginx.org/HttpSRCacheModule#srcache_store_statuses&quot; class=&quot;externalLink&quot;&gt;srcache_store_statuses&lt;/a&gt; directive were not skipped as expected. thanks Lanshun Zhou for the patch.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt; feature: applied the &lt;a target=&quot;_blank&quot; title=&quot;External link to https://raw.github.com/agentzh/ngx_openresty/master/patches/nginx-1.2.8-invalid_referer_hash.patch&quot; href=&quot;https://raw.github.com/agentzh/ngx_openresty/master/patches/nginx-1.2.8-invalid_referer_hash.patch&quot; class=&quot;externalLink&quot;&gt;invalid_referer_hash patch&lt;/a&gt; to the Nginx core to make the &lt;code&gt;$invalid_referer&lt;/code&gt; variable accessible in embedded dynamic languages like Perl and Lua. thanks Fry-kun for requesting this.&lt;/li&gt;&lt;li&gt; updated the &lt;a target=&quot;_blank&quot; title=&quot;External link to https://raw.github.com/agentzh/ngx_openresty/master/patches/nginx-1.2.8-dtrace.patch&quot; href=&quot;https://raw.github.com/agentzh/ngx_openresty/master/patches/nginx-1.2.8-dtrace.patch&quot; class=&quot;externalLink&quot;&gt;dtrace patch&lt;/a&gt; for the Nginx core.&lt;ul&gt;&lt;li&gt; print out more info about the Nginx in-file bufs in the tapset function &lt;code&gt;ngx_chain_dump&lt;/code&gt;.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h1&gt; Devel Release 1.2.8.3 - 13 May 2013&lt;/h1&gt;&lt;ul&gt;&lt;li&gt; applied the official patch for the nginx core to address the recent nginx security vulnerability CVE-2013-2070.&lt;/li&gt;&lt;/ul&gt;&lt;h1&gt; Devel Release 1.2.8.1 - 26 April 2013&lt;/h1&gt;&lt;ul&gt;&lt;li&gt; upgraded the Nginx core to 1.2.8.&lt;ul&gt;&lt;li&gt; see &lt;a target=&quot;_blank&quot; title=&quot;External link to http://nginx.org/en/CHANGES-1.2&quot; href=&quot;http://nginx.org/en/CHANGES-1.2&quot; class=&quot;externalLink&quot;&gt;http://nginx.org/en/CHANGES-1.2&lt;/a&gt; for changes.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt; upgraded &lt;a tiddlylink=&quot;LuaNginxModule&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#LuaNginxModule&quot; href=&quot;null#LuaNginxModule&quot; class=&quot;externalLink null&quot;&gt;LuaNginxModule&lt;/a&gt; to 0.8.1.&lt;ul&gt;&lt;li&gt; feature: implemented the new timer API: the &lt;a target=&quot;_blank&quot; title=&quot;External link to http://wiki.nginx.org/HttpLuaModule#ngx.timer.at&quot; href=&quot;http://wiki.nginx.org/HttpLuaModule#ngx.timer.at&quot; class=&quot;externalLink&quot;&gt;ngx.timer.at&lt;/a&gt; Lua function and two configure directives &lt;a target=&quot;_blank&quot; title=&quot;External link to http://wiki.nginx.org/HttpLuaModule#lua_max_pending_timers&quot; href=&quot;http://wiki.nginx.org/HttpLuaModule#lua_max_pending_timers&quot; class=&quot;externalLink&quot;&gt;lua_max_pending_timers&lt;/a&gt; and &lt;a target=&quot;_blank&quot; title=&quot;External link to http://wiki.nginx.org/HttpLuaModule#lua_max_running_timers&quot; href=&quot;http://wiki.nginx.org/HttpLuaModule#lua_max_running_timers&quot; class=&quot;externalLink&quot;&gt;lua_max_running_timers&lt;/a&gt;. thanks Matthieu Tourne for requesting this feature.&lt;/li&gt;&lt;li&gt; feature: added the &quot;U&quot; regex option to the &lt;a target=&quot;_blank&quot; title=&quot;External link to http://wiki.nginx.org/HttpLuaModule#ngx.re.match&quot; href=&quot;http://wiki.nginx.org/HttpLuaModule#ngx.re.match&quot; class=&quot;externalLink&quot;&gt;ngx.re API&lt;/a&gt; to mean enabling the UTF-8 matching mode but disabling UTF-8 validity check on the subject strings. thanks Lance Li for the patch.&lt;/li&gt;&lt;li&gt; bugfix: setting &lt;a target=&quot;_blank&quot; title=&quot;External link to http://wiki.nginx.org/HttpLuaModule#ngx.header.HEADER&quot; href=&quot;http://wiki.nginx.org/HttpLuaModule#ngx.header.HEADER&quot; class=&quot;externalLink&quot;&gt;ngx.header.etag&lt;/a&gt; could not affect other things reading the &lt;code&gt;ETag&lt;/code&gt; response header (like the &lt;a target=&quot;_blank&quot; title=&quot;External link to http://nginx.org/en/docs/http/ngx_http_core_module.html#etag&quot; href=&quot;http://nginx.org/en/docs/http/ngx_http_core_module.html#etag&quot; class=&quot;externalLink&quot;&gt;etag&lt;/a&gt; directive introduced in Nginx 1.3.3+). thanks Brian Akins for the patch.&lt;/li&gt;&lt;li&gt; bugfix: when &lt;a target=&quot;_blank&quot; title=&quot;External link to http://wiki.nginx.org/HttpLuaModule#lua_http10_buffering&quot; href=&quot;http://wiki.nginx.org/HttpLuaModule#lua_http10_buffering&quot; class=&quot;externalLink&quot;&gt;lua_http10_buffering&lt;/a&gt; is on, for HTTP 1.0 requests, &lt;a target=&quot;_blank&quot; title=&quot;External link to http://wiki.nginx.org/HttpLuaModule#ngx.exit&quot; href=&quot;http://wiki.nginx.org/HttpLuaModule#ngx.exit&quot; class=&quot;externalLink&quot;&gt;ngx.exit&lt;/a&gt;(N) would always trigger the Nginx's own error pages when N &amp;gt;= 300. thanks Matthieu Tourne for reporting this issue.&lt;/li&gt;&lt;li&gt; bugfix: modifying the &lt;code&gt;Cookie&lt;/code&gt; request headers via &lt;a target=&quot;_blank&quot; title=&quot;External link to http://wiki.nginx.org/HttpLuaModule#ngx.req.set_header&quot; href=&quot;http://wiki.nginx.org/HttpLuaModule#ngx.req.set_header&quot; class=&quot;externalLink&quot;&gt;ngx.req.set_header&lt;/a&gt; or &lt;a target=&quot;_blank&quot; title=&quot;External link to http://wiki.nginx.org/HttpLuaModule#ngx.req.clear_header&quot; href=&quot;http://wiki.nginx.org/HttpLuaModule#ngx.req.clear_header&quot; class=&quot;externalLink&quot;&gt;ngx.req.clear_header&lt;/a&gt; did not update the Nginx internal data structure, &lt;code&gt;r-&amp;gt;headers_in.cookies&lt;/code&gt;, at the same time, which might cause issues when reading variables &lt;a target=&quot;_blank&quot; title=&quot;External link to http://wiki.nginx.org/HttpCoreModule#.24cookie_COOKIE&quot; href=&quot;http://wiki.nginx.org/HttpCoreModule#.24cookie_COOKIE&quot; class=&quot;externalLink&quot;&gt;$cookie_COOKIE&lt;/a&gt;, for example. thanks Matthieu Tourne for the patch.&lt;/li&gt;&lt;li&gt; bugfix: modifying the &lt;code&gt;Via&lt;/code&gt; request header with &lt;a target=&quot;_blank&quot; title=&quot;External link to http://wiki.nginx.org/HttpLuaModule#ngx.req.set_header&quot; href=&quot;http://wiki.nginx.org/HttpLuaModule#ngx.req.set_header&quot; class=&quot;externalLink&quot;&gt;ngx.req.set_header&lt;/a&gt; or &lt;a target=&quot;_blank&quot; title=&quot;External link to http://wiki.nginx.org/HttpLuaModule#ngx.req.clear_header&quot; href=&quot;http://wiki.nginx.org/HttpLuaModule#ngx.req.clear_header&quot; class=&quot;externalLink&quot;&gt;ngx.req.clear_header&lt;/a&gt; did not update the special field &lt;code&gt;r-&amp;gt;headers_in.via&lt;/code&gt; when the &lt;a target=&quot;_blank&quot; title=&quot;External link to http://wiki.nginx.org/HttpGzipModule&quot; href=&quot;http://wiki.nginx.org/HttpGzipModule&quot; class=&quot;externalLink&quot;&gt;ngx_gzip&lt;/a&gt; module was enabled.&lt;/li&gt;&lt;li&gt; bugfix: modifying the &lt;code&gt;X-Real-IP&lt;/code&gt; request header with &lt;a target=&quot;_blank&quot; title=&quot;External link to http://wiki.nginx.org/HttpLuaModule#ngx.req.set_header&quot; href=&quot;http://wiki.nginx.org/HttpLuaModule#ngx.req.set_header&quot; class=&quot;externalLink&quot;&gt;ngx.req.set_header&lt;/a&gt; or &lt;a target=&quot;_blank&quot; title=&quot;External link to http://wiki.nginx.org/HttpLuaModule#ngx.req.clear_header&quot; href=&quot;http://wiki.nginx.org/HttpLuaModule#ngx.req.clear_header&quot; class=&quot;externalLink&quot;&gt;ngx.req.clear_header&lt;/a&gt; did not update the special field &lt;code&gt;r-&amp;gt;headers_in.x_real_ip&lt;/code&gt; when the &lt;a target=&quot;_blank&quot; title=&quot;External link to http://wiki.nginx.org/HttpRealipModule&quot; href=&quot;http://wiki.nginx.org/HttpRealipModule&quot; class=&quot;externalLink&quot;&gt;ngx_realip&lt;/a&gt; module was enabled. thanks Matthieu Tourne for the patch.&lt;/li&gt;&lt;li&gt; bugfix: modifying the &lt;code&gt;Connection&lt;/code&gt; request header via &lt;a target=&quot;_blank&quot; title=&quot;External link to http://wiki.nginx.org/HttpLuaModule#ngx.req.set_header&quot; href=&quot;http://wiki.nginx.org/HttpLuaModule#ngx.req.set_header&quot; class=&quot;externalLink&quot;&gt;ngx.req.set_header&lt;/a&gt; or &lt;a target=&quot;_blank&quot; title=&quot;External link to http://wiki.nginx.org/HttpLuaModule#ngx.req.clear_header&quot; href=&quot;http://wiki.nginx.org/HttpLuaModule#ngx.req.clear_header&quot; class=&quot;externalLink&quot;&gt;ngx.req.clear_header&lt;/a&gt; did not update the special internal field in the Nginx core, &lt;code&gt;r-&amp;gt;headers_in.connection_type&lt;/code&gt;. Thanks Matthieu Tourne for the patch.&lt;/li&gt;&lt;li&gt; bugfix: modifying the &lt;code&gt;User-Agent&lt;/code&gt; request header via &lt;a target=&quot;_blank&quot; title=&quot;External link to http://wiki.nginx.org/HttpLuaModule#ngx.req.set_header&quot; href=&quot;http://wiki.nginx.org/HttpLuaModule#ngx.req.set_header&quot; class=&quot;externalLink&quot;&gt;ngx.req.set_header&lt;/a&gt; or &lt;a target=&quot;_blank&quot; title=&quot;External link to http://wiki.nginx.org/HttpLuaModule#ngx.req.clear_header&quot; href=&quot;http://wiki.nginx.org/HttpLuaModule#ngx.req.clear_header&quot; class=&quot;externalLink&quot;&gt;ngx.req.clear_header&lt;/a&gt; did not update those special internal flags in the Nginx core, like &lt;code&gt;r-&amp;gt;headers_in.msie6&lt;/code&gt; and &lt;code&gt;r-&amp;gt;headers_in.opera&lt;/code&gt;. Thanks Matthieu Tourne for the patch.&lt;/li&gt;&lt;li&gt; bugfix: fixed several places in the header API where we should return &lt;code&gt;NGX_ERROR&lt;/code&gt; instead of &lt;code&gt;NGX_HTTP_INTERNAL_SERVER_ERROR&lt;/code&gt;.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt; upgraded &lt;a tiddlylink=&quot;SrcacheNginxModule&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#SrcacheNginxModule&quot; href=&quot;null#SrcacheNginxModule&quot; class=&quot;externalLink null&quot;&gt;SrcacheNginxModule&lt;/a&gt; to 0.20.&lt;ul&gt;&lt;li&gt; bugfix: use of C global variables at the configuration phase would cause troubles when &lt;code&gt;HUP&lt;/code&gt; reload failed.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt; upgraded &lt;a tiddlylink=&quot;HeadersMoreNginxModule&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#HeadersMoreNginxModule&quot; href=&quot;null#HeadersMoreNginxModule&quot; class=&quot;externalLink null&quot;&gt;HeadersMoreNginxModule&lt;/a&gt; to 0.20.&lt;ul&gt;&lt;li&gt; bugfix: modifying the &lt;code&gt;Cookie&lt;/code&gt; request headers via &lt;a target=&quot;_blank&quot; title=&quot;External link to http://wiki.nginx.org/HttpHeadersMoreModule#more_set_input_headers&quot; href=&quot;http://wiki.nginx.org/HttpHeadersMoreModule#more_set_input_headers&quot; class=&quot;externalLink&quot;&gt;more_set_input_headers&lt;/a&gt; or &lt;a target=&quot;_blank&quot; title=&quot;External link to http://wiki.nginx.org/HttpHeadersMoreModule#more_clear_input_headers&quot; href=&quot;http://wiki.nginx.org/HttpHeadersMoreModule#more_clear_input_headers&quot; class=&quot;externalLink&quot;&gt;more_clear_input_headers&lt;/a&gt; did not update the Nginx internal data structure, &lt;code&gt;r-&amp;gt;headers_in.cookies&lt;/code&gt;, at the same time, which might cause issues when reading variable &lt;a target=&quot;_blank&quot; title=&quot;External link to http://wiki.nginx.org/HttpCoreModule#.24cookie_COOKIE&quot; href=&quot;http://wiki.nginx.org/HttpCoreModule#.24cookie_COOKIE&quot; class=&quot;externalLink&quot;&gt;$cookie_COOKIE&lt;/a&gt;, for example.&lt;/li&gt;&lt;li&gt; bugfix: modifying the &lt;code&gt;Via&lt;/code&gt; request header via &lt;a target=&quot;_blank&quot; title=&quot;External link to http://wiki.nginx.org/HttpHeadersMoreModule#more_set_input_headers&quot; href=&quot;http://wiki.nginx.org/HttpHeadersMoreModule#more_set_input_headers&quot; class=&quot;externalLink&quot;&gt;more_set_input_headers&lt;/a&gt; or &lt;a target=&quot;_blank&quot; title=&quot;External link to http://wiki.nginx.org/HttpHeadersMoreModule#more_clear_input_headers&quot; href=&quot;http://wiki.nginx.org/HttpHeadersMoreModule#more_clear_input_headers&quot; class=&quot;externalLink&quot;&gt;more_clear_input_headers&lt;/a&gt; did not update the special internal field in the Nginx core, &lt;code&gt;r-&amp;gt;headers_in.via&lt;/code&gt;, when the &lt;a target=&quot;_blank&quot; title=&quot;External link to http://wiki.nginx.org/HttpGzipModule&quot; href=&quot;http://wiki.nginx.org/HttpGzipModule&quot; class=&quot;externalLink&quot;&gt;ngx_gzip&lt;/a&gt; module was enabled.&lt;/li&gt;&lt;li&gt; bugfix: modifying the &lt;code&gt;X-Real-IP&lt;/code&gt; request header via &lt;a target=&quot;_blank&quot; title=&quot;External link to http://wiki.nginx.org/HttpHeadersMoreModule#more_set_input_headers&quot; href=&quot;http://wiki.nginx.org/HttpHeadersMoreModule#more_set_input_headers&quot; class=&quot;externalLink&quot;&gt;more_set_input_headers&lt;/a&gt; or &lt;a target=&quot;_blank&quot; title=&quot;External link to http://wiki.nginx.org/HttpHeadersMoreModule#more_clear_input_headers&quot; href=&quot;http://wiki.nginx.org/HttpHeadersMoreModule#more_clear_input_headers&quot; class=&quot;externalLink&quot;&gt;more_clear_input_headers&lt;/a&gt; did not update the special internal field in the Nginx core, &lt;code&gt;r-&amp;gt;headers_in.x_real_ip&lt;/code&gt;, when the &lt;a target=&quot;_blank&quot; title=&quot;External link to http://wiki.nginx.org/HttpRealipModule&quot; href=&quot;http://wiki.nginx.org/HttpRealipModule&quot; class=&quot;externalLink&quot;&gt;ngx_realip&lt;/a&gt; module was enabled.&lt;/li&gt;&lt;li&gt; bugfix: modifying the &lt;code&gt;Connection&lt;/code&gt; request header via &lt;a target=&quot;_blank&quot; title=&quot;External link to http://wiki.nginx.org/HttpHeadersMoreModule#more_set_input_headers&quot; href=&quot;http://wiki.nginx.org/HttpHeadersMoreModule#more_set_input_headers&quot; class=&quot;externalLink&quot;&gt;more_set_input_headers&lt;/a&gt; or &lt;a target=&quot;_blank&quot; title=&quot;External link to http://wiki.nginx.org/HttpHeadersMoreModule#more_clear_input_headers&quot; href=&quot;http://wiki.nginx.org/HttpHeadersMoreModule#more_clear_input_headers&quot; class=&quot;externalLink&quot;&gt;more_clear_input_headers&lt;/a&gt; did not update the special internal field in the Nginx core, &lt;code&gt;r-&amp;gt;headers_in.connection_type&lt;/code&gt;.&lt;/li&gt;&lt;li&gt; bugfix: modifying the &lt;code&gt;User-Agent&lt;/code&gt; request header via &lt;a target=&quot;_blank&quot; title=&quot;External link to http://wiki.nginx.org/HttpHeadersMoreModule#more_set_input_headers&quot; href=&quot;http://wiki.nginx.org/HttpHeadersMoreModule#more_set_input_headers&quot; class=&quot;externalLink&quot;&gt;more_set_input_headers&lt;/a&gt; or &lt;a target=&quot;_blank&quot; title=&quot;External link to http://wiki.nginx.org/HttpHeadersMoreModule#more_clear_input_headers&quot; href=&quot;http://wiki.nginx.org/HttpHeadersMoreModule#more_clear_input_headers&quot; class=&quot;externalLink&quot;&gt;more_clear_input_headers&lt;/a&gt; did not update those special internal flags in the Nginx core, like &lt;code&gt;r-&amp;gt;headers_in.msie6&lt;/code&gt; and &lt;code&gt;r-&amp;gt;headers_in.opera&lt;/code&gt;.&lt;/li&gt;&lt;li&gt; bugfix: fixed places where we should return &lt;code&gt;NGX_ERROR&lt;/code&gt; instead of &lt;code&gt;NGX_HTTP_INTERNAL_SERVER_ERROR&lt;/code&gt;.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt; feature: always enable debuginfo in the bundled &lt;a tiddlylink=&quot;LuaJIT&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#LuaJIT&quot; href=&quot;null#LuaJIT&quot; class=&quot;externalLink null&quot;&gt;LuaJIT&lt;/a&gt; 2.0.1 build and Lua 5.1.5 build to support &lt;a target=&quot;_blank&quot; title=&quot;External link to https://github.com/agentzh/nginx-systemtap-toolkit&quot; href=&quot;https://github.com/agentzh/nginx-systemtap-toolkit&quot; class=&quot;externalLink&quot;&gt;Nginx Systemtap Toolkit&lt;/a&gt;.&lt;/li&gt;&lt;li&gt; bugfix: no longer pass &lt;code&gt;-O0&lt;/code&gt; to gcc when the &lt;code&gt;--with-debug&lt;/code&gt; configure option is specified because gcc often generates bogus DWARF info when optimization is turned off.&lt;/li&gt;&lt;/ul&gt;See &lt;a tiddlylink=&quot;ChangeLog1002007&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#ChangeLog1002007&quot; href=&quot;null#ChangeLog1002007&quot; class=&quot;externalLink null&quot;&gt;ChangeLog1002007&lt;/a&gt; for change log for &lt;a tiddlylink=&quot;OpenResty&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#OpenResty&quot; href=&quot;null#OpenResty&quot; class=&quot;externalLink null&quot;&gt;OpenResty&lt;/a&gt; 1.2.7.x.</description>
<link>null#ChangeLog1002008</link>
<pubDate>Mon, 10 Jun 2013 18:54:00 GMT</pubDate>

</item>
<item>
<title>Download</title>
<description>&lt;a tiddler=&quot;Download&quot; commandname=&quot;permalink&quot; class=&quot;button command_permalink&quot; title=&quot;Permalink for this tiddler&quot; href=&quot;javascript:;&quot;&gt;permalink&lt;/a&gt;&lt;br&gt;&lt;br&gt;You can download the latest development or stable release tarball below. After that, you can follow the instructions on the &lt;a tiddlylink=&quot;Installation&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#Installation&quot; href=&quot;null#Installation&quot; class=&quot;externalLink null&quot;&gt;Installation&lt;/a&gt; page to build and install it.&lt;br&gt;&lt;h1&gt;Releases&lt;/h1&gt;&lt;h2&gt; Development release&lt;/h2&gt;Development releases are for developers and brave users to try out new bug fixes and new features. Development releases are also considered production-ready.&lt;br&gt;&lt;ul&gt;&lt;li&gt; &lt;a target=&quot;_blank&quot; title=&quot;External link to http://openresty.org/download/ngx_openresty-1.2.8.5.tar.gz&quot; href=&quot;http://openresty.org/download/ngx_openresty-1.2.8.5.tar.gz&quot; class=&quot;externalLink&quot;&gt;ngx_openresty-1.2.8.5.tar.gz&lt;/a&gt; &lt;span&gt;&amp;nbsp;&lt;/span&gt; 2.9MB &lt;span&gt;&amp;nbsp;&lt;/span&gt; &lt;a target=&quot;_blank&quot; title=&quot;External link to http://openresty.org/download/ngx_openresty-1.2.8.5.tar.gz.asc&quot; href=&quot;http://openresty.org/download/ngx_openresty-1.2.8.5.tar.gz.asc&quot; class=&quot;externalLink&quot;&gt;PGP&lt;/a&gt; &lt;span&gt;&amp;nbsp;&lt;/span&gt; &lt;a tiddlylink=&quot;ChangeLog1002008&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#ChangeLog1002008&quot; href=&quot;null#ChangeLog1002008&quot; class=&quot;externalLink null&quot;&gt;Changes&lt;/a&gt; - 23 May 2013&lt;/li&gt;&lt;/ul&gt;&lt;h2&gt; Stable release&lt;/h2&gt;Stable releases are for really conservative users.&lt;br&gt;&lt;ul&gt;&lt;li&gt; &lt;a target=&quot;_blank&quot; title=&quot;External link to http://openresty.org/download/ngx_openresty-1.2.8.6.tar.gz&quot; href=&quot;http://openresty.org/download/ngx_openresty-1.2.8.6.tar.gz&quot; class=&quot;externalLink&quot;&gt;ngx_openresty-1.2.8.6.tar.gz&lt;/a&gt; &lt;span&gt;&amp;nbsp;&lt;/span&gt; 2.9MB &lt;span&gt;&amp;nbsp;&lt;/span&gt; &lt;a target=&quot;_blank&quot; title=&quot;External link to http://openresty.org/download/ngx_openresty-1.2.8.6.tar.gz.asc&quot; href=&quot;http://openresty.org/download/ngx_openresty-1.2.8.6.tar.gz.asc&quot; class=&quot;externalLink&quot;&gt;PGP&lt;/a&gt; &lt;span&gt;&amp;nbsp;&lt;/span&gt; &lt;a tiddlylink=&quot;ChangeLog1002008&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#ChangeLog1002008&quot; href=&quot;null#ChangeLog1002008&quot; class=&quot;externalLink null&quot;&gt;Changes&lt;/a&gt; - 10 June 2013&lt;/li&gt;&lt;/ul&gt;&lt;h2&gt; Legacy releases&lt;/h2&gt;Sometimes, users may want to download old releases.&lt;br&gt;&lt;ul&gt;&lt;li&gt; &lt;a target=&quot;_blank&quot; title=&quot;External link to http://openresty.org/download/ngx_openresty-1.2.7.8.tar.gz&quot; href=&quot;http://openresty.org/download/ngx_openresty-1.2.7.8.tar.gz&quot; class=&quot;externalLink&quot;&gt;ngx_openresty-1.2.7.8.tar.gz&lt;/a&gt; &lt;span&gt;&amp;nbsp;&lt;/span&gt; 2.9MB &lt;span&gt;&amp;nbsp;&lt;/span&gt; &lt;a target=&quot;_blank&quot; title=&quot;External link to http://openresty.org/download/ngx_openresty-1.2.7.8.tar.gz.asc&quot; href=&quot;http://openresty.org/download/ngx_openresty-1.2.7.8.tar.gz.asc&quot; class=&quot;externalLink&quot;&gt;PGP&lt;/a&gt; &lt;span&gt;&amp;nbsp;&lt;/span&gt; &lt;a tiddlylink=&quot;ChangeLog1002007&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#ChangeLog1002007&quot; href=&quot;null#ChangeLog1002007&quot; class=&quot;externalLink null&quot;&gt;Changes&lt;/a&gt; - 13 May 2013&lt;/li&gt;&lt;li&gt; &lt;a target=&quot;_blank&quot; title=&quot;External link to http://openresty.org/download/ngx_openresty-1.2.7.6.tar.gz&quot; href=&quot;http://openresty.org/download/ngx_openresty-1.2.7.6.tar.gz&quot; class=&quot;externalLink&quot;&gt;ngx_openresty-1.2.7.6.tar.gz&lt;/a&gt; &lt;span&gt;&amp;nbsp;&lt;/span&gt; 2.9MB &lt;span&gt;&amp;nbsp;&lt;/span&gt; &lt;a target=&quot;_blank&quot; title=&quot;External link to http://openresty.org/download/ngx_openresty-1.2.7.6.tar.gz.asc&quot; href=&quot;http://openresty.org/download/ngx_openresty-1.2.7.6.tar.gz.asc&quot; class=&quot;externalLink&quot;&gt;PGP&lt;/a&gt; &lt;span&gt;&amp;nbsp;&lt;/span&gt; &lt;a tiddlylink=&quot;ChangeLog1002007&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#ChangeLog1002007&quot; href=&quot;null#ChangeLog1002007&quot; class=&quot;externalLink null&quot;&gt;Changes&lt;/a&gt; - 17 April 2013&lt;/li&gt;&lt;li&gt; &lt;a target=&quot;_blank&quot; title=&quot;External link to http://openresty.org/download/ngx_openresty-1.2.6.6.tar.gz&quot; href=&quot;http://openresty.org/download/ngx_openresty-1.2.6.6.tar.gz&quot; class=&quot;externalLink&quot;&gt;ngx_openresty-1.2.6.6.tar.gz&lt;/a&gt; &lt;span&gt;&amp;nbsp;&lt;/span&gt; 2.9MB &lt;span&gt;&amp;nbsp;&lt;/span&gt; &lt;a target=&quot;_blank&quot; title=&quot;External link to http://openresty.org/download/ngx_openresty-1.2.6.6.tar.gz.asc&quot; href=&quot;http://openresty.org/download/ngx_openresty-1.2.6.6.tar.gz.asc&quot; class=&quot;externalLink&quot;&gt;PGP&lt;/a&gt; &lt;span&gt;&amp;nbsp;&lt;/span&gt; &lt;a tiddlylink=&quot;ChangeLog1002006&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#ChangeLog1002006&quot; href=&quot;null#ChangeLog1002006&quot; class=&quot;externalLink null&quot;&gt;Changes&lt;/a&gt; - 17 February 2013&lt;/li&gt;&lt;li&gt; &lt;a target=&quot;_blank&quot; title=&quot;External link to http://openresty.org/download/ngx_openresty-1.2.4.14.tar.gz&quot; href=&quot;http://openresty.org/download/ngx_openresty-1.2.4.14.tar.gz&quot; class=&quot;externalLink&quot;&gt;ngx_openresty-1.2.4.14.tar.gz&lt;/a&gt; &lt;span&gt;&amp;nbsp;&lt;/span&gt; 2.9MB &lt;span&gt;&amp;nbsp;&lt;/span&gt; &lt;a target=&quot;_blank&quot; title=&quot;External link to http://openresty.org/download/ngx_openresty-1.2.4.14.tar.gz.asc&quot; href=&quot;http://openresty.org/download/ngx_openresty-1.2.4.14.tar.gz.asc&quot; class=&quot;externalLink&quot;&gt;PGP&lt;/a&gt; &lt;span&gt;&amp;nbsp;&lt;/span&gt; &lt;a tiddlylink=&quot;ChangeLog1002004&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#ChangeLog1002004&quot; href=&quot;null#ChangeLog1002004&quot; class=&quot;externalLink null&quot;&gt;Changes&lt;/a&gt; - 23 December 2012&lt;/li&gt;&lt;li&gt; &lt;a target=&quot;_blank&quot; title=&quot;External link to http://openresty.org/download/ngx_openresty-1.2.3.8.tar.gz&quot; href=&quot;http://openresty.org/download/ngx_openresty-1.2.3.8.tar.gz&quot; class=&quot;externalLink&quot;&gt;ngx_openresty-1.2.3.8.tar.gz&lt;/a&gt; &lt;span&gt;&amp;nbsp;&lt;/span&gt; 2.9MB &lt;span&gt;&amp;nbsp;&lt;/span&gt; &lt;a target=&quot;_blank&quot; title=&quot;External link to http://openresty.org/download/ngx_openresty-1.2.3.8.tar.gz.asc&quot; href=&quot;http://openresty.org/download/ngx_openresty-1.2.3.8.tar.gz.asc&quot; class=&quot;externalLink&quot;&gt;PGP&lt;/a&gt; &lt;span&gt;&amp;nbsp;&lt;/span&gt; &lt;a tiddlylink=&quot;ChangeLog1002003&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#ChangeLog1002003&quot; href=&quot;null#ChangeLog1002003&quot; class=&quot;externalLink null&quot;&gt;Changes&lt;/a&gt; - 8 October 2012&lt;/li&gt;&lt;li&gt; &lt;a target=&quot;_blank&quot; title=&quot;External link to http://openresty.org/download/ngx_openresty-1.2.1.14.tar.gz&quot; href=&quot;http://openresty.org/download/ngx_openresty-1.2.1.14.tar.gz&quot; class=&quot;externalLink&quot;&gt;ngx_openresty-1.2.1.14.tar.gz&lt;/a&gt; &lt;span&gt;&amp;nbsp;&lt;/span&gt; 2.9MB &lt;span&gt;&amp;nbsp;&lt;/span&gt; &lt;a target=&quot;_blank&quot; title=&quot;External link to http://openresty.org/download/ngx_openresty-1.2.1.14.tar.gz.asc&quot; href=&quot;http://openresty.org/download/ngx_openresty-1.2.1.14.tar.gz.asc&quot; class=&quot;externalLink&quot;&gt;PGP&lt;/a&gt; &lt;span&gt;&amp;nbsp;&lt;/span&gt; &lt;a tiddlylink=&quot;ChangeLog1002001&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#ChangeLog1002001&quot; href=&quot;null#ChangeLog1002001&quot; class=&quot;externalLink null&quot;&gt;Changes&lt;/a&gt; - 14 August 2012&lt;/li&gt;&lt;li&gt; &lt;a target=&quot;_blank&quot; title=&quot;External link to http://openresty.org/download/ngx_openresty-1.0.15.10.tar.gz&quot; href=&quot;http://openresty.org/download/ngx_openresty-1.0.15.10.tar.gz&quot; class=&quot;externalLink&quot;&gt;ngx_openresty-1.0.15.10.tar.gz&lt;/a&gt; &lt;span&gt;&amp;nbsp;&lt;/span&gt; 2.7MB &lt;span&gt;&amp;nbsp;&lt;/span&gt; &lt;a target=&quot;_blank&quot; title=&quot;External link to http://openresty.org/download/ngx_openresty-1.0.15.10.tar.gz.asc&quot; href=&quot;http://openresty.org/download/ngx_openresty-1.0.15.10.tar.gz.asc&quot; class=&quot;externalLink&quot;&gt;PGP&lt;/a&gt; &lt;span&gt;&amp;nbsp;&lt;/span&gt; &lt;a tiddlylink=&quot;ChangeLog1000015&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#ChangeLog1000015&quot; href=&quot;null#ChangeLog1000015&quot; class=&quot;externalLink null&quot;&gt;Changes&lt;/a&gt; - 13 June 2012&lt;/li&gt;&lt;li&gt; &lt;a target=&quot;_blank&quot; title=&quot;External link to http://openresty.org/download/ngx_openresty-1.0.11.28.tar.gz&quot; href=&quot;http://openresty.org/download/ngx_openresty-1.0.11.28.tar.gz&quot; class=&quot;externalLink&quot;&gt;ngx_openresty-1.0.11.28.tar.gz&lt;/a&gt; &lt;span&gt;&amp;nbsp;&lt;/span&gt; 2.7MB &lt;span&gt;&amp;nbsp;&lt;/span&gt; &lt;a target=&quot;_blank&quot; title=&quot;External link to http://openresty.org/download/ngx_openresty-1.0.11.28.tar.gz.asc&quot; href=&quot;http://openresty.org/download/ngx_openresty-1.0.11.28.tar.gz.asc&quot; class=&quot;externalLink&quot;&gt;PGP&lt;/a&gt; &lt;span&gt;&amp;nbsp;&lt;/span&gt; &lt;a tiddlylink=&quot;ChangeLog1000011&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#ChangeLog1000011&quot; href=&quot;null#ChangeLog1000011&quot; class=&quot;externalLink null&quot;&gt;Changes&lt;/a&gt; - 25 March 2012&lt;/li&gt;&lt;li&gt; &lt;a target=&quot;_blank&quot; title=&quot;External link to http://openresty.org/download/ngx_openresty-1.0.10.48.tar.gz&quot; href=&quot;http://openresty.org/download/ngx_openresty-1.0.10.48.tar.gz&quot; class=&quot;externalLink&quot;&gt;ngx_openresty-1.0.10.48.tar.gz&lt;/a&gt; &lt;span&gt;&amp;nbsp;&lt;/span&gt; 2.6MB &lt;span&gt;&amp;nbsp;&lt;/span&gt; &lt;a target=&quot;_blank&quot; title=&quot;External link to http://openresty.org/download/ngx_openresty-1.0.10.48.tar.gz.asc&quot; href=&quot;http://openresty.org/download/ngx_openresty-1.0.10.48.tar.gz.asc&quot; class=&quot;externalLink&quot;&gt;PGP&lt;/a&gt; &lt;span&gt;&amp;nbsp;&lt;/span&gt; &lt;a tiddlylink=&quot;ChangeLog1000010&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#ChangeLog1000010&quot; href=&quot;null#ChangeLog1000010&quot; class=&quot;externalLink null&quot;&gt;Changes&lt;/a&gt; - 1 February 2012&lt;/li&gt;&lt;li&gt; &lt;a target=&quot;_blank&quot; title=&quot;External link to http://openresty.org/download/ngx_openresty-1.0.10.44.tar.gz&quot; href=&quot;http://openresty.org/download/ngx_openresty-1.0.10.44.tar.gz&quot; class=&quot;externalLink&quot;&gt;ngx_openresty-1.0.10.44.tar.gz&lt;/a&gt; &lt;span&gt;&amp;nbsp;&lt;/span&gt; 2.5MB &lt;span&gt;&amp;nbsp;&lt;/span&gt; &lt;a target=&quot;_blank&quot; title=&quot;External link to http://openresty.org/download/ngx_openresty-1.0.10.44.tar.gz.asc&quot; href=&quot;http://openresty.org/download/ngx_openresty-1.0.10.44.tar.gz.asc&quot; class=&quot;externalLink&quot;&gt;PGP&lt;/a&gt; &lt;span&gt;&amp;nbsp;&lt;/span&gt; &lt;a tiddlylink=&quot;ChangeLog1000010&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#ChangeLog1000010&quot; href=&quot;null#ChangeLog1000010&quot; class=&quot;externalLink null&quot;&gt;Changes&lt;/a&gt; - 16 January 2012&lt;/li&gt;&lt;li&gt; &lt;a target=&quot;_blank&quot; title=&quot;External link to http://openresty.org/download/ngx_openresty-1.0.10.24.tar.gz&quot; href=&quot;http://openresty.org/download/ngx_openresty-1.0.10.24.tar.gz&quot; class=&quot;externalLink&quot;&gt;ngx_openresty-1.0.10.24.tar.gz&lt;/a&gt; &lt;span&gt;&amp;nbsp;&lt;/span&gt; 2.5MB &lt;span&gt;&amp;nbsp;&lt;/span&gt; &lt;a target=&quot;_blank&quot; title=&quot;External link to http://openresty.org/download/ngx_openresty-1.0.10.24.tar.gz.asc&quot; href=&quot;http://openresty.org/download/ngx_openresty-1.0.10.24.tar.gz.asc&quot; class=&quot;externalLink&quot;&gt;PGP&lt;/a&gt; &lt;span&gt;&amp;nbsp;&lt;/span&gt; &lt;a tiddlylink=&quot;ChangeLog1000010&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#ChangeLog1000010&quot; href=&quot;null#ChangeLog1000010&quot; class=&quot;externalLink null&quot;&gt;Changes&lt;/a&gt; - 11 December 2011&lt;/li&gt;&lt;li&gt; &lt;a target=&quot;_blank&quot; title=&quot;External link to http://openresty.org/download/ngx_openresty-1.0.9.10.tar.gz&quot; href=&quot;http://openresty.org/download/ngx_openresty-1.0.9.10.tar.gz&quot; class=&quot;externalLink&quot;&gt;ngx_openresty-1.0.9.10.tar.gz&lt;/a&gt; &lt;span&gt;&amp;nbsp;&lt;/span&gt; 2.5MB &lt;span&gt;&amp;nbsp;&lt;/span&gt; &lt;a target=&quot;_blank&quot; title=&quot;External link to http://openresty.org/download/ngx_openresty-1.0.9.10.tar.gz.asc&quot; href=&quot;http://openresty.org/download/ngx_openresty-1.0.9.10.tar.gz.asc&quot; class=&quot;externalLink&quot;&gt;PGP&lt;/a&gt; &lt;span&gt;&amp;nbsp;&lt;/span&gt; &lt;a tiddlylink=&quot;ChangeLog1000009&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#ChangeLog1000009&quot; href=&quot;null#ChangeLog1000009&quot; class=&quot;externalLink null&quot;&gt;Changes&lt;/a&gt; - 16 November 2011&lt;/li&gt;&lt;li&gt; &lt;a target=&quot;_blank&quot; title=&quot;External link to http://openresty.org/download/ngx_openresty-1.0.8.26.tar.gz&quot; href=&quot;http://openresty.org/download/ngx_openresty-1.0.8.26.tar.gz&quot; class=&quot;externalLink&quot;&gt;ngx_openresty-1.0.8.26.tar.gz&lt;/a&gt; &lt;span&gt;&amp;nbsp;&lt;/span&gt; 2.5MB &lt;span&gt;&amp;nbsp;&lt;/span&gt; &lt;a target=&quot;_blank&quot; title=&quot;External link to http://openresty.org/download/ngx_openresty-1.0.8.26.tar.gz.asc&quot; href=&quot;http://openresty.org/download/ngx_openresty-1.0.8.26.tar.gz.asc&quot; class=&quot;externalLink&quot;&gt;PGP&lt;/a&gt; &lt;span&gt;&amp;nbsp;&lt;/span&gt; &lt;a tiddlylink=&quot;ChangeLog1000008&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#ChangeLog1000008&quot; href=&quot;null#ChangeLog1000008&quot; class=&quot;externalLink null&quot;&gt;Changes&lt;/a&gt; - 3 November 2011&lt;/li&gt;&lt;li&gt; &lt;a target=&quot;_blank&quot; title=&quot;External link to http://openresty.org/download/ngx_openresty-1.0.6.22.tar.gz&quot; href=&quot;http://openresty.org/download/ngx_openresty-1.0.6.22.tar.gz&quot; class=&quot;externalLink&quot;&gt;ngx_openresty-1.0.6.22.tar.gz&lt;/a&gt; &lt;span&gt;&amp;nbsp;&lt;/span&gt; 2.4MB &lt;span&gt;&amp;nbsp;&lt;/span&gt; &lt;a target=&quot;_blank&quot; title=&quot;External link to http://openresty.org/download/ngx_openresty-1.0.6.22.tar.gz.asc&quot; href=&quot;http://openresty.org/download/ngx_openresty-1.0.6.22.tar.gz.asc&quot; class=&quot;externalLink&quot;&gt;PGP&lt;/a&gt; &lt;span&gt;&amp;nbsp;&lt;/span&gt; &lt;a tiddlylink=&quot;ChangeLog1000006&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#ChangeLog1000006&quot; href=&quot;null#ChangeLog1000006&quot; class=&quot;externalLink null&quot;&gt;Changes&lt;/a&gt; - 7 October 2011&lt;/li&gt;&lt;/ul&gt;&lt;br&gt;See &lt;a tiddlylink=&quot;Installation&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#Installation&quot; href=&quot;null#Installation&quot; class=&quot;externalLink null&quot;&gt;Installation&lt;/a&gt; for installation instructions.&lt;br&gt;</description>
<category>Resources</category>
<link>null#Download</link>
<pubDate>Mon, 10 Jun 2013 18:52:00 GMT</pubDate>

</item>
<item>
<title>Presentations</title>
<description>&lt;a tiddler=&quot;Presentations&quot; commandname=&quot;permalink&quot; class=&quot;button command_permalink&quot; title=&quot;Permalink for this tiddler&quot; href=&quot;javascript:;&quot;&gt;permalink&lt;/a&gt;&lt;br&gt;&lt;br&gt;Here goes a list of slides that I used in my talks regarding &lt;a tiddlylink=&quot;OpenResty&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#OpenResty&quot; href=&quot;null#OpenResty&quot; class=&quot;externalLink null&quot;&gt;OpenResty&lt;/a&gt;.&lt;br&gt;&lt;br&gt;These slides are powered by the &lt;a target=&quot;_blank&quot; title=&quot;External link to https://github.com/kindy61/slides.htm&quot; href=&quot;https://github.com/kindy61/slides.htm&quot; class=&quot;externalLink&quot;&gt;slides.htm&lt;/a&gt; slide-making engine based on AJAX.&lt;br&gt;&lt;br&gt;&lt;strong&gt;&lt;em&gt;Note: Please use the arrow keys or pageup/pagedown keys on your keyboard to switch slides.&lt;/em&gt;&lt;/strong&gt;&lt;br&gt;&lt;h1&gt; Year 2013&lt;/h1&gt;&lt;h2&gt; sregex: matching Perl 5 regexes on data streams&lt;/h2&gt;This talk was given at &lt;a target=&quot;_blank&quot; title=&quot;External link to http://www.yapcna.org/yn2013/&quot; href=&quot;http://www.yapcna.org/yn2013/&quot; class=&quot;externalLink&quot;&gt;YAPC::NA 2013&lt;/a&gt; in Austin, TX, USA.&lt;br&gt;&lt;br&gt;Talk summary: &lt;a target=&quot;_blank&quot; title=&quot;External link to http://www.yapcna.org/yn2013/talk/4762&quot; href=&quot;http://www.yapcna.org/yn2013/talk/4762&quot; class=&quot;externalLink&quot;&gt;http://www.yapcna.org/yn2013/talk/4762&lt;/a&gt;&lt;br&gt;&lt;br&gt;View slides in your web browser: &lt;a target=&quot;_blank&quot; title=&quot;External link to http://agentzh.org/misc/slides/yapc-na-2013-sregex/&quot; href=&quot;http://agentzh.org/misc/slides/yapc-na-2013-sregex/&quot; class=&quot;externalLink&quot;&gt;http://agentzh.org/misc/slides/yapc-na-2013-sregex/&lt;/a&gt;&lt;br&gt;&lt;br&gt;Download the slides as PDF: &lt;a target=&quot;_blank&quot; title=&quot;External link to http://agentzh.org/misc/slides/yapc-na-2013-sregex.pdf&quot; href=&quot;http://agentzh.org/misc/slides/yapc-na-2013-sregex.pdf&quot; class=&quot;externalLink&quot;&gt;http://agentzh.org/misc/slides/yapc-na-2013-sregex.pdf&lt;/a&gt;&lt;br&gt;&lt;br&gt;&lt;h2&gt; Flame Graphs for online performance profiling&lt;/h2&gt;This talk was given at &lt;a target=&quot;_blank&quot; title=&quot;External link to http://www.yapcna.org/yn2013/&quot; href=&quot;http://www.yapcna.org/yn2013/&quot; class=&quot;externalLink&quot;&gt;YAPC::NA 2013&lt;/a&gt; in Austin, TX, USA.&lt;br&gt;&lt;br&gt;Talk summary: &lt;a target=&quot;_blank&quot; title=&quot;External link to http://www.yapcna.org/yn2013/talk/4579&quot; href=&quot;http://www.yapcna.org/yn2013/talk/4579&quot; class=&quot;externalLink&quot;&gt;http://www.yapcna.org/yn2013/talk/4579&lt;/a&gt;&lt;br&gt;&lt;br&gt;View slides in your web browser: &lt;a target=&quot;_blank&quot; title=&quot;External link to http://agentzh.org/misc/slides/yapc-na-2013-flame-graphs/&quot; href=&quot;http://agentzh.org/misc/slides/yapc-na-2013-flame-graphs/&quot; class=&quot;externalLink&quot;&gt;http://agentzh.org/misc/slides/yapc-na-2013-flame-graphs/&lt;/a&gt;&lt;br&gt;&lt;br&gt;Download the slides as PDF: &lt;a target=&quot;_blank&quot; title=&quot;External link to http://agentzh.org/misc/slides/yapc-na-2013-flame-graphs.pdf&quot; href=&quot;http://agentzh.org/misc/slides/yapc-na-2013-flame-graphs.pdf&quot; class=&quot;externalLink&quot;&gt;http://agentzh.org/misc/slides/yapc-na-2013-flame-graphs.pdf&lt;/a&gt;&lt;br&gt;&lt;br&gt;&lt;h1&gt; Year 2012&lt;/h1&gt;&lt;h2&gt; ngx_openresty: an Nginx ecosystem glued by Lua&lt;/h2&gt;This talk was given at &lt;a target=&quot;_blank&quot; title=&quot;External link to http://event.weibo.com/351359&quot; href=&quot;http://event.weibo.com/351359&quot; class=&quot;externalLink&quot;&gt;Tech-Club Technical Salon&lt;/a&gt; held in the Xiamen city.&lt;br&gt;&lt;br&gt;View slides in your web browser: &lt;a target=&quot;_blank&quot; title=&quot;External link to http://agentzh.org/misc/slides/ngx-openresty-ecosystem/&quot; href=&quot;http://agentzh.org/misc/slides/ngx-openresty-ecosystem/&quot; class=&quot;externalLink&quot;&gt;http://agentzh.org/misc/slides/ngx-openresty-ecosystem/&lt;/a&gt;&lt;br&gt;&lt;br&gt;Download the slides as PDF: &lt;a target=&quot;_blank&quot; title=&quot;External link to http://agentzh.org/misc/slides/ngx-openresty-ecosystem.pdf&quot; href=&quot;http://agentzh.org/misc/slides/ngx-openresty-ecosystem.pdf&quot; class=&quot;externalLink&quot;&gt;http://agentzh.org/misc/slides/ngx-openresty-ecosystem.pdf&lt;/a&gt;&lt;br&gt;&lt;br&gt;&lt;h2&gt; Scripting libdrizzle with Lua inside Nginx&lt;/h2&gt;This presentation was given at &lt;a target=&quot;_blank&quot; title=&quot;External link to http://www.percona.com/live/mysql-conference-2012/sessions/scripting-mysql-lua-and-libdrizzle-inside-nginx&quot; href=&quot;http://www.percona.com/live/mysql-conference-2012/sessions/scripting-mysql-lua-and-libdrizzle-inside-nginx&quot; class=&quot;externalLink&quot;&gt;Percona Live MySQL Conference 2012&lt;/a&gt; held in Santa Clara, CA, USA.&lt;br&gt;&lt;br&gt;View slides in your web browser: &lt;a target=&quot;_blank&quot; title=&quot;External link to http://agentzh.org/misc/slides/libdrizzle-lua-nginx/#2&quot; href=&quot;http://agentzh.org/misc/slides/libdrizzle-lua-nginx/#2&quot; class=&quot;externalLink&quot;&gt;http://agentzh.org/misc/slides/libdrizzle-lua-nginx/#2&lt;/a&gt;&lt;br&gt;&lt;br&gt;Download the slides as PDF: &lt;a target=&quot;_blank&quot; title=&quot;External link to http://agentzh.org/misc/slides/libdrizzle-lua-nginx.pdf&quot; href=&quot;http://agentzh.org/misc/slides/libdrizzle-lua-nginx.pdf&quot; class=&quot;externalLink&quot;&gt;http://agentzh.org/misc/slides/libdrizzle-lua-nginx.pdf&lt;/a&gt;&lt;br&gt;&lt;br&gt;&lt;h1&gt; Year 2011&lt;/h1&gt;&lt;h2&gt; Applications of ngx_openresty and perl in lz.taobao.com&lt;/h2&gt;&lt;br&gt;This talk was given at &lt;a target=&quot;_blank&quot; title=&quot;External link to http://conference.perlchina.org/bjpw2011/talks&quot; href=&quot;http://conference.perlchina.org/bjpw2011/talks&quot; class=&quot;externalLink&quot;&gt;Beijing Perl Workshop 2011&lt;/a&gt;.&lt;br&gt;&lt;br&gt;Watch the video online: &lt;a target=&quot;_blank&quot; title=&quot;External link to http://v.ku6.com/show/TY8Vre59guTE_C8o.html&quot; href=&quot;http://v.ku6.com/show/TY8Vre59guTE_C8o.html&quot; class=&quot;externalLink&quot;&gt;http://v.ku6.com/show/TY8Vre59guTE_C8o.html&lt;/a&gt;&lt;br&gt;&lt;br&gt;View slides in your web browser: &lt;a target=&quot;_blank&quot; title=&quot;External link to http://agentzh.org/misc/slides/perl-lz-apps/&quot; href=&quot;http://agentzh.org/misc/slides/perl-lz-apps/&quot; class=&quot;externalLink&quot;&gt;http://agentzh.org/misc/slides/perl-lz-apps/&lt;/a&gt;&lt;br&gt;&lt;br&gt;Download the slides as PDF: &lt;a target=&quot;_blank&quot; title=&quot;External link to http://agentzh.org/misc/slides/perl-lz-apps.pdf&quot; href=&quot;http://agentzh.org/misc/slides/perl-lz-apps.pdf&quot; class=&quot;externalLink&quot;&gt;http://agentzh.org/misc/slides/perl-lz-apps.pdf&lt;/a&gt;&lt;br&gt;&lt;br&gt;&lt;h1&gt; Year 2010&lt;/h1&gt;&lt;h2&gt; Introduction to nginx.conf scripting&lt;/h2&gt;This talk was given at the &lt;a target=&quot;_blank&quot; title=&quot;External link to http://conference.perlchina.org&quot; href=&quot;http://conference.perlchina.org&quot; class=&quot;externalLink&quot;&gt;Beijing Perl Workshop&lt;/a&gt; 2010 April meeting and the &lt;a target=&quot;_blank&quot; title=&quot;External link to http://www.beijing-open-party.org/event/2&quot; href=&quot;http://www.beijing-open-party.org/event/2&quot; class=&quot;externalLink&quot;&gt;Beijing OpenParty 2010 June event&lt;/a&gt;.&lt;br&gt;&lt;br&gt;View slides in your web browser: &lt;a target=&quot;_blank&quot; title=&quot;External link to http://agentzh.org/misc/slides/nginx-conf-scripting/&quot; href=&quot;http://agentzh.org/misc/slides/nginx-conf-scripting/&quot; class=&quot;externalLink&quot;&gt;http://agentzh.org/misc/slides/nginx-conf-scripting/&lt;/a&gt;&lt;br&gt;&lt;br&gt;Download the slides as PDF: &lt;a target=&quot;_blank&quot; title=&quot;External link to http://agentzh.org/misc/slides/nginx-conf-scripting.pdf&quot; href=&quot;http://agentzh.org/misc/slides/nginx-conf-scripting.pdf&quot; class=&quot;externalLink&quot;&gt;http://agentzh.org/misc/slides/nginx-conf-scripting.pdf&lt;/a&gt;&lt;br&gt;&lt;br&gt;Please note that ngx_eval module is no longer recommended because we're in more favor of ngx_lua nowadays.&lt;br&gt;&lt;br&gt;&lt;h2&gt; Recent developments in nginx.conf scripting&lt;/h2&gt;This talk was given at the &lt;a target=&quot;_blank&quot; title=&quot;External link to http://www.beijing-open-party.org/event/2&quot; href=&quot;http://www.beijing-open-party.org/event/2&quot; class=&quot;externalLink&quot;&gt;Beijing OpenParty 2010 June event&lt;/a&gt;.&lt;br&gt;&lt;br&gt;View slides in your web browser: &lt;a target=&quot;_blank&quot; title=&quot;External link to http://agentzh.org/misc/slides/recent-dev-nginx-conf/&quot; href=&quot;http://agentzh.org/misc/slides/recent-dev-nginx-conf/&quot; class=&quot;externalLink&quot;&gt;http://agentzh.org/misc/slides/recent-dev-nginx-conf/&lt;/a&gt;&lt;br&gt;&lt;br&gt;Download the slides as PDF: &lt;a target=&quot;_blank&quot; title=&quot;External link to http://agentzh.org/misc/slides/recent-dev-nginx-conf.pdf&quot; href=&quot;http://agentzh.org/misc/slides/recent-dev-nginx-conf.pdf&quot; class=&quot;externalLink&quot;&gt;http://agentzh.org/misc/slides/recent-dev-nginx-conf.pdf&lt;/a&gt;&lt;br&gt;&lt;br&gt;&lt;h2&gt; The state of the art of nginx.conf scripting&lt;/h2&gt;This talk was given at the &lt;a target=&quot;_blank&quot; title=&quot;External link to http://agentzh.org/misc/slides/nginx-state-of-the-art/&quot; href=&quot;http://agentzh.org/misc/slides/nginx-state-of-the-art/&quot; class=&quot;externalLink&quot;&gt;ECUG 2010 event&lt;/a&gt;.&lt;br&gt;&lt;br&gt;Watch the (Chinese-speech) video online: &lt;a target=&quot;_blank&quot; title=&quot;External link to http://v.ku6.com/show/D00rqtnRwKzJdIsB.html&quot; href=&quot;http://v.ku6.com/show/D00rqtnRwKzJdIsB.html&quot; class=&quot;externalLink&quot;&gt;http://v.ku6.com/show/D00rqtnRwKzJdIsB.html&lt;/a&gt;&lt;br&gt;&lt;br&gt;View the (English) slides in your web browser: &lt;a target=&quot;_blank&quot; title=&quot;External link to http://agentzh.org/misc/slides/nginx-state-of-the-art/&quot; href=&quot;http://agentzh.org/misc/slides/nginx-state-of-the-art/&quot; class=&quot;externalLink&quot;&gt;http://agentzh.org/misc/slides/nginx-state-of-the-art/&lt;/a&gt;&lt;br&gt;&lt;br&gt;Download the slides as PDF: &lt;a target=&quot;_blank&quot; title=&quot;External link to http://agentzh.org/misc/slides/nginx-state-of-the-art.pdf&quot; href=&quot;http://agentzh.org/misc/slides/nginx-state-of-the-art.pdf&quot; class=&quot;externalLink&quot;&gt;http://agentzh.org/misc/slides/nginx-state-of-the-art.pdf&lt;/a&gt;&lt;br&gt;</description>
<category>Resources</category>
<link>null#Presentations</link>
<pubDate>Sun, 09 Jun 2013 20:01:00 GMT</pubDate>

</item>
<item>
<title>DynamicRoutingBasedOnRedis</title>
<description>&lt;a tiddler=&quot;DynamicRoutingBasedOnRedis&quot; commandname=&quot;permalink&quot; class=&quot;button command_permalink&quot; title=&quot;Permalink for this tiddler&quot; href=&quot;javascript:;&quot;&gt;permalink&lt;/a&gt;&lt;br&gt;&lt;br&gt;This sample demonstrates how to use Redis to route incoming requests to different HTTP backends based on the requests' &lt;code&gt;User-Agent&lt;/code&gt; header.&lt;br&gt;&lt;br&gt;This demo uses the components &lt;a tiddlylink=&quot;LuaNginxModule&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#LuaNginxModule&quot; href=&quot;null#LuaNginxModule&quot; class=&quot;externalLink null&quot;&gt;LuaNginxModule&lt;/a&gt; and &lt;a tiddlylink=&quot;LuaRestyRedisLibrary&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#LuaRestyRedisLibrary&quot; href=&quot;null#LuaRestyRedisLibrary&quot; class=&quot;externalLink null&quot;&gt;LuaRestyRedisLibrary&lt;/a&gt; enabled by default in &lt;a tiddlylink=&quot;OpenResty&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#OpenResty&quot; href=&quot;null#OpenResty&quot; class=&quot;externalLink null&quot;&gt;OpenResty&lt;/a&gt;.&lt;br&gt;&lt;br&gt;Here's the complete code listing for our &lt;code&gt;nginx.conf&lt;/code&gt;:&lt;br&gt;&lt;br&gt;&lt;pre&gt;worker_processes  2;
error_log logs/error.log info;

events {
    worker_connections 1024;
}

http {
    server {
        listen 8080;

        location / {
            resolver 8.8.4.4;  # use Google's open DNS server

            set $target '';
            access_by_lua '
                local key = ngx.var.http_user_agent
                if not key then
                    ngx.log(ngx.ERR, &quot;no user-agent found&quot;)
                    return ngx.exit(400)
                end

                local redis = require &quot;resty.redis&quot;
                local red = redis:new()

                red:set_timeout(1000) -- 1 second

                local ok, err = red:connect(&quot;127.0.0.1&quot;, 6379)
                if not ok then
                    ngx.log(ngx.ERR, &quot;failed to connect to redis: &quot;, err)
                    return ngx.exit(500)
                end

                local host, err = red:get(key)
                if not host then
                    ngx.log(ngx.ERR, &quot;failed to get redis key: &quot;, err)
                    return ngx.exit(500)
                end

                if host == ngx.null then
                    ngx.log(ngx.ERR, &quot;no host found for key &quot;, key)
                    return ngx.exit(400)
                end

                ngx.var.target = host
            ';

            proxy_pass http://$target;
        }
    }
}
&lt;/pre&gt;&lt;br&gt;And then let's start the redis server on the localhost:6379:&lt;br&gt;&lt;pre&gt;$ ./redis-server  # default port is 6379
&lt;/pre&gt;&lt;br&gt;and feed some keys into this using the redis-cli utility:&lt;br&gt;&lt;pre&gt;   $ ./redis-cli
   redis&amp;gt; set foo apache.org
   OK
   redis&amp;gt; set bar nginx.org
   OK
&lt;/pre&gt;And then let's test our nginx app!&lt;br&gt;&lt;pre&gt;   $ curl --user-agent foo localhost:8080
   &amp;lt;apache.org home page goes here&amp;gt;

   $ curl --user-agent bar localhost:8080
   &amp;lt;nginx.org home page goes here&amp;gt;
&lt;/pre&gt;To further tune the performance, one could enable the connection pool for the redis connections, as documented in &lt;a tiddlylink=&quot;LuaRestyRedisLibrary&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#LuaRestyRedisLibrary&quot; href=&quot;null#LuaRestyRedisLibrary&quot; class=&quot;externalLink null&quot;&gt;LuaRestyRedisLibrary&lt;/a&gt;'s README.&lt;br&gt;&lt;br&gt;Before you benchmarking your interface defined here, please ensure that you've raised the error log level to &lt;code&gt;warn&lt;/code&gt; or &lt;code&gt;notice&lt;/code&gt; in your &lt;code&gt;nginx.conf&lt;/code&gt; file, as in&lt;br&gt;&lt;pre&gt;error_log logs/error.log warn;
&lt;/pre&gt;because flushing error log is a very expensive operation and can hurt performance a lot.&lt;br&gt;</description>
<link>null#DynamicRoutingBasedOnRedis</link>
<pubDate>Sun, 09 Jun 2013 01:49:00 GMT</pubDate>

</item>
<item>
<title>ChangeLog1002007</title>
<description>&lt;a tiddler=&quot;ChangeLog1002007&quot; commandname=&quot;permalink&quot; class=&quot;button command_permalink&quot; title=&quot;Permalink for this tiddler&quot; href=&quot;javascript:;&quot;&gt;permalink&lt;/a&gt;&lt;br&gt;&lt;h1&gt; Stable Release 1.2.7.8 - 13 May 2013&lt;/h1&gt;&lt;ul&gt;&lt;li&gt; applied the official patch for the nginx core to address the recent nginx security vulnerability CVE-2013-2070.&lt;/li&gt;&lt;/ul&gt;&lt;h1&gt; Stable Release 1.2.7.6 - 17 April 2013&lt;/h1&gt;&lt;ul&gt;&lt;li&gt; upgraded &lt;a tiddlylink=&quot;LuaNginxModule&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#LuaNginxModule&quot; href=&quot;null#LuaNginxModule&quot; class=&quot;externalLink null&quot;&gt;LuaNginxModule&lt;/a&gt; to 0.7.21.&lt;ul&gt;&lt;li&gt; bugfix: boolean values in an array table were rejected with the exception &quot;attempt to use boolean as query arg value&quot; while encoding a Lua (hash) table as URL arguments. thanks Calin Don for reporting this issue.&lt;/li&gt;&lt;li&gt; bugfix: &lt;a target=&quot;_blank&quot; title=&quot;External link to http://wiki.nginx.org/HttpLuaModule#ngx.req.raw_header&quot; href=&quot;http://wiki.nginx.org/HttpLuaModule#ngx.req.raw_header&quot; class=&quot;externalLink&quot;&gt;ngx.req.raw_header()&lt;/a&gt; would return an empty string value when the default header buffer (&lt;code&gt;c-&amp;gt;buffer&lt;/code&gt;) can hold the request line but not the whole header. thanks KDr2 for reporting this issue.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt; upgraded &lt;a tiddlylink=&quot;EncryptedSessionNginxModule&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#EncryptedSessionNginxModule&quot; href=&quot;null#EncryptedSessionNginxModule&quot; class=&quot;externalLink null&quot;&gt;EncryptedSessionNginxModule&lt;/a&gt; to 0.03.&lt;ul&gt;&lt;li&gt; refactor: fixed typos in the source code: replacing &quot;3des&quot; with &quot;aes&quot;; thanks Edgar Liu for reporting this issue.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt; upgraded &lt;a tiddlylink=&quot;IconvNginxModule&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#IconvNginxModule&quot; href=&quot;null#IconvNginxModule&quot; class=&quot;externalLink null&quot;&gt;IconvNginxModule&lt;/a&gt; to 0.10.&lt;ul&gt;&lt;li&gt; bugfix: failed to build on Solaris with the bogus error message &quot;ngx_devel_kit is required to build ngx_iconv; please put it before ngx_iconv&quot;.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;The following components are bundled:&lt;br&gt;&lt;ul&gt;&lt;li&gt; LuaJIT-2.0.1 (with hotfix #1)&lt;/li&gt;&lt;li&gt; array-var-nginx-module-0.03rc1&lt;/li&gt;&lt;li&gt; auth-request-nginx-module-0.2&lt;/li&gt;&lt;li&gt; drizzle-nginx-module-0.1.5&lt;/li&gt;&lt;li&gt; echo-nginx-module-0.45&lt;/li&gt;&lt;li&gt; encrypted-session-nginx-module-0.03&lt;/li&gt;&lt;li&gt; form-input-nginx-module-0.07&lt;/li&gt;&lt;li&gt; headers-more-nginx-module-0.19&lt;/li&gt;&lt;li&gt; iconv-nginx-module-0.10&lt;/li&gt;&lt;li&gt; lua-5.1.5&lt;/li&gt;&lt;li&gt; lua-cjson-1.0.3&lt;/li&gt;&lt;li&gt; lua-rds-parser-0.05&lt;/li&gt;&lt;li&gt; lua-redis-parser-0.10&lt;/li&gt;&lt;li&gt; lua-resty-dns-0.09&lt;/li&gt;&lt;li&gt; lua-resty-memcached-0.11&lt;/li&gt;&lt;li&gt; lua-resty-mysql-0.13&lt;/li&gt;&lt;li&gt; lua-resty-redis-0.15&lt;/li&gt;&lt;li&gt; lua-resty-string-0.08&lt;/li&gt;&lt;li&gt; lua-resty-upload-0.08&lt;/li&gt;&lt;li&gt; memc-nginx-module-0.13rc3&lt;/li&gt;&lt;li&gt; nginx-1.2.7&lt;/li&gt;&lt;li&gt; ngx_coolkit-0.2rc1&lt;/li&gt;&lt;li&gt; ngx_devel_kit-0.2.18&lt;/li&gt;&lt;li&gt; ngx_lua-0.7.21&lt;/li&gt;&lt;li&gt; ngx_postgres-1.0rc2&lt;/li&gt;&lt;li&gt; rds-csv-nginx-module-0.05rc2&lt;/li&gt;&lt;li&gt; rds-json-nginx-module-0.12rc10&lt;/li&gt;&lt;li&gt; redis-nginx-module-0.3.6&lt;/li&gt;&lt;li&gt; redis2-nginx-module-0.10&lt;/li&gt;&lt;li&gt; set-misc-nginx-module-0.22rc8&lt;/li&gt;&lt;li&gt; srcache-nginx-module-0.19&lt;/li&gt;&lt;li&gt; xss-nginx-module-0.03rc9&lt;/li&gt;&lt;/ul&gt;&lt;h1&gt; Devel Release 1.2.7.5 - 9 April 2013&lt;/h1&gt;&lt;ul&gt;&lt;li&gt; upgraded &lt;a tiddlylink=&quot;EchoNginxModule&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#EchoNginxModule&quot; href=&quot;null#EchoNginxModule&quot; class=&quot;externalLink null&quot;&gt;EchoNginxModule&lt;/a&gt; to 0.45.&lt;ul&gt;&lt;li&gt; bugfix: &lt;a target=&quot;_blank&quot; title=&quot;External link to http://wiki.nginx.org/HttpEchoModule#.24echo_client_request_headers&quot; href=&quot;http://wiki.nginx.org/HttpEchoModule#.24echo_client_request_headers&quot; class=&quot;externalLink&quot;&gt;$echo_client_request_headers&lt;/a&gt; would return the first part of the request body when request body was read before reading this variable.&lt;/li&gt;&lt;li&gt; bugfix: &lt;a target=&quot;_blank&quot; title=&quot;External link to http://wiki.nginx.org/HttpEchoModule#.24echo_client_request_headers&quot; href=&quot;http://wiki.nginx.org/HttpEchoModule#.24echo_client_request_headers&quot; class=&quot;externalLink&quot;&gt;$echo_client_request_headers&lt;/a&gt; might not work properly in a subrequest.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt; upgraded &lt;a tiddlylink=&quot;DrizzleNginxModule&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#DrizzleNginxModule&quot; href=&quot;null#DrizzleNginxModule&quot; class=&quot;externalLink null&quot;&gt;DrizzleNginxModule&lt;/a&gt; to 0.1.5.&lt;ul&gt;&lt;li&gt; bugfix: compilation errors occurred with nginx 1.3.15. thanks Karl Blessing for reporting this issue.&lt;/li&gt;&lt;li&gt; docs: fixed a typo in the sample code for &lt;a target=&quot;_blank&quot; title=&quot;External link to http://wiki.nginx.org/HttpDrizzleModule#.24drizzle_thread_id&quot; href=&quot;http://wiki.nginx.org/HttpDrizzleModule#.24drizzle_thread_id&quot; class=&quot;externalLink&quot;&gt;$drizzle_thread_id&lt;/a&gt; reported by 岚偑/yy秋叶.&lt;/li&gt;&lt;li&gt; docs: documented the config syntax for db passwords with special chars in them.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt; upgraded &lt;a tiddlylink=&quot;LuaNginxModule&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#LuaNginxModule&quot; href=&quot;null#LuaNginxModule&quot; class=&quot;externalLink null&quot;&gt;LuaNginxModule&lt;/a&gt; to 0.7.20.&lt;ul&gt;&lt;li&gt; feature: now we allow the &quot;0&quot; time argument in &lt;a target=&quot;_blank&quot; title=&quot;External link to http://wiki.nginx.org/HttpLuaModule#ngx.sleep&quot; href=&quot;http://wiki.nginx.org/HttpLuaModule#ngx.sleep&quot; class=&quot;externalLink&quot;&gt;ngx.sleep()&lt;/a&gt;.&lt;/li&gt;&lt;li&gt; feature: &lt;a target=&quot;_blank&quot; title=&quot;External link to http://wiki.nginx.org/HttpLuaModule#ngx.location.capture&quot; href=&quot;http://wiki.nginx.org/HttpLuaModule#ngx.location.capture&quot; class=&quot;externalLink&quot;&gt;ngx.location.capture&lt;/a&gt; and &lt;a target=&quot;_blank&quot; title=&quot;External link to http://wiki.nginx.org/HttpLuaModule#ngx.location.capture_multi&quot; href=&quot;http://wiki.nginx.org/HttpLuaModule#ngx.location.capture_multi&quot; class=&quot;externalLink&quot;&gt;ngx.location.capture_multi&lt;/a&gt; now return a lua table with the boolean field &quot;truncated&quot;, which indicates whether the subrequest response body is truncated.&lt;/li&gt;&lt;li&gt; bugfix: request hung when rewrite cycled in &lt;a target=&quot;_blank&quot; title=&quot;External link to http://wiki.nginx.org/HttpLuaModule#ngx.req.set_uri&quot; href=&quot;http://wiki.nginx.org/HttpLuaModule#ngx.req.set_uri&quot; class=&quot;externalLink&quot;&gt;ngx.req.set_uri(uri, true)&lt;/a&gt; instead of throwing out an error log message and a 500 page properly. thanks Calin Don for the report.&lt;/li&gt;&lt;li&gt; bugfix: assignment to &lt;a target=&quot;_blank&quot; title=&quot;External link to http://wiki.nginx.org/HttpLuaModule#ngx.status&quot; href=&quot;http://wiki.nginx.org/HttpLuaModule#ngx.status&quot; class=&quot;externalLink&quot;&gt;ngx.status&lt;/a&gt; did not take effect when the response status line had already been generated (by ngx_proxy or others). thanks eqiuno for reporting this issue.&lt;/li&gt;&lt;li&gt; bugfix: &lt;a target=&quot;_blank&quot; title=&quot;External link to http://wiki.nginx.org/HttpLuaModule#ngx.req.raw_header&quot; href=&quot;http://wiki.nginx.org/HttpLuaModule#ngx.req.raw_header&quot; class=&quot;externalLink&quot;&gt;ngx.req.raw_header()&lt;/a&gt; would return the first part of the request body when request body was read before the call. thanks Matthieu Tourne for reporting this issue.&lt;/li&gt;&lt;li&gt; bugfix: &lt;a target=&quot;_blank&quot; title=&quot;External link to http://wiki.nginx.org/HttpLuaModule#ngx.req.raw_header&quot; href=&quot;http://wiki.nginx.org/HttpLuaModule#ngx.req.raw_header&quot; class=&quot;externalLink&quot;&gt;ngx.req.raw_header()&lt;/a&gt; might not work properly in a subrequest.&lt;/li&gt;&lt;li&gt; bugfix: we would override the subrequest response status code later when error happens.&lt;/li&gt;&lt;li&gt; bugfix: the debug log message &quot;lua set uri jump to &amp;lt;uri&amp;gt;&quot; generated by &lt;a target=&quot;_blank&quot; title=&quot;External link to http://wiki.nginx.org/HttpLuaModule#ngx.req.set_uri&quot; href=&quot;http://wiki.nginx.org/HttpLuaModule#ngx.req.set_uri&quot; class=&quot;externalLink&quot;&gt;ngx.req.set_uri(uri, true)&lt;/a&gt; was wrong for &quot;&amp;lt;uri&amp;gt;&quot; was the old URI.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt; upgraded &lt;a tiddlylink=&quot;LuaRestyMySQLLibrary&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#LuaRestyMySQLLibrary&quot; href=&quot;null#LuaRestyMySQLLibrary&quot; class=&quot;externalLink null&quot;&gt;LuaRestyMySQLLibrary&lt;/a&gt; to 0.13.&lt;ul&gt;&lt;li&gt; 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 &lt;a tiddlylink=&quot;LuaJIT&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#LuaJIT&quot; href=&quot;null#LuaJIT&quot; class=&quot;externalLink null&quot;&gt;LuaJIT&lt;/a&gt;'s standard &quot;bit&quot; module. thanks Azure Wang for the patch implementing a temporary workaround.&lt;/li&gt;&lt;li&gt; docs: various typo fixes from Tor Hveem and doledoletree.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt; upgraded &lt;a tiddlylink=&quot;LuaRestyMemcachedLibrary&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#LuaRestyMemcachedLibrary&quot; href=&quot;null#LuaRestyMemcachedLibrary&quot; class=&quot;externalLink null&quot;&gt;LuaRestyMemcachedLibrary&lt;/a&gt; to 0.11.&lt;ul&gt;&lt;li&gt; feature: added new method &quot;touch&quot; for the new Memcached command &quot;touch&quot;. thanks merlin for the patch.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt; updated the &lt;a target=&quot;_blank&quot; title=&quot;External link to https://raw.github.com/agentzh/ngx_openresty/master/patches/nginx-1.2.7-upstream_truncation.patch&quot; href=&quot;https://raw.github.com/agentzh/ngx_openresty/master/patches/nginx-1.2.7-upstream_truncation.patch&quot; class=&quot;externalLink&quot;&gt;upstream_truncation patch&lt;/a&gt; for the Nginx core.&lt;ul&gt;&lt;li&gt; bugfix: chunked upstream response bodies were treated as 502. thanks Andy Yuan for the report.&lt;/li&gt;&lt;li&gt; bugfix: request response status was changed to 502 after response header was sent in case of data truncation.&lt;/li&gt;&lt;li&gt; bugfix: the &quot;last buf&quot; (i.e., bufs with &quot;last_buf&quot; or &quot;last_in_chain&quot; set) should not be sent downstream in case of upstream data truncation.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt; updated the &lt;a target=&quot;_blank&quot; title=&quot;External link to https://raw.github.com/agentzh/ngx_openresty/master/patches/nginx-1.2.7-dtrace.patch&quot; href=&quot;https://raw.github.com/agentzh/ngx_openresty/master/patches/nginx-1.2.7-dtrace.patch&quot; class=&quot;externalLink&quot;&gt;dtrace patch&lt;/a&gt; for the Nginx core.&lt;ul&gt;&lt;li&gt; feature: made the stap function &lt;code&gt;ngx_chain_dump()&lt;/code&gt; print out info about the &quot;last_buf&quot; and &quot;last_in_chain&quot; flags in bufs and removed the old &quot;&amp;lt;eof&amp;gt;&quot; notation in the output.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h1&gt; Devel Release 1.2.7.3 - 24 March 2013&lt;/h1&gt;&lt;ul&gt;&lt;li&gt; upgraded &lt;a tiddlylink=&quot;LuaNginxModule&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#LuaNginxModule&quot; href=&quot;null#LuaNginxModule&quot; class=&quot;externalLink null&quot;&gt;LuaNginxModule&lt;/a&gt; to 0.7.18.&lt;ul&gt;&lt;li&gt; feature: implemented &lt;a target=&quot;_blank&quot; title=&quot;External link to http://wiki.nginx.org/HttpLuaModule#ngx.req.http_version&quot; href=&quot;http://wiki.nginx.org/HttpLuaModule#ngx.req.http_version&quot; class=&quot;externalLink&quot;&gt;ngx.req.http_version()&lt;/a&gt; that returns the HTTP version number for the current request. thanks Matthieu Tourne for requesting this.&lt;/li&gt;&lt;li&gt; feature: implemented the &lt;a target=&quot;_blank&quot; title=&quot;External link to http://wiki.nginx.org/HttpLuaModule#ngx.req.raw_header&quot; href=&quot;http://wiki.nginx.org/HttpLuaModule#ngx.req.raw_header&quot; class=&quot;externalLink&quot;&gt;ngx.req.raw_header()&lt;/a&gt; function for returning the original raw HTTP protocol header string received by Nginx. thanks Matthieu Tourne for requesting this.&lt;/li&gt;&lt;li&gt; feature: added new methods &lt;a target=&quot;_blank&quot; title=&quot;External link to http://wiki.nginx.org/HttpLuaModule#ngx.shared.DICT.safe_set&quot; href=&quot;http://wiki.nginx.org/HttpLuaModule#ngx.shared.DICT.safe_set&quot; class=&quot;externalLink&quot;&gt;safe_set&lt;/a&gt; and &lt;a target=&quot;_blank&quot; title=&quot;External link to http://wiki.nginx.org/HttpLuaModule#ngx.shared.DICT.safe_add&quot; href=&quot;http://wiki.nginx.org/HttpLuaModule#ngx.shared.DICT.safe_add&quot; class=&quot;externalLink&quot;&gt;safe_add&lt;/a&gt; to ngx.shared.DICT objects, which never override existing unexpired items but immediately return nil and a &quot;no memory&quot; string message when running out of storage. thanks Matthieu Tourne for requesting this.&lt;/li&gt;&lt;li&gt; feature: datagram Unix domain sockets created by &lt;a target=&quot;_blank&quot; title=&quot;External link to http://wiki.nginx.org/HttpLuaModule#ngx.socket.udp&quot; href=&quot;http://wiki.nginx.org/HttpLuaModule#ngx.socket.udp&quot; class=&quot;externalLink&quot;&gt;ngx.socket.udp()&lt;/a&gt; can now receive data from the other endpoint via &quot;autobind&quot; on Linux. thanks Dirk Feytons for the patch.&lt;/li&gt;&lt;li&gt; change: the &lt;a target=&quot;_blank&quot; title=&quot;External link to http://wiki.nginx.org/HttpLuaModule#ngx.re.match&quot; href=&quot;http://wiki.nginx.org/HttpLuaModule#ngx.re.match&quot; class=&quot;externalLink&quot;&gt;ngx.re.match&lt;/a&gt;, &lt;a target=&quot;_blank&quot; title=&quot;External link to http://wiki.nginx.org/HttpLuaModule#ngx.re.gmatch&quot; href=&quot;http://wiki.nginx.org/HttpLuaModule#ngx.re.gmatch&quot; class=&quot;externalLink&quot;&gt;ngx.re.gmatch&lt;/a&gt;, &lt;a target=&quot;_blank&quot; title=&quot;External link to http://wiki.nginx.org/HttpLuaModule#ngx.re.sub&quot; href=&quot;http://wiki.nginx.org/HttpLuaModule#ngx.re.sub&quot; class=&quot;externalLink&quot;&gt;ngx.re.sub&lt;/a&gt;, and &lt;a target=&quot;_blank&quot; title=&quot;External link to http://wiki.nginx.org/HttpLuaModule#ngx.re.gsub&quot; href=&quot;http://wiki.nginx.org/HttpLuaModule#ngx.re.gsub&quot; class=&quot;externalLink&quot;&gt;ngx.re.gsub&lt;/a&gt; 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.&lt;/li&gt;&lt;li&gt; bugfix: use of &lt;a target=&quot;_blank&quot; title=&quot;External link to http://wiki.nginx.org/HttpLuaModule#ngx.req.socket&quot; href=&quot;http://wiki.nginx.org/HttpLuaModule#ngx.req.socket&quot; class=&quot;externalLink&quot;&gt;ngx.req.socket()&lt;/a&gt; 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.&lt;/li&gt;&lt;li&gt; bugfix: when a non-table value was specified for the &quot;args&quot; option in the &lt;a target=&quot;_blank&quot; title=&quot;External link to http://wiki.nginx.org/HttpLuaModule#ngx.location.capture&quot; href=&quot;http://wiki.nginx.org/HttpLuaModule#ngx.location.capture&quot; class=&quot;externalLink&quot;&gt;ngx.location.capture&lt;/a&gt; or &lt;a target=&quot;_blank&quot; title=&quot;External link to http://wiki.nginx.org/HttpLuaModule#ngx.location.capture_multi&quot; href=&quot;http://wiki.nginx.org/HttpLuaModule#ngx.location.capture_multi&quot; class=&quot;externalLink&quot;&gt;ngx.location.capture_multi&lt;/a&gt; call, memory invalid access might happen, which resulted in garbage data at least. thanks Siddon Tang for reporting this issue.&lt;/li&gt;&lt;li&gt; bugfix: when the Lua code using UDP/TCP cosockets + resolver was run in a subrequest, the subrequest could hang due to missing calls to &lt;code&gt;ngx_http_run_posted_requests&lt;/code&gt; in the UDP/TCP cosocket resolver handler. thanks Lanshun Zhou for reporting this issue.&lt;/li&gt;&lt;li&gt; bugfix: &lt;a target=&quot;_blank&quot; title=&quot;External link to http://wiki.nginx.org/HttpLuaModule#ngx.socket.udp&quot; href=&quot;http://wiki.nginx.org/HttpLuaModule#ngx.socket.udp&quot; class=&quot;externalLink&quot;&gt;ngx.socket.udp&lt;/a&gt;: memory leaks or invalid memory accesses might happen when the DNS resolver failed to resolve.&lt;/li&gt;&lt;li&gt; bugfix: &lt;a target=&quot;_blank&quot; title=&quot;External link to http://wiki.nginx.org/HttpLuaModule#rewrite_by_lua_no_postpone&quot; href=&quot;http://wiki.nginx.org/HttpLuaModule#rewrite_by_lua_no_postpone&quot; class=&quot;externalLink&quot;&gt;rewrite_by_lua_no_postpone&lt;/a&gt; can only work globally and did not reject contexts like &quot;server&quot; and &quot;location&quot; configuration blocks. thanks Matthieu Tourne for reporting this issue.&lt;/li&gt;&lt;li&gt; bugfix: (large) in-file request bodies could not be inherited correctly by multiple subrequests issued by &lt;a target=&quot;_blank&quot; title=&quot;External link to http://wiki.nginx.org/HttpLuaModule#ngx.location.capture&quot; href=&quot;http://wiki.nginx.org/HttpLuaModule#ngx.location.capture&quot; class=&quot;externalLink&quot;&gt;ngx.location.capture&lt;/a&gt;. thanks Matthieu Tourne for reporting this issue.&lt;/li&gt;&lt;li&gt; bugfix: &lt;a target=&quot;_blank&quot; title=&quot;External link to http://wiki.nginx.org/HttpLuaModule#ngx.req.get_headers&quot; href=&quot;http://wiki.nginx.org/HttpLuaModule#ngx.req.get_headers&quot; class=&quot;externalLink&quot;&gt;ngx.req.get_headers(limit, true)&lt;/a&gt; would still return header names in the pure lower-case form when the &quot;limit&quot; argument was an integer. thanks Matthieu Tourne for reporting this issue.&lt;/li&gt;&lt;li&gt; bugfix: &lt;a target=&quot;_blank&quot; title=&quot;External link to http://wiki.nginx.org/HttpLuaModule#ngx.re.match&quot; href=&quot;http://wiki.nginx.org/HttpLuaModule#ngx.re.match&quot; class=&quot;externalLink&quot;&gt;ngx.re.match&lt;/a&gt;: when the &quot;D&quot; 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.&lt;/li&gt;&lt;li&gt; docs: made it explicit that redirecting to external domains is also supported in &lt;a target=&quot;_blank&quot; title=&quot;External link to http://wiki.nginx.org/HttpLuaModule#ngx.redirect&quot; href=&quot;http://wiki.nginx.org/HttpLuaModule#ngx.redirect&quot; class=&quot;externalLink&quot;&gt;ngx.redirect()&lt;/a&gt;. thanks Ron Gomes for asking.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt; upgraded &lt;a tiddlylink=&quot;EchoNginxModule&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#EchoNginxModule&quot; href=&quot;null#EchoNginxModule&quot; class=&quot;externalLink null&quot;&gt;EchoNginxModule&lt;/a&gt; to 0.44.&lt;ul&gt;&lt;li&gt; bugfix: &lt;a target=&quot;_blank&quot; title=&quot;External link to http://wiki.nginx.org/HttpEchoModule#.24echo_client_request_headers&quot; href=&quot;http://wiki.nginx.org/HttpEchoModule#.24echo_client_request_headers&quot; class=&quot;externalLink&quot;&gt;$echo_client_request_headers&lt;/a&gt; was evaluated to only the last part of the request header when &quot;large header buffers&quot; were used.&lt;/li&gt;&lt;li&gt; change: preserve the trailing &lt;code&gt;CR LF&lt;/code&gt; at the end of the whole HTTP protocol header returned by &lt;a target=&quot;_blank&quot; title=&quot;External link to http://wiki.nginx.org/HttpEchoModule#.24echo_client_request_headers&quot; href=&quot;http://wiki.nginx.org/HttpEchoModule#.24echo_client_request_headers&quot; class=&quot;externalLink&quot;&gt;$echo_client_request_headers&lt;/a&gt;.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt; upgraded &lt;a tiddlylink=&quot;Redis2NginxModule&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#Redis2NginxModule&quot; href=&quot;null#Redis2NginxModule&quot; class=&quot;externalLink null&quot;&gt;Redis2NginxModule&lt;/a&gt; to 0.10.&lt;ul&gt;&lt;li&gt; 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.&lt;/li&gt;&lt;li&gt; docs: updated the docs for the limitations on Redis pub/sub. thanks LazyZhu for pointing out the potential confusions.&lt;/li&gt;&lt;li&gt; docs: now we recommend &lt;a tiddlylink=&quot;LuaRestyRedisLibrary&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#LuaRestyRedisLibrary&quot; href=&quot;null#LuaRestyRedisLibrary&quot; class=&quot;externalLink null&quot;&gt;LuaRestyRedisLibrary&lt;/a&gt; instead when being used with &lt;a tiddlylink=&quot;LuaNginxModule&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#LuaNginxModule&quot; href=&quot;null#LuaNginxModule&quot; class=&quot;externalLink null&quot;&gt;LuaNginxModule&lt;/a&gt;.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt; upgraded &lt;a tiddlylink=&quot;LuaRestyUploadLibrary&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#LuaRestyUploadLibrary&quot; href=&quot;null#LuaRestyUploadLibrary&quot; class=&quot;externalLink null&quot;&gt;LuaRestyUploadLibrary&lt;/a&gt; to 0.08.&lt;ul&gt;&lt;li&gt; bugfix: when multiple &lt;code&gt;Content-Type&lt;/code&gt; request headers were given, a Lua exception would be thrown; now we just pick up the first one.&lt;/li&gt;&lt;li&gt; docs: better error handling in the code sample. thanks wgm.china for the report.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt; feature: applied &lt;a target=&quot;_blank&quot; title=&quot;External link to https://raw.github.com/agentzh/ngx_openresty/master/patches/ngx_http_redis-0.3.6-variables_in_redis_pass.patch&quot; href=&quot;https://raw.github.com/agentzh/ngx_openresty/master/patches/ngx_http_redis-0.3.6-variables_in_redis_pass.patch&quot; class=&quot;externalLink&quot;&gt;the variables_in_redis_pass patch&lt;/a&gt; to &lt;a tiddlylink=&quot;RedisNginxModule&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#RedisNginxModule&quot; href=&quot;null#RedisNginxModule&quot; class=&quot;externalLink null&quot;&gt;RedisNginxModule&lt;/a&gt; 0.3.6 to allow use of Nginx variables in the &lt;a target=&quot;_blank&quot; title=&quot;External link to http://wiki.nginx.org/HttpRedisModule#redis_pass&quot; href=&quot;http://wiki.nginx.org/HttpRedisModule#redis_pass&quot; class=&quot;externalLink&quot;&gt;redis_pass&lt;/a&gt; directive. thanks Diptamay Sanyal for requesting this feature.&lt;/li&gt;&lt;li&gt; bugfix: applied Lanshun Zhou's &lt;a target=&quot;_blank&quot; title=&quot;External link to https://raw.github.com/agentzh/ngx_openresty/master/patches/nginx-1.2.7-run_posted_requests_in_resolver.patch&quot; href=&quot;https://raw.github.com/agentzh/ngx_openresty/master/patches/nginx-1.2.7-run_posted_requests_in_resolver.patch&quot; class=&quot;externalLink&quot;&gt;run_posted_requests_in_resolver patch&lt;/a&gt; to the Nginx core: &lt;a target=&quot;_blank&quot; title=&quot;External link to http://mailman.nginx.org/pipermail/nginx-devel/2013-March/003476.html&quot; href=&quot;http://mailman.nginx.org/pipermail/nginx-devel/2013-March/003476.html&quot; class=&quot;externalLink&quot;&gt;http://mailman.nginx.org/pipermail/nginx-devel/2013-March/003476.html&lt;/a&gt;&lt;/li&gt;&lt;li&gt; bugfix:  applied the official &lt;a target=&quot;_blank&quot; title=&quot;External link to http://luajit.org/download/v2.0.1_hotfix1.patch&quot; href=&quot;http://luajit.org/download/v2.0.1_hotfix1.patch&quot; class=&quot;externalLink&quot;&gt;hotfix #1 patch&lt;/a&gt; for the bundled &lt;a tiddlylink=&quot;LuaJIT&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#LuaJIT&quot; href=&quot;null#LuaJIT&quot; class=&quot;externalLink null&quot;&gt;LuaJIT&lt;/a&gt; 2.0.1.&lt;/li&gt;&lt;/ul&gt;&lt;h1&gt; Devel Release 1.2.7.1 - 22 February 2013&lt;/h1&gt;&lt;ul&gt;&lt;li&gt; upgraded the Nginx core to 1.2.7.&lt;ul&gt;&lt;li&gt; see &lt;a target=&quot;_blank&quot; title=&quot;External link to http://nginx.org/en/CHANGES-1.2&quot; href=&quot;http://nginx.org/en/CHANGES-1.2&quot; class=&quot;externalLink&quot;&gt;http://nginx.org/en/CHANGES-1.2&lt;/a&gt; for changes.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt; upgraded &lt;a tiddlylink=&quot;LuaJIT&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#LuaJIT&quot; href=&quot;null#LuaJIT&quot; class=&quot;externalLink null&quot;&gt;LuaJIT&lt;/a&gt; 2.0 to 2.0.1.&lt;ul&gt;&lt;li&gt; see &lt;a target=&quot;_blank&quot; title=&quot;External link to http://luajit.org/changes.html&quot; href=&quot;http://luajit.org/changes.html&quot; class=&quot;externalLink&quot;&gt;http://luajit.org/changes.html&lt;/a&gt; for changes.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt; upgraded &lt;a tiddlylink=&quot;LuaNginxModule&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#LuaNginxModule&quot; href=&quot;null#LuaNginxModule&quot; class=&quot;externalLink null&quot;&gt;LuaNginxModule&lt;/a&gt; to 0.7.16.&lt;ul&gt;&lt;li&gt; optimize: removed the unsed &lt;code&gt;size&lt;/code&gt; field and related computatins from the script engine for the &lt;code&gt;ngx.re&lt;/code&gt; API.&lt;/li&gt;&lt;li&gt; optimize: saved a little memory in the script engine for the &lt;code&gt;ngx.re&lt;/code&gt; API.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;See &lt;a tiddlylink=&quot;ChangeLog1002006&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#ChangeLog1002006&quot; href=&quot;null#ChangeLog1002006&quot; class=&quot;externalLink null&quot;&gt;ChangeLog1002006&lt;/a&gt; for change log for &lt;a tiddlylink=&quot;OpenResty&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#OpenResty&quot; href=&quot;null#OpenResty&quot; class=&quot;externalLink null&quot;&gt;OpenResty&lt;/a&gt; 1.2.6.x.</description>
<link>null#ChangeLog1002007</link>
<pubDate>Mon, 13 May 2013 19:27:00 GMT</pubDate>

</item>
<item>
<title>About</title>
<description>&lt;a tiddler=&quot;About&quot; commandname=&quot;permalink&quot; class=&quot;button command_permalink&quot; title=&quot;Permalink for this tiddler&quot; href=&quot;javascript:;&quot;&gt;permalink&lt;/a&gt;&lt;br&gt;&lt;br&gt;This bundle is mainly maintained by Yichun Zhang (&lt;a target=&quot;_blank&quot; title=&quot;External link to http://agentzh.org&quot; href=&quot;http://agentzh.org&quot; class=&quot;externalLink&quot;&gt;agentzh&lt;/a&gt;). It was originally sponsored by &lt;a target=&quot;_blank&quot; title=&quot;External link to http://www.taobao.com&quot; href=&quot;http://www.taobao.com&quot; class=&quot;externalLink&quot;&gt;Taobao.com&lt;/a&gt; before the year 2011 and it has been mainly supported by &lt;a target=&quot;_blank&quot; title=&quot;External link to http://www.cloudflare.com&quot; href=&quot;http://www.cloudflare.com&quot; class=&quot;externalLink&quot;&gt;CloudFlare&lt;/a&gt; since then.&lt;br&gt;&lt;br&gt;Because most of the Nginx modules are developed by the bundle maintainers, it can be ensured&lt;br&gt;that all these modules are played well together.&lt;br&gt;&lt;br&gt;The bundled software components are copyrighted by the respective copyright holders.&lt;br&gt;&lt;br&gt;This web site is a &lt;a target=&quot;_blank&quot; title=&quot;External link to http://www.tiddlywiki.com/&quot; href=&quot;http://www.tiddlywiki.com/&quot; class=&quot;externalLink&quot;&gt;TiddlyWiki&lt;/a&gt; page that is under the version control of a repository on &lt;a tiddlylink=&quot;GitHub&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#GitHub&quot; href=&quot;null#GitHub&quot; class=&quot;externalLink null&quot;&gt;GitHub&lt;/a&gt;:&lt;br&gt;&lt;br&gt;&lt;a target=&quot;_blank&quot; title=&quot;External link to http://github.com/agentzh/openresty.org&quot; href=&quot;http://github.com/agentzh/openresty.org&quot; class=&quot;externalLink&quot;&gt;http://github.com/agentzh/openresty.org&lt;/a&gt;&lt;br&gt;&lt;br&gt;Feel free to fork it or just &lt;a tiddlylink=&quot;ContactUs&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#ContactUs&quot; href=&quot;null#ContactUs&quot; class=&quot;externalLink null&quot;&gt;contact us&lt;/a&gt; to obtain a git commit bit if you want to edit and improve this site.&lt;br&gt;</description>
<link>null#About</link>
<pubDate>Wed, 08 May 2013 06:25:00 GMT</pubDate>

</item>
<item>
<title>Installation</title>
<description>&lt;a tiddler=&quot;Installation&quot; commandname=&quot;permalink&quot; class=&quot;button command_permalink&quot; title=&quot;Permalink for this tiddler&quot; href=&quot;javascript:;&quot;&gt;permalink&lt;/a&gt;&lt;br&gt;If you haven't downloaded the &lt;a tiddlylink=&quot;OpenResty&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#OpenResty&quot; href=&quot;null#OpenResty&quot; class=&quot;externalLink null&quot;&gt;OpenResty&lt;/a&gt; source code tarball, please go to the &lt;a tiddlylink=&quot;Download&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#Download&quot; href=&quot;null#Download&quot; class=&quot;externalLink null&quot;&gt;Download&lt;/a&gt; page first.&lt;br&gt;&lt;br&gt;Basically, building and installing &lt;a tiddlylink=&quot;OpenResty&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#OpenResty&quot; href=&quot;null#OpenResty&quot; class=&quot;externalLink null&quot;&gt;OpenResty&lt;/a&gt; is as simple as&lt;br&gt;&lt;pre&gt;tar xzvf ngx_openresty-VERSION.tar.gz
cd ngx_openresty-VERSION/
./configure --with-luajit
make
make install
&lt;/pre&gt;where &lt;code&gt;VERSION&lt;/code&gt; should be replaced by a concrete version number of &lt;a tiddlylink=&quot;OpenResty&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#OpenResty&quot; href=&quot;null#OpenResty&quot; class=&quot;externalLink null&quot;&gt;OpenResty&lt;/a&gt;, like &lt;code&gt;0.8.54.6&lt;/code&gt;.&lt;br&gt;If you have problems while building or want finer control over the building process, please read on.&lt;br&gt;&lt;h1&gt;Prerequisites&lt;/h1&gt;You should have &lt;code&gt;perl 5.6.1+&lt;/code&gt;, &lt;code&gt;libreadline&lt;/code&gt;, &lt;code&gt;libpcre&lt;/code&gt;, &lt;code&gt;libssl&lt;/code&gt; installed into your system. For Linux, you should also ensure that &lt;code&gt;ldconfig&lt;/code&gt; is in your PATH environment.&lt;br&gt;&lt;h2&gt;Debian and Ubuntu users&lt;/h2&gt;You're recommended to install the following packages using apt-get:&lt;br&gt;&lt;pre&gt;apt-get install libreadline-dev libncurses5-dev libpcre3-dev libssl-dev perl make
&lt;/pre&gt;&lt;h2&gt;Fedora and RedHat users&lt;/h2&gt;You're recommended to install the following packages using yum:&lt;br&gt;&lt;pre&gt;yum install readline-devel pcre-devel openssl-devel
&lt;/pre&gt;&lt;h2&gt;Mac OS X (Darwin) users&lt;/h2&gt;You're recommended to install prerequisites PCRE using some package management tool, like &lt;a target=&quot;_blank&quot; title=&quot;External link to http://mxcl.github.com/homebrew/&quot; href=&quot;http://mxcl.github.com/homebrew/&quot; class=&quot;externalLink&quot;&gt;Homebrew&lt;/a&gt;:&lt;br&gt;&lt;pre&gt;brew install pcre
&lt;/pre&gt;Alternatively you can install PCRE from source all by yourself :)&lt;br&gt;&lt;br&gt;After installing PCRE, you may need to specify the paths for PCRE's headers and libraries to your C compiler and linker:&lt;br&gt;&lt;pre&gt;$ ./configure \
             --with-cc-opt=&quot;-I/usr/local/Cellar/pcre/8.21/include&quot; \
             --with-ld-opt=&quot;-L/usr/local/Cellar/pcre/8.21/lib&quot; \
             ...
&lt;/pre&gt;See also &lt;a target=&quot;_blank&quot; title=&quot;External link to https://github.com/agentzh/ngx_openresty/issues/3&quot; href=&quot;https://github.com/agentzh/ngx_openresty/issues/3&quot; class=&quot;externalLink&quot;&gt;Issue #3: &lt;/a&gt;&lt;br&gt;&lt;br&gt;&lt;h2&gt;FreeBSD users&lt;/h2&gt;You need to install the following ports:&lt;br&gt;&lt;ul&gt;&lt;li&gt; devel/gmake&lt;/li&gt;&lt;li&gt; security/openssl&lt;/li&gt;&lt;li&gt; devel/pcre&lt;/li&gt;&lt;/ul&gt;&lt;h2&gt;Solaris 11 users&lt;/h2&gt;You need to install the following packages from the official repository:&lt;br&gt;&lt;ul&gt;&lt;li&gt; gcc-3&lt;/li&gt;&lt;li&gt; SUNWlibm&lt;/li&gt;&lt;/ul&gt;Usually it's just as simple as&lt;br&gt;&lt;pre&gt;pfexec pkg install gcc-3 SUNWlibm
&lt;/pre&gt;&lt;h1&gt;Build OpenResty&lt;/h1&gt;&lt;h2&gt;Download&lt;/h2&gt;download the latest ngx_openresty tarball can be fetched from the &lt;a tiddlylink=&quot;Download&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#Download&quot; href=&quot;null#Download&quot; class=&quot;externalLink null&quot;&gt;Download&lt;/a&gt; page and unpack it like this:&lt;br&gt;&lt;pre&gt;tar xzvf ngx_openresty-VERSION.tar.gz
&lt;/pre&gt;where &lt;code&gt;VERSION&lt;/code&gt; should be replaced by real version numbers like &lt;code&gt;0.8.54.6&lt;/code&gt;.&lt;br&gt;&lt;h2&gt;./configure&lt;/h2&gt;Then enter the &lt;code&gt;ngx_openresty-VERSION/&lt;/code&gt; directory, and type the following command to configure:&lt;br&gt;&lt;pre&gt;./configure --with-luajit
&lt;/pre&gt;By default, &lt;code&gt;--prefix=/usr/local/openresty&lt;/code&gt; is assumed. The &lt;code&gt;--with-luajit&lt;/code&gt; option is strongly recommended because &lt;a tiddlylink=&quot;LuaJIT&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#LuaJIT&quot; href=&quot;null#LuaJIT&quot; class=&quot;externalLink null&quot;&gt;LuaJIT&lt;/a&gt; 2.0 can give a nice performance boost in terms of both CPU time and memory footprint and its VM is also fully resume-able, unlike the default standard Lua 5.1 interpreter. Enabling &lt;a tiddlylink=&quot;LuaJIT&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#LuaJIT&quot; href=&quot;null#LuaJIT&quot; class=&quot;externalLink null&quot;&gt;LuaJIT&lt;/a&gt; 2.0 should work on Linux, Mac OS X, &lt;a tiddlylink=&quot;FreeBSD&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#FreeBSD&quot; href=&quot;null#FreeBSD&quot; class=&quot;externalLink null&quot;&gt;FreeBSD&lt;/a&gt;, Solaris, and others. You should only disable &lt;a tiddlylink=&quot;LuaJIT&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#LuaJIT&quot; href=&quot;null#LuaJIT&quot; class=&quot;externalLink null&quot;&gt;LuaJIT&lt;/a&gt; 2.0 when your platform does not support &lt;a tiddlylink=&quot;LuaJIT&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#LuaJIT&quot; href=&quot;null#LuaJIT&quot; class=&quot;externalLink null&quot;&gt;LuaJIT&lt;/a&gt;.&lt;br&gt;&lt;br&gt;You can specify various options, as in&lt;br&gt;&lt;pre&gt;./configure --prefix=/opt/openresty \
            --with-luajit \
            --without-http_redis2_module \
            --with-http_iconv_module \
            --with-http_postgres_module \
            -j2
&lt;/pre&gt;All of the Nginx configure file options can be used here, including &lt;code&gt;--add-module=PATH&lt;/code&gt;. Try &lt;code&gt;./configure --help&lt;/code&gt; to see more options available.&lt;br&gt;&lt;br&gt;Errors in running the ./configure script can be found in the file &lt;code&gt;build/nginx-VERSION/objs/autoconf.err&lt;/code&gt; where &lt;code&gt;VERSION&lt;/code&gt; should be replaced by a concrete version number of &lt;a tiddlylink=&quot;OpenResty&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#OpenResty&quot; href=&quot;null#OpenResty&quot; class=&quot;externalLink null&quot;&gt;OpenResty&lt;/a&gt;, like &lt;code&gt;0.8.54.6&lt;/code&gt;.&lt;br&gt;&lt;h3&gt;Notes for Solaris users&lt;/h3&gt;For Solaris, it's common to install libraries like OpenSSL to &lt;code&gt;/lib&lt;/code&gt;, so when it complaints about missing OpenSSL and you have indeed already installed it, specify the &lt;code&gt;--with-ld-opt='-L/lib'&lt;/code&gt; option.&lt;br&gt;&lt;h2&gt;make&lt;/h2&gt;Now you can compile everything up using the command&lt;br&gt;&lt;pre&gt;make
&lt;/pre&gt;If your machine has multiple cores and your &lt;code&gt;make&lt;/code&gt; supports the jobserver feature, you can compile things in parallel like this:&lt;br&gt;&lt;pre&gt;make -j2
&lt;/pre&gt;assuming you have 2 CPU cores.&lt;br&gt;&lt;h2&gt;make install&lt;/h2&gt;If all the previous steps go without problems, you can install &lt;a tiddlylink=&quot;OpenResty&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#OpenResty&quot; href=&quot;null#OpenResty&quot; class=&quot;externalLink null&quot;&gt;OpenResty&lt;/a&gt; into your system by typing the command&lt;br&gt;&lt;pre&gt;make install
&lt;/pre&gt;On Linux, it often requires &lt;code&gt;sudo&lt;/code&gt; to gain root access.&lt;br&gt;</description>
<category>doc</category>
<category>install</category>
<link>null#Installation</link>
<pubDate>Tue, 07 May 2013 22:35:00 GMT</pubDate>

</item>
<item>
<title>Resources</title>
<description>&lt;a tiddler=&quot;Resources&quot; commandname=&quot;permalink&quot; class=&quot;button command_permalink&quot; title=&quot;Permalink for this tiddler&quot; href=&quot;javascript:;&quot;&gt;permalink&lt;/a&gt;&lt;br&gt;&lt;h1&gt; English Articles&lt;/h1&gt;&lt;ul&gt;&lt;li&gt; Scaling TextRazor in the Cloud with Nginx and Lua, by Toby.&lt;/li&gt;&lt;/ul&gt;&lt;dl&gt;&lt;dd&gt; &lt;a target=&quot;_blank&quot; title=&quot;External link to http://www.textrazor.com/blog/2013/03/scaling-textrazor-in-the-cloud-with-nginx-and-lua.html&quot; href=&quot;http://www.textrazor.com/blog/2013/03/scaling-textrazor-in-the-cloud-with-nginx-and-lua.html&quot; class=&quot;externalLink&quot;&gt;http://www.textrazor.com/blog/2013/03/scaling-textrazor-in-the-cloud-with-nginx-and-lua.html&lt;/a&gt;&lt;/dd&gt;&lt;/dl&gt;&lt;ul&gt;&lt;li&gt; Augmenting APIs with Nginx and Lua, by Raimon Grau&lt;/li&gt;&lt;/ul&gt;&lt;dl&gt;&lt;dd&gt; &lt;a target=&quot;_blank&quot; title=&quot;External link to http://3scale.github.com/2013/01/09/augment-your-api-without-touching-it/&quot; href=&quot;http://3scale.github.com/2013/01/09/augment-your-api-without-touching-it/&quot; class=&quot;externalLink&quot;&gt;http://3scale.github.com/2013/01/09/augment-your-api-without-touching-it/&lt;/a&gt;&lt;/dd&gt;&lt;/dl&gt;&lt;ul&gt;&lt;li&gt; Pushing Nginx to its limit with Lua, by Matthieu Tourne&lt;/li&gt;&lt;/ul&gt;&lt;dl&gt;&lt;dd&gt; &lt;a target=&quot;_blank&quot; title=&quot;External link to http://blog.cloudflare.com/pushing-nginx-to-its-limit-with-lua&quot; href=&quot;http://blog.cloudflare.com/pushing-nginx-to-its-limit-with-lua&quot; class=&quot;externalLink&quot;&gt;http://blog.cloudflare.com/pushing-nginx-to-its-limit-with-lua&lt;/a&gt;&lt;/dd&gt;&lt;/dl&gt;&lt;ul&gt;&lt;li&gt; Yak Shaving: Adding OAuth Support to Nginx via Lua, by Jose Diaz-Gonzalez&lt;/li&gt;&lt;/ul&gt;&lt;dl&gt;&lt;dd&gt; &lt;a target=&quot;_blank&quot; title=&quot;External link to http://seatgeek.com/blog/dev/oauth-support-for-nginx-with-lua&quot; href=&quot;http://seatgeek.com/blog/dev/oauth-support-for-nginx-with-lua&quot; class=&quot;externalLink&quot;&gt;http://seatgeek.com/blog/dev/oauth-support-for-nginx-with-lua&lt;/a&gt;&lt;/dd&gt;&lt;/dl&gt;&lt;ul&gt;&lt;li&gt; My beautiful dark twisted reverse-proxy LRU cache, by Mike Ferrier&lt;/li&gt;&lt;/ul&gt;&lt;dl&gt;&lt;dd&gt; &lt;a target=&quot;_blank&quot; title=&quot;External link to http://mikeferrier.com/2011/05/14/my-beautiful-dark-twisted-reverse-proxy-LRU-cache/&quot; href=&quot;http://mikeferrier.com/2011/05/14/my-beautiful-dark-twisted-reverse-proxy-LRU-cache/&quot; class=&quot;externalLink&quot;&gt;http://mikeferrier.com/2011/05/14/my-beautiful-dark-twisted-reverse-proxy-LRU-cache/&lt;/a&gt;&lt;/dd&gt;&lt;/dl&gt;&lt;ul&gt;&lt;li&gt; Day 41 - Setting up ngx_openresty (WAS: testing Test::Nginx) , by Antoine Bonavita&lt;/li&gt;&lt;/ul&gt;&lt;dl&gt;&lt;dd&gt; &lt;a target=&quot;_blank&quot; title=&quot;External link to http://www.nginx-discovery.com/2011/03/day-41-setting-up-ngxopenresty-was.html&quot; href=&quot;http://www.nginx-discovery.com/2011/03/day-41-setting-up-ngxopenresty-was.html&quot; class=&quot;externalLink&quot;&gt;http://www.nginx-discovery.com/2011/03/day-41-setting-up-ngxopenresty-was.html&lt;/a&gt;&lt;/dd&gt;&lt;/dl&gt;&lt;h1&gt; Chinese Articles&lt;/h1&gt;&lt;ul&gt;&lt;li&gt; An introduction to &lt;a tiddlylink=&quot;OpenResty&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#OpenResty&quot; href=&quot;null#OpenResty&quot; class=&quot;externalLink null&quot;&gt;OpenResty&lt;/a&gt;, by Wang Dong&lt;/li&gt;&lt;/ul&gt;&lt;dl&gt;&lt;dd&gt; &lt;a target=&quot;_blank&quot; title=&quot;External link to http://wdicc.com/intro-openresty/&quot; href=&quot;http://wdicc.com/intro-openresty/&quot; class=&quot;externalLink&quot;&gt;http://wdicc.com/intro-openresty/&lt;/a&gt;&lt;/dd&gt;&lt;/dl&gt;&lt;ul&gt;&lt;li&gt; Nginx 3rd-Party Module Experiments Journal, by smallfish&lt;/li&gt;&lt;/ul&gt;&lt;dl&gt;&lt;dd&gt; &lt;a target=&quot;_blank&quot; title=&quot;External link to http://chenxiaoyu.org/2011/10/30/nginx-modules.html&quot; href=&quot;http://chenxiaoyu.org/2011/10/30/nginx-modules.html&quot; class=&quot;externalLink&quot;&gt;http://chenxiaoyu.org/2011/10/30/nginx-modules.html&lt;/a&gt;&lt;/dd&gt;&lt;/dl&gt;&lt;ul&gt;&lt;li&gt; Recommending &lt;a tiddlylink=&quot;OpenResty&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#OpenResty&quot; href=&quot;null#OpenResty&quot; class=&quot;externalLink null&quot;&gt;OpenResty&lt;/a&gt; - An Nginx Version with Fully Capable Addons, by Wendal Chen&lt;/li&gt;&lt;/ul&gt;&lt;dl&gt;&lt;dd&gt; &lt;a target=&quot;_blank&quot; title=&quot;External link to http://wendal.net/338.html&quot; href=&quot;http://wendal.net/338.html&quot; class=&quot;externalLink&quot;&gt;http://wendal.net/338.html&lt;/a&gt;&lt;/dd&gt;&lt;/dl&gt;&lt;ul&gt;&lt;li&gt; Constructing Efficient and Transparent Caching Mechanism with &lt;a tiddlylink=&quot;MemcNginxModule&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#MemcNginxModule&quot; href=&quot;null#MemcNginxModule&quot; class=&quot;externalLink null&quot;&gt;MemcNginxModule&lt;/a&gt; and &lt;a tiddlylink=&quot;SrcacheNginxModule&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#SrcacheNginxModule&quot; href=&quot;null#SrcacheNginxModule&quot; class=&quot;externalLink null&quot;&gt;SrcacheNginxModule&lt;/a&gt;, by Zhang Yang&lt;/li&gt;&lt;/ul&gt;&lt;dl&gt;&lt;dd&gt; &lt;a target=&quot;_blank&quot; title=&quot;External link to http://www.codinglabs.org/html/nginx-memc-and-srcache.html&quot; href=&quot;http://www.codinglabs.org/html/nginx-memc-and-srcache.html&quot; class=&quot;externalLink&quot;&gt;http://www.codinglabs.org/html/nginx-memc-and-srcache.html&lt;/a&gt;&lt;/dd&gt;&lt;/dl&gt;&lt;ul&gt;&lt;li&gt; The Nginx Session Module, by smallfish&lt;/li&gt;&lt;/ul&gt;&lt;dl&gt;&lt;dd&gt; &lt;a target=&quot;_blank&quot; title=&quot;External link to http://chenxiaoyu.org/2011/11/09/nginx-session.html&quot; href=&quot;http://chenxiaoyu.org/2011/11/09/nginx-session.html&quot; class=&quot;externalLink&quot;&gt;http://chenxiaoyu.org/2011/11/09/nginx-session.html&lt;/a&gt;&lt;/dd&gt;&lt;/dl&gt;&lt;ul&gt;&lt;li&gt; Nginx-Lua HTTP 401 Basic Authentication, by smallfish&lt;/li&gt;&lt;/ul&gt;&lt;dl&gt;&lt;dd&gt; &lt;a target=&quot;_blank&quot; title=&quot;External link to http://chenxiaoyu.org/2012/02/08/nginx-lua-401-auth.html&quot; href=&quot;http://chenxiaoyu.org/2012/02/08/nginx-lua-401-auth.html&quot; class=&quot;externalLink&quot;&gt;http://chenxiaoyu.org/2012/02/08/nginx-lua-401-auth.html&lt;/a&gt;&lt;/dd&gt;&lt;/dl&gt;&lt;ul&gt;&lt;li&gt; Using ngx_openresty to create an AJAX-style pager for data listing, by lhmwzy&lt;/li&gt;&lt;/ul&gt;&lt;dl&gt;&lt;dd&gt; &lt;a target=&quot;_blank&quot; title=&quot;External link to http://blog.163.com/lhmwzy@126/blog/static/64215736201212384413704/&quot; href=&quot;http://blog.163.com/lhmwzy@126/blog/static/64215736201212384413704/&quot; class=&quot;externalLink&quot;&gt;http://blog.163.com/lhmwzy@126/blog/static/64215736201212384413704/&lt;/a&gt;&lt;/dd&gt;&lt;/dl&gt;&lt;ul&gt;&lt;li&gt; Nginx Variable Tutorials, by agentzh&lt;/li&gt;&lt;/ul&gt;&lt;dl&gt;&lt;dd&gt; &lt;a target=&quot;_blank&quot; title=&quot;External link to http://blog.sina.com.cn/openresty&quot; href=&quot;http://blog.sina.com.cn/openresty&quot; class=&quot;externalLink&quot;&gt;http://blog.sina.com.cn/openresty&lt;/a&gt;&lt;/dd&gt;&lt;/dl&gt;&lt;ul&gt;&lt;li&gt; Nginx &amp;amp; Lua, by laowang&lt;/li&gt;&lt;/ul&gt;&lt;dl&gt;&lt;dd&gt; &lt;a target=&quot;_blank&quot; title=&quot;External link to http://huoding.com/2012/08/31/156&quot; href=&quot;http://huoding.com/2012/08/31/156&quot; class=&quot;externalLink&quot;&gt;http://huoding.com/2012/08/31/156&lt;/a&gt;&lt;/dd&gt;&lt;/dl&gt;&lt;ul&gt;&lt;li&gt; Implementing a simple server-push solution, by laowang&lt;/li&gt;&lt;/ul&gt;&lt;dl&gt;&lt;dd&gt; &lt;a target=&quot;_blank&quot; title=&quot;External link to http://huoding.com/2012/09/28/174&quot; href=&quot;http://huoding.com/2012/09/28/174&quot; class=&quot;externalLink&quot;&gt;http://huoding.com/2012/09/28/174&lt;/a&gt;&lt;/dd&gt;&lt;/dl&gt;</description>
<category>Resources</category>
<link>null#Resources</link>
<pubDate>Fri, 15 Mar 2013 19:07:00 GMT</pubDate>

</item>
<item>
<title>MarkupPostBody</title>
<description>&amp;lt;p/&amp;gt;&amp;lt;p/&amp;gt;&lt;br&gt;&amp;lt;script type=&quot;text/javascript&quot;&amp;gt;&lt;br&gt;&lt;br&gt;  var _gaq = _gaq || [];&lt;br&gt;  _gaq.push(['_setAccount', '&lt;a tiddlylink=&quot;UA-24724965-1&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#UA-24724965-1&quot; href=&quot;null#UA-24724965-1&quot; class=&quot;externalLink null&quot;&gt;UA-24724965-1&lt;/a&gt;']);&lt;br&gt;  _gaq.push(['_setDomainName', 'openresty.org']);&lt;br&gt;  _gaq.push(['_trackPageview']);&lt;br&gt;&lt;br&gt;  var ga_f = function() {&lt;br&gt;    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;&lt;br&gt;    ga.src = ('https:' == document.location.protocol ? '&lt;a target=&quot;_blank&quot; title=&quot;External link to https://ssl&quot; href=&quot;https://ssl&quot; class=&quot;externalLink&quot;&gt;https://ssl&lt;/a&gt;' : '&lt;a target=&quot;_blank&quot; title=&quot;External link to http://www&quot; href=&quot;http://www&quot; class=&quot;externalLink&quot;&gt;http://www&lt;/a&gt;') + '.google-analytics.com/ga.js';&lt;br&gt;    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);&lt;br&gt;  };&lt;br&gt;  setTimeout(ga_f, 200);&lt;br&gt;&lt;br&gt;&amp;lt;/script&amp;gt;&lt;br&gt;</description>
<link>null#MarkupPostBody</link>
<pubDate>Thu, 07 Mar 2013 06:42:00 GMT</pubDate>

</item>
<item>
<title>ChangeLog1002006</title>
<description>&lt;a tiddler=&quot;ChangeLog1002006&quot; commandname=&quot;permalink&quot; class=&quot;button command_permalink&quot; title=&quot;Permalink for this tiddler&quot; href=&quot;javascript:;&quot;&gt;permalink&lt;/a&gt;&lt;br&gt;&lt;h1&gt; Devel Release 1.2.6.6 - 17 February 2013&lt;/h1&gt;&lt;ul&gt;&lt;li&gt; upgraded &lt;a tiddlylink=&quot;LuaNginxModule&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#LuaNginxModule&quot; href=&quot;null#LuaNginxModule&quot; class=&quot;externalLink null&quot;&gt;LuaNginxModule&lt;/a&gt; to 0.7.15.&lt;ul&gt;&lt;li&gt; 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.&lt;/li&gt;&lt;li&gt; diagnose: added more info about &lt;code&gt;r-&amp;gt;main-&amp;gt;count&lt;/code&gt; to the debugging logs.&lt;/li&gt;&lt;li&gt; style: massive coding style fixes according to the Nginx coding style.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;The following components are bundled:&lt;br&gt;&lt;ul&gt;&lt;li&gt; LuaJIT-2.0.0&lt;/li&gt;&lt;li&gt; array-var-nginx-module-0.03rc1&lt;/li&gt;&lt;li&gt; auth-request-nginx-module-0.2&lt;/li&gt;&lt;li&gt; drizzle-nginx-module-0.1.4&lt;/li&gt;&lt;li&gt; echo-nginx-module-0.42&lt;/li&gt;&lt;li&gt; encrypted-session-nginx-module-0.02&lt;/li&gt;&lt;li&gt; form-input-nginx-module-0.07&lt;/li&gt;&lt;li&gt; headers-more-nginx-module-0.19&lt;/li&gt;&lt;li&gt; iconv-nginx-module-0.10rc7&lt;/li&gt;&lt;li&gt; lua-5.1.5&lt;/li&gt;&lt;li&gt; lua-cjson-1.0.3&lt;/li&gt;&lt;li&gt; lua-rds-parser-0.05&lt;/li&gt;&lt;li&gt; lua-redis-parser-0.10&lt;/li&gt;&lt;li&gt; lua-resty-dns-0.09&lt;/li&gt;&lt;li&gt; lua-resty-memcached-0.10&lt;/li&gt;&lt;li&gt; lua-resty-mysql-0.12&lt;/li&gt;&lt;li&gt; lua-resty-redis-0.15&lt;/li&gt;&lt;li&gt; lua-resty-string-0.08&lt;/li&gt;&lt;li&gt; lua-resty-upload-0.07&lt;/li&gt;&lt;li&gt; memc-nginx-module-0.13rc3&lt;/li&gt;&lt;li&gt; nginx-1.2.6&lt;/li&gt;&lt;li&gt; ngx_coolkit-0.2rc1&lt;/li&gt;&lt;li&gt; ngx_devel_kit-0.2.18&lt;/li&gt;&lt;li&gt; ngx_lua-0.7.15&lt;/li&gt;&lt;li&gt; ngx_postgres-1.0rc2&lt;/li&gt;&lt;li&gt; rds-csv-nginx-module-0.05rc2&lt;/li&gt;&lt;li&gt; rds-json-nginx-module-0.12rc10&lt;/li&gt;&lt;li&gt; redis-nginx-module-0.3.6&lt;/li&gt;&lt;li&gt; redis2-nginx-module-0.09&lt;/li&gt;&lt;li&gt; set-misc-nginx-module-0.22rc8&lt;/li&gt;&lt;li&gt; srcache-nginx-module-0.19&lt;/li&gt;&lt;li&gt; xss-nginx-module-0.03rc9&lt;/li&gt;&lt;/ul&gt;&lt;h1&gt; Devel Release 1.2.6.5 - 8 February 2013&lt;/h1&gt;&lt;ul&gt;&lt;li&gt; upgraded &lt;a tiddlylink=&quot;SrcacheNginxModule&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#SrcacheNginxModule&quot; href=&quot;null#SrcacheNginxModule&quot; class=&quot;externalLink null&quot;&gt;SrcacheNginxModule&lt;/a&gt; to 0.19.&lt;ul&gt;&lt;li&gt; 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.&lt;/li&gt;&lt;li&gt; style: massive coding style fixes.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt; upgraded &lt;a tiddlylink=&quot;LuaRestyUploadLibrary&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#LuaRestyUploadLibrary&quot; href=&quot;null#LuaRestyUploadLibrary&quot; class=&quot;externalLink null&quot;&gt;LuaRestyUploadLibrary&lt;/a&gt; to 0.07.&lt;ul&gt;&lt;li&gt; bugfix: the boundary string could not be parsed if no space was present before the &lt;code&gt;boundary=xxx&lt;/code&gt; parameter in the &lt;code&gt;Content-Type&lt;/code&gt; request header. thanks chenshu for reporting this issue.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h1&gt; Devel Release 1.2.6.3 - 3 February 2013&lt;/h1&gt;&lt;ul&gt;&lt;li&gt; upgraded &lt;a tiddlylink=&quot;LuaNginxModule&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#LuaNginxModule&quot; href=&quot;null#LuaNginxModule&quot; class=&quot;externalLink null&quot;&gt;LuaNginxModule&lt;/a&gt; to 0.7.14.&lt;ul&gt;&lt;li&gt; feature: implemented named subpattern support in &lt;a target=&quot;_blank&quot; title=&quot;External link to http://wiki.nginx.org/HttpLuaModule#ngx.re.match&quot; href=&quot;http://wiki.nginx.org/HttpLuaModule#ngx.re.match&quot; class=&quot;externalLink&quot;&gt;ngx.re.match&lt;/a&gt;, &lt;a target=&quot;_blank&quot; title=&quot;External link to http://wiki.nginx.org/HttpLuaModule#ngx.re.gmatch&quot; href=&quot;http://wiki.nginx.org/HttpLuaModule#ngx.re.gmatch&quot; class=&quot;externalLink&quot;&gt;ngx.re.gmatch&lt;/a&gt;, &lt;a target=&quot;_blank&quot; title=&quot;External link to http://wiki.nginx.org/HttpLuaModule#ngx.re.sub&quot; href=&quot;http://wiki.nginx.org/HttpLuaModule#ngx.re.sub&quot; class=&quot;externalLink&quot;&gt;ngx.re.sub&lt;/a&gt;, and &lt;a target=&quot;_blank&quot; title=&quot;External link to http://wiki.nginx.org/HttpLuaModule#ngx.re.gsub&quot; href=&quot;http://wiki.nginx.org/HttpLuaModule#ngx.re.gsub&quot; class=&quot;externalLink&quot;&gt;ngx.re.gsub&lt;/a&gt;; also added new regex option &lt;code&gt;D&lt;/code&gt; to allow duplicate named subpattern names. thanks Ray Bejjani for the patch.&lt;/li&gt;&lt;li&gt; feature: implemented the &lt;code&gt;J&lt;/code&gt; regex option for the PCRE Javascript compatible mode in the &lt;a target=&quot;_blank&quot; title=&quot;External link to http://wiki.nginx.org/HttpLuaModule#ngx.re.match&quot; href=&quot;http://wiki.nginx.org/HttpLuaModule#ngx.re.match&quot; class=&quot;externalLink&quot;&gt;ngx.re API&lt;/a&gt;. thanks lhmwzy for requesting this.&lt;/li&gt;&lt;li&gt; feature: setting &lt;a target=&quot;_blank&quot; title=&quot;External link to http://wiki.nginx.org/HttpLuaModule#ngx.header.HEADER&quot; href=&quot;http://wiki.nginx.org/HttpLuaModule#ngx.header.HEADER&quot; class=&quot;externalLink&quot;&gt;ngx.header.HEADER&lt;/a&gt; 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.&lt;/li&gt;&lt;li&gt; feature: automatic Lua 5.1 interpreter detection on OpenBSD 5.2. thanks Ilya Shipitsin for the patch.&lt;/li&gt;&lt;li&gt; refactor: when the Nginx core fails to send the &quot;100 Continue&quot; response in case of the &quot;Expect: 100-continue&quot; request header (or just running out of memory), &lt;a target=&quot;_blank&quot; title=&quot;External link to http://wiki.nginx.org/HttpLuaModule#ngx.req.read_body&quot; href=&quot;http://wiki.nginx.org/HttpLuaModule#ngx.req.read_body&quot; class=&quot;externalLink&quot;&gt;ngx.req.read_body()&lt;/a&gt; will no longer throw out a &quot;failed to read request body&quot; 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.&lt;/li&gt;&lt;li&gt; bugfix: because of the recent API behaviour changes in nginx 1.2.6+ and 1.3.9+, the &quot;http request count is zero&quot; alert might happen when &lt;a target=&quot;_blank&quot; title=&quot;External link to http://wiki.nginx.org/HttpLuaModule#ngx.req.read_body&quot; href=&quot;http://wiki.nginx.org/HttpLuaModule#ngx.req.read_body&quot; class=&quot;externalLink&quot;&gt;ngx.req.read_body()&lt;/a&gt; was called to read the request body and Nginx failed to send out the &quot;100 Continue&quot; response (like client connection early abortion and etc). thanks stonehuzhan for reporting this issue.&lt;/li&gt;&lt;li&gt; bugfix: setting the &quot;eof&quot; argument (i.e., &lt;code&gt;ngx.arg[2]&lt;/code&gt;) in &lt;a target=&quot;_blank&quot; title=&quot;External link to http://wiki.nginx.org/HttpLuaModule#body_filter_by_lua&quot; href=&quot;http://wiki.nginx.org/HttpLuaModule#body_filter_by_lua&quot; class=&quot;externalLink&quot;&gt;body_filter_by_lua*&lt;/a&gt; for a subrequest could truncate the main request's response data stream.&lt;/li&gt;&lt;li&gt; bugfix: in &lt;a target=&quot;_blank&quot; title=&quot;External link to http://wiki.nginx.org/HttpLuaModule#body_filter_by_lua&quot; href=&quot;http://wiki.nginx.org/HttpLuaModule#body_filter_by_lua&quot; class=&quot;externalLink&quot;&gt;body_filter_by_lua*&lt;/a&gt;, the &quot;eof&quot; argument (i.e., &lt;code&gt;ngx.arg[2]&lt;/code&gt;) was never set in Nginx subrequests.&lt;/li&gt;&lt;li&gt; bugfix: for nginx 1.3.9+ compatibility, we return an error while using &lt;a target=&quot;_blank&quot; title=&quot;External link to http://wiki.nginx.org/HttpLuaModule#ngx.req.socket&quot; href=&quot;http://wiki.nginx.org/HttpLuaModule#ngx.req.socket&quot; class=&quot;externalLink&quot;&gt;ngx.req.socket()&lt;/a&gt; to read the chunked request body (for now), because chunked support in the downstream cosocket API is still a TODO.&lt;/li&gt;&lt;li&gt; bugfix: for nginx 1.3.9+ compatibility, &lt;a target=&quot;_blank&quot; title=&quot;External link to http://wiki.nginx.org/HttpLuaModule#rewrite_by_lua&quot; href=&quot;http://wiki.nginx.org/HttpLuaModule#rewrite_by_lua&quot; class=&quot;externalLink&quot;&gt;rewrite_by_lua*&lt;/a&gt; or &lt;a target=&quot;_blank&quot; title=&quot;External link to http://wiki.nginx.org/HttpLuaModule#access_by_lua&quot; href=&quot;http://wiki.nginx.org/HttpLuaModule#access_by_lua&quot; class=&quot;externalLink&quot;&gt;access_by_lua*&lt;/a&gt; handlers might hang if the request body was read there, because the Nginx core now overwrites &lt;code&gt;r-&amp;gt;write_event_handler&lt;/code&gt; to &lt;code&gt;ngx_http_request_empty_handler&lt;/code&gt; in its &lt;code&gt;ngx_http_read_client_request_body&lt;/code&gt; API.&lt;/li&gt;&lt;li&gt; bugfix: for nginx 1.3.9+ compatibility, we now throw an error in &lt;a target=&quot;_blank&quot; title=&quot;External link to http://wiki.nginx.org/HttpLuaModule#ngx.req.init_body&quot; href=&quot;http://wiki.nginx.org/HttpLuaModule#ngx.req.init_body&quot; class=&quot;externalLink&quot;&gt;ngx.req.init_body()&lt;/a&gt;, &lt;a target=&quot;_blank&quot; title=&quot;External link to http://wiki.nginx.org/HttpLuaModule#ngx.req.set_body_data&quot; href=&quot;http://wiki.nginx.org/HttpLuaModule#ngx.req.set_body_data&quot; class=&quot;externalLink&quot;&gt;ngx.req.set_body_data()&lt;/a&gt;, and &lt;a target=&quot;_blank&quot; title=&quot;External link to http://wiki.nginx.org/HttpLuaModule#ngx.req.set_body_file&quot; href=&quot;http://wiki.nginx.org/HttpLuaModule#ngx.req.set_body_file&quot; class=&quot;externalLink&quot;&gt;ngx.req.set_body_file()&lt;/a&gt; when calling them without calling &lt;a target=&quot;_blank&quot; title=&quot;External link to http://wiki.nginx.org/HttpLuaModule#ngx.req.read_body&quot; href=&quot;http://wiki.nginx.org/HttpLuaModule#ngx.req.read_body&quot; class=&quot;externalLink&quot;&gt;ngx.req.read_body()&lt;/a&gt; or after calling &lt;a target=&quot;_blank&quot; title=&quot;External link to http://wiki.nginx.org/HttpLuaModule#ngx.req.discard_body&quot; href=&quot;http://wiki.nginx.org/HttpLuaModule#ngx.req.discard_body&quot; class=&quot;externalLink&quot;&gt;ngx.req.discard_body()&lt;/a&gt;.&lt;/li&gt;&lt;li&gt; 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.&lt;/li&gt;&lt;li&gt; bugfix: we did not get the request reference counter (i.e., &lt;code&gt;r-&amp;gt;main-&amp;gt;count&lt;/code&gt;) right when &lt;a target=&quot;_blank&quot; title=&quot;External link to http://wiki.nginx.org/HttpLuaModule#lua_need_request_body&quot; href=&quot;http://wiki.nginx.org/HttpLuaModule#lua_need_request_body&quot; class=&quot;externalLink&quot;&gt;lua_need_request_body&lt;/a&gt; was turned on and nginx versions older than 1.2.6 or 1.2.9 were used.&lt;/li&gt;&lt;li&gt; optimize: we no longer traverse the captured body chain everytime we append a new link to it in &lt;a target=&quot;_blank&quot; title=&quot;External link to http://wiki.nginx.org/HttpLuaModule#ngx.location.capture&quot; href=&quot;http://wiki.nginx.org/HttpLuaModule#ngx.location.capture&quot; class=&quot;externalLink&quot;&gt;ngx.location.capture&lt;/a&gt; and &lt;a target=&quot;_blank&quot; title=&quot;External link to http://wiki.nginx.org/HttpLuaModule#ngx.location.capture_multi&quot; href=&quot;http://wiki.nginx.org/HttpLuaModule#ngx.location.capture_multi&quot; class=&quot;externalLink&quot;&gt;ngx.location.capture_multi&lt;/a&gt;.&lt;/li&gt;&lt;li&gt; docs: documented the &lt;a target=&quot;_blank&quot; title=&quot;External link to http://wiki.nginx.org/HttpLuaModule#ngx.quote_sql_str&quot; href=&quot;http://wiki.nginx.org/HttpLuaModule#ngx.quote_sql_str&quot; class=&quot;externalLink&quot;&gt;ngx.quote_sql_str&lt;/a&gt; API.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt; upgraded &lt;a tiddlylink=&quot;SrcacheNginxModule&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#SrcacheNginxModule&quot; href=&quot;null#SrcacheNginxModule&quot; class=&quot;externalLink null&quot;&gt;SrcacheNginxModule&lt;/a&gt; to 0.18.&lt;ul&gt;&lt;li&gt; bugfix: we might serve a truncated &lt;a target=&quot;_blank&quot; title=&quot;External link to http://wiki.nginx.org/HttpSRCacheModule#srcache_fetch&quot; href=&quot;http://wiki.nginx.org/HttpSRCacheModule#srcache_fetch&quot; class=&quot;externalLink&quot;&gt;srcache_fetch&lt;/a&gt; subrequest's response body as the cached response.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt; upgraded &lt;a tiddlylink=&quot;EchoNginxModule&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#EchoNginxModule&quot; href=&quot;null#EchoNginxModule&quot; class=&quot;externalLink null&quot;&gt;EchoNginxModule&lt;/a&gt; to 0.42.&lt;ul&gt;&lt;li&gt; feature: the &lt;a target=&quot;_blank&quot; title=&quot;External link to http://wiki.nginx.org/HttpEchoModule#echo_after_body&quot; href=&quot;http://wiki.nginx.org/HttpEchoModule#echo_after_body&quot; class=&quot;externalLink&quot;&gt;echo_after_body&lt;/a&gt; directive is now enabled in Nginx subrequests (again).&lt;/li&gt;&lt;li&gt; bugfix: we did not set the &quot;last_in_chain&quot; buffer flag when &lt;a target=&quot;_blank&quot; title=&quot;External link to http://wiki.nginx.org/HttpEchoModule#echo_after_body&quot; href=&quot;http://wiki.nginx.org/HttpEchoModule#echo_after_body&quot; class=&quot;externalLink&quot;&gt;echo_after_body&lt;/a&gt; was used in subrequests.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt; upgraded &lt;a tiddlylink=&quot;FormInputNginxModule&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#FormInputNginxModule&quot; href=&quot;null#FormInputNginxModule&quot; class=&quot;externalLink null&quot;&gt;FormInputNginxModule&lt;/a&gt; to 0.07.&lt;ul&gt;&lt;li&gt; bugfix: Nginx might hang when it failed to send the &quot;100 Continue&quot; response for Nginx versions older than 1.2.6 (and those older than 1.3.9 in the 1.3.x series).&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt; upgraded &lt;a tiddlylink=&quot;NginxDevelKit&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#NginxDevelKit&quot; href=&quot;null#NginxDevelKit&quot; class=&quot;externalLink null&quot;&gt;NginxDevelKit&lt;/a&gt; ot 0.2.18.&lt;ul&gt;&lt;li&gt; bugfix: various fixes for C89 compliance. also stripped some line-trailing spaces.&lt;/li&gt;&lt;li&gt; bugfix: guard macros were missing in the &lt;code&gt;ndk_set_var.h&lt;/code&gt; header file.&lt;/li&gt;&lt;li&gt; bugfix: the &lt;code&gt;ndk_string&lt;/code&gt; submodule failed to compile with gcc 4.6. thanks Jon Kolb for the patch.&lt;/li&gt;&lt;li&gt; bugfix: the &lt;code&gt;ndk_set_var&lt;/code&gt; example did not use the new way in its &lt;code&gt;config&lt;/code&gt; file. thanks Amos Wenger for the patch.&lt;/li&gt;&lt;li&gt; docs: fixes in README to reflect recent changes. thanks Amos Wenger for the patch.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt; applied Ruslan Ermilov's &lt;a target=&quot;_blank&quot; title=&quot;External link to https://github.com/agentzh/ngx_openresty/blob/master/patches/nginx-1.2.6-resolver_wev_handler_segfault_with_poll.patch&quot; href=&quot;https://github.com/agentzh/ngx_openresty/blob/master/patches/nginx-1.2.6-resolver_wev_handler_segfault_with_poll.patch&quot; class=&quot;externalLink&quot;&gt;resolver_wev_handler_segfault_with_poll patch&lt;/a&gt; to the Nginx core bundled. see &lt;a target=&quot;_blank&quot; title=&quot;External link to http://mailman.nginx.org/pipermail/nginx-devel/2013-January/003275.html&quot; href=&quot;http://mailman.nginx.org/pipermail/nginx-devel/2013-January/003275.html&quot; class=&quot;externalLink&quot;&gt;the related nginx-devel thread&lt;/a&gt; for details.&lt;/li&gt;&lt;li&gt; excluded the &lt;a target=&quot;_blank&quot; title=&quot;External link to https://github.com/agentzh/ngx_openresty/blob/master/patches/nginx-1.2.5-allow_request_body_updating.patch&quot; href=&quot;https://github.com/agentzh/ngx_openresty/blob/master/patches/nginx-1.2.5-allow_request_body_updating.patch&quot; class=&quot;externalLink&quot;&gt;allow_request_body_updating patch&lt;/a&gt; from the Nginx core bundled.&lt;/li&gt;&lt;/ul&gt;&lt;h1&gt; Devel Release 1.2.6.1 - 4 January 2013&lt;/h1&gt;&lt;ul&gt;&lt;li&gt; upgraded the Nginx core to 1.2.6.&lt;ul&gt;&lt;li&gt; see &lt;a target=&quot;_blank&quot; title=&quot;External link to http://nginx.org/en/CHANGES-1.2&quot; href=&quot;http://nginx.org/en/CHANGES-1.2&quot; class=&quot;externalLink&quot;&gt;http://nginx.org/en/CHANGES-1.2&lt;/a&gt; for changes.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt; upgraded &lt;a tiddlylink=&quot;LuaNginxModule&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#LuaNginxModule&quot; href=&quot;null#LuaNginxModule&quot; class=&quot;externalLink null&quot;&gt;LuaNginxModule&lt;/a&gt; to 0.7.13.&lt;ul&gt;&lt;li&gt; bugfix: &lt;a target=&quot;_blank&quot; title=&quot;External link to http://wiki.nginx.org/HttpLuaModule#ngx.decode_args&quot; href=&quot;http://wiki.nginx.org/HttpLuaModule#ngx.decode_args&quot; class=&quot;externalLink&quot;&gt;ngx.decode_args()&lt;/a&gt; might result in Lua string storage corruption. thanks Xu Jian for the report and Kindy Lin for the patch.&lt;/li&gt;&lt;li&gt; bugfix: using a key with underscores in &lt;a target=&quot;_blank&quot; title=&quot;External link to http://wiki.nginx.org/HttpLuaModule#ngx.header.HEADER&quot; href=&quot;http://wiki.nginx.org/HttpLuaModule#ngx.header.HEADER&quot; class=&quot;externalLink&quot;&gt;ngx.header.KEY&lt;/a&gt; resulted in Lua string storage corruption. thanks rkearsley for reporting this issue.&lt;/li&gt;&lt;li&gt; bugfix: accessing &lt;a target=&quot;_blank&quot; title=&quot;External link to http://wiki.nginx.org/HttpLuaModule#ngx.var.VARIABLE&quot; href=&quot;http://wiki.nginx.org/HttpLuaModule#ngx.var.VARIABLE&quot; class=&quot;externalLink&quot;&gt;ngx.var.VARIABLE&lt;/a&gt; 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.&lt;/li&gt;&lt;li&gt; feature: automatically detect &lt;a tiddlylink=&quot;LuaJIT&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#LuaJIT&quot; href=&quot;null#LuaJIT&quot; class=&quot;externalLink null&quot;&gt;LuaJIT&lt;/a&gt; 2.0 on FreeBSD by default. thanks rkearsley for the patch.&lt;/li&gt;&lt;li&gt; docs: explained why &lt;code&gt;local foo = require &quot;foo&quot;&lt;/code&gt; is required for loading a Lua module. thanks rkearsley for asking.&lt;/li&gt;&lt;li&gt; docs: fixed a typo in the code sample for &lt;a target=&quot;_blank&quot; title=&quot;External link to http://wiki.nginx.org/HttpLuaModule#tcpsock:receiveuntil&quot; href=&quot;http://wiki.nginx.org/HttpLuaModule#tcpsock:receiveuntil&quot; class=&quot;externalLink&quot;&gt;tcpsock:receiveuntil()&lt;/a&gt;. thanks Yecheng Fu for the patch.&lt;/li&gt;&lt;li&gt; docs: fixed a typo in the Lua code sample for &lt;a target=&quot;_blank&quot; title=&quot;External link to http://wiki.nginx.org/HttpLuaModule#ngx.re.gmatch&quot; href=&quot;http://wiki.nginx.org/HttpLuaModule#ngx.re.gmatch&quot; class=&quot;externalLink&quot;&gt;ngx.re.gmatch&lt;/a&gt; (we forgot to add &lt;code&gt;do&lt;/code&gt; there). thanks Guo Yin for reporting this issue.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt; upgraded &lt;a tiddlylink=&quot;LuaRestyUploadLibrary&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#LuaRestyUploadLibrary&quot; href=&quot;null#LuaRestyUploadLibrary&quot; class=&quot;externalLink null&quot;&gt;LuaRestyUploadLibrary&lt;/a&gt; to 0.06.&lt;ul&gt;&lt;li&gt; optimize: use the pure lower-case form of the key &lt;code&gt;content-type&lt;/code&gt; to index the headers table returned by &lt;a target=&quot;_blank&quot; title=&quot;External link to http://wiki.nginx.org/HttpLuaModule#ngx.req.get_headers&quot; href=&quot;http://wiki.nginx.org/HttpLuaModule#ngx.req.get_headers&quot; class=&quot;externalLink&quot;&gt;ngx.req.get_headers()&lt;/a&gt; so as to avoid the overhead of calling the &lt;code&gt;__index&lt;/code&gt; metamethod.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt; upgraded &lt;a tiddlylink=&quot;SrcacheNginxModule&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#SrcacheNginxModule&quot; href=&quot;null#SrcacheNginxModule&quot; class=&quot;externalLink null&quot;&gt;SrcacheNginxModule&lt;/a&gt; to 0.17.&lt;ul&gt;&lt;li&gt; bugfix: &lt;a target=&quot;_blank&quot; title=&quot;External link to http://wiki.nginx.org/HttpSRCacheModule#srcache_store&quot; href=&quot;http://wiki.nginx.org/HttpSRCacheModule#srcache_store&quot; class=&quot;externalLink&quot;&gt;srcache_store&lt;/a&gt; would emit the misleading error message &quot;srcache_store: skipped because response body truncated: N &amp;gt; 0&quot; for HEAD requests (because a HEAD request's response never carries a body); now it just skips such responses silently. thanks Yang Jin for reporting this issue.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt; bugfix: when relative paths were used in &lt;code&gt;--with-zlib=DIR&lt;/code&gt;, &lt;code&gt;--with-libatomic=DIR&lt;/code&gt;, &lt;code&gt;--with-md5=DIR&lt;/code&gt;, and &lt;code&gt;--with-sha1=DIR&lt;/code&gt;, the build system of Nginx could not find &lt;code&gt;DIR&lt;/code&gt; at all. thanks LazyZhu for reporting this issue.&lt;/li&gt;&lt;/ul&gt;&lt;br&gt;See &lt;a tiddlylink=&quot;ChangeLog1002004&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#ChangeLog1002004&quot; href=&quot;null#ChangeLog1002004&quot; class=&quot;externalLink null&quot;&gt;ChangeLog1002004&lt;/a&gt; for change log for &lt;a tiddlylink=&quot;OpenResty&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#OpenResty&quot; href=&quot;null#OpenResty&quot; class=&quot;externalLink null&quot;&gt;OpenResty&lt;/a&gt; 1.2.4.x.</description>
<link>null#ChangeLog1002006</link>
<pubDate>Mon, 18 Feb 2013 03:06:00 GMT</pubDate>

</item>
<item>
<title>UsingLuaRocks</title>
<description>&lt;a tiddler=&quot;UsingLuaRocks&quot; commandname=&quot;permalink&quot; class=&quot;button command_permalink&quot; title=&quot;Permalink for this tiddler&quot; href=&quot;javascript:;&quot;&gt;permalink&lt;/a&gt;&lt;br&gt;&lt;br&gt;This sample demonstrates usage of &lt;a target=&quot;_blank&quot; title=&quot;External link to http://www.luarocks.org/&quot; href=&quot;http://www.luarocks.org/&quot; class=&quot;externalLink&quot;&gt;LuaRocks&lt;/a&gt; with &lt;a tiddlylink=&quot;OpenResty&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#OpenResty&quot; href=&quot;null#OpenResty&quot; class=&quot;externalLink null&quot;&gt;OpenResty&lt;/a&gt;. It's been tested on Linux and Mac OS X, with the standard Lua interpreter or with &lt;a tiddlylink=&quot;LuaJIT&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#LuaJIT&quot; href=&quot;null#LuaJIT&quot; class=&quot;externalLink null&quot;&gt;LuaJIT&lt;/a&gt;.&lt;br&gt;&lt;br&gt;LuaRocks is a deployment and management system for Lua modules. LuaRocks allows one to install Lua modules as self-contained packages called &quot;rocks&quot;, which also contain version dependency  information.&lt;br&gt;&lt;br&gt;We assume that you have installed &lt;a tiddlylink=&quot;OpenResty&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#OpenResty&quot; href=&quot;null#OpenResty&quot; class=&quot;externalLink null&quot;&gt;OpenResty&lt;/a&gt; into the default location, i.e., &lt;code&gt;/usr/local/openresty&lt;/code&gt;. You can adjust the paths in this sample according to the actual installation prefix of your &lt;a tiddlylink=&quot;OpenResty&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#OpenResty&quot; href=&quot;null#OpenResty&quot; class=&quot;externalLink null&quot;&gt;OpenResty&lt;/a&gt; installation. If you haven't installed OpenResty yet, check out the &lt;a tiddlylink=&quot;Download&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#Download&quot; href=&quot;null#Download&quot; class=&quot;externalLink null&quot;&gt;Download&lt;/a&gt; and &lt;a tiddlylink=&quot;Installation&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#Installation&quot; href=&quot;null#Installation&quot; class=&quot;externalLink null&quot;&gt;Installation&lt;/a&gt; pages.&lt;br&gt;&lt;br&gt;&lt;h1&gt; Install LuaRocks&lt;/h1&gt;First of all, let's install LuaRocks:&lt;br&gt;&lt;br&gt;Download the latest LuaRocks tarball from &lt;a tiddlylink=&quot;http://www.luarocks.org/en/Download&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#http://www.luarocks.org/en/Download&quot; href=&quot;null#http://www.luarocks.org/en/Download&quot; class=&quot;externalLink null&quot;&gt;http://www.luarocks.org/en/Download&lt;/a&gt;. As of this writing, the latest version is &lt;code&gt;2.0.12&lt;/code&gt;, and we'll use this version throughout this sample.&lt;br&gt;&lt;pre&gt;wget http://luarocks.org/releases/luarocks-2.0.12.tar.gz
tar -xzvf luarocks-2.0.12.tar.gz
cd luarocks-2.0.12/
./configure --prefix=/usr/local/openresty/luajit \
    --with-lua=/usr/local/openresty/luajit/ \
    --lua-suffix=jit \
    --with-lua-include=/usr/local/openresty/luajit/include/luajit-2.0
make
sudo make install
&lt;/pre&gt;&lt;h1&gt; Install the Lua MD5 library with LuaRocks&lt;/h1&gt;In this sample, we'll use the Lua MD5 library to serve as an example, so let's install it with LuaRocks:&lt;br&gt;&lt;pre&gt;sudo luarocks install md5
&lt;/pre&gt;&lt;h1&gt; Configuring our OpenResty application&lt;/h1&gt;Let's change the current directory to &lt;code&gt;/usr/local/openresty/nginx/&lt;/code&gt;:&lt;br&gt;&lt;pre&gt;cd /usr/local/openresty/nginx/
&lt;/pre&gt;Next, edit the &lt;code&gt;conf/nginx.conf&lt;/code&gt; file to the following contents with your favorite text editor (like vim or emacs):&lt;br&gt;&lt;pre&gt;worker_processes  1;   # we could enlarge this setting on a multi-core machine
error_log  logs/error.log warn;

events {
    worker_connections  1024;
}

http {
    lua_package_path 'conf/?.lua;;';

    server {
        listen       80;
        server_name  localhost;

        location = /luarocks {
            content_by_lua '
                local foo = require(&quot;foo&quot;)
                foo.say(&quot;hello, luarocks!&quot;)
            ';
        }
    }
}
&lt;/pre&gt;Finally, create the following two Lua module files &lt;code&gt;conf/foo.lua&lt;/code&gt;&lt;br&gt;&lt;pre&gt;-- conf/foo.lua

module(&quot;foo&quot;, package.seeall)

local bar = require &quot;bar&quot;

ngx.say(&quot;bar loaded&quot;)

function say (var)
    bar.say(var)
end
&lt;/pre&gt;and &lt;code&gt;conf/bar.lua&lt;/code&gt;&lt;br&gt;&lt;pre&gt;-- conf/bar.lua

module(&quot;bar&quot;, package.seeall)

local rocks = require &quot;luarocks.loader&quot;
local md5 = require &quot;md5&quot;

ngx.say(&quot;rocks and md5 loaded&quot;)

function say (a)
    ngx.say(md5.sumhexa(a))
end
&lt;/pre&gt;&lt;h1&gt; Start the Nginx server&lt;/h1&gt;Now we start the Nginx server with our app:&lt;br&gt;&lt;pre&gt;ulimit -n1024   # increase the maximal fd count limit per process
./sbin/nginx
&lt;/pre&gt;If you have already started the Nginx server, then stop it before starting it:&lt;br&gt;&lt;pre&gt;./sbin/nginx -s stop
&lt;/pre&gt;&lt;h1&gt; Test our app&lt;/h1&gt;Now we can test our app via the &lt;code&gt;curl&lt;/code&gt; utility or any HTTP compliant clients like a web browser:&lt;br&gt;&lt;pre&gt;curl http://localhost/luarocks
&lt;/pre&gt;we could get the following outputs at the first run:&lt;br&gt;&lt;pre&gt;rocks and md5 loaded
bar loaded
85e73df5c41378f830c031b81e4453d2
&lt;/pre&gt;then at the second run:&lt;br&gt;&lt;pre&gt;85e73df5c41378f830c031b81e4453d2
&lt;/pre&gt;The output changed because &lt;a tiddlylink=&quot;LuaNginxModule&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#LuaNginxModule&quot; href=&quot;null#LuaNginxModule&quot; class=&quot;externalLink null&quot;&gt;LuaNginxModule&lt;/a&gt; by default caches already loaded Lua modules and those outputing code run at Lua module loading time will no longer be run.&lt;br&gt;&lt;br&gt;Now let's do some benchmark:&lt;br&gt;&lt;pre&gt;ab -c10 -n50000 http://127.0.0.1/luarocks
&lt;/pre&gt;On my Thinkpad T400 laptop (Core2Duo T9600 CPU), it yields&lt;br&gt;&lt;pre&gt;Server Software:        ngx_openresty/1.0.4.2rc10
Server Hostname:        localhost
Server Port:            80

Document Path:          /luarocks
Document Length:        33 bytes

Concurrency Level:      10
Time taken for tests:   3.052 seconds
Complete requests:      50000
Failed requests:        0
Write errors:           0
Total transferred:      9400188 bytes
HTML transferred:       1650033 bytes
Requests per second:    16380.48 [#/sec] (mean)
Time per request:       0.610 [ms] (mean)
Time per request:       0.061 [ms] (mean, across all concurrent requests)
Transfer rate:          3007.41 [Kbytes/sec] received
&lt;/pre&gt;Note that the throughput is achieved by a single nginx worker process. While doing such benchmark on your own, just be careful about error log level settings in your nginx.conf and not to run out of dynamic port range on your local machine, or it'll be significantly slow after a short of period of time.&lt;br&gt;&lt;h1&gt; Known issues&lt;/h1&gt;Pior to &lt;a tiddlylink=&quot;OpenResty&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#OpenResty&quot; href=&quot;null#OpenResty&quot; class=&quot;externalLink null&quot;&gt;OpenResty&lt;/a&gt; 1.0.4.2rc10, it's known that turning &lt;code&gt;lua_code_cache&lt;/code&gt; on will cause LuaRocks atop &lt;a tiddlylink=&quot;LuaNginxModule&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#LuaNginxModule&quot; href=&quot;null#LuaNginxModule&quot; class=&quot;externalLink null&quot;&gt;LuaNginxModule&lt;/a&gt; to throw out the following exception in &lt;code&gt;error.log&lt;/code&gt;:&lt;br&gt;&lt;pre&gt;lua handler aborted: runtime error: stack overflow
&lt;/pre&gt;If you're using any version of &lt;a tiddlylink=&quot;OpenResty&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#OpenResty&quot; href=&quot;null#OpenResty&quot; class=&quot;externalLink null&quot;&gt;OpenResty&lt;/a&gt; before 1.0.4.2rc10, please consider upgrading.&lt;br&gt;</description>
<link>null#UsingLuaRocks</link>
<pubDate>Fri, 08 Feb 2013 10:44:00 GMT</pubDate>

</item>
<item>
<title>StyleSheet</title>
<description>body {&lt;br&gt;    font-size: 1.2em;&lt;br&gt;}</description>
<link>null#StyleSheet</link>
<pubDate>Wed, 23 Jan 2013 04:49:00 GMT</pubDate>

</item>
<item>
<title>ChangeLog1002004</title>
<description>&lt;a tiddler=&quot;ChangeLog1002004&quot; commandname=&quot;permalink&quot; class=&quot;button command_permalink&quot; title=&quot;Permalink for this tiddler&quot; href=&quot;javascript:;&quot;&gt;permalink&lt;/a&gt;&lt;br&gt;&lt;h1&gt; Stable Release 1.2.4.14 - 23 December 2012&lt;/h1&gt;&lt;ul&gt;&lt;li&gt; upgraded &lt;a tiddlylink=&quot;LuaNginxModule&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#LuaNginxModule&quot; href=&quot;null#LuaNginxModule&quot; class=&quot;externalLink null&quot;&gt;LuaNginxModule&lt;/a&gt; to 0.7.9.&lt;ul&gt;&lt;li&gt; bugfix: assignment to &lt;a target=&quot;_blank&quot; title=&quot;External link to http://wiki.nginx.org/HttpLuaModule#ngx.status&quot; href=&quot;http://wiki.nginx.org/HttpLuaModule#ngx.status&quot; class=&quot;externalLink&quot;&gt;ngx.status&lt;/a&gt; would always be overridden by the later &lt;a target=&quot;_blank&quot; title=&quot;External link to http://wiki.nginx.org/HttpLuaModule#ngx.exit&quot; href=&quot;http://wiki.nginx.org/HttpLuaModule#ngx.exit&quot; class=&quot;externalLink&quot;&gt;ngx.exit()&lt;/a&gt; calls for HTTP 1.0 requests if &lt;a target=&quot;_blank&quot; title=&quot;External link to http://wiki.nginx.org/HttpLuaModule#lua_http10_buffering&quot; href=&quot;http://wiki.nginx.org/HttpLuaModule#lua_http10_buffering&quot; class=&quot;externalLink&quot;&gt;lua_http10_buffering&lt;/a&gt; is on (the default setting). thanks chenshu for reporting this issue.&lt;/li&gt;&lt;li&gt; bugfix: there was a typo in the error message when accessing an Nginx variable that has not been defined.&lt;/li&gt;&lt;li&gt; docs: documented the request body automatic inheritance behaviour in &lt;a target=&quot;_blank&quot; title=&quot;External link to http://wiki.nginx.org/HttpLuaModule#ngx.location.capture&quot; href=&quot;http://wiki.nginx.org/HttpLuaModule#ngx.location.capture&quot; class=&quot;externalLink&quot;&gt;ngx.location.capture&lt;/a&gt;.&lt;/li&gt;&lt;li&gt; docs: fixed incorrect dates shown in the code samples for &lt;a target=&quot;_blank&quot; title=&quot;External link to http://wiki.nginx.org/HttpLuaModule#ngx.http_time&quot; href=&quot;http://wiki.nginx.org/HttpLuaModule#ngx.http_time&quot; class=&quot;externalLink&quot;&gt;ngx.http_time&lt;/a&gt; and &lt;a target=&quot;_blank&quot; title=&quot;External link to http://wiki.nginx.org/HttpLuaModule#ngx.parse_http_time&quot; href=&quot;http://wiki.nginx.org/HttpLuaModule#ngx.parse_http_time&quot; class=&quot;externalLink&quot;&gt;ngx.parse_http_time&lt;/a&gt;. thanks Gosuke Miyashita for the patch.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt; upgraded &lt;a tiddlylink=&quot;LuaRestyUploadLibrary&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#LuaRestyUploadLibrary&quot; href=&quot;null#LuaRestyUploadLibrary&quot; class=&quot;externalLink null&quot;&gt;LuaRestyUploadLibrary&lt;/a&gt; to 0.05.&lt;ul&gt;&lt;li&gt; bugfix: unexpected runtime exceptions would be thrown when &lt;code&gt;resty.upload&lt;/code&gt; met a in-part header field line or a terminating boundary line that was too long. this bug had appeared in &lt;a tiddlylink=&quot;LuaRestyUploadLibrary&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#LuaRestyUploadLibrary&quot; href=&quot;null#LuaRestyUploadLibrary&quot; class=&quot;externalLink null&quot;&gt;LuaRestyUploadLibrary&lt;/a&gt; 0.04 and &lt;a tiddlylink=&quot;OpenResty&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#OpenResty&quot; href=&quot;null#OpenResty&quot; class=&quot;externalLink null&quot;&gt;OpenResty&lt;/a&gt; 1.2.4.7.&lt;/li&gt;&lt;li&gt; bugfix: &lt;code&gt;resty.upload&lt;/code&gt; could not parse &lt;code&gt;Content-Type&lt;/code&gt; request header values like &lt;code&gt;boundary=&quot;simple boundary&quot;&lt;/code&gt;, that is, with double quotes around the boundary value.&lt;/li&gt;&lt;li&gt; optimize: marked internal auxiliary functions as Lua &lt;code&gt;local&lt;/code&gt; functions.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;The following components are bundled:&lt;br&gt;&lt;ul&gt;&lt;li&gt; LuaJIT-2.0.0&lt;/li&gt;&lt;li&gt; array-var-nginx-module-0.03rc1&lt;/li&gt;&lt;li&gt; auth-request-nginx-module-0.2&lt;/li&gt;&lt;li&gt; drizzle-nginx-module-0.1.4&lt;/li&gt;&lt;li&gt; echo-nginx-module-0.41&lt;/li&gt;&lt;li&gt; encrypted-session-nginx-module-0.02&lt;/li&gt;&lt;li&gt; form-input-nginx-module-0.07rc5&lt;/li&gt;&lt;li&gt; headers-more-nginx-module-0.19&lt;/li&gt;&lt;li&gt; iconv-nginx-module-0.10rc7&lt;/li&gt;&lt;li&gt; lua-5.1.5&lt;/li&gt;&lt;li&gt; lua-cjson-1.0.3&lt;/li&gt;&lt;li&gt; lua-rds-parser-0.05&lt;/li&gt;&lt;li&gt; lua-redis-parser-0.10&lt;/li&gt;&lt;li&gt; lua-resty-dns-0.09&lt;/li&gt;&lt;li&gt; lua-resty-memcached-0.10&lt;/li&gt;&lt;li&gt; lua-resty-mysql-0.12&lt;/li&gt;&lt;li&gt; lua-resty-redis-0.15&lt;/li&gt;&lt;li&gt; lua-resty-string-0.08&lt;/li&gt;&lt;li&gt; lua-resty-upload-0.05&lt;/li&gt;&lt;li&gt; memc-nginx-module-0.13rc3&lt;/li&gt;&lt;li&gt; nginx-1.2.4&lt;/li&gt;&lt;li&gt; ngx_coolkit-0.2rc1&lt;/li&gt;&lt;li&gt; ngx_devel_kit-0.2.17&lt;/li&gt;&lt;li&gt; ngx_lua-0.7.9&lt;/li&gt;&lt;li&gt; ngx_postgres-1.0rc2&lt;/li&gt;&lt;li&gt; rds-csv-nginx-module-0.05rc2&lt;/li&gt;&lt;li&gt; rds-json-nginx-module-0.12rc10&lt;/li&gt;&lt;li&gt; redis-nginx-module-0.3.6&lt;/li&gt;&lt;li&gt; redis2-nginx-module-0.09&lt;/li&gt;&lt;li&gt; set-misc-nginx-module-0.22rc8&lt;/li&gt;&lt;li&gt; srcache-nginx-module-0.16&lt;/li&gt;&lt;li&gt; xss-nginx-module-0.03rc9&lt;/li&gt;&lt;/ul&gt;&lt;h1&gt; Devel Release 1.2.4.13 - 11 December 2012&lt;/h1&gt;&lt;ul&gt;&lt;li&gt; upgraded &lt;a tiddlylink=&quot;LuaNginxModule&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#LuaNginxModule&quot; href=&quot;null#LuaNginxModule&quot; class=&quot;externalLink null&quot;&gt;LuaNginxModule&lt;/a&gt; to 0.7.8.&lt;ul&gt;&lt;li&gt; bugfix: &lt;a target=&quot;_blank&quot; title=&quot;External link to http://wiki.nginx.org/HttpLuaModule#ngx.req.set_body_file&quot; href=&quot;http://wiki.nginx.org/HttpLuaModule#ngx.req.set_body_file&quot; class=&quot;externalLink&quot;&gt;ngx.req.set_body_file()&lt;/a&gt; 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).&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt; upgraded &lt;a tiddlylink=&quot;LuaRestyMySQLLibrary&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#LuaRestyMySQLLibrary&quot; href=&quot;null#LuaRestyMySQLLibrary&quot; class=&quot;externalLink null&quot;&gt;LuaRestyMySQLLibrary&lt;/a&gt; to 0.12.&lt;ul&gt;&lt;li&gt; feature: convert the MySQL &lt;code&gt;newdecimal&lt;/code&gt; typed fields to Lua numbers by default as requested by shedar.&lt;/li&gt;&lt;li&gt; optimize: marked the internal Lua function &lt;code&gt;_recv_packet&lt;/code&gt; as a &lt;code&gt;local&lt;/code&gt; function.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h1&gt; Devel Release 1.2.4.11 - 8 December 2012&lt;/h1&gt;&lt;ul&gt;&lt;li&gt; upgraded &lt;a tiddlylink=&quot;LuaNginxModule&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#LuaNginxModule&quot; href=&quot;null#LuaNginxModule&quot; class=&quot;externalLink null&quot;&gt;LuaNginxModule&lt;/a&gt; to 0.7.7.&lt;ul&gt;&lt;li&gt; feature: added &lt;a target=&quot;_blank&quot; title=&quot;External link to http://wiki.nginx.org/HttpLuaModule#ngx.req.start_time&quot; href=&quot;http://wiki.nginx.org/HttpLuaModule#ngx.req.start_time&quot; class=&quot;externalLink&quot;&gt;ngx.req.start_time()&lt;/a&gt; to return the request starting time in seconds (the milliseconds part is the decimal part just as in &lt;a target=&quot;_blank&quot; title=&quot;External link to http://wiki.nginx.org/HttpLuaModule#ngx.now&quot; href=&quot;http://wiki.nginx.org/HttpLuaModule#ngx.now&quot; class=&quot;externalLink&quot;&gt;ngx.now&lt;/a&gt;). thanks Matthieu Tourne for the patch.&lt;/li&gt;&lt;li&gt; feature: setting &lt;a target=&quot;_blank&quot; title=&quot;External link to http://wiki.nginx.org/HttpLuaModule#ngx.status&quot; href=&quot;http://wiki.nginx.org/HttpLuaModule#ngx.status&quot; class=&quot;externalLink&quot;&gt;ngx.status&lt;/a&gt; or calling &lt;a target=&quot;_blank&quot; title=&quot;External link to http://wiki.nginx.org/HttpLuaModule#ngx.exit&quot; href=&quot;http://wiki.nginx.org/HttpLuaModule#ngx.exit&quot; class=&quot;externalLink&quot;&gt;ngx.exit(N)&lt;/a&gt; (where &lt;code&gt;N &amp;gt;= 300&lt;/code&gt;) 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.&lt;/li&gt;&lt;li&gt; feature: the user can now call &lt;a target=&quot;_blank&quot; title=&quot;External link to http://wiki.nginx.org/HttpLuaModule#ngx.exit&quot; href=&quot;http://wiki.nginx.org/HttpLuaModule#ngx.exit&quot; class=&quot;externalLink&quot;&gt;ngx.exit(444)&lt;/a&gt; to abort pending subrequests in other &quot;light threads&quot; from within a &quot;light thread&quot;.&lt;/li&gt;&lt;li&gt; feature: added new dtrace static probe &lt;code&gt;http-lua-user-thread-wait&lt;/code&gt;.&lt;/li&gt;&lt;li&gt; bugfix: &lt;a target=&quot;_blank&quot; title=&quot;External link to http://wiki.nginx.org/HttpLuaModule#ngx.location.capture&quot; href=&quot;http://wiki.nginx.org/HttpLuaModule#ngx.location.capture&quot; class=&quot;externalLink&quot;&gt;ngx.location.capture&lt;/a&gt; and &lt;a target=&quot;_blank&quot; title=&quot;External link to http://wiki.nginx.org/HttpLuaModule#ngx.location.capture_multi&quot; href=&quot;http://wiki.nginx.org/HttpLuaModule#ngx.location.capture_multi&quot; class=&quot;externalLink&quot;&gt;ngx.location.capture_multi&lt;/a&gt; might hang infinitely because the parent request might not be waken up right after the first time the &lt;code&gt;post_subrequest&lt;/code&gt; callback was called.&lt;/li&gt;&lt;li&gt; bugfix: the &quot;light thread&quot; object created by &lt;a target=&quot;_blank&quot; title=&quot;External link to http://wiki.nginx.org/HttpLuaModule#ngx.thread.spawn&quot; href=&quot;http://wiki.nginx.org/HttpLuaModule#ngx.thread.spawn&quot; class=&quot;externalLink&quot;&gt;ngx.thread.spawn()&lt;/a&gt; or &lt;a target=&quot;_blank&quot; title=&quot;External link to http://wiki.nginx.org/HttpLuaModule#ngx.on_abort&quot; href=&quot;http://wiki.nginx.org/HttpLuaModule#ngx.on_abort&quot; class=&quot;externalLink&quot;&gt;ngx.on_abort()&lt;/a&gt; might be prematurely collected by the Lua GC because we did not correctly register its coroutine object into the Lua registry table. this bug may crash the Lua VM and Nginx workers under load. thanks Zhu Dejiang for reporting this issue.&lt;/li&gt;&lt;li&gt; bugfix: &lt;a target=&quot;_blank&quot; title=&quot;External link to http://wiki.nginx.org/HttpLuaModule#ngx.thread.wait&quot; href=&quot;http://wiki.nginx.org/HttpLuaModule#ngx.thread.wait&quot; class=&quot;externalLink&quot;&gt;ngx.thread.wait()&lt;/a&gt; might hang infinitely when more than 4 user &quot;light threads&quot; are created in the same request handler due to the incorrect use of &lt;code&gt;ngx_array_t&lt;/code&gt; for &lt;code&gt;ngx_list_t&lt;/code&gt;. thanks Junwei Shi for reporting this issue.&lt;/li&gt;&lt;li&gt; bugfix: when a user coroutine or user &quot;light thread&quot; 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.&lt;/li&gt;&lt;li&gt; bugfix: &lt;a target=&quot;_blank&quot; title=&quot;External link to http://wiki.nginx.org/HttpLuaModule#ngx.exit&quot; href=&quot;http://wiki.nginx.org/HttpLuaModule#ngx.exit&quot; class=&quot;externalLink&quot;&gt;ngx.exit(N)&lt;/a&gt; incorrectly threw out Lua exceptions when &lt;code&gt;N&lt;/code&gt; was 408, 499, or 444 and the response header was already sent. thanks Kindy Lin for reporting this issue.&lt;/li&gt;&lt;li&gt; bugfix: when the user callback function registered by &lt;a target=&quot;_blank&quot; title=&quot;External link to http://wiki.nginx.org/HttpLuaModule#ngx.on_abort&quot; href=&quot;http://wiki.nginx.org/HttpLuaModule#ngx.on_abort&quot; class=&quot;externalLink&quot;&gt;ngx.on_abort()&lt;/a&gt; discarded the client abort event, the request would be aborted by force when the next client abort event happened.&lt;/li&gt;&lt;li&gt; bugfix: an English typo in the error message for &lt;a target=&quot;_blank&quot; title=&quot;External link to http://wiki.nginx.org/HttpLuaModule#init_by_lua&quot; href=&quot;http://wiki.nginx.org/HttpLuaModule#init_by_lua&quot; class=&quot;externalLink&quot;&gt;init_by_lua*&lt;/a&gt;.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt; applied &lt;a target=&quot;_blank&quot; title=&quot;External link to https://github.com/agentzh/ngx_openresty/blob/master/patches/nginx-1.2.4-slab_alloc_no_memory_as_info.patch&quot; href=&quot;https://github.com/agentzh/ngx_openresty/blob/master/patches/nginx-1.2.4-slab_alloc_no_memory_as_info.patch&quot; class=&quot;externalLink&quot;&gt;slab_alloc_no_memory_as_info.patch&lt;/a&gt; to lower the log level of the error message &quot;ngx_slab_alloc() failed: no memory&quot; from &quot;crit&quot; to &quot;info&quot;.&lt;/li&gt;&lt;li&gt; bugfix: the &lt;a target=&quot;_blank&quot; title=&quot;External link to https://github.com/agentzh/ngx_openresty/blob/master/patches/nginx-1.2.4-upstream_pipelining.patch&quot; href=&quot;https://github.com/agentzh/ngx_openresty/blob/master/patches/nginx-1.2.4-upstream_pipelining.patch&quot; class=&quot;externalLink&quot;&gt;upstream_pipelining patch&lt;/a&gt; introduced a regression that when &lt;code&gt;upstream_next&lt;/code&gt; is in action, Nginx might hang. thanks Kindy Lin for reporting this issue.&lt;/li&gt;&lt;li&gt; bugfix: include the latest changes in the &lt;a tiddlylink=&quot;LuaJIT&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#LuaJIT&quot; href=&quot;null#LuaJIT&quot; class=&quot;externalLink null&quot;&gt;LuaJIT&lt;/a&gt; 2.0 git repository (up to git commit 2ad9834d).&lt;/li&gt;&lt;/ul&gt;&lt;h1&gt; Devel Release 1.2.4.9 - 20 November 2012&lt;/h1&gt;&lt;ul&gt;&lt;li&gt; upgraded &lt;a tiddlylink=&quot;LuaJIT&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#LuaJIT&quot; href=&quot;null#LuaJIT&quot; class=&quot;externalLink null&quot;&gt;LuaJIT&lt;/a&gt; to 2.0.0 final.&lt;ul&gt;&lt;li&gt; change logs: &lt;a target=&quot;_blank&quot; title=&quot;External link to http://luajit.org/changes.html&quot; href=&quot;http://luajit.org/changes.html&quot; class=&quot;externalLink&quot;&gt;http://luajit.org/changes.html&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt; upgraded &lt;a tiddlylink=&quot;LuaNginxModule&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#LuaNginxModule&quot; href=&quot;null#LuaNginxModule&quot; class=&quot;externalLink null&quot;&gt;LuaNginxModule&lt;/a&gt; to 0.7.5.&lt;ul&gt;&lt;li&gt; bugfix: &lt;a target=&quot;_blank&quot; title=&quot;External link to http://wiki.nginx.org/HttpLuaModule#ngx.req.clear_header&quot; href=&quot;http://wiki.nginx.org/HttpLuaModule#ngx.req.clear_header&quot; class=&quot;externalLink&quot;&gt;ngx.req.clear_header()&lt;/a&gt; would result in memory invalid reads when removing the 21st, 41st, 61st (and etc) request headers. thanks Umesh Sirsiwal for reporting this issue.&lt;/li&gt;&lt;li&gt; bugfix: &lt;a target=&quot;_blank&quot; title=&quot;External link to http://wiki.nginx.org/HttpLuaModule#ngx.log&quot; href=&quot;http://wiki.nginx.org/HttpLuaModule#ngx.log&quot; class=&quot;externalLink&quot;&gt;ngx.log()&lt;/a&gt; would truncate the log messages which have null characters (&lt;code&gt;\0&lt;/code&gt;) in it. thanks Wang Xi for reporting this issue.&lt;/li&gt;&lt;li&gt; docs: eliminated the use of &lt;code&gt;package.seeall&lt;/code&gt; in code samples and also explicitly discouraged the use of it.&lt;/li&gt;&lt;li&gt; docs: documented the special case that client closes the connection before &lt;a target=&quot;_blank&quot; title=&quot;External link to http://wiki.nginx.org/HttpLuaModule#ngx.req.socket&quot; href=&quot;http://wiki.nginx.org/HttpLuaModule#ngx.req.socket&quot; class=&quot;externalLink&quot;&gt;ngx.req.socket()&lt;/a&gt; finishes reading the whole body.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt; upgraded &lt;a tiddlylink=&quot;HeadersMoreNginxModule&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#HeadersMoreNginxModule&quot; href=&quot;null#HeadersMoreNginxModule&quot; class=&quot;externalLink null&quot;&gt;HeadersMoreNginxModule&lt;/a&gt; to 0.19.&lt;ul&gt;&lt;li&gt;  bugfix: &lt;a target=&quot;_blank&quot; title=&quot;External link to http://wiki.nginx.org/HttpHeadersMoreModule#more_clear_input_headers&quot; href=&quot;http://wiki.nginx.org/HttpHeadersMoreModule#more_clear_input_headers&quot; class=&quot;externalLink&quot;&gt;more_clear_input_headers&lt;/a&gt; would result in memory invalid reads when removing the 21st, 41st, 61st (and etc.) request headers. thanks Umesh Sirsiwal for reporting this issue.&lt;/li&gt;&lt;li&gt; docs: fixed an issue in the sample code that tried to clear &lt;code&gt;Transfer-Encoding&lt;/code&gt; which cannot actually be cleared. thanks koukou73gr.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt; upgraded &lt;a tiddlylink=&quot;LuaRestyStringLibrary&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#LuaRestyStringLibrary&quot; href=&quot;null#LuaRestyStringLibrary&quot; class=&quot;externalLink null&quot;&gt;LuaRestyStringLibrary&lt;/a&gt; to 0.08.&lt;ul&gt;&lt;li&gt; bugfix: the &lt;code&gt;new()&lt;/code&gt; method in the &lt;code&gt;resty.aes&lt;/code&gt; module might use a random key when the &lt;code&gt;method&lt;/code&gt; option is omitted in the &lt;code&gt;hash&lt;/code&gt; table argument. thanks wsser for the patch.&lt;/li&gt;&lt;li&gt; feature: we now return a second string describing the error when either &lt;code&gt;iv&lt;/code&gt; or &lt;code&gt;key&lt;/code&gt; is bad.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt; bugfix: &lt;code&gt;./configure --with-pcre=PATH&lt;/code&gt; did not accept relative paths as &lt;code&gt;PATH&lt;/code&gt;. thanks smallfish for reporting this issue.&lt;/li&gt;&lt;/ul&gt;&lt;h1&gt; Devel Release 1.2.4.7 - 11 November 2012&lt;/h1&gt;&lt;ul&gt;&lt;li&gt; upgraded &lt;a tiddlylink=&quot;LuaJIT&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#LuaJIT&quot; href=&quot;null#LuaJIT&quot; class=&quot;externalLink null&quot;&gt;LuaJIT&lt;/a&gt; to 2.0.0rc3.&lt;/li&gt;&lt;li&gt; upgraded &lt;a tiddlylink=&quot;LuaNginxModule&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#LuaNginxModule&quot; href=&quot;null#LuaNginxModule&quot; class=&quot;externalLink null&quot;&gt;LuaNginxModule&lt;/a&gt; to 0.7.4.&lt;ul&gt;&lt;li&gt; feature: added new directive &lt;a target=&quot;_blank&quot; title=&quot;External link to http://wiki.nginx.org/HttpLuaModule#lua_check_client_abort&quot; href=&quot;http://wiki.nginx.org/HttpLuaModule#lua_check_client_abort&quot; class=&quot;externalLink&quot;&gt;lua_check_client_abort&lt;/a&gt; (default to &lt;code&gt;off&lt;/code&gt;) for monitoring and processing the event that the client closes the (downstream) connection prematurely. thanks Zhu Dejiang for request this feature.&lt;/li&gt;&lt;li&gt; feature: added new Lua API &lt;a target=&quot;_blank&quot; title=&quot;External link to http://wiki.nginx.org/HttpLuaModule#ngx.on_abort&quot; href=&quot;http://wiki.nginx.org/HttpLuaModule#ngx.on_abort&quot; class=&quot;externalLink&quot;&gt;ngx.on_abort()&lt;/a&gt; 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.&lt;/li&gt;&lt;li&gt; feature: &lt;a target=&quot;_blank&quot; title=&quot;External link to http://wiki.nginx.org/HttpLuaModule#ngx.exit&quot; href=&quot;http://wiki.nginx.org/HttpLuaModule#ngx.exit&quot; class=&quot;externalLink&quot;&gt;ngx.exit&lt;/a&gt;(N) can now abort pending subrequests when &lt;code&gt;N = 408&lt;/code&gt; (request time out) or &lt;code&gt;N = 499&lt;/code&gt; (client closed request) or &lt;code&gt;N = -1&lt;/code&gt; (error).&lt;/li&gt;&lt;li&gt; bugfix: The TCP/stream cosocket's &lt;a target=&quot;_blank&quot; title=&quot;External link to http://wiki.nginx.org/HttpLuaModule#tcpsock:connect&quot; href=&quot;http://wiki.nginx.org/HttpLuaModule#tcpsock:connect&quot; class=&quot;externalLink&quot;&gt;connect()&lt;/a&gt; method could not detect errors like &quot;connection refused&quot; when kqueue was used (on FreeBSD or Mac OS X, for example). thanks smallfish for reporting this issue.&lt;/li&gt;&lt;li&gt; bugfix: reading operations on &lt;a target=&quot;_blank&quot; title=&quot;External link to http://wiki.nginx.org/HttpLuaModule#ngx.req.socket&quot; href=&quot;http://wiki.nginx.org/HttpLuaModule#ngx.req.socket&quot; class=&quot;externalLink&quot;&gt;ngx.req.socket()&lt;/a&gt; did not return any errors when the request body got truncated; now we return the &quot;client aborted&quot; error.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt; upgraded &lt;a tiddlylink=&quot;LuaRestyDNSLibrary&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#LuaRestyDNSLibrary&quot; href=&quot;null#LuaRestyDNSLibrary&quot; class=&quot;externalLink null&quot;&gt;LuaRestyDNSLibrary&lt;/a&gt; to 0.09.&lt;ul&gt;&lt;li&gt; refactor: avoided using &lt;code&gt;package.seeall&lt;/code&gt; in Lua module definitions, which improves performance and also prevents subtle bad side-effects.&lt;/li&gt;&lt;li&gt; bugfix: a debugging output might be sent to stdout unexpectedly in some code path.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt; upgraded &lt;a tiddlylink=&quot;LuaRestyMemcachedLibrary&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#LuaRestyMemcachedLibrary&quot; href=&quot;null#LuaRestyMemcachedLibrary&quot; class=&quot;externalLink null&quot;&gt;LuaRestyMemcachedLibrary&lt;/a&gt; to 0.10.&lt;ul&gt;&lt;li&gt; refactor: avoided using &lt;code&gt;package.seeall&lt;/code&gt; in Lua module definitions, which improves performance and also prevents subtle bad side-effects.&lt;/li&gt;&lt;li&gt; docs: fixed typos in README. thanks cyberty for the patch.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt; upgraded &lt;a tiddlylink=&quot;LuaRestyRedisLibrary&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#LuaRestyRedisLibrary&quot; href=&quot;null#LuaRestyRedisLibrary&quot; class=&quot;externalLink null&quot;&gt;LuaRestyRedisLibrary&lt;/a&gt; to 0.15.&lt;ul&gt;&lt;li&gt; refactor: avoided using &lt;code&gt;package.seeall&lt;/code&gt; in Lua module definitions, which improves performance and also prevents subtle bad side-effects.&lt;/li&gt;&lt;li&gt; optimize: avoided using &lt;code&gt;ipairs()&lt;/code&gt; which is slower than plain &lt;code&gt;for i=1,N&lt;/code&gt; loops.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt; upgraded &lt;a tiddlylink=&quot;LuaRestyMySQLLibrary&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#LuaRestyMySQLLibrary&quot; href=&quot;null#LuaRestyMySQLLibrary&quot; class=&quot;externalLink null&quot;&gt;LuaRestyMySQLLibrary&lt;/a&gt; to 0.11.&lt;ul&gt;&lt;li&gt; refactor: avoided using &lt;code&gt;package.seeall&lt;/code&gt; in Lua module definitions, which improves performance and also prevents subtle bad side-effects.&lt;/li&gt;&lt;li&gt; feature: now the &lt;a target=&quot;_blank&quot; title=&quot;External link to https://github.com/agentzh/lua-resty-mysql#new&quot; href=&quot;https://github.com/agentzh/lua-resty-mysql#new&quot; class=&quot;externalLink&quot;&gt;new()&lt;/a&gt; method will return a string describing the error as the second return value in case of failures.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt; upgraded &lt;a tiddlylink=&quot;LuaRestyUploadLibrary&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#LuaRestyUploadLibrary&quot; href=&quot;null#LuaRestyUploadLibrary&quot; class=&quot;externalLink null&quot;&gt;LuaRestyUploadLibrary&lt;/a&gt; to 0.04.&lt;ul&gt;&lt;li&gt; refactor: avoided using &lt;code&gt;package.seeall&lt;/code&gt; in Lua module definitions, which improves performance and also prevents subtle bad side-effects.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt; upgraded &lt;a tiddlylink=&quot;LuaRestyStringLibrary&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#LuaRestyStringLibrary&quot; href=&quot;null#LuaRestyStringLibrary&quot; class=&quot;externalLink null&quot;&gt;LuaRestyStringLibrary&lt;/a&gt; to 0.07.&lt;ul&gt;&lt;li&gt; refactor: avoided using &lt;code&gt;package.seeall&lt;/code&gt; in Lua module definitions, which improves performance and also prevents subtle bad side-effects.&lt;/li&gt;&lt;li&gt; docs: typo-fixes in the code samples from Bearnard Hibbins.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt; bugfix: nginx upstream modules could not detect the &quot;connection refused&quot; error in time if kqueue was used; now we apply the &lt;a target=&quot;_blank&quot; title=&quot;External link to https://github.com/agentzh/ngx_openresty/blob/master/patches/nginx-1.2.4-upstream_test_connect_kqueue.patch&quot; href=&quot;https://github.com/agentzh/ngx_openresty/blob/master/patches/nginx-1.2.4-upstream_test_connect_kqueue.patch&quot; class=&quot;externalLink&quot;&gt;upstream_test_connect_kqueue patch&lt;/a&gt; for the Nginx core.&lt;/li&gt;&lt;/ul&gt;&lt;h1&gt; Devel Release 1.2.4.5 - 30 October 2012&lt;/h1&gt;&lt;ul&gt;&lt;li&gt; applied the official &lt;a target=&quot;_blank&quot; title=&quot;External link to http://luajit.org/download/beta11_hotfix1.patch&quot; href=&quot;http://luajit.org/download/beta11_hotfix1.patch&quot; class=&quot;externalLink&quot;&gt;hotfix #1 patch&lt;/a&gt; to &lt;a tiddlylink=&quot;LuaJIT&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#LuaJIT&quot; href=&quot;null#LuaJIT&quot; class=&quot;externalLink null&quot;&gt;LuaJIT&lt;/a&gt; 2.0.0 beta11.&lt;ul&gt;&lt;li&gt; see details here: &lt;a target=&quot;_blank&quot; title=&quot;External link to http://www.freelists.org/post/luajit/Hotfix1-for-LuaJIT200beta11&quot; href=&quot;http://www.freelists.org/post/luajit/Hotfix1-for-LuaJIT200beta11&quot; class=&quot;externalLink&quot;&gt;http://www.freelists.org/post/luajit/Hotfix1-for-LuaJIT200beta11&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt; upgraded &lt;a tiddlylink=&quot;LuaNginxModule&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#LuaNginxModule&quot; href=&quot;null#LuaNginxModule&quot; class=&quot;externalLink null&quot;&gt;LuaNginxModule&lt;/a&gt; to 0.7.3.&lt;ul&gt;&lt;li&gt; feature: added the &lt;a target=&quot;_blank&quot; title=&quot;External link to http://wiki.nginx.org/HttpLuaModule#ngx.shared.DICT.get_keys&quot; href=&quot;http://wiki.nginx.org/HttpLuaModule#ngx.shared.DICT.get_keys&quot; class=&quot;externalLink&quot;&gt;get_keys&lt;/a&gt; method for the shared memory dictionaries for fetching all the (or the specified number of) keys (default to 1024 keys). thanks Brian Akins for the patch.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h1&gt; Devel Release 1.2.4.3 - 17 October 2012&lt;/h1&gt;&lt;ul&gt;&lt;li&gt; upgraded &lt;a tiddlylink=&quot;LuaJIT&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#LuaJIT&quot; href=&quot;null#LuaJIT&quot; class=&quot;externalLink null&quot;&gt;LuaJIT&lt;/a&gt; to 2.0.0 beta11.&lt;ul&gt;&lt;li&gt; made &lt;a tiddlylink=&quot;LuaRestyRedisLibrary&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#LuaRestyRedisLibrary&quot; href=&quot;null#LuaRestyRedisLibrary&quot; class=&quot;externalLink null&quot;&gt;LuaRestyRedisLibrary&lt;/a&gt; 27% faster, &lt;a tiddlylink=&quot;LuaRestyMemcachedLibrary&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#LuaRestyMemcachedLibrary&quot; href=&quot;null#LuaRestyMemcachedLibrary&quot; class=&quot;externalLink null&quot;&gt;LuaRestyMemcachedLibrary&lt;/a&gt; 22% faster, and &lt;a tiddlylink=&quot;LuaRestyMySQLLibrary&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#LuaRestyMySQLLibrary&quot; href=&quot;null#LuaRestyMySQLLibrary&quot; class=&quot;externalLink null&quot;&gt;LuaRestyMySQLLibrary&lt;/a&gt; 15% faster, all for simple test cases loaded by ab, tested on Linux x86_64.&lt;/li&gt;&lt;li&gt; all Lua APIs involved with I/O in &lt;a tiddlylink=&quot;LuaNginxModule&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#LuaNginxModule&quot; href=&quot;null#LuaNginxModule&quot; class=&quot;externalLink null&quot;&gt;LuaNginxModule&lt;/a&gt; are faster in general.&lt;/li&gt;&lt;li&gt; complete change log: &lt;a target=&quot;_blank&quot; title=&quot;External link to http://luajit.org/changes.html&quot; href=&quot;http://luajit.org/changes.html&quot; class=&quot;externalLink&quot;&gt;http://luajit.org/changes.html&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt; upgraded &lt;a tiddlylink=&quot;LuaRestyMemcachedLibrary&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#LuaRestyMemcachedLibrary&quot; href=&quot;null#LuaRestyMemcachedLibrary&quot; class=&quot;externalLink null&quot;&gt;LuaRestyMemcachedLibrary&lt;/a&gt; to 0.09.&lt;ul&gt;&lt;li&gt; optimize: we now use Lua's own &lt;code&gt;table.concat()&lt;/code&gt; to do string concatenation for all the memcached requests instead of relying on the &lt;a target=&quot;_blank&quot; title=&quot;External link to http://wiki.nginx.org/HttpLuaModule#tcpsock:send&quot; href=&quot;http://wiki.nginx.org/HttpLuaModule#tcpsock:send&quot; class=&quot;externalLink&quot;&gt;cosocket API&lt;/a&gt; (on the C level) because calling the Lua C API is much slower especially when &lt;a tiddlylink=&quot;LuaJIT&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#LuaJIT&quot; href=&quot;null#LuaJIT&quot; class=&quot;externalLink null&quot;&gt;LuaJIT&lt;/a&gt; is in use. now for simple test cases loaded by &lt;code&gt;ab -k -c10&lt;/code&gt;, we get 11.3% overall performance boost.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt; upgraded &lt;a tiddlylink=&quot;LuaNginxModule&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#LuaNginxModule&quot; href=&quot;null#LuaNginxModule&quot; class=&quot;externalLink null&quot;&gt;LuaNginxModule&lt;/a&gt; to 0.7.2.&lt;ul&gt;&lt;li&gt; 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 &lt;code&gt;LUAJIT_INC&lt;/code&gt; and &lt;code&gt;LUAJIT_LIB&lt;/code&gt;.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h1&gt; Devel Release 1.2.4.1 - 14 October 2012&lt;/h1&gt;&lt;ul&gt;&lt;li&gt; upgraded the Nginx core to 1.2.4.&lt;ul&gt;&lt;li&gt; see &lt;a target=&quot;_blank&quot; title=&quot;External link to http://nginx.org/en/CHANGES-1.2&quot; href=&quot;http://nginx.org/en/CHANGES-1.2&quot; class=&quot;externalLink&quot;&gt;http://nginx.org/en/CHANGES-1.2&lt;/a&gt; for changes.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt; upgraded &lt;a tiddlylink=&quot;LuaNginxModule&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#LuaNginxModule&quot; href=&quot;null#LuaNginxModule&quot; class=&quot;externalLink null&quot;&gt;LuaNginxModule&lt;/a&gt; to 0.7.1.&lt;ul&gt;&lt;li&gt; feature: implemented the &quot;light threads&quot; 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.&lt;ul&gt;&lt;li&gt; &lt;a target=&quot;_blank&quot; title=&quot;External link to http://wiki.nginx.org/HttpLuaModule#ngx.thread.spawn&quot; href=&quot;http://wiki.nginx.org/HttpLuaModule#ngx.thread.spawn&quot; class=&quot;externalLink&quot;&gt;http://wiki.nginx.org/HttpLuaModule#ngx.thread.spawn&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a target=&quot;_blank&quot; title=&quot;External link to http://wiki.nginx.org/HttpLuaModule#ngx.thread.wait&quot; href=&quot;http://wiki.nginx.org/HttpLuaModule#ngx.thread.wait&quot; class=&quot;externalLink&quot;&gt;http://wiki.nginx.org/HttpLuaModule#ngx.thread.wait&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt; bugfix: &lt;a target=&quot;_blank&quot; title=&quot;External link to http://wiki.nginx.org/HttpLuaModule#ngx.re.gsub&quot; href=&quot;http://wiki.nginx.org/HttpLuaModule#ngx.re.gsub&quot; class=&quot;externalLink&quot;&gt;ngx.re.gsub()&lt;/a&gt; might throw out the exception &lt;code&gt;attempt to call a string value&lt;/code&gt; when the &lt;code&gt;replace&lt;/code&gt; argument was a Lua function and the subject string was large. thanks Zhu Maohai for reporting this issue.&lt;/li&gt;&lt;li&gt; bugfix: older gcc versions might issue warnings like &lt;code&gt;variable 'nrets' might be clobbered by 'longjmp' or 'vfork'&lt;/code&gt;, like gcc 3.4.3 (for Solaris 11) and gcc 4.1.2 (for Red Hat Linux). thanks Wenhua Zhang for reporting this issue.&lt;/li&gt;&lt;li&gt; docs: added a warning for &lt;a target=&quot;_blank&quot; title=&quot;External link to http://wiki.nginx.org/HttpLuaModule#ngx.var.VARIABLE&quot; href=&quot;http://wiki.nginx.org/HttpLuaModule#ngx.var.VARIABLE&quot; class=&quot;externalLink&quot;&gt;ngx.var.VARIABLE&lt;/a&gt; that memory is allocated in the per-request memory pool. thanks lilydjwg.&lt;/li&gt;&lt;li&gt; docs: made it clear why &lt;code&gt;return&lt;/code&gt; is recommended to be used with &lt;a target=&quot;_blank&quot; title=&quot;External link to http://wiki.nginx.org/HttpLuaModule#ngx.exit&quot; href=&quot;http://wiki.nginx.org/HttpLuaModule#ngx.exit&quot; class=&quot;externalLink&quot;&gt;ngx.exit()&lt;/a&gt;. thanks Antoine.&lt;/li&gt;&lt;li&gt; docs: massive wording improvements from Dayo.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt; now we add &lt;a tiddlylink=&quot;SrcacheNginxModule&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#SrcacheNginxModule&quot; href=&quot;null#SrcacheNginxModule&quot; class=&quot;externalLink null&quot;&gt;SrcacheNginxModule&lt;/a&gt; before both &lt;a tiddlylink=&quot;LuaNginxModule&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#LuaNginxModule&quot; href=&quot;null#LuaNginxModule&quot; class=&quot;externalLink null&quot;&gt;LuaNginxModule&lt;/a&gt; and &lt;a tiddlylink=&quot;HeadersMoreNginxModule&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#HeadersMoreNginxModule&quot; href=&quot;null#HeadersMoreNginxModule&quot; class=&quot;externalLink null&quot;&gt;HeadersMoreNginxModule&lt;/a&gt; so that the former's output filter runs &lt;em&gt;after&lt;/em&gt; those of the latter.&lt;/li&gt;&lt;/ul&gt;&lt;br&gt;See &lt;a tiddlylink=&quot;ChangeLog1002003&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#ChangeLog1002003&quot; href=&quot;null#ChangeLog1002003&quot; class=&quot;externalLink null&quot;&gt;ChangeLog1002003&lt;/a&gt; for change log for &lt;a tiddlylink=&quot;OpenResty&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#OpenResty&quot; href=&quot;null#OpenResty&quot; class=&quot;externalLink null&quot;&gt;OpenResty&lt;/a&gt; 1.2.3.x.</description>
<link>null#ChangeLog1002004</link>
<pubDate>Sun, 23 Dec 2012 22:52:00 GMT</pubDate>

</item>
<item>
<title>ChangeLog1002003</title>
<description>&lt;a tiddler=&quot;ChangeLog1002003&quot; commandname=&quot;permalink&quot; class=&quot;button command_permalink&quot; title=&quot;Permalink for this tiddler&quot; href=&quot;javascript:;&quot;&gt;permalink&lt;/a&gt;&lt;br&gt;&lt;h1&gt; Stable Release 1.2.3.8 - 8 October 2012&lt;/h1&gt;This release is essentially the same as the development version 1.2.3.7.&lt;br&gt;&lt;br&gt;The following components are bundled:&lt;br&gt;&lt;ul&gt;&lt;li&gt; LuaJIT-2.0.0-beta10&lt;/li&gt;&lt;li&gt; array-var-nginx-module-0.03rc1&lt;/li&gt;&lt;li&gt; auth-request-nginx-module-0.2&lt;/li&gt;&lt;li&gt; drizzle-nginx-module-0.1.4&lt;/li&gt;&lt;li&gt; echo-nginx-module-0.41&lt;/li&gt;&lt;li&gt; encrypted-session-nginx-module-0.02&lt;/li&gt;&lt;li&gt; form-input-nginx-module-0.07rc5&lt;/li&gt;&lt;li&gt; headers-more-nginx-module-0.18&lt;/li&gt;&lt;li&gt; iconv-nginx-module-0.10rc7&lt;/li&gt;&lt;li&gt; lua-5.1.5&lt;/li&gt;&lt;li&gt; lua-cjson-1.0.3&lt;/li&gt;&lt;li&gt; lua-rds-parser-0.05&lt;/li&gt;&lt;li&gt; lua-redis-parser-0.10&lt;/li&gt;&lt;li&gt; lua-resty-dns-0.08&lt;/li&gt;&lt;li&gt; lua-resty-memcached-0.08&lt;/li&gt;&lt;li&gt; lua-resty-mysql-0.10&lt;/li&gt;&lt;li&gt; lua-resty-redis-0.14&lt;/li&gt;&lt;li&gt; lua-resty-string-0.06&lt;/li&gt;&lt;li&gt; lua-resty-upload-0.03&lt;/li&gt;&lt;li&gt; memc-nginx-module-0.13rc3&lt;/li&gt;&lt;li&gt; nginx-1.2.3&lt;/li&gt;&lt;li&gt; ngx_coolkit-0.2rc1&lt;/li&gt;&lt;li&gt; ngx_devel_kit-0.2.17&lt;/li&gt;&lt;li&gt; ngx_lua-0.6.10&lt;/li&gt;&lt;li&gt; ngx_postgres-1.0rc2&lt;/li&gt;&lt;li&gt; rds-csv-nginx-module-0.05rc2&lt;/li&gt;&lt;li&gt; rds-json-nginx-module-0.12rc10&lt;/li&gt;&lt;li&gt; redis-nginx-module-0.3.6&lt;/li&gt;&lt;li&gt; redis2-nginx-module-0.09&lt;/li&gt;&lt;li&gt; set-misc-nginx-module-0.22rc8&lt;/li&gt;&lt;li&gt; srcache-nginx-module-0.16&lt;/li&gt;&lt;li&gt; xss-nginx-module-0.03rc9&lt;/li&gt;&lt;/ul&gt;&lt;h1&gt; Devel Release 1.2.3.7 - 6 October 2012&lt;/h1&gt;&lt;ul&gt;&lt;li&gt; upgraded &lt;a tiddlylink=&quot;LuaNginxModule&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#LuaNginxModule&quot; href=&quot;null#LuaNginxModule&quot; class=&quot;externalLink null&quot;&gt;LuaNginxModule&lt;/a&gt; to 0.6.10.&lt;ul&gt;&lt;li&gt; feature: now &lt;a target=&quot;_blank&quot; title=&quot;External link to http://wiki.nginx.org/HttpLuaModule#ngx.req.get_headers&quot; href=&quot;http://wiki.nginx.org/HttpLuaModule#ngx.req.get_headers&quot; class=&quot;externalLink&quot;&gt;ngx.req.get_headers()&lt;/a&gt; returns a Lua table with keys in the all-lower-case form by default. thanks James Hurst and Matthieu Tourne for the feature request.&lt;/li&gt;&lt;li&gt; feature: now &lt;a target=&quot;_blank&quot; title=&quot;External link to http://wiki.nginx.org/HttpLuaModule#ngx.req.get_headers&quot; href=&quot;http://wiki.nginx.org/HttpLuaModule#ngx.req.get_headers&quot; class=&quot;externalLink&quot;&gt;ngx.req.get_headers()&lt;/a&gt; adds an &lt;code&gt;__index&lt;/code&gt; 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.&lt;/li&gt;&lt;li&gt; feature: now &lt;a target=&quot;_blank&quot; title=&quot;External link to http://wiki.nginx.org/HttpLuaModule#ngx.req.get_headers&quot; href=&quot;http://wiki.nginx.org/HttpLuaModule#ngx.req.get_headers&quot; class=&quot;externalLink&quot;&gt;ngx.req.get_headers()&lt;/a&gt; accepts a second (optional) argument, &lt;code&gt;raw&lt;/code&gt;, for controlling whether to return the original form of the header names (that is, the original letter-case).&lt;/li&gt;&lt;li&gt; feature: added public C API functions &lt;code&gt;ngx_http_shared_dict_get&lt;/code&gt; and &lt;code&gt;ngx_http_lua_find_zone&lt;/code&gt; to allow other Nginx C modules or a patched Nginx core to directly access the &lt;a target=&quot;_blank&quot; title=&quot;External link to http://wiki.nginx.org/HttpLuaModule#lua_shared_dict&quot; href=&quot;http://wiki.nginx.org/HttpLuaModule#lua_shared_dict&quot; class=&quot;externalLink&quot;&gt;shared memory dictionaries&lt;/a&gt; created by &lt;a tiddlylink=&quot;LuaNginxModule&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#LuaNginxModule&quot; href=&quot;null#LuaNginxModule&quot; class=&quot;externalLink null&quot;&gt;LuaNginxModule&lt;/a&gt;. thanks Piotr Sikora for requesting this feature.&lt;/li&gt;&lt;li&gt; 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 &lt;a target=&quot;_blank&quot; title=&quot;External link to https://github.com/chaoslawful/lua-nginx-module/issues/162&quot; href=&quot;https://github.com/chaoslawful/lua-nginx-module/issues/162&quot; class=&quot;externalLink&quot;&gt;GitHub issue #162&lt;/a&gt;.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h1&gt; Devel Release 1.2.3.5 - 1 October 2012&lt;/h1&gt;&lt;ul&gt;&lt;li&gt; upgraded &lt;a tiddlylink=&quot;LuaNginxModule&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#LuaNginxModule&quot; href=&quot;null#LuaNginxModule&quot; class=&quot;externalLink null&quot;&gt;LuaNginxModule&lt;/a&gt; to 0.6.8.&lt;ul&gt;&lt;li&gt; bugfix: &lt;a target=&quot;_blank&quot; title=&quot;External link to http://wiki.nginx.org/HttpLuaModule#ngx.re.gmatch&quot; href=&quot;http://wiki.nginx.org/HttpLuaModule#ngx.re.gmatch&quot; class=&quot;externalLink&quot;&gt;ngx.re.gmatch&lt;/a&gt; might loop infinitely when the pattern matches an empty string. thanks Lance Li and xingxing for tracking this issue down.&lt;/li&gt;&lt;li&gt; bugfix: pattern matching an empty substring in &lt;a target=&quot;_blank&quot; title=&quot;External link to http://wiki.nginx.org/HttpLuaModule#ngx.re.gmatch&quot; href=&quot;http://wiki.nginx.org/HttpLuaModule#ngx.re.gmatch&quot; class=&quot;externalLink&quot;&gt;ngx.re.gmatch&lt;/a&gt; did not match at the end of the subject string.&lt;/li&gt;&lt;li&gt; bugfix: &lt;a target=&quot;_blank&quot; title=&quot;External link to http://wiki.nginx.org/HttpLuaModule#ngx.re.gsub&quot; href=&quot;http://wiki.nginx.org/HttpLuaModule#ngx.re.gsub&quot; class=&quot;externalLink&quot;&gt;ngx.re.gsub&lt;/a&gt; might enter infinite loops because it could not handle patterns matching empty strings properly.&lt;/li&gt;&lt;li&gt; bugfix: &lt;a target=&quot;_blank&quot; title=&quot;External link to http://wiki.nginx.org/HttpLuaModule#ngx.re.gsub&quot; href=&quot;http://wiki.nginx.org/HttpLuaModule#ngx.re.gsub&quot; class=&quot;externalLink&quot;&gt;ngx.re.gsub&lt;/a&gt; incorrectly skipped matching altogether when the subject string was empty.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h1&gt; Devel Release 1.2.3.3 - 26 September 2012&lt;/h1&gt;&lt;ul&gt;&lt;li&gt; upgraded &lt;a tiddlylink=&quot;LuaNginxModule&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#LuaNginxModule&quot; href=&quot;null#LuaNginxModule&quot; class=&quot;externalLink null&quot;&gt;LuaNginxModule&lt;/a&gt; to 0.6.7.&lt;ul&gt;&lt;li&gt; feature: implemented the &lt;a target=&quot;_blank&quot; title=&quot;External link to http://wiki.nginx.org/HttpLuaModule#ngx.shared.DICT.flush_expired&quot; href=&quot;http://wiki.nginx.org/HttpLuaModule#ngx.shared.DICT.flush_expired&quot; class=&quot;externalLink&quot;&gt;shdict:flush_expired(max_count?)&lt;/a&gt; method for flushing out and removing expired items up to &lt;code&gt;max_count&lt;/code&gt; (or unlimited when &lt;code&gt;max_count == 0&lt;/code&gt;). thanks Brian Akins for the patch.&lt;/li&gt;&lt;li&gt; optimize: &lt;a target=&quot;_blank&quot; title=&quot;External link to http://wiki.nginx.org/HttpLuaModule#tcpsock:send&quot; href=&quot;http://wiki.nginx.org/HttpLuaModule#tcpsock:send&quot; class=&quot;externalLink&quot;&gt;tcpsock:send()&lt;/a&gt; now calls &lt;code&gt;c-&amp;gt;send()&lt;/code&gt; instead of &lt;code&gt;ngx_output_chain()&lt;/code&gt;, which gives about 4% ~ 5% performance boost for a simple test case accessing Redis for several times.&lt;/li&gt;&lt;li&gt; optimize: we now skip processing in the default write event handler when the write event is not ready.&lt;/li&gt;&lt;li&gt; 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 &lt;code&gt;ngx.thread&lt;/code&gt; API (aka the &quot;lightweight thread&quot; API).&lt;/li&gt;&lt;li&gt; refactor: now we use a new Nginx subrequest model that bypasses &lt;code&gt;ngx_http_postpone_filter_module&lt;/code&gt; completely, which paves a way for arbitrary order of outputting among subrequests and their parents when the &lt;code&gt;ngx.thread API&lt;/code&gt; lands in the near future.&lt;/li&gt;&lt;li&gt; bugfix: the &quot;http finalize non-active request&quot; alerts might happen when subrequests were used. thanks Lance Li for reporting this issue.&lt;/li&gt;&lt;li&gt; bugfix: reset the subrequest status code when the &lt;code&gt;ngx_http_upstream&lt;/code&gt; request in the subrequest fails due to timeout errors or premature connection close and etc. this fix also requires the &lt;a target=&quot;_blank&quot; title=&quot;External link to https://github.com/agentzh/ngx_openresty/blob/master/patches/nginx-1.2.3-nonbuffered-upstream-truncation.patch&quot; href=&quot;https://github.com/agentzh/ngx_openresty/blob/master/patches/nginx-1.2.3-nonbuffered-upstream-truncation.patch&quot; class=&quot;externalLink&quot;&gt;nonbuffered-upstream-truncation patch&lt;/a&gt; for the Nginx core to cancel a limitation in &lt;code&gt;ngx_http_upstream&lt;/code&gt;.&lt;/li&gt;&lt;li&gt; bugfix: fixed the gcc error &lt;code&gt;-Werror=strict-aliasing&lt;/code&gt; in the Lua/&lt;a tiddlylink=&quot;LuaJIT&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#LuaJIT&quot; href=&quot;null#LuaJIT&quot; class=&quot;externalLink null&quot;&gt;LuaJIT&lt;/a&gt; bytecode loader when &lt;code&gt;-O2&lt;/code&gt; or above is used. thanks jinglong for the patch.&lt;/li&gt;&lt;li&gt; bugfix: the main request might be prematurely terminated if a subrequest issued by &lt;a target=&quot;_blank&quot; title=&quot;External link to http://wiki.nginx.org/HttpLuaModule#ngx.location.capture&quot; href=&quot;http://wiki.nginx.org/HttpLuaModule#ngx.location.capture&quot; class=&quot;externalLink&quot;&gt;ngx.location.capture&lt;/a&gt; (or its friends) was finalized with error codes.&lt;/li&gt;&lt;li&gt; bugfix: the Nginx built-in resolver might not be destroyed in time when it was used by &lt;a target=&quot;_blank&quot; title=&quot;External link to http://wiki.nginx.org/HttpLuaModule#ngx.socket.tcp&quot; href=&quot;http://wiki.nginx.org/HttpLuaModule#ngx.socket.tcp&quot; class=&quot;externalLink&quot;&gt;ngx.socket.tcp&lt;/a&gt; and &lt;a target=&quot;_blank&quot; title=&quot;External link to http://wiki.nginx.org/HttpLuaModule#ngx.socket.udp&quot; href=&quot;http://wiki.nginx.org/HttpLuaModule#ngx.socket.udp&quot; class=&quot;externalLink&quot;&gt;ngx.socket.udp&lt;/a&gt;.&lt;/li&gt;&lt;li&gt; bugfix: &lt;a target=&quot;_blank&quot; title=&quot;External link to http://wiki.nginx.org/HttpLuaModule#coroutine.status&quot; href=&quot;http://wiki.nginx.org/HttpLuaModule#coroutine.status&quot; class=&quot;externalLink&quot;&gt;coroutine.status()&lt;/a&gt; returned &lt;code&gt;suspended&lt;/code&gt; for &lt;code&gt;normal&lt;/code&gt; coroutines.&lt;/li&gt;&lt;li&gt; bugfix: &lt;a target=&quot;_blank&quot; title=&quot;External link to http://wiki.nginx.org/HttpLuaModule#coroutine.resume&quot; href=&quot;http://wiki.nginx.org/HttpLuaModule#coroutine.resume&quot; class=&quot;externalLink&quot;&gt;coroutine.resume()&lt;/a&gt; did not return an error immediately when operating on &lt;code&gt;normal&lt;/code&gt; coroutines.&lt;/li&gt;&lt;li&gt; bugfix: when the entry coroutine was yielded by &lt;a target=&quot;_blank&quot; title=&quot;External link to http://wiki.nginx.org/HttpLuaModule#coroutine.yield&quot; href=&quot;http://wiki.nginx.org/HttpLuaModule#coroutine.yield&quot; class=&quot;externalLink&quot;&gt;coroutine.yield()&lt;/a&gt; then after it was resumed automatically its status would still be &lt;code&gt;suspended&lt;/code&gt;.&lt;/li&gt;&lt;li&gt; bugfix: the write event timer might not be removed in time in &lt;a target=&quot;_blank&quot; title=&quot;External link to http://wiki.nginx.org/HttpLuaModule#ngx.flush&quot; href=&quot;http://wiki.nginx.org/HttpLuaModule#ngx.flush&quot; class=&quot;externalLink&quot;&gt;ngx.flush(true)&lt;/a&gt; when &lt;code&gt;ngx_handle_write_event&lt;/code&gt; failed.&lt;/li&gt;&lt;li&gt; bugfix: always remove the read event timer during downstream cosocket finalization if it is not removed yet.&lt;/li&gt;&lt;li&gt; bugfix: &lt;a target=&quot;_blank&quot; title=&quot;External link to http://wiki.nginx.org/HttpLuaModule#ngx.flush&quot; href=&quot;http://wiki.nginx.org/HttpLuaModule#ngx.flush&quot; class=&quot;externalLink&quot;&gt;ngx.flush(true)&lt;/a&gt; might not return immediately when it should.&lt;/li&gt;&lt;li&gt; bugfix: the &lt;code&gt;resume_handler&lt;/code&gt; field of the subrequest &lt;code&gt;ctx&lt;/code&gt; was not properly initialized.&lt;/li&gt;&lt;li&gt; feature: added new dtrace static probes &lt;code&gt;http-lua-user-coroutine-yield&lt;/code&gt; and &lt;code&gt;http-lua-entry-coroutine-yield&lt;/code&gt;.&lt;/li&gt;&lt;li&gt; docs: fixed the documentation for &lt;a target=&quot;_blank&quot; title=&quot;External link to http://wiki.nginx.org/HttpLuaModule#ngx.req.set_header&quot; href=&quot;http://wiki.nginx.org/HttpLuaModule#ngx.req.set_header&quot; class=&quot;externalLink&quot;&gt;ngx.req.set_header&lt;/a&gt; and made it clear that the modified request headers will be inherited by the subrequests by default. thanks James Hurst for reporting this issue.&lt;/li&gt;&lt;li&gt; docs: documented the trick for doing background asynchronous jobs by using &lt;a target=&quot;_blank&quot; title=&quot;External link to http://wiki.nginx.org/HttpLuaModule#ngx.eof&quot; href=&quot;http://wiki.nginx.org/HttpLuaModule#ngx.eof&quot; class=&quot;externalLink&quot;&gt;ngx.eof()&lt;/a&gt; + &lt;code&gt;keepalive_timeout 0&lt;/code&gt;. thanks Lance Li for the suggestion.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt; upgraded &lt;a tiddlylink=&quot;LuaRedisParserLibrary&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#LuaRedisParserLibrary&quot; href=&quot;null#LuaRedisParserLibrary&quot; class=&quot;externalLink null&quot;&gt;LuaRedisParserLibrary&lt;/a&gt; to 0.10.&lt;ul&gt;&lt;li&gt; bugfix: Lua stack overflow would happen when too many Redis arguments were passed into the &lt;a target=&quot;_blank&quot; title=&quot;External link to http://wiki.nginx.org/LuaRedisParser#build_query&quot; href=&quot;http://wiki.nginx.org/LuaRedisParser#build_query&quot; class=&quot;externalLink&quot;&gt;build_query&lt;/a&gt; method. thanks Guo Yin for reporting this issue.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt; upgraded &lt;a tiddlylink=&quot;LuaRestyDNSLibrary&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#LuaRestyDNSLibrary&quot; href=&quot;null#LuaRestyDNSLibrary&quot; class=&quot;externalLink null&quot;&gt;LuaRestyDNSLibrary&lt;/a&gt; to 0.08.&lt;ul&gt;&lt;li&gt; feature: added new method &lt;a target=&quot;_blank&quot; title=&quot;External link to https://github.com/agentzh/lua-resty-dns#tcp_query&quot; href=&quot;https://github.com/agentzh/lua-resty-dns#tcp_query&quot; class=&quot;externalLink&quot;&gt;tcp_query&lt;/a&gt; to enforce pure TCP transportation for the DNS queries.&lt;/li&gt;&lt;li&gt; feature: added support for TCP retries when the UDP reply gets truncated.&lt;/li&gt;&lt;li&gt; feature: added support for &lt;code&gt;PTR&lt;/code&gt; queries and records.&lt;/li&gt;&lt;li&gt; feature: added support for &lt;code&gt;TXT&lt;/code&gt; queries and records.&lt;/li&gt;&lt;li&gt; feature: added support for &lt;code&gt;NS&lt;/code&gt; queries and records.&lt;/li&gt;&lt;li&gt; bugfix: the udp resolver did not discard DNS replies with unmatched IDs for 128 times as originally designed.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt; upgraded &lt;a tiddlylink=&quot;LuaRestyRedisLibrary&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#LuaRestyRedisLibrary&quot; href=&quot;null#LuaRestyRedisLibrary&quot; class=&quot;externalLink null&quot;&gt;LuaRestyRedisLibrary&lt;/a&gt; to 0.14.&lt;ul&gt;&lt;li&gt; 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 &lt;a tiddlylink=&quot;LuaJIT&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#LuaJIT&quot; href=&quot;null#LuaJIT&quot; class=&quot;externalLink null&quot;&gt;LuaJIT&lt;/a&gt; 2.0 beta10.&lt;/li&gt;&lt;li&gt; docs: fixed a typo in the sample code. thanks xingxing for reporting it.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt; upgraded &lt;a tiddlylink=&quot;LuaRestyMemcachedLibrary&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#LuaRestyMemcachedLibrary&quot; href=&quot;null#LuaRestyMemcachedLibrary&quot; class=&quot;externalLink null&quot;&gt;LuaRestyMemcachedLibrary&lt;/a&gt; to 0.08.&lt;ul&gt;&lt;li&gt; feature: added new option &lt;code&gt;key_transform&lt;/code&gt; to the &lt;a target=&quot;_blank&quot; title=&quot;External link to https://github.com/agentzh/lua-resty-memcached#new&quot; href=&quot;https://github.com/agentzh/lua-resty-memcached#new&quot; class=&quot;externalLink&quot;&gt;new method&lt;/a&gt; to allow the user to override the default escaping and unescaping methods for Memcached keys. thanks Matthieu Tourne for the patch.&lt;/li&gt;&lt;li&gt; bugfix: now the &lt;a target=&quot;_blank&quot; title=&quot;External link to https://github.com/agentzh/lua-resty-memcached#new&quot; href=&quot;https://github.com/agentzh/lua-resty-memcached#new&quot; class=&quot;externalLink&quot;&gt;new method&lt;/a&gt; will return a string describing the error as the second return value in case of failures.&lt;/li&gt;&lt;li&gt; docs: added more documentation for the &lt;a target=&quot;_blank&quot; title=&quot;External link to https://github.com/agentzh/lua-resty-memcached#set_keepalive&quot; href=&quot;https://github.com/agentzh/lua-resty-memcached#set_keepalive&quot; class=&quot;externalLink&quot;&gt;set_keepalive&lt;/a&gt; method.&lt;/li&gt;&lt;li&gt; docs: documented that this library cannot be used in those contexts where the &lt;a tiddlylink=&quot;LuaNginxModule&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#LuaNginxModule&quot; href=&quot;null#LuaNginxModule&quot; class=&quot;externalLink null&quot;&gt;LuaNginxModule&lt;/a&gt; cosocket API is unavailable.&lt;/li&gt;&lt;li&gt; docs: documented that storing the object instance into Lua module-level variables will result in failures for concurrent requests.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt; upgraded &lt;a tiddlylink=&quot;SrcacheNginxModule&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#SrcacheNginxModule&quot; href=&quot;null#SrcacheNginxModule&quot; class=&quot;externalLink null&quot;&gt;SrcacheNginxModule&lt;/a&gt; to 0.16.&lt;ul&gt;&lt;li&gt; bugfix: &lt;a target=&quot;_blank&quot; title=&quot;External link to http://wiki.nginx.org/HttpSRCacheModule#srcache_fetch&quot; href=&quot;http://wiki.nginx.org/HttpSRCacheModule#srcache_fetch&quot; class=&quot;externalLink&quot;&gt;srcache_fetch&lt;/a&gt; would use truncated responses from &lt;a tiddlylink=&quot;MemcNginxModule&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#MemcNginxModule&quot; href=&quot;null#MemcNginxModule&quot; class=&quot;externalLink null&quot;&gt;MemcNginxModule&lt;/a&gt; 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 &lt;a target=&quot;_blank&quot; title=&quot;External link to https://github.com/agentzh/ngx_openresty/blob/master/patches/nginx-1.2.3-nonbuffered-upstream-truncation.patch&quot; href=&quot;https://github.com/agentzh/ngx_openresty/blob/master/patches/nginx-1.2.3-nonbuffered-upstream-truncation.patch&quot; class=&quot;externalLink&quot;&gt;nonbuffered-upsteram-truncation patch&lt;/a&gt; to cancel a limitation in the Nginx core. thanks Bryan Alger for reporting the issue.&lt;/li&gt;&lt;li&gt; bugfix: the main request response was not discarded by &lt;a target=&quot;_blank&quot; title=&quot;External link to http://wiki.nginx.org/HttpSRCacheModule#srcache_store&quot; href=&quot;http://wiki.nginx.org/HttpSRCacheModule#srcache_store&quot; class=&quot;externalLink&quot;&gt;srcache_store&lt;/a&gt; when there was an error in the last minute (like a read-timeout error or premature connection close happens when &lt;code&gt;ngx_http_upstream&lt;/code&gt; reads the upstream response body). this fix also requires the &lt;a target=&quot;_blank&quot; title=&quot;External link to https://github.com/agentzh/ngx_openresty/blob/master/patches/nginx-1.2.3-nonbuffered-upstream-truncation.patch&quot; href=&quot;https://github.com/agentzh/ngx_openresty/blob/master/patches/nginx-1.2.3-nonbuffered-upstream-truncation.patch&quot; class=&quot;externalLink&quot;&gt;nonbuffered-upstream-truncation patch&lt;/a&gt; for the Nginx core to cancel a limitation in &lt;code&gt;ngx_http_upstream&lt;/code&gt;.&lt;/li&gt;&lt;li&gt; bugfix: the main request might prematurely terminate if the &lt;a target=&quot;_blank&quot; title=&quot;External link to http://wiki.nginx.org/HttpSRCacheModule#srcache_store&quot; href=&quot;http://wiki.nginx.org/HttpSRCacheModule#srcache_store&quot; class=&quot;externalLink&quot;&gt;srcache_store&lt;/a&gt; subrequest was finalized with error codes.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt; upgraded &lt;a tiddlylink=&quot;Redis2NginxModule&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#Redis2NginxModule&quot; href=&quot;null#Redis2NginxModule&quot; class=&quot;externalLink null&quot;&gt;Redis2NginxModule&lt;/a&gt; to 0.09.&lt;ul&gt;&lt;li&gt; bugfix: directives &lt;a target=&quot;_blank&quot; title=&quot;External link to http://wiki.nginx.org/HttpRedis2Module#redis2_query&quot; href=&quot;http://wiki.nginx.org/HttpRedis2Module#redis2_query&quot; class=&quot;externalLink&quot;&gt;redis2_query&lt;/a&gt;, &lt;a target=&quot;_blank&quot; title=&quot;External link to http://wiki.nginx.org/HttpRedis2Module#redis2_literal_raw_query&quot; href=&quot;http://wiki.nginx.org/HttpRedis2Module#redis2_literal_raw_query&quot; class=&quot;externalLink&quot;&gt;redis2_literal_raw_query&lt;/a&gt;, and &lt;a target=&quot;_blank&quot; title=&quot;External link to http://wiki.nginx.org/HttpRedis2Module#redis2_raw_queries&quot; href=&quot;http://wiki.nginx.org/HttpRedis2Module#redis2_raw_queries&quot; class=&quot;externalLink&quot;&gt;redis2_raw_queries&lt;/a&gt; could not be inherited automatically by the &lt;code&gt;location if&lt;/code&gt; blocks, resulting in the &quot;no redis2 query specified or the query is empty&quot; error. thanks Tomasz Prus for the patch.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt; feature: updated the &lt;a target=&quot;_blank&quot; title=&quot;External link to https://github.com/agentzh/ngx_openresty/blob/master/patches/nginx-1.2.3-dtrace.patch&quot; href=&quot;https://github.com/agentzh/ngx_openresty/blob/master/patches/nginx-1.2.3-dtrace.patch&quot; class=&quot;externalLink&quot;&gt;dtrace patch&lt;/a&gt; to add new static probe &lt;code&gt;create-pool-done&lt;/code&gt;.&lt;/li&gt;&lt;li&gt; feature: updated the &lt;a target=&quot;_blank&quot; title=&quot;External link to https://github.com/agentzh/ngx_openresty/blob/master/patches/nginx-1.2.3-dtrace.patch&quot; href=&quot;https://github.com/agentzh/ngx_openresty/blob/master/patches/nginx-1.2.3-dtrace.patch&quot; class=&quot;externalLink&quot;&gt;dtrace patch&lt;/a&gt; to include new tapset functions &lt;code&gt;ngx_indent&lt;/code&gt;, &lt;code&gt;ngx_http_subreq_depth&lt;/code&gt;, and &lt;code&gt;ngx_http_req_parent&lt;/code&gt;.&lt;/li&gt;&lt;li&gt; bugfix: added the &lt;a target=&quot;_blank&quot; title=&quot;External link to https://github.com/agentzh/ngx_openresty/blob/master/patches/nginx-1.2.3-nonbuffered-upstream-truncation.patch&quot; href=&quot;https://github.com/agentzh/ngx_openresty/blob/master/patches/nginx-1.2.3-nonbuffered-upstream-truncation.patch&quot; class=&quot;externalLink&quot;&gt;nonbuffered-upstream-truncation patch&lt;/a&gt; for the Nginx core to make &lt;code&gt;ngx_http_upstream&lt;/code&gt; 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.)&lt;/li&gt;&lt;li&gt; bugfix: applied the &lt;a target=&quot;_blank&quot; title=&quot;External link to https://github.com/agentzh/ngx_openresty/blob/master/patches/nginx-1.2.3-channel-uninit-params.patch&quot; href=&quot;https://github.com/agentzh/ngx_openresty/blob/master/patches/nginx-1.2.3-channel-uninit-params.patch&quot; class=&quot;externalLink&quot;&gt;channel-uninit-params patch&lt;/a&gt; for the Nginx core to fix Valgrind/Memcheck warnings about unitialized bytes in the parameters of &lt;code&gt;sendmsg&lt;/code&gt;.&lt;/li&gt;&lt;li&gt; feature: updated the &lt;a target=&quot;_blank&quot; title=&quot;External link to https://github.com/agentzh/ngx_openresty/blob/master/patches/nginx-1.2.3-allow_request_body_updating.patch&quot; href=&quot;https://github.com/agentzh/ngx_openresty/blob/master/patches/nginx-1.2.3-allow_request_body_updating.patch&quot; class=&quot;externalLink&quot;&gt;allow_request_body_updating patch&lt;/a&gt; to define the &lt;code&gt;HAVE_ALLOW_REQUEST_BODY_UPDATING_PATCH&lt;/code&gt; macro.&lt;/li&gt;&lt;/ul&gt;&lt;h1&gt; Devel Release 1.2.3.1 - 22 August 2012&lt;/h1&gt;&lt;ul&gt;&lt;li&gt; upgraded the Nginx core to 1.2.3.&lt;ul&gt;&lt;li&gt; see &lt;a target=&quot;_blank&quot; title=&quot;External link to http://nginx.org/en/CHANGES-1.2&quot; href=&quot;http://nginx.org/en/CHANGES-1.2&quot; class=&quot;externalLink&quot;&gt;http://nginx.org/en/CHANGES-1.2&lt;/a&gt; for changes.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt; upgraded &lt;a tiddlylink=&quot;LuaNginxModule&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#LuaNginxModule&quot; href=&quot;null#LuaNginxModule&quot; class=&quot;externalLink null&quot;&gt;LuaNginxModule&lt;/a&gt; to 0.6.2.&lt;ul&gt;&lt;li&gt; feature: (re)implemented the standard Lua &lt;a target=&quot;_blank&quot; title=&quot;External link to http://wiki.nginx.org/HttpLuaModule#coroutine.create&quot; href=&quot;http://wiki.nginx.org/HttpLuaModule#coroutine.create&quot; class=&quot;externalLink&quot;&gt;coroutine API&lt;/a&gt;, which means that the user is now free to create and run their own coroutines within the boilerplate coroutine created automatically by &lt;a tiddlylink=&quot;LuaNginxModule&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#LuaNginxModule&quot; href=&quot;null#LuaNginxModule&quot; class=&quot;externalLink null&quot;&gt;LuaNginxModule&lt;/a&gt;. thanks chaoslawful and jinglong for the design and implementation.&lt;/li&gt;&lt;li&gt; feature: added new dtrace static probes for the user coroutine mechanism: &lt;code&gt;http-lua-coroutine-create&lt;/code&gt; and &lt;code&gt;http-lua-coroutine-resume&lt;/code&gt;.&lt;/li&gt;&lt;li&gt; feature: added new dtrace static probes for the cosocket mechanism: &lt;code&gt;http-lua-socket-tcp-send-start&lt;/code&gt;, &lt;code&gt;http-lua-socket-tcp-receive-done&lt;/code&gt;, and &lt;code&gt;http-lua-socket-tcp-setkeepalive-buf-unread&lt;/code&gt;.&lt;/li&gt;&lt;li&gt; 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.&lt;/li&gt;&lt;li&gt; bugfix: &lt;a target=&quot;_blank&quot; title=&quot;External link to http://wiki.nginx.org/HttpLuaModule#tcpsock:send&quot; href=&quot;http://wiki.nginx.org/HttpLuaModule#tcpsock:send&quot; class=&quot;externalLink&quot;&gt;tcpsock:send()&lt;/a&gt; might send garbage if it was not the first call: we did not properly initialize the chain writer ctx for every &lt;code&gt;send()&lt;/code&gt; call. thanks Zhu Dejiang for reporting this issue.&lt;/li&gt;&lt;li&gt; bugfix: the &lt;code&gt;ngx_http_lua_probe.h&lt;/code&gt; header file was not listed in the &lt;code&gt;NGX_ADDON_DEPS&lt;/code&gt; list in the &lt;code&gt;config&lt;/code&gt; file.&lt;/li&gt;&lt;li&gt; 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 &lt;code&gt;ngx.exec&lt;/code&gt;, &lt;code&gt;ngx.exit&lt;/code&gt;, &lt;code&gt;ngx.redirect&lt;/code&gt;, and &lt;code&gt;ngx.req.set_uri(uri, true)&lt;/code&gt;.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt; upgraded &lt;a tiddlylink=&quot;LuaRestyDNSLibrary&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#LuaRestyDNSLibrary&quot; href=&quot;null#LuaRestyDNSLibrary&quot; class=&quot;externalLink null&quot;&gt;LuaRestyDNSLibrary&lt;/a&gt; to 0.06.&lt;ul&gt;&lt;li&gt; feature: added support for MX type resource records.&lt;/li&gt;&lt;li&gt; feature: unrecognized types of resource records will return their raw resource data (RDATA) as the &lt;code&gt;rdata&lt;/code&gt; Lua table field.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt; upgraded &lt;a tiddlylink=&quot;LuaRestyRedisLibrary&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#LuaRestyRedisLibrary&quot; href=&quot;null#LuaRestyRedisLibrary&quot; class=&quot;externalLink null&quot;&gt;LuaRestyRedisLibrary&lt;/a&gt; to 0.13.&lt;ul&gt;&lt;li&gt; feature: added new method &lt;a target=&quot;_blank&quot; title=&quot;External link to https://github.com/agentzh/lua-resty-redis#read_reply&quot; href=&quot;https://github.com/agentzh/lua-resty-redis#read_reply&quot; class=&quot;externalLink&quot;&gt;read_reply&lt;/a&gt;, mostly for using the &lt;a target=&quot;_blank&quot; title=&quot;External link to http://redis.io/topics/pubsub/&quot; href=&quot;http://redis.io/topics/pubsub/&quot; class=&quot;externalLink&quot;&gt;Redis Pub/Sub API&lt;/a&gt;.&lt;/li&gt;&lt;li&gt; feature: added new class method &lt;a target=&quot;_blank&quot; title=&quot;External link to https://github.com/agentzh/lua-resty-redis#add_commands&quot; href=&quot;https://github.com/agentzh/lua-resty-redis#add_commands&quot; class=&quot;externalLink&quot;&gt;add_commands&lt;/a&gt; to allow adding support for new Redis commands on-the-fly. thanks Praveen Saxena for requesting this feature.&lt;/li&gt;&lt;li&gt; docs: added a code sample for using the &lt;a target=&quot;_blank&quot; title=&quot;External link to https://github.com/agentzh/lua-resty-redis#redis-transactions&quot; href=&quot;https://github.com/agentzh/lua-resty-redis#redis-transactions&quot; class=&quot;externalLink&quot;&gt;Redis transactions&lt;/a&gt;.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt; upgraded &lt;a tiddlylink=&quot;DrizzleNginxModule&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#DrizzleNginxModule&quot; href=&quot;null#DrizzleNginxModule&quot; class=&quot;externalLink null&quot;&gt;DrizzleNginxModule&lt;/a&gt; to 0.1.4.&lt;ul&gt;&lt;li&gt; bugfix: the &lt;code&gt;open socket #N left in connection&lt;/code&gt; alerts would appear in the nginx error log file when the MySQL/Drizzle connection pool was used and the worker process was shutting down.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt; upgraded &lt;a tiddlylink=&quot;PostgresNginxModule&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#PostgresNginxModule&quot; href=&quot;null#PostgresNginxModule&quot; class=&quot;externalLink null&quot;&gt;PostgresNginxModule&lt;/a&gt; to 1.0rc2.&lt;ul&gt;&lt;li&gt; bugfix: the &lt;code&gt;open socket #N left in connection&lt;/code&gt; alerts would appear in the nginx error log file when the PostgreSQL connection pool was used and the worker process was shutting down.&lt;/li&gt;&lt;li&gt; bugfix: removed the useless http-cache related code from &lt;code&gt;ngx_postgres_upstream_finalize_request&lt;/code&gt; to suppress clang warnings.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt; added more dtrace static probes to the Nginx core: &lt;code&gt;timer-add&lt;/code&gt;, &lt;code&gt;timer-del&lt;/code&gt;, and &lt;code&gt;timer-expire&lt;/code&gt;.&lt;/li&gt;&lt;li&gt; added more &lt;a target=&quot;_blank&quot; title=&quot;External link to http://sourceware.org/systemtap/&quot; href=&quot;http://sourceware.org/systemtap/&quot; class=&quot;externalLink&quot;&gt;systemtap&lt;/a&gt; tapset functions: &lt;code&gt;ngx_chain_next&lt;/code&gt;, &lt;code&gt;ngx_chain_writer_ctx_out&lt;/code&gt;, &lt;code&gt;ngx_chain_dump&lt;/code&gt;, and &lt;code&gt;ngx_iovec_dump&lt;/code&gt;.&lt;/li&gt;&lt;/ul&gt;&lt;br&gt;See &lt;a tiddlylink=&quot;ChangeLog1002001&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#ChangeLog1002001&quot; href=&quot;null#ChangeLog1002001&quot; class=&quot;externalLink null&quot;&gt;ChangeLog1002001&lt;/a&gt; for change log for &lt;a tiddlylink=&quot;OpenResty&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#OpenResty&quot; href=&quot;null#OpenResty&quot; class=&quot;externalLink null&quot;&gt;OpenResty&lt;/a&gt; 1.2.1.x.&lt;br&gt;</description>
<link>null#ChangeLog1002003</link>
<pubDate>Mon, 08 Oct 2012 21:56:00 GMT</pubDate>

</item>
<item>
<title>LuaNginxModule</title>
<description>&lt;a tiddler=&quot;LuaNginxModule&quot; commandname=&quot;permalink&quot; class=&quot;button command_permalink&quot; title=&quot;Permalink for this tiddler&quot; href=&quot;javascript:;&quot;&gt;permalink&lt;/a&gt;&lt;br&gt;&lt;br&gt;This module embeds the Lua interpreter or &lt;a tiddlylink=&quot;LuaJIT&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#LuaJIT&quot; href=&quot;null#LuaJIT&quot; class=&quot;externalLink null&quot;&gt;LuaJIT&lt;/a&gt; 2.0 into the nginx core and integrates the powerful Lua threads (aka Lua coroutines) into the Nginx event model by means of Nginx subrequests.&lt;br&gt;&lt;br&gt;Unlike Apache's mod_lua and Lighttpd's mod_magnet, Lua code executed using this module can be 100% non-blocking on network traffic as long as the &lt;a target=&quot;_blank&quot; title=&quot;External link to http://wiki.nginx.org/HttpLuaModule#Nginx_API_for_Lua&quot; href=&quot;http://wiki.nginx.org/HttpLuaModule#Nginx_API_for_Lua&quot; class=&quot;externalLink&quot;&gt;Nginx API for Lua&lt;/a&gt; provided by this module is used to handle requests to upstream services such as MySQL, PostgreSQL, Memcached, Redis, or upstream HTTP web services.&lt;br&gt;&lt;br&gt;At least the following Lua libraries and Nginx modules can be used with this &lt;a tiddlylink=&quot;LuaNginxModule&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#LuaNginxModule&quot; href=&quot;null#LuaNginxModule&quot; class=&quot;externalLink null&quot;&gt;LuaNginxModule&lt;/a&gt;:&lt;br&gt;&lt;ul&gt;&lt;li&gt; &lt;a tiddlylink=&quot;LuaRestyMemcachedLibrary&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#LuaRestyMemcachedLibrary&quot; href=&quot;null#LuaRestyMemcachedLibrary&quot; class=&quot;externalLink null&quot;&gt;LuaRestyMemcachedLibrary&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a tiddlylink=&quot;LuaRestyMySQLLibrary&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#LuaRestyMySQLLibrary&quot; href=&quot;null#LuaRestyMySQLLibrary&quot; class=&quot;externalLink null&quot;&gt;LuaRestyMySQLLibrary&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a tiddlylink=&quot;LuaRestyRedisLibrary&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#LuaRestyRedisLibrary&quot; href=&quot;null#LuaRestyRedisLibrary&quot; class=&quot;externalLink null&quot;&gt;LuaRestyRedisLibrary&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a tiddlylink=&quot;LuaRestyDNSLibrary&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#LuaRestyDNSLibrary&quot; href=&quot;null#LuaRestyDNSLibrary&quot; class=&quot;externalLink null&quot;&gt;LuaRestyDNSLibrary&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a tiddlylink=&quot;LuaRestyUploadLibrary&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#LuaRestyUploadLibrary&quot; href=&quot;null#LuaRestyUploadLibrary&quot; class=&quot;externalLink null&quot;&gt;LuaRestyUploadLibrary&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a tiddlylink=&quot;MemcNginxModule&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#MemcNginxModule&quot; href=&quot;null#MemcNginxModule&quot; class=&quot;externalLink null&quot;&gt;MemcNginxModule&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a tiddlylink=&quot;PostgresNginxModule&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#PostgresNginxModule&quot; href=&quot;null#PostgresNginxModule&quot; class=&quot;externalLink null&quot;&gt;PostgresNginxModule&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a tiddlylink=&quot;Redis2NginxModule&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#Redis2NginxModule&quot; href=&quot;null#Redis2NginxModule&quot; class=&quot;externalLink null&quot;&gt;Redis2NginxModule&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a tiddlylink=&quot;RedisNginxModule&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#RedisNginxModule&quot; href=&quot;null#RedisNginxModule&quot; class=&quot;externalLink null&quot;&gt;RedisNginxModule&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a tiddlylink=&quot;ProxyNginxModule&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#ProxyNginxModule&quot; href=&quot;null#ProxyNginxModule&quot; class=&quot;externalLink null&quot;&gt;ProxyNginxModule&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a tiddlylink=&quot;FastCGINginxModule&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#FastCGINginxModule&quot; href=&quot;null#FastCGINginxModule&quot; class=&quot;externalLink null&quot;&gt;FastCGINginxModule&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br&gt;Almost all the Nginx modules can be used with this &lt;a tiddlylink=&quot;LuaNginxModule&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#LuaNginxModule&quot; href=&quot;null#LuaNginxModule&quot; class=&quot;externalLink null&quot;&gt;LuaNginxModule&lt;/a&gt; by means of &lt;a target=&quot;_blank&quot; title=&quot;External link to http://wiki.nginx.org/HttpLuaModule#ngx.location.capture&quot; href=&quot;http://wiki.nginx.org/HttpLuaModule#ngx.location.capture&quot; class=&quot;externalLink&quot;&gt;ngx.location.capture&lt;/a&gt; or &lt;a target=&quot;_blank&quot; title=&quot;External link to http://wiki.nginx.org/HttpLuaModule#ngx.location.capture_multi&quot; href=&quot;http://wiki.nginx.org/HttpLuaModule#ngx.location.capture_multi&quot; class=&quot;externalLink&quot;&gt;ngx.location.capture_multi&lt;/a&gt; but it is recommended to use those &lt;code&gt;lua-resty-*&lt;/code&gt; libraries instead of creating subrequests to access the Nginx upstream modules because the former is usually much more flexible and memory-efficient.&lt;br&gt;&lt;br&gt;The Lua interpreter or &lt;a tiddlylink=&quot;LuaJIT&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#LuaJIT&quot; href=&quot;null#LuaJIT&quot; class=&quot;externalLink null&quot;&gt;LuaJIT&lt;/a&gt; instance is shared across all the requests in a single nginx worker process but request contexts are segregated using lightweight Lua coroutines. Loaded Lua modules persist in the nginx worker process level resulting in a small memory footprint in Lua even when under heavy loads.&lt;br&gt;&lt;br&gt;Documentation: &lt;a target=&quot;_blank&quot; title=&quot;External link to http://wiki.nginx.org/HttpLuaModule&quot; href=&quot;http://wiki.nginx.org/HttpLuaModule&quot; class=&quot;externalLink&quot;&gt;http://wiki.nginx.org/HttpLuaModule&lt;/a&gt;&lt;br&gt;&lt;br&gt;Project page: &lt;a target=&quot;_blank&quot; title=&quot;External link to http://github.com/chaoslawful/lua-nginx-module&quot; href=&quot;http://github.com/chaoslawful/lua-nginx-module&quot; class=&quot;externalLink&quot;&gt;http://github.com/chaoslawful/lua-nginx-module&lt;/a&gt;</description>
<link>null#LuaNginxModule</link>
<pubDate>Thu, 13 Sep 2012 18:37:00 GMT</pubDate>

</item>
<item>
<title>DrizzleNginxModule</title>
<description>&lt;a tiddler=&quot;DrizzleNginxModule&quot; commandname=&quot;permalink&quot; class=&quot;button command_permalink&quot; title=&quot;Permalink for this tiddler&quot; href=&quot;javascript:;&quot;&gt;permalink&lt;/a&gt;&lt;br&gt;&lt;br&gt;This is an nginx upstream module that talks to MySQL and/or Drizzle database servers by &lt;a tiddlylink=&quot;libdrizzle&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#libdrizzle&quot; href=&quot;null#libdrizzle&quot; class=&quot;externalLink null&quot;&gt;libdrizzle&lt;/a&gt;.&lt;br&gt;&lt;br&gt;This ngx_drizzle module is not enabled by default. You should specify the &lt;code&gt;--with-http_drizzle_module&lt;/code&gt; option while configuring &lt;a tiddlylink=&quot;OpenResty&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#OpenResty&quot; href=&quot;null#OpenResty&quot; class=&quot;externalLink null&quot;&gt;OpenResty&lt;/a&gt;.&lt;br&gt;&lt;br&gt;The &lt;a tiddlylink=&quot;libdrizzle&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#libdrizzle&quot; href=&quot;null#libdrizzle&quot; class=&quot;externalLink null&quot;&gt;libdrizzle&lt;/a&gt; C library is no longer bundled by &lt;a tiddlylink=&quot;OpenResty&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#OpenResty&quot; href=&quot;null#OpenResty&quot; class=&quot;externalLink null&quot;&gt;OpenResty&lt;/a&gt;. You need to download the drizzle server tarball from &lt;a target=&quot;_blank&quot; title=&quot;External link to https://launchpad.net/drizzle&quot; href=&quot;https://launchpad.net/drizzle&quot; class=&quot;externalLink&quot;&gt;https://launchpad.net/drizzle&lt;/a&gt;.&lt;br&gt;&lt;br&gt;Latest drizzle7 release does not support building libdrizzle 1.0 separately and requires a lot of external dependencies like Boost and Protobuf which are painful to install. The last version supporting building libdrizzle 1.0 separately is &lt;code&gt;2011.07.21&lt;/code&gt;. You can download it from here:&lt;br&gt;&lt;br&gt;&lt;a target=&quot;_blank&quot; title=&quot;External link to http://openresty.org/download/drizzle7-2011.07.21.tar.gz&quot; href=&quot;http://openresty.org/download/drizzle7-2011.07.21.tar.gz&quot; class=&quot;externalLink&quot;&gt;http://openresty.org/download/drizzle7-2011.07.21.tar.gz&lt;/a&gt;&lt;br&gt;&lt;br&gt;When you get the drizzle7 2011.07.21 release tarball, you can install libdrizzle-1.0 like this:&lt;br&gt;&lt;pre&gt;tar xzvf drizzle7-2011.07.21.tar.gz
cd drizzle7-2011.07.21/
./configure --without-server
make libdrizzle-1.0
make install-libdrizzle-1.0
&lt;/pre&gt;&lt;br&gt;Please ensure that you have the &lt;code&gt;python&lt;/code&gt; command point to a &lt;code&gt;python2&lt;/code&gt; interpreter. It's known that on recent Arch Linux distribution, &lt;code&gt;python&lt;/code&gt; is linked to &lt;code&gt;python3&lt;/code&gt; by default, and while running &lt;code&gt;make libdrizzle-1.0&lt;/code&gt; will yield the following error:&lt;br&gt;&lt;pre&gt;  File &quot;config/pandora-plugin&quot;, line 185
    print &quot;Dependency loop detected with %s&quot; % plugin['name']
                                           ^
SyntaxError: invalid syntax
make: *** [.plugin.scan] Error 1
&lt;/pre&gt;You can fix this by pointing &lt;code&gt;python&lt;/code&gt; temporarily to &lt;code&gt;python2&lt;/code&gt;.&lt;br&gt;&lt;br&gt;When you install the libdrizzle-1.0 library to a custom path prefix, you can specify the libdrizzle prefix to &lt;a tiddlylink=&quot;OpenResty&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#OpenResty&quot; href=&quot;null#OpenResty&quot; class=&quot;externalLink null&quot;&gt;OpenResty&lt;/a&gt; like this:&lt;br&gt;&lt;pre&gt;cd /path/to/ngx_openresty-VERSION/
./configure --with-libdrizzle=/path/to/drizzle --with-http_drizzle_module
&lt;/pre&gt;&lt;br&gt;Documentation page: &lt;a target=&quot;_blank&quot; title=&quot;External link to http://wiki.nginx.org/HttpDrizzleModule&quot; href=&quot;http://wiki.nginx.org/HttpDrizzleModule&quot; class=&quot;externalLink&quot;&gt;http://wiki.nginx.org/HttpDrizzleModule&lt;/a&gt;&lt;br&gt;&lt;br&gt;Project page: &lt;a target=&quot;_blank&quot; title=&quot;External link to https://github.com/chaoslawful/drizzle-nginx-module&quot; href=&quot;https://github.com/chaoslawful/drizzle-nginx-module&quot; class=&quot;externalLink&quot;&gt;https://github.com/chaoslawful/drizzle-nginx-module&lt;/a&gt;&lt;br&gt;&lt;br&gt;When used in conjunction with &lt;a tiddlylink=&quot;LuaNginxModule&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#LuaNginxModule&quot; href=&quot;null#LuaNginxModule&quot; class=&quot;externalLink null&quot;&gt;LuaNginxModule&lt;/a&gt;, it is recommended to use &lt;a tiddlylink=&quot;LuaRestyMySQLLibrary&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#LuaRestyMySQLLibrary&quot; href=&quot;null#LuaRestyMySQLLibrary&quot; class=&quot;externalLink null&quot;&gt;LuaRestyMySQLLibrary&lt;/a&gt; instead of this one, since it is more flexible and more memory-efficient.&lt;br&gt;</description>
<link>null#DrizzleNginxModule</link>
<pubDate>Thu, 13 Sep 2012 18:34:00 GMT</pubDate>

</item>
<item>
<title>FastCGINginxModule</title>
<description>This is a standard Nginx module for talking to the remote &lt;a tiddlylink=&quot;FastCGI&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#FastCGI&quot; href=&quot;null#FastCGI&quot; class=&quot;externalLink null&quot;&gt;FastCGI&lt;/a&gt; servers: &lt;a target=&quot;_blank&quot; title=&quot;External link to http://wiki.nginx.org/HttpFastcgiModule&quot; href=&quot;http://wiki.nginx.org/HttpFastcgiModule&quot; class=&quot;externalLink&quot;&gt;http://wiki.nginx.org/HttpFastcgiModule&lt;/a&gt;</description>
<link>null#FastCGINginxModule</link>
<pubDate>Thu, 13 Sep 2012 18:29:00 GMT</pubDate>

</item>
<item>
<title>ProxyNginxModule</title>
<description>This is a standard Nginx module for talking to remote HTTP or HTTPS servers: &lt;a target=&quot;_blank&quot; title=&quot;External link to http://wiki.nginx.org/HttpProxyModule&quot; href=&quot;http://wiki.nginx.org/HttpProxyModule&quot; class=&quot;externalLink&quot;&gt;http://wiki.nginx.org/HttpProxyModule&lt;/a&gt;</description>
<link>null#ProxyNginxModule</link>
<pubDate>Thu, 13 Sep 2012 18:28:00 GMT</pubDate>

</item>
<item>
<title>MemcNginxModule</title>
<description>&lt;a tiddler=&quot;MemcNginxModule&quot; commandname=&quot;permalink&quot; class=&quot;button command_permalink&quot; title=&quot;Permalink for this tiddler&quot; href=&quot;javascript:;&quot;&gt;permalink&lt;/a&gt;&lt;br&gt;&lt;br&gt;This module extends the standard memcached module  to support almost the whole memcached ascii protocol.&lt;br&gt;&lt;br&gt;It allows you to define a custom REST interface to your memcached servers or access memcached in a very efficient way from within the nginx server by means of subrequests or independent fake requests. &lt;br&gt;&lt;br&gt;Documentation: &lt;a target=&quot;_blank&quot; title=&quot;External link to http://wiki.nginx.org/HttpMemcModule&quot; href=&quot;http://wiki.nginx.org/HttpMemcModule&quot; class=&quot;externalLink&quot;&gt;http://wiki.nginx.org/HttpMemcModule&lt;/a&gt;&lt;br&gt;&lt;br&gt;Project page: &lt;a target=&quot;_blank&quot; title=&quot;External link to http://github.com/agentzh/memc-nginx-module&quot; href=&quot;http://github.com/agentzh/memc-nginx-module&quot; class=&quot;externalLink&quot;&gt;http://github.com/agentzh/memc-nginx-module&lt;/a&gt;&lt;br&gt;&lt;br&gt;When used in conjunction with &lt;a tiddlylink=&quot;LuaNginxModule&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#LuaNginxModule&quot; href=&quot;null#LuaNginxModule&quot; class=&quot;externalLink null&quot;&gt;LuaNginxModule&lt;/a&gt;, it is recommended to use &lt;a tiddlylink=&quot;LuaRestyMemcachedLibrary&quot; refresh=&quot;link&quot; target=&quot;_blank&quot; title=&quot;External link to null#LuaRestyMemcachedLibrary&quot; href=&quot;null#LuaRestyMemcachedLibrary&quot; class=&quot;externalLink null&quot;&gt;LuaRestyMemcachedLibrary&lt;/a&gt; instead of this one, since it is more flexible and more memory-efficient.&lt;br&gt;</description>
<link>null#MemcNginxModule</link>
<pubDate>Thu, 13 Sep 2012 17:56:00 GMT</pubDate>

</item>
</channel>
</rss>