Compare commits

..

45 Commits

Author SHA1 Message Date
d996a90c14 added a .gitattributes file to correct GitHub's language tag. 2015-11-23 23:07:39 +08:00
584c1a7e12 bumped version to 1.9.3.2. 2015-11-23 19:21:39 +08:00
3882d2572e upgraded tests to reflect recent changes. 2015-11-11 22:11:32 +08:00
ce64259d66 bumped version to 1.9.3.2 RC3. 2015-11-11 22:10:42 +08:00
9b439dde0e upgraded ngx_lua to 0.9.19. 2015-11-11 17:50:57 +08:00
ed8b6996e9 README-win32: more additions. 2015-11-05 21:11:30 +08:00
5fc5745de0 package-win32.sh: ensure that we copy the COPYRIGHT file over to the Win32 binary package. 2015-11-05 20:51:35 +08:00
d55f45c7ff upgraded ngx_iconv to 0.13. 2015-11-05 20:44:48 +08:00
cba6fbd864 upgraded lua-redis-parser to 0.12. 2015-11-05 20:43:23 +08:00
caea3438eb ensure that we have all the copyright notices attached. 2015-11-05 20:42:02 +08:00
cde439a55a bumped version to 1.9.3.2rc2. 2015-11-05 19:17:21 +08:00
38abb277b5 package-win32.sh: ensure that we bundle the libgcc_s_dw2-1.dll file from MinGW. thanks Anton Heryanto for the report. 2015-11-05 19:17:02 +08:00
1c106bf487 updated tests to reflect recent changes. 2015-11-04 23:11:16 +08:00
3cacb62a10 upgraded ngx_lua to 0.9.18. 2015-11-04 22:47:04 +08:00
4374e25548 upgraded lua-cjson to 2.1.0.3. 2015-11-04 22:39:02 +08:00
0e95be39c1 upgraded lua-rds-parser to 0.06. 2015-11-04 21:55:41 +08:00
d68403407d upgraded lua-redis-parser to 0.11. 2015-11-04 21:54:49 +08:00
f5329c7781 upgraded ngx_rds_csv to 0.07. 2015-11-04 21:48:45 +08:00
3ac11ef73c upgraded ngx_headers_more to 0.28. 2015-11-04 21:46:27 +08:00
5db4e19482 doc: README-win32: added a TODO section and also mentioned the build-win32.sh and package-win32.sh scripts. 2015-11-04 21:30:51 +08:00
fa3af6cdf8 README-win32: typo fix from imweijh. 2015-11-04 21:25:42 +08:00
828a7eec41 README-win32.md: documented the "nginx -s reload" and "ngx -s reopen" too. 2015-11-02 16:33:57 +08:00
1f4045ef2c More MSYS/MinGW love.
* upgraded ngx_lua to 0.9.18rc1 to support Win32 LuaJIT DLL.
* upgraded lua-redis-parser to 0.11rc1 for better Win32 support.
* upgraded lua-rds-parser to 0.06rc2 for better Win32 support.
* upgraded ngx_rds_csv to 0.07rc1  for better Win32 support.
* upgraded lua-resty-cli to 0.04rc1 for better Win32 support.
* upgraded lua-resty-core to 0.1.2.
* applied a patch to LuaJIT to add "!/lualib/" to the default Lua
  package search paths.
* upgraded lua-cjson to 2.1.0.3rc2 for better Win32 support and
  a suppressed gcc warning.
* use OpenResty's nginx tarballs extracted directly from the official nginx
  code repos, because we need the win32 support which is excluded in the
  official nginx release tarballs. Our nginx release tarballs are
  generated by the util/package-nginx.sh script.
* added the util/package-win32.sh script to generate the Win32 OpenResty
  binary distribution file.
* applied a patch to always enable C compiler feature tests in nginx's
  own build system because the MinGW gcc compiler on Win32 is also
  powerful enough to support advanced features like variadic macros.
* added document README-win32.
* util/dist-check: do a partial uninstallation before installing
  anything new.
* added util/build-win32.sh to build OpenResty on Win32 using the
  MinGW/MSYS toolchain.
* ./configure: added support for building on Win32 using the MinGW/MSYS
  toolchain.
2015-11-02 15:41:50 +08:00
6a17d2c784 bugfix: ./configure --prefix=PATH did not work when PATH is relative. also added experimental support for the MinGW MSYS environment on Win32. 2015-10-29 21:36:27 +08:00
6624c48881 updated tests to reflect recent changes. 2015-10-29 20:16:19 +08:00
7f15701e76 bumped version to 1.9.3.2rc1. 2015-10-28 16:45:25 +08:00
1220e284aa upgraded LuaJIT to v2.1-20151028. 2015-10-28 16:45:09 +08:00
d831e27995 upgraded lua-resty-redis to 0.21. 2015-10-28 16:35:09 +08:00
033b2d88ff upgraded ngx_iconv to 0.12. 2015-10-28 16:30:08 +08:00
622ddd7bb0 upgraded ngx_http_headers_more_module to 0.27. 2015-10-28 16:20:55 +08:00
3e94b37750 upgraded ngx_http_lua_upstream_module to 0.04. 2015-10-28 16:16:08 +08:00
2d0119084e upgraded ngx_lua to 0.9.17. 2015-10-28 16:12:59 +08:00
b19b53d6cc bumped version to 1.9.3.1. 2015-08-12 11:24:09 +08:00
04da1876f0 bumped version to 1.9.3.1rc1. 2015-07-29 20:31:09 +08:00
e82486be60 updated the tests to reflect recent changes. 2015-07-16 11:47:53 +08:00
f84e035e45 upgraded the nginx core to 1.9.3. 2015-07-16 11:45:34 +08:00
c02caa3587 bugfix: ./configure --help: fixed the usage text for the --with-debug option. thanks Kipras Mancevičius for the report. 2015-07-15 23:50:23 +08:00
24eed036c5 Merge branch 'master' of github.com:openresty/ngx_openresty 2015-07-10 12:16:40 +08:00
87c988e4ba bugfix: link failures with openssl might happen on 64-bit Mac OS X when the ./configure option --with-pcre=PATH was used and the openssl source was recent enough. thanks grasses for the report in #3. 2015-07-10 12:16:06 +08:00
46881fd2dc upgraded ngx_postgres to 1.0rc7. 2015-07-08 21:12:26 +08:00
4907d14700 fixed a compilation error when both the dtrace static probes and --with-threads are specified. 2015-07-08 20:53:55 +08:00
60e72cbf82 updated the test suite to reflect recent changes; also bumped version to 1.9.2.1 RC1. 2015-07-08 19:53:31 +08:00
97a05513eb removed the --with-rtsig_module option from the usage info of ./configure. 2015-07-04 15:27:26 +08:00
7d0443d5d7 ./configure: added --with-threads to usage; also added --with-threads test to dist-check. 2015-07-03 23:23:41 +08:00
ce65738299 upgraded the nginx core to 1.9.2. 2015-07-03 20:04:13 +08:00
46 changed files with 6603 additions and 908 deletions

1
.gitattributes vendored Normal file
View File

@ -0,0 +1 @@
*.t linguist-language=Text

237
COPYRIGHT Normal file
View File

@ -0,0 +1,237 @@
Copyright (C) 2009-2015, by Yichun "agentzh" Zhang, CloudFlare Inc.
Copyright (C) 2009-2014, by Xiaozhe Wang (chaoslawful) <chaoslawful@gmail.com>.
Copyright (C) 2010-2014, by FRiCKLE Piotr Sikora <info@frickle.com>.
Copyright (C) 2015, by Shuxin Yang.
Copyright (c) 2010, 2011, Jiale "calio" Zhi <vipcalio@gmail.com>.
Copyright (C) Guanlan Dai
All rights reserved.
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Copyright (c) 2010, Marcus Clyne, Simpl (simpl.it)
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
* Neither the name of the organization (Simpl) nor the
names of its contributors may be used to endorse or promote products
derived from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL MARCUS CLYNE OR SIMPL BE LIABLE FOR ANY
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-----------------------------------------------------------------------------
Copyright (C) 2002-2015 Igor Sysoev
Copyright (C) 2011-2015 Nginx, Inc.
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
are met:
1. Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
-----------------------------------------------------------------------------
NGINX License
Copyright (C) 2002-2009 Igor Sysoev
Copyright (C) 2009-2013 Sergey A. Osokin
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
are met:
1. Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY AUTHOR AND CONTRIBUTORS ``AS IS'' AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
ARE DISCLAIMED. IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
-----------------------------------------------------------------------------
LuaJIT -- a Just-In-Time Compiler for Lua. http://luajit.org/
Copyright (C) 2005-2015 Mike Pall. All rights reserved.
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
[ MIT license: http://www.opensource.org/licenses/mit-license.php ]
-----------------------------------------------------------------------------
Lua License
Copyright (C) 1994-2012 Lua.org, PUC-Rio.
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
-----------------------------------------------------------------------------
Lua-cjson License
Copyright (c) 2010-2012 Mark Pulford <mark@kyne.com.au>
Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
"Software"), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:
The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-----------------------------------------------------------------------------
SHA-1 implementation in NDK
Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
All rights reserved.
This package is an SSL implementation written
by Eric Young (eay@cryptsoft.com).
The implementation was written so as to conform with Netscapes SSL.
This library is free for commercial and non-commercial use as long as
the following conditions are aheared to. The following conditions
apply to all code found in this distribution, be it the RC4, RSA,
lhash, DES, etc., code; not just the SSL code. The SSL documentation
included with this distribution is covered by the same copyright terms
except that the holder is Tim Hudson (tjh@cryptsoft.com).
Copyright remains Eric Young's, and as such any Copyright notices in
the code are not to be removed.
If this package is used in a product, Eric Young should be given attribution
as the author of the parts of the library used.
This can be in the form of a textual message at program startup or
in documentation (online or textual) provided with the package.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
are met:
1. Redistributions of source code must retain the copyright
notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
3. All advertising materials mentioning features or use of this software
must display the following acknowledgement:
"This product includes cryptographic software written by
Eric Young (eay@cryptsoft.com)"
The word 'cryptographic' can be left out if the rouines from the library
being used are not cryptographic related :-).
4. If you include any Windows specific code (or a derivative thereof) from
the apps directory (application code) you must include an acknowledgement:
"This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
The licence and distribution terms for any publically available version or
derivative of this code cannot be changed. i.e. this code cannot simply be
copied and put under another distribution licence

View File

@ -44,7 +44,9 @@ https://github.com/openresty/ngx_openresty
To reproduce the bundle tarball, just do To reproduce the bundle tarball, just do
make ```bash
make
```
at the top of the bundle source tree. at the top of the bundle source tree.

182
doc/README-win32.md Normal file
View File

@ -0,0 +1,182 @@
Name
====
README-win32 - README for the Windows 32-bit build of OpenResty
Description
===========
The binary distributions of OpenResty can be downloaded from the following web page:
https://openresty.org/#Download
To start the NGINX server of the nginx server of the Win32 binary distribution of OpenResty:
```bash
start nginx
```
You can also specify the `-p PATH/` option to override the default server prefix, as in
```bash
cd /path/to/my/openresty/app/
start nginx -p $PWD
```
Then you can use the `tasklist` command to check the nginx processes running in the background:
```console
C:\> tasklist /fi "imagename eq nginx.exe"
Image Name PID Session Name Session# Mem Usage
========================= ======== ================ =========== ============
nginx.exe 4616 Console 1 7,412 K
nginx.exe 5836 Console 1 7,800 K
```
One of the two processes is the master process while the other is the worker.
If you are using the MSYS bash instead of the `cmd.exe` console, then you should replace the `/fi` option
with `-fi` in the command above instead.
You can quickly shut down the server like this:
```bash
nginx -s stop
```
or gracefully shut it down like this:
```bash
nginx -s quit
```
You can also forcibly kill the nginx processes via their PIDs with `taskkill`, as in
```console
C:\> taskkill /pid 5488 /F
```
where the PID (5488 in this example) can be found via the aforementioned `tasklist` command.
Again, you should use the form `-pid` and `-F` for the options if you are in an MSYS bash
session.
Similarly, you can use the `nginx -s reload` command to reload nginx configurations without
stopping the server. And you can use `nginx -s reopen` to instruct nginx to re-open
all the log files.
You can run the `resty` script like this:
```console
C:\> resty -e "ngx.say('Hello, OpenResty!')"
Hello, OpenResty!
```
The `resty` command-line utility requires a Perl interpreter installed in your
system and visible to your PATH environment. Any perl distributions should
work, including StrawberryPerl, ActivePerl, and MSYS perl (the former two are
recommended though).
Debugging
=========
Debug symbosl are enabled even in release builds. So that when things go very wrong,
one can still debug things with tools like MSYS GDB.
Inclusion of debug symbols make the binary files (`.exe` and `.dll` files) much larger,
but it generally will not load into memory during normal execution on a modern operating
system.
Caveats
=======
The Win32 port of the NGINX core supports the good old `select` IO multiplexing mechanism
only.
The I/O Completion Ports (IOCP) feature is *not* supported (yet). So do not use this build
for production environments with very high concurrency levels.
This Win32 build of OpenResty is mainly for developers who want to develop their applications
in native Windows environment (though they eventually push the finished work onto a Linux or *BSD box, most of the time).
TODO
====
* Add support for more than one NGINX worker processes.
* Add support for concurrent connections more than 1024.
* Switch to the Microsoft Visual Studio compiler toolchain for better performance and easier binary
package redistribution.
* Bundle StrawberryPerl to make command-line utilities like `resty` work out of the box (without
manually installing a Perl).
* Deliver an alternative Win32 binary package built with best debuggin capabilities (like enabling
NGINX debugging logs, disabling C compiler optimizations, and enabling all the assertions and checks).
* Deliver binary packages for 64-bit Windows (Win64).
Details About The Building Process
==================================
Usually you do not need to worry about how the Win32 binaries were built on the maintainers''
side. But if you do, please read on.
The Win32 build of OpenResty is currently built via the MinGW/MSYS toolchain, including
MinGW gcc 4.8.1, MSYS perl, MSYS bash, MSYS make, and etc. Basically, it is currently built via
the following cmmands:
```bash
mkdir -p objs/lib || exit 1
cd objs/lib || exit 1
ls ../../..
tar -xf ../../../openssl-1.0.2d.tar.gz
tar -xf ../../../zlib-1.2.8.tar.gz
tar -xf ../../../pcre-8.37.tar.gz
cd ../..
./configure --with-cc=gcc \
--prefix= \
--with-cc-opt='-DFD_SETSIZE=1024' \
--with-select_module \
--with-ipv6 \
--sbin-path=nginx.exe \
--with-pcre-jit \
--with-luajit-xcflags="-DLUAJIT_NUMMODE=2 -DLUAJIT_ENABLE_LUA52COMPAT" \
--with-pcre=objs/lib/pcre-8.37 \
--with-zlib=objs/lib/zlib-1.2.8 \
--with-openssl=objs/lib/openssl-1.0.2d \
-j5
make
make install
```
where the dependency library source tarballs for OpenSSL, Zlib, and PCRE are downloaded
from their official sites, respectively.
We automate these commands in a dedicated shell script named [build-win32.sh](https://github.com/openresty/ngx_openresty/blob/master/util/build-win32.sh).
Furthermore, we automate the packaging process of the resulting binaries and supporting files
with this [package-win32.sh](https://github.com/openresty/ngx_openresty/blob/master/util/package-win32.sh)
script.
Usually you can just download and use the binary distribution of OpenResty without
installing the build toolchain.
Author
======
Yichun "agentzh" Zhang <agentzh@gmail.com>, CloudFlare Inc.
Copyright & License
===================
This module is licensed under the BSD license.
Copyright (C) 2015, by Yichun "agentzh" Zhang (章亦春) <agentzh@gmail.com>, CloudFlare Inc.
All rights reserved.
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

View File

@ -0,0 +1,14 @@
--- LuaJIT-2.1-20151028/src/luaconf.h 2015-10-12 20:28:56.000000000 +0800
+++ LuaJIT-2.1-20151028.patched/src/luaconf.h 2015-11-01 20:31:28.358507706 +0800
@@ -21,9 +21,9 @@
#define LUA_LDIR "!\\lua\\"
#define LUA_CDIR "!\\"
#define LUA_PATH_DEFAULT \
- ".\\?.lua;" LUA_LDIR"?.lua;" LUA_LDIR"?\\init.lua;"
+ ".\\?.lua;" "!\\lualib\\?.lua;" LUA_LDIR"?.lua;" LUA_LDIR"?\\init.lua;"
#define LUA_CPATH_DEFAULT \
- ".\\?.dll;" LUA_CDIR"?.dll;" LUA_CDIR"loadall.dll"
+ ".\\?.dll;" "!\\lualib\\?.so;" LUA_CDIR"?.dll;" LUA_CDIR"loadall.dll"
#else
/*
** Note to distribution maintainers: do NOT patch the following lines!

View File

@ -0,0 +1,19 @@
# HG changeset patch
# User Yichun Zhang <agentzh@gmail.com>
# Date 1383598130 28800
# Node ID f64218e1ac963337d84092536f588b8e0d99bbaa
# Parent dea321e5c0216efccbb23e84bbce7cf3e28f130c
Cache: gracefully exit the cache manager process.
diff -r dea321e5c021 -r f64218e1ac96 src/os/unix/ngx_process_cycle.c
--- a/src/os/unix/ngx_process_cycle.c Thu Oct 31 18:23:49 2013 +0400
+++ b/src/os/unix/ngx_process_cycle.c Mon Nov 04 12:48:50 2013 -0800
@@ -1335,7 +1335,7 @@
if (ngx_terminate || ngx_quit) {
ngx_log_error(NGX_LOG_NOTICE, cycle->log, 0, "exiting");
- exit(0);
+ ngx_worker_process_exit(cycle);
}
if (ngx_reopen) {

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,11 @@
--- nginx-1.9.2/src/http/ngx_http_request.c 2013-05-06 03:26:50.000000000 -0700
+++ nginx-1.9.2-patched/src/http/ngx_http_request.c 2013-06-11 12:59:48.008321688 -0700
@@ -1951,7 +1951,7 @@
ngx_int_t rc;
ngx_http_connection_t *hc;
ngx_http_core_loc_conf_t *clcf;
- ngx_http_core_srv_conf_t *cscf;
+ ngx_http_core_srv_conf_t *cscf = NULL;
hc = r->http_connection;

View File

@ -0,0 +1,20 @@
# HG changeset patch
# User Yichun Zhang <agentzh@gmail.com>
# Date 1412276417 25200
# Thu Oct 02 12:00:17 2014 -0700
# Node ID 4032b992f23b054c1a2cfb0be879330d2c6708e5
# Parent 1ff0f68d9376e3d184d65814a6372856bf65cfcd
Hash: buffer overflow might happen when exceeding the pre-configured limits.
diff -r 1ff0f68d9376 -r 4032b992f23b src/core/ngx_hash.c
--- a/src/core/ngx_hash.c Tue Sep 30 15:50:28 2014 -0700
+++ b/src/core/ngx_hash.c Thu Oct 02 12:00:17 2014 -0700
@@ -312,6 +312,8 @@ ngx_hash_init(ngx_hash_init_t *hinit, ng
continue;
}
+ size--;
+
ngx_log_error(NGX_LOG_WARN, hinit->pool->log, 0,
"could not build optimal %s, you should increase "
"either %s_max_size: %i or %s_bucket_size: %i; "

View File

@ -0,0 +1,13 @@
--- nginx-1.9.2/src/core/ngx_log.h 2013-10-08 05:07:14.000000000 -0700
+++ nginx-1.9.2-patched/src/core/ngx_log.h 2013-12-05 20:35:35.996236720 -0800
@@ -64,7 +64,9 @@ struct ngx_log_s {
};
-#define NGX_MAX_ERROR_STR 2048
+#ifndef NGX_MAX_ERROR_STR
+#define NGX_MAX_ERROR_STR 4096
+#endif
/*********************************/

View File

@ -0,0 +1,115 @@
--- nginx-1.9.2/src/http/modules/ngx_http_log_module.c 2011-11-01 21:24:50.000000000 +0800
+++ nginx-1.9.2-patched/src/http/modules/ngx_http_log_module.c 2011-11-10 16:17:29.599039534 +0800
@@ -61,6 +61,8 @@
time_t open_file_cache_valid;
ngx_uint_t open_file_cache_min_uses;
+ ngx_flag_t escape_non_ascii;
+
ngx_uint_t off; /* unsigned off:1 */
} ngx_http_log_loc_conf_t;
@@ -104,7 +106,8 @@
uintptr_t data);
static u_char *ngx_http_log_variable(ngx_http_request_t *r, u_char *buf,
ngx_http_log_op_t *op);
-static uintptr_t ngx_http_log_escape(u_char *dst, u_char *src, size_t size);
+static uintptr_t ngx_http_log_escape(ngx_http_log_loc_conf_t *lcf, u_char *dst,
+ u_char *src, size_t size);
static void *ngx_http_log_create_main_conf(ngx_conf_t *cf);
@@ -146,6 +149,13 @@
0,
NULL },
+ { ngx_string("log_escape_non_ascii"),
+ NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_FLAG,
+ ngx_conf_set_flag_slot,
+ NGX_HTTP_LOC_CONF_OFFSET,
+ offsetof(ngx_http_log_loc_conf_t, escape_non_ascii),
+ NULL },
+
ngx_null_command
};
@@ -637,6 +647,7 @@
ngx_http_log_variable_getlen(ngx_http_request_t *r, uintptr_t data)
{
uintptr_t len;
+ ngx_http_log_loc_conf_t *lcf;
ngx_http_variable_value_t *value;
value = ngx_http_get_indexed_variable(r, data);
@@ -645,7 +656,9 @@
return 1;
}
- len = ngx_http_log_escape(NULL, value->data, value->len);
+ lcf = ngx_http_get_module_loc_conf(r, ngx_http_log_module);
+
+ len = ngx_http_log_escape(lcf, NULL, value->data, value->len);
value->escape = len ? 1 : 0;
@@ -656,6 +669,7 @@
static u_char *
ngx_http_log_variable(ngx_http_request_t *r, u_char *buf, ngx_http_log_op_t *op)
{
+ ngx_http_log_loc_conf_t *lcf;
ngx_http_variable_value_t *value;
value = ngx_http_get_indexed_variable(r, op->data);
@@ -669,16 +683,18 @@
return ngx_cpymem(buf, value->data, value->len);
} else {
- return (u_char *) ngx_http_log_escape(buf, value->data, value->len);
+ lcf = ngx_http_get_module_loc_conf(r, ngx_http_log_module);
+ return (u_char *) ngx_http_log_escape(lcf, buf, value->data, value->len);
}
}
static uintptr_t
-ngx_http_log_escape(u_char *dst, u_char *src, size_t size)
+ngx_http_log_escape(ngx_http_log_loc_conf_t *lcf, u_char *dst, u_char *src,
+ size_t size)
{
- ngx_uint_t n;
- static u_char hex[] = "0123456789ABCDEF";
+ ngx_uint_t n;
+ static u_char hex[] = "0123456789ABCDEF";
static uint32_t escape[] = {
0xffffffff, /* 1111 1111 1111 1111 1111 1111 1111 1111 */
@@ -698,6 +714,12 @@
0xffffffff, /* 1111 1111 1111 1111 1111 1111 1111 1111 */
};
+ if (lcf->escape_non_ascii) {
+ ngx_memset(&escape[4], 0xff, sizeof(uint32_t) * 4);
+
+ } else {
+ ngx_memzero(&escape[4], sizeof(uint32_t) * 4);
+ }
if (dst == NULL) {
@@ -781,6 +803,7 @@
}
conf->open_file_cache = NGX_CONF_UNSET_PTR;
+ conf->escape_non_ascii = NGX_CONF_UNSET;
return conf;
}
@@ -796,6 +819,8 @@
ngx_http_log_fmt_t *fmt;
ngx_http_log_main_conf_t *lmcf;
+ ngx_conf_merge_value(conf->escape_non_ascii, prev->escape_non_ascii, 1);
+
if (conf->open_file_cache == NGX_CONF_UNSET_PTR) {
conf->open_file_cache = prev->open_file_cache;

View File

@ -0,0 +1,36 @@
diff -urp nginx-1.9.2/auto/cc/clang nginx-1.9.2-patched/auto/cc/clang
--- nginx-1.9.2/auto/cc/clang 2014-03-04 03:39:24.000000000 -0800
+++ nginx-1.9.2-patched/auto/cc/clang 2014-03-13 20:54:26.241413360 -0700
@@ -89,7 +89,7 @@ CFLAGS="$CFLAGS -Wconditional-uninitiali
CFLAGS="$CFLAGS -Wno-unused-parameter"
# stop on warning
-CFLAGS="$CFLAGS -Werror"
+#CFLAGS="$CFLAGS -Werror"
# debug
CFLAGS="$CFLAGS -g"
diff -urp nginx-1.9.2/auto/cc/gcc nginx-1.9.2-patched/auto/cc/gcc
--- nginx-1.9.2/auto/cc/gcc 2014-03-04 03:39:24.000000000 -0800
+++ nginx-1.9.2-patched/auto/cc/gcc 2014-03-13 20:54:13.301355329 -0700
@@ -168,7 +168,7 @@ esac
# stop on warning
-CFLAGS="$CFLAGS -Werror"
+#CFLAGS="$CFLAGS -Werror"
# debug
CFLAGS="$CFLAGS -g"
diff -urp nginx-1.9.2/auto/cc/icc nginx-1.9.2-patched/auto/cc/icc
--- nginx-1.9.2/auto/cc/icc 2014-03-04 03:39:24.000000000 -0800
+++ nginx-1.9.2-patched/auto/cc/icc 2014-03-13 20:54:13.301355329 -0700
@@ -115,7 +115,7 @@ case "$NGX_ICC_VER" in
esac
# stop on warning
-CFLAGS="$CFLAGS -Werror"
+#CFLAGS="$CFLAGS -Werror"
# debug
CFLAGS="$CFLAGS -g"

View File

@ -0,0 +1,90 @@
--- nginx-1.9.2/src/http/ngx_http_core_module.c 2010-12-14 18:38:42.000000000 +0800
+++ nginx-1.9.2-patched/src/http/ngx_http_core_module.c 2011-01-30 19:24:34.956354518 +0800
@@ -57,6 +57,8 @@
void *conf);
static char *ngx_http_core_error_page(ngx_conf_t *cf, ngx_command_t *cmd,
void *conf);
+static char *ngx_http_core_no_error_pages(ngx_conf_t *cf, ngx_command_t *cmd,
+ void *conf);
static char *ngx_http_core_try_files(ngx_conf_t *cf, ngx_command_t *cmd,
void *conf);
static char *ngx_http_core_open_file_cache(ngx_conf_t *cf, ngx_command_t *cmd,
@@ -614,6 +616,14 @@
0,
NULL },
+ { ngx_string("no_error_pages"),
+ NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_HTTP_LIF_CONF
+ |NGX_CONF_NOARGS,
+ ngx_http_core_no_error_pages,
+ NGX_HTTP_LOC_CONF_OFFSET,
+ 0,
+ NULL },
+
{ ngx_string("try_files"),
NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_2MORE,
ngx_http_core_try_files,
@@ -3052,7 +3062,6 @@
* clcf->types = NULL;
* clcf->default_type = { 0, NULL };
* clcf->error_log = NULL;
- * clcf->error_pages = NULL;
* clcf->try_files = NULL;
* clcf->client_body_path = NULL;
* clcf->regex = NULL;
@@ -3062,6 +3071,7 @@
* clcf->gzip_proxied = 0;
*/
+ clcf->error_pages = NGX_CONF_UNSET_PTR;
clcf->client_max_body_size = NGX_CONF_UNSET;
clcf->client_body_buffer_size = NGX_CONF_UNSET_SIZE;
clcf->client_body_timeout = NGX_CONF_UNSET_MSEC;
@@ -3250,9 +3260,7 @@
}
}
- if (conf->error_pages == NULL && prev->error_pages) {
- conf->error_pages = prev->error_pages;
- }
+ ngx_conf_merge_ptr_value(conf->error_pages, prev->error_pages, NULL);
ngx_conf_merge_str_value(conf->default_type,
prev->default_type, "text/plain");
@@ -3988,6 +3996,10 @@
ngx_http_compile_complex_value_t ccv;
if (clcf->error_pages == NULL) {
+ return "conflicts with \"no_error_pages\"";
+ }
+
+ if (clcf->error_pages == NGX_CONF_UNSET_PTR) {
clcf->error_pages = ngx_array_create(cf->pool, 4,
sizeof(ngx_http_err_page_t));
if (clcf->error_pages == NULL) {
@@ -4095,6 +4107,25 @@
static char *
+ngx_http_core_no_error_pages(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
+{
+ ngx_http_core_loc_conf_t *clcf = conf;
+
+ if (clcf->error_pages == NULL) {
+ return "is duplicate";
+ }
+
+ if (clcf->error_pages != NGX_CONF_UNSET_PTR) {
+ return "conflicts with \"error_page\"";
+ }
+
+ clcf->error_pages = NULL;
+
+ return NGX_CONF_OK;
+}
+
+
+static char *
ngx_http_core_try_files(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
{
ngx_http_core_loc_conf_t *clcf = conf;

View File

@ -0,0 +1,585 @@
diff --minimal '--exclude=*.swp' '--exclude=*~' -up nginx-1.9.2/src/core/nginx.h nginx-1.9.2-patched/src/core/nginx.h
--- nginx-1.9.2/src/core/nginx.h 2014-07-08 06:22:39.000000000 -0700
+++ nginx-1.9.2-patched/src/core/nginx.h 2014-07-13 19:21:54.117099631 -0700
@@ -10,7 +10,7 @@
#define nginx_version 1009002
#define NGINX_VERSION "1.9.2"
-#define NGINX_VER "openresty/" NGINX_VERSION ".unknown"
+#define NGINX_VER "openresty/" NGINX_VERSION ".unknown (no pool)"
#ifdef NGX_BUILD
diff --minimal '--exclude=*.swp' '--exclude=*~' -up nginx-1.9.2/src/core/ngx_array.c nginx-1.9.2-patched/src/core/ngx_array.c
--- nginx-1.9.2/src/core/ngx_array.c 2014-07-08 06:22:39.000000000 -0700
+++ nginx-1.9.2-patched/src/core/ngx_array.c 2014-07-13 19:21:54.117099631 -0700
@@ -30,26 +30,30 @@ ngx_array_create(ngx_pool_t *p, ngx_uint
void
ngx_array_destroy(ngx_array_t *a)
{
- ngx_pool_t *p;
+ ngx_pool_t *p;
+ ngx_array_link_t *link;
p = a->pool;
- if ((u_char *) a->elts + a->size * a->nalloc == p->d.last) {
- p->d.last -= a->size * a->nalloc;
+ if (a->elts) {
+ ngx_pfree(p, a->elts);
}
- if ((u_char *) a + sizeof(ngx_array_t) == p->d.last) {
- p->d.last = (u_char *) a;
+ for (link = a->old_elts; link; link = link->next) {
+ ngx_pfree(p, link->elts);
}
+
+ ngx_pfree(p, a);
}
void *
ngx_array_push(ngx_array_t *a)
{
- void *elt, *new;
- size_t size;
- ngx_pool_t *p;
+ void *elt, *new;
+ size_t size;
+ ngx_pool_t *p;
+ ngx_array_link_t *link;
if (a->nelts == a->nalloc) {
@@ -59,29 +63,27 @@ ngx_array_push(ngx_array_t *a)
p = a->pool;
- if ((u_char *) a->elts + size == p->d.last
- && p->d.last + a->size <= p->d.end)
- {
- /*
- * the array allocation is the last in the pool
- * and there is space for new allocation
- */
-
- p->d.last += a->size;
- a->nalloc++;
+ /* allocate a new array */
- } else {
- /* allocate a new array */
+ new = ngx_palloc(p, 2 * size);
+ if (new == NULL) {
+ return NULL;
+ }
- new = ngx_palloc(p, 2 * size);
- if (new == NULL) {
- return NULL;
- }
+ ngx_memcpy(new, a->elts, size);
- ngx_memcpy(new, a->elts, size);
- a->elts = new;
- a->nalloc *= 2;
+ link = ngx_palloc(p, sizeof(ngx_array_link_t));
+ if (link == NULL) {
+ ngx_pfree(p, new);
+ return NULL;
}
+
+ link->next = a->old_elts;
+ link->elts = a->elts;
+ a->old_elts = link;
+
+ a->elts = new;
+ a->nalloc *= 2;
}
elt = (u_char *) a->elts + a->size * a->nelts;
@@ -95,11 +97,10 @@ void *
ngx_array_push_n(ngx_array_t *a, ngx_uint_t n)
{
void *elt, *new;
- size_t size;
ngx_uint_t nalloc;
ngx_pool_t *p;
- size = n * a->size;
+ ngx_array_link_t *link;
if (a->nelts + n > a->nalloc) {
@@ -107,31 +108,27 @@ ngx_array_push_n(ngx_array_t *a, ngx_uin
p = a->pool;
- if ((u_char *) a->elts + a->size * a->nalloc == p->d.last
- && p->d.last + size <= p->d.end)
- {
- /*
- * the array allocation is the last in the pool
- * and there is space for new allocation
- */
+ nalloc = 2 * ((n >= a->nalloc) ? n : a->nalloc);
- p->d.last += size;
- a->nalloc += n;
+ new = ngx_palloc(p, nalloc * a->size);
+ if (new == NULL) {
+ return NULL;
+ }
- } else {
- /* allocate a new array */
+ ngx_memcpy(new, a->elts, a->nelts * a->size);
- nalloc = 2 * ((n >= a->nalloc) ? n : a->nalloc);
+ link = ngx_palloc(p, sizeof(ngx_array_link_t));
+ if (link == NULL) {
+ ngx_pfree(p, new);
+ return NULL;
+ }
- new = ngx_palloc(p, nalloc * a->size);
- if (new == NULL) {
- return NULL;
- }
+ link->next = a->old_elts;
+ link->elts = a->elts;
+ a->old_elts = link;
- ngx_memcpy(new, a->elts, a->nelts * a->size);
- a->elts = new;
- a->nalloc = nalloc;
- }
+ a->elts = new;
+ a->nalloc = nalloc;
}
elt = (u_char *) a->elts + a->size * a->nelts;
diff --minimal '--exclude=*.swp' '--exclude=*~' -up nginx-1.9.2/src/core/ngx_array.h nginx-1.9.2-patched/src/core/ngx_array.h
--- nginx-1.9.2/src/core/ngx_array.h 2014-07-08 06:22:39.000000000 -0700
+++ nginx-1.9.2-patched/src/core/ngx_array.h 2014-07-13 19:21:54.118099637 -0700
@@ -13,12 +13,23 @@
#include <ngx_core.h>
+typedef struct ngx_array_link_s ngx_array_link_t;
+
+
+struct ngx_array_link_s {
+ void *elts;
+ ngx_array_link_t *next;
+};
+
+
typedef struct {
void *elts;
ngx_uint_t nelts;
size_t size;
ngx_uint_t nalloc;
ngx_pool_t *pool;
+
+ ngx_array_link_t *old_elts;
} ngx_array_t;
@@ -40,6 +51,7 @@ ngx_array_init(ngx_array_t *array, ngx_p
array->size = size;
array->nalloc = n;
array->pool = pool;
+ array->old_elts = NULL;
array->elts = ngx_palloc(pool, n * size);
if (array->elts == NULL) {
diff --minimal '--exclude=*.swp' '--exclude=*~' -up nginx-1.9.2/src/core/ngx_palloc.c nginx-1.9.2-patched/src/core/ngx_palloc.c
--- nginx-1.9.2/src/core/ngx_palloc.c 2014-07-08 06:22:39.000000000 -0700
+++ nginx-1.9.2-patched/src/core/ngx_palloc.c 2014-07-13 20:04:41.786419098 -0700
@@ -9,32 +9,26 @@
#include <ngx_core.h>
-static void *ngx_palloc_block(ngx_pool_t *pool, size_t size);
-static void *ngx_palloc_large(ngx_pool_t *pool, size_t size);
+static void * ngx_malloc(ngx_pool_t *pool, size_t size);
ngx_pool_t *
ngx_create_pool(size_t size, ngx_log_t *log)
{
- ngx_pool_t *p;
+ ngx_pool_t *p;
- p = ngx_memalign(NGX_POOL_ALIGNMENT, size, log);
+ size = sizeof(ngx_pool_t);
+ p = ngx_alloc(size, log);
if (p == NULL) {
return NULL;
}
- p->d.last = (u_char *) p + sizeof(ngx_pool_t);
- p->d.end = (u_char *) p + size;
- p->d.next = NULL;
- p->d.failed = 0;
+ ngx_memzero(p, size);
size = size - sizeof(ngx_pool_t);
p->max = (size < NGX_MAX_ALLOC_FROM_POOL) ? size : NGX_MAX_ALLOC_FROM_POOL;
p->current = p;
- p->chain = NULL;
- p->large = NULL;
- p->cleanup = NULL;
p->log = log;
return p;
@@ -44,8 +38,7 @@ ngx_create_pool(size_t size, ngx_log_t *
void
ngx_destroy_pool(ngx_pool_t *pool)
{
- ngx_pool_t *p, *n;
- ngx_pool_large_t *l;
+ ngx_pool_data_t *d, *n;
ngx_pool_cleanup_t *c;
for (c = pool->cleanup; c; c = c->next) {
@@ -56,13 +49,9 @@ ngx_destroy_pool(ngx_pool_t *pool)
}
}
- for (l = pool->large; l; l = l->next) {
-
- ngx_log_debug1(NGX_LOG_DEBUG_ALLOC, pool->log, 0, "free: %p", l->alloc);
-
- if (l->alloc) {
- ngx_free(l->alloc);
- }
+ if (pool->d == NULL) {
+ ngx_free(pool);
+ return;
}
#if (NGX_DEBUG)
@@ -72,9 +61,9 @@ ngx_destroy_pool(ngx_pool_t *pool)
* so we cannot use this log while free()ing the pool
*/
- for (p = pool, n = pool->d.next; /* void */; p = n, n = n->d.next) {
+ for (d = pool->d, n = d->next; ; d = n, n = n->next) {
ngx_log_debug2(NGX_LOG_DEBUG_ALLOC, pool->log, 0,
- "free: %p, unused: %uz", p, p->d.end - p->d.last);
+ "free: %p, unused: %d", d, 0);
if (n == NULL) {
break;
@@ -83,170 +72,82 @@ ngx_destroy_pool(ngx_pool_t *pool)
#endif
- for (p = pool, n = pool->d.next; /* void */; p = n, n = n->d.next) {
- ngx_free(p);
+ for (d = pool->d, n = d->next; ; d = n, n = n->next) {
+ ngx_free(d->alloc);
+ ngx_free(d);
if (n == NULL) {
break;
}
}
+
+ pool->d = NULL;
+ ngx_free(pool);
}
void
ngx_reset_pool(ngx_pool_t *pool)
{
- ngx_pool_t *p;
- ngx_pool_large_t *l;
+ ngx_pool_data_t *d, *n;
+ ngx_pool_data_t *saved = NULL;
- for (l = pool->large; l; l = l->next) {
- if (l->alloc) {
- ngx_free(l->alloc);
+ if (pool->d) {
+ for (d = pool->d, n = d->next; ; d = n, n = n->next) {
+ if (d->alloc == pool->log) {
+ saved = d;
+ continue;
+ }
+
+ ngx_free(d->alloc);
+ ngx_free(d);
+
+ if (n == NULL) {
+ break;
+ }
}
- }
- for (p = pool; p; p = p->d.next) {
- p->d.last = (u_char *) p + sizeof(ngx_pool_t);
- p->d.failed = 0;
+ pool->d = saved;
+ pool->current = pool;
+ pool->chain = NULL;
}
-
- pool->current = pool;
- pool->chain = NULL;
- pool->large = NULL;
}
void *
ngx_palloc(ngx_pool_t *pool, size_t size)
{
- u_char *m;
- ngx_pool_t *p;
-
- if (size <= pool->max) {
-
- p = pool->current;
-
- do {
- m = ngx_align_ptr(p->d.last, NGX_ALIGNMENT);
-
- if ((size_t) (p->d.end - m) >= size) {
- p->d.last = m + size;
-
- return m;
- }
-
- p = p->d.next;
-
- } while (p);
-
- return ngx_palloc_block(pool, size);
- }
-
- return ngx_palloc_large(pool, size);
+ return ngx_malloc(pool, size);
}
void *
ngx_pnalloc(ngx_pool_t *pool, size_t size)
{
- u_char *m;
- ngx_pool_t *p;
-
- if (size <= pool->max) {
-
- p = pool->current;
-
- do {
- m = p->d.last;
-
- if ((size_t) (p->d.end - m) >= size) {
- p->d.last = m + size;
-
- return m;
- }
-
- p = p->d.next;
-
- } while (p);
-
- return ngx_palloc_block(pool, size);
- }
-
- return ngx_palloc_large(pool, size);
-}
-
-
-static void *
-ngx_palloc_block(ngx_pool_t *pool, size_t size)
-{
- u_char *m;
- size_t psize;
- ngx_pool_t *p, *new;
-
- psize = (size_t) (pool->d.end - (u_char *) pool);
-
- m = ngx_memalign(NGX_POOL_ALIGNMENT, psize, pool->log);
- if (m == NULL) {
- return NULL;
- }
-
- new = (ngx_pool_t *) m;
-
- new->d.end = m + psize;
- new->d.next = NULL;
- new->d.failed = 0;
-
- m += sizeof(ngx_pool_data_t);
- m = ngx_align_ptr(m, NGX_ALIGNMENT);
- new->d.last = m + size;
-
- for (p = pool->current; p->d.next; p = p->d.next) {
- if (p->d.failed++ > 4) {
- pool->current = p->d.next;
- }
- }
-
- p->d.next = new;
-
- return m;
+ return ngx_malloc(pool, size);
}
static void *
-ngx_palloc_large(ngx_pool_t *pool, size_t size)
+ngx_malloc(ngx_pool_t *pool, size_t size)
{
- void *p;
- ngx_uint_t n;
- ngx_pool_large_t *large;
+ void *p;
+ ngx_pool_data_t *d;
p = ngx_alloc(size, pool->log);
if (p == NULL) {
return NULL;
}
- n = 0;
-
- for (large = pool->large; large; large = large->next) {
- if (large->alloc == NULL) {
- large->alloc = p;
- return p;
- }
-
- if (n++ > 3) {
- break;
- }
- }
-
- large = ngx_palloc(pool, sizeof(ngx_pool_large_t));
- if (large == NULL) {
+ d = ngx_alloc(sizeof(ngx_pool_data_t), pool->log);
+ if (d == NULL){
ngx_free(p);
return NULL;
}
- large->alloc = p;
- large->next = pool->large;
- pool->large = large;
-
+ d->alloc = p;
+ d->next = pool->d;
+ pool->d = d;
return p;
}
@@ -255,38 +156,48 @@ void *
ngx_pmemalign(ngx_pool_t *pool, size_t size, size_t alignment)
{
void *p;
- ngx_pool_large_t *large;
+ ngx_pool_data_t *d;
p = ngx_memalign(alignment, size, pool->log);
if (p == NULL) {
return NULL;
}
- large = ngx_palloc(pool, sizeof(ngx_pool_large_t));
- if (large == NULL) {
+ d = ngx_alloc(sizeof(ngx_pool_data_t), pool->log);
+ if (d == NULL){
ngx_free(p);
return NULL;
}
- large->alloc = p;
- large->next = pool->large;
- pool->large = large;
-
+ d->alloc = p;
+ d->next = pool->d;
+ pool->d = d;
return p;
}
ngx_int_t
-ngx_pfree(ngx_pool_t *pool, void *p)
+ngx_pfree(ngx_pool_t *pool, void *data)
{
- ngx_pool_large_t *l;
+ ngx_pool_data_t *p, *d;
- for (l = pool->large; l; l = l->next) {
- if (p == l->alloc) {
- ngx_log_debug1(NGX_LOG_DEBUG_ALLOC, pool->log, 0,
- "free: %p", l->alloc);
- ngx_free(l->alloc);
- l->alloc = NULL;
+ p = NULL;
+ for (d = pool->d; d; p = d, d = d->next) {
+ if (data == d->alloc) {
+
+ ngx_log_debug1(NGX_LOG_DEBUG_ALLOC, pool->log, 0, "free: %p", d->alloc);
+
+ ngx_free(d->alloc);
+ d->alloc = NULL;
+
+ if (p) {
+ p->next = d->next;
+
+ } else {
+ pool->d = d->next;
+ }
+
+ ngx_free(d);
return NGX_OK;
}
diff --minimal '--exclude=*.swp' '--exclude=*~' -up nginx-1.9.2/src/core/ngx_palloc.h nginx-1.9.2-patched/src/core/ngx_palloc.h
--- nginx-1.9.2/src/core/ngx_palloc.h 2014-07-08 06:22:39.000000000 -0700
+++ nginx-1.9.2-patched/src/core/ngx_palloc.h 2014-07-13 19:21:54.119099642 -0700
@@ -38,28 +38,21 @@ struct ngx_pool_cleanup_s {
};
-typedef struct ngx_pool_large_s ngx_pool_large_t;
-
-struct ngx_pool_large_s {
- ngx_pool_large_t *next;
- void *alloc;
-};
+typedef struct ngx_pool_data_s ngx_pool_large_t;
+typedef struct ngx_pool_data_s ngx_pool_data_t;
-typedef struct {
- u_char *last;
- u_char *end;
- ngx_pool_t *next;
- ngx_uint_t failed;
-} ngx_pool_data_t;
+struct ngx_pool_data_s {
+ ngx_pool_data_t *next;
+ void *alloc;
+};
struct ngx_pool_s {
- ngx_pool_data_t d;
+ ngx_pool_data_t *d;
size_t max;
ngx_pool_t *current;
ngx_chain_t *chain;
- ngx_pool_large_t *large;
ngx_pool_cleanup_t *cleanup;
ngx_log_t *log;
};

View File

@ -0,0 +1,26 @@
# HG changeset patch
# User Yichun Zhang <agentzh@gmail.com>
# Date 1386694955 28800
# Node ID 9ba6b149669f1f02eeb4cdc0ebd364a949b5c469
# Parent 30e806b8636af5fd3f03ec17df24801f390f7511
Configure: added new option --with-pcre-conf-opt=OPTIONS.
diff -r 30e806b8636a -r 9ba6b149669f auto/options
--- a/auto/options Mon Dec 09 10:16:44 2013 +0400
+++ b/auto/options Tue Dec 10 09:02:35 2013 -0800
@@ -286,6 +286,7 @@
--with-pcre) USE_PCRE=YES ;;
--with-pcre=*) PCRE="$value" ;;
--with-pcre-opt=*) PCRE_OPT="$value" ;;
+ --with-pcre-conf-opt=*) PCRE_CONF_OPT="$value" ;;
--with-pcre-jit) PCRE_JIT=YES ;;
--with-openssl=*) OPENSSL="$value" ;;
@@ -441,6 +442,7 @@
--with-pcre force PCRE library usage
--with-pcre=DIR set path to PCRE library sources
--with-pcre-opt=OPTIONS set additional build options for PCRE
+ --with-pcre-conf-opt=OPTIONS set additional configure options for PCRE
--with-pcre-jit build PCRE with JIT compilation support
--with-md5=DIR set path to md5 library sources

View File

@ -0,0 +1,15 @@
--- nginx-1.9.2/src/http/modules/ngx_http_proxy_module.c 2013-10-08 05:07:14.000000000 -0700
+++ nginx-1.9.2-patched/src/http/modules/ngx_http_proxy_module.c 2013-10-27 15:29:41.619378592 -0700
@@ -602,10 +602,10 @@ static ngx_keyval_t ngx_http_proxy_cach
static ngx_http_variable_t ngx_http_proxy_vars[] = {
{ ngx_string("proxy_host"), NULL, ngx_http_proxy_host_variable, 0,
- NGX_HTTP_VAR_CHANGEABLE|NGX_HTTP_VAR_NOCACHEABLE|NGX_HTTP_VAR_NOHASH, 0 },
+ NGX_HTTP_VAR_CHANGEABLE|NGX_HTTP_VAR_NOCACHEABLE, 0 },
{ ngx_string("proxy_port"), NULL, ngx_http_proxy_port_variable, 0,
- NGX_HTTP_VAR_CHANGEABLE|NGX_HTTP_VAR_NOCACHEABLE|NGX_HTTP_VAR_NOHASH, 0 },
+ NGX_HTTP_VAR_CHANGEABLE|NGX_HTTP_VAR_NOCACHEABLE, 0 },
{ ngx_string("proxy_add_x_forwarded_for"), NULL,
ngx_http_proxy_add_x_forwarded_for_variable, 0, NGX_HTTP_VAR_NOHASH, 0 },

View File

@ -0,0 +1,24 @@
diff -ur nginx-1.9.2/src/core/nginx.h nginx-1.9.2-patched/src/core/nginx.h
--- nginx-1.9.2/src/core/nginx.h 2010-02-12 17:31:01.000000000 +0800
+++ nginx-1.9.2-patched/src/core/nginx.h 2010-03-30 10:52:13.240702627 +0800
@@ -10,7 +10,7 @@
#define nginx_version 1009002
#define NGINX_VERSION "1.9.2"
-#define NGINX_VER "nginx/" NGINX_VERSION
+#define NGINX_VER "openresty/" NGINX_VERSION ".unknown"
#define NGINX_VAR "NGINX"
#define NGX_OLDPID_EXT ".oldbin"
diff -ur nginx-1.9.2/src/http/ngx_http_header_filter_module.c nginx-1.9.2-patched/src/http/ngx_http_header_filter_module.c
--- nginx-1.9.2/src/http/ngx_http_header_filter_module.c 2010-03-03 23:14:04.000000000 +0800
+++ nginx-1.9.2-patched/src/http/ngx_http_header_filter_module.c 2010-03-30 10:52:53.670909405 +0800
@@ -45,7 +45,7 @@
};
-static char ngx_http_server_string[] = "Server: nginx" CRLF;
+static char ngx_http_server_string[] = "Server: openresty" CRLF;
static char ngx_http_server_full_string[] = "Server: " NGINX_VER CRLF;

View File

@ -0,0 +1,44 @@
# HG changeset patch
# User Yichun Zhang <agentzh@gmail.com>
# Date 1390506359 28800
# Node ID 17186b98c235c07e94c64e5853689f790f173756
# Parent 4b50d1f299d8a69f3e3f7975132e1490352642fe
Variable: setting $args should invalidate unparsed uri.
diff -r 4b50d1f299d8 -r 17186b98c235 src/http/ngx_http_variables.c
--- a/src/http/ngx_http_variables.c Fri Jan 10 11:22:14 2014 -0800
+++ b/src/http/ngx_http_variables.c Thu Jan 23 11:45:59 2014 -0800
@@ -15,6 +15,8 @@
ngx_http_variable_value_t *v, uintptr_t data);
static void ngx_http_variable_request_set(ngx_http_request_t *r,
ngx_http_variable_value_t *v, uintptr_t data);
+static void ngx_http_variable_request_args_set(ngx_http_request_t *r,
+ ngx_http_variable_value_t *v, uintptr_t data);
static ngx_int_t ngx_http_variable_request_get_size(ngx_http_request_t *r,
ngx_http_variable_value_t *v, uintptr_t data);
static void ngx_http_variable_request_set_size(ngx_http_request_t *r,
@@ -218,7 +220,7 @@
NGX_HTTP_VAR_NOCACHEABLE, 0 },
{ ngx_string("args"),
- ngx_http_variable_request_set,
+ ngx_http_variable_request_args_set,
ngx_http_variable_request,
offsetof(ngx_http_request_t, args),
NGX_HTTP_VAR_CHANGEABLE|NGX_HTTP_VAR_NOCACHEABLE, 0 },
@@ -647,6 +649,15 @@
static void
+ngx_http_variable_request_args_set(ngx_http_request_t *r,
+ ngx_http_variable_value_t *v, uintptr_t data)
+{
+ r->valid_unparsed_uri = 0;
+ ngx_http_variable_request_set(r, v, data);
+}
+
+
+static void
ngx_http_variable_request_set(ngx_http_request_t *r,
ngx_http_variable_value_t *v, uintptr_t data)
{

View File

@ -0,0 +1,138 @@
diff --git a/src/core/ngx_slab.c b/src/core/ngx_slab.c
index c3a27f7..1bde432 100644
--- a/src/core/ngx_slab.c
+++ b/src/core/ngx_slab.c
@@ -6,6 +6,7 @@
#include <ngx_config.h>
#include <ngx_core.h>
+#include <assert.h>
#define NGX_SLAB_PAGE_MASK 3
@@ -111,6 +112,7 @@ ngx_slab_init(ngx_slab_pool_t *pool)
ngx_memzero(p, pages * sizeof(ngx_slab_page_t));
pool->pages = (ngx_slab_page_t *) p;
+ pool->npages = pages;
pool->free.prev = 0;
pool->free.next = (ngx_slab_page_t *) p;
@@ -118,6 +120,7 @@ ngx_slab_init(ngx_slab_pool_t *pool)
pool->pages->slab = pages;
pool->pages->next = &pool->free;
pool->pages->prev = (uintptr_t) &pool->free;
+ pool->pages->prev_slab = 0;
pool->start = (u_char *)
ngx_align_ptr((uintptr_t) p + pages * sizeof(ngx_slab_page_t),
@@ -625,9 +628,16 @@ ngx_slab_alloc_pages(ngx_slab_pool_t *pool, ngx_uint_t pages)
if (page->slab >= pages) {
if (page->slab > pages) {
+ /* adjust the next adjacent block's "prev_slab" field */
+ p = &page[page->slab];
+ if (p < pool->pages + pool->npages) {
+ p->prev_slab = page->slab - pages;
+ }
+
page[pages].slab = page->slab - pages;
page[pages].next = page->next;
page[pages].prev = page->prev;
+ page[pages].prev_slab = pages;
p = (ngx_slab_page_t *) page->prev;
p->next = &page[pages];
@@ -651,6 +661,7 @@ ngx_slab_alloc_pages(ngx_slab_pool_t *pool, ngx_uint_t pages)
p->slab = NGX_SLAB_PAGE_BUSY;
p->next = NULL;
p->prev = NGX_SLAB_PAGE;
+ p->prev_slab = 0;
p++;
}
@@ -668,7 +679,7 @@ static void
ngx_slab_free_pages(ngx_slab_pool_t *pool, ngx_slab_page_t *page,
ngx_uint_t pages)
{
- ngx_slab_page_t *prev;
+ ngx_slab_page_t *prev, *p;
page->slab = pages--;
@@ -682,6 +693,53 @@ ngx_slab_free_pages(ngx_slab_pool_t *pool, ngx_slab_page_t *page,
page->next->prev = page->prev;
}
+ /* merge the next adjacent free block if it is free */
+
+ p = &page[page->slab];
+ if (p < pool->pages + pool->npages
+ && !(p->slab & NGX_SLAB_PAGE_START)
+ && p->next != NULL
+ && (p->prev & NGX_SLAB_PAGE_MASK) == NGX_SLAB_PAGE)
+ {
+ page->slab += p->slab;
+
+ /* remove the next adjacent block from the free list */
+
+ prev = (ngx_slab_page_t *) p->prev;
+ prev->next = p->next;
+ p->next->prev = p->prev;
+
+ /* adjust the "prev_slab" field in the next next adjacent block */
+ if (p + p->slab < pool->pages + pool->npages) {
+ p[p->slab].prev_slab = page->slab;
+ }
+
+ ngx_memzero(p, sizeof(ngx_slab_page_t));
+ }
+
+ if (page->prev_slab) {
+ /* merge the previous adjacent block if it is free */
+
+ p = page - page->prev_slab;
+ if (!(p->slab & NGX_SLAB_PAGE_START)
+ && p->next != NULL
+ && (p->prev & NGX_SLAB_PAGE_MASK) == NGX_SLAB_PAGE)
+ {
+ assert(p->slab == page->prev_slab);
+
+ p->slab += page->slab;
+ ngx_memzero(page, sizeof(ngx_slab_page_t));
+
+ /* adjust the "prev_slab" field in the next adjacent block */
+ if (p + p->slab < pool->pages + pool->npages) {
+ p[p->slab].prev_slab = p->slab;
+ }
+
+ /* skip adding "page" to the free list */
+ return;
+ }
+ }
+
page->prev = (uintptr_t) &pool->free;
page->next = pool->free.next;
diff --git a/src/core/ngx_slab.h b/src/core/ngx_slab.h
index c5e420b..287ac79 100644
--- a/src/core/ngx_slab.h
+++ b/src/core/ngx_slab.h
@@ -19,6 +19,8 @@ struct ngx_slab_page_s {
uintptr_t slab;
ngx_slab_page_t *next;
uintptr_t prev;
+ uintptr_t prev_slab;
+ /* number of pages for the previous adjacent block */
};
@@ -31,6 +33,8 @@ typedef struct {
ngx_slab_page_t *pages;
ngx_slab_page_t free;
+ ngx_uint_t npages;
+
u_char *start;
u_char *end;

View File

@ -0,0 +1,40 @@
diff -rudp nginx-1.9.2/src/http/ngx_http_upstream.c nginx-1.9.2-patched/src/http/ngx_http_upstream.c
--- nginx-1.9.2/src/http/ngx_http_upstream.c 2012-08-06 10:34:08.000000000 -0700
+++ nginx-1.9.2-patched/src/http/ngx_http_upstream.c 2012-12-05 14:46:41.741173058 -0800
@@ -1216,6 +1216,7 @@ ngx_http_upstream_connect(ngx_http_reque
}
u->request_sent = 0;
+ u->request_all_sent = 0;
if (rc == NGX_AGAIN) {
ngx_add_timer(c->write, u->conf->connect_timeout);
@@ -1418,6 +1419,8 @@ ngx_http_upstream_send_request(ngx_http_
/* rc == NGX_OK */
+ u->request_all_sent = 1;
+
if (c->tcp_nopush == NGX_TCP_NOPUSH_SET) {
if (ngx_tcp_push(c->fd) == NGX_ERROR) {
ngx_log_error(NGX_LOG_CRIT, c->log, ngx_socket_errno,
@@ -1484,7 +1487,7 @@ ngx_http_upstream_send_request_handler(n
#endif
- if (u->header_sent) {
+ if (u->request_all_sent) {
u->write_event_handler = ngx_http_upstream_dummy_handler;
(void) ngx_handle_write_event(c->write, 0);
diff -rudp nginx-1.9.2/src/http/ngx_http_upstream.h nginx-1.9.2-patched/src/http/ngx_http_upstream.h
--- nginx-1.9.2/src/http/ngx_http_upstream.h 2012-02-13 03:01:58.000000000 -0800
+++ nginx-1.9.2-patched/src/http/ngx_http_upstream.h 2012-12-05 14:41:09.763514741 -0800
@@ -324,6 +324,7 @@ struct ngx_http_upstream_s {
unsigned keepalive:1;
unsigned request_sent:1;
+ unsigned request_all_sent:1;
unsigned header_sent:1;
};

View File

@ -0,0 +1,11 @@
--- nginx-1.9.3/auto/cc/conf 2015-10-30 22:47:50.000000000 +0800
+++ nginx-1.9.3-patched/auto/cc/conf 2015-11-02 12:23:05.385156987 +0800
@@ -136,7 +136,7 @@ fi
CFLAGS="$CFLAGS $NGX_CC_OPT"
NGX_TEST_LD_OPT="$NGX_LD_OPT"
-if [ "$NGX_PLATFORM" != win32 ]; then
+if [ 1 ]; then
if test -n "$NGX_LD_OPT"; then
ngx_feature=--with-ld-opt=\"$NGX_LD_OPT\"

View File

@ -0,0 +1,19 @@
# HG changeset patch
# User Yichun Zhang <agentzh@gmail.com>
# Date 1383598130 28800
# Node ID f64218e1ac963337d84092536f588b8e0d99bbaa
# Parent dea321e5c0216efccbb23e84bbce7cf3e28f130c
Cache: gracefully exit the cache manager process.
diff -r dea321e5c021 -r f64218e1ac96 src/os/unix/ngx_process_cycle.c
--- a/src/os/unix/ngx_process_cycle.c Thu Oct 31 18:23:49 2013 +0400
+++ b/src/os/unix/ngx_process_cycle.c Mon Nov 04 12:48:50 2013 -0800
@@ -1335,7 +1335,7 @@
if (ngx_terminate || ngx_quit) {
ngx_log_error(NGX_LOG_NOTICE, cycle->log, 0, "exiting");
- exit(0);
+ ngx_worker_process_exit(cycle);
}
if (ngx_reopen) {

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,11 @@
--- nginx-1.9.3/src/http/ngx_http_request.c 2013-05-06 03:26:50.000000000 -0700
+++ nginx-1.9.3-patched/src/http/ngx_http_request.c 2013-06-11 12:59:48.008321688 -0700
@@ -1951,7 +1951,7 @@
ngx_int_t rc;
ngx_http_connection_t *hc;
ngx_http_core_loc_conf_t *clcf;
- ngx_http_core_srv_conf_t *cscf;
+ ngx_http_core_srv_conf_t *cscf = NULL;
hc = r->http_connection;

View File

@ -0,0 +1,20 @@
# HG changeset patch
# User Yichun Zhang <agentzh@gmail.com>
# Date 1412276417 25200
# Thu Oct 02 12:00:17 2014 -0700
# Node ID 4032b992f23b054c1a2cfb0be879330d2c6708e5
# Parent 1ff0f68d9376e3d184d65814a6372856bf65cfcd
Hash: buffer overflow might happen when exceeding the pre-configured limits.
diff -r 1ff0f68d9376 -r 4032b992f23b src/core/ngx_hash.c
--- a/src/core/ngx_hash.c Tue Sep 30 15:50:28 2014 -0700
+++ b/src/core/ngx_hash.c Thu Oct 02 12:00:17 2014 -0700
@@ -312,6 +312,8 @@ ngx_hash_init(ngx_hash_init_t *hinit, ng
continue;
}
+ size--;
+
ngx_log_error(NGX_LOG_WARN, hinit->pool->log, 0,
"could not build optimal %s, you should increase "
"either %s_max_size: %i or %s_bucket_size: %i; "

View File

@ -0,0 +1,13 @@
--- nginx-1.9.3/src/core/ngx_log.h 2013-10-08 05:07:14.000000000 -0700
+++ nginx-1.9.3-patched/src/core/ngx_log.h 2013-12-05 20:35:35.996236720 -0800
@@ -64,7 +64,9 @@ struct ngx_log_s {
};
-#define NGX_MAX_ERROR_STR 2048
+#ifndef NGX_MAX_ERROR_STR
+#define NGX_MAX_ERROR_STR 4096
+#endif
/*********************************/

View File

@ -0,0 +1,115 @@
--- nginx-1.9.3/src/http/modules/ngx_http_log_module.c 2011-11-01 21:24:50.000000000 +0800
+++ nginx-1.9.3-patched/src/http/modules/ngx_http_log_module.c 2011-11-10 16:17:29.599039534 +0800
@@ -61,6 +61,8 @@
time_t open_file_cache_valid;
ngx_uint_t open_file_cache_min_uses;
+ ngx_flag_t escape_non_ascii;
+
ngx_uint_t off; /* unsigned off:1 */
} ngx_http_log_loc_conf_t;
@@ -104,7 +106,8 @@
uintptr_t data);
static u_char *ngx_http_log_variable(ngx_http_request_t *r, u_char *buf,
ngx_http_log_op_t *op);
-static uintptr_t ngx_http_log_escape(u_char *dst, u_char *src, size_t size);
+static uintptr_t ngx_http_log_escape(ngx_http_log_loc_conf_t *lcf, u_char *dst,
+ u_char *src, size_t size);
static void *ngx_http_log_create_main_conf(ngx_conf_t *cf);
@@ -146,6 +149,13 @@
0,
NULL },
+ { ngx_string("log_escape_non_ascii"),
+ NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_FLAG,
+ ngx_conf_set_flag_slot,
+ NGX_HTTP_LOC_CONF_OFFSET,
+ offsetof(ngx_http_log_loc_conf_t, escape_non_ascii),
+ NULL },
+
ngx_null_command
};
@@ -637,6 +647,7 @@
ngx_http_log_variable_getlen(ngx_http_request_t *r, uintptr_t data)
{
uintptr_t len;
+ ngx_http_log_loc_conf_t *lcf;
ngx_http_variable_value_t *value;
value = ngx_http_get_indexed_variable(r, data);
@@ -645,7 +656,9 @@
return 1;
}
- len = ngx_http_log_escape(NULL, value->data, value->len);
+ lcf = ngx_http_get_module_loc_conf(r, ngx_http_log_module);
+
+ len = ngx_http_log_escape(lcf, NULL, value->data, value->len);
value->escape = len ? 1 : 0;
@@ -656,6 +669,7 @@
static u_char *
ngx_http_log_variable(ngx_http_request_t *r, u_char *buf, ngx_http_log_op_t *op)
{
+ ngx_http_log_loc_conf_t *lcf;
ngx_http_variable_value_t *value;
value = ngx_http_get_indexed_variable(r, op->data);
@@ -669,16 +683,18 @@
return ngx_cpymem(buf, value->data, value->len);
} else {
- return (u_char *) ngx_http_log_escape(buf, value->data, value->len);
+ lcf = ngx_http_get_module_loc_conf(r, ngx_http_log_module);
+ return (u_char *) ngx_http_log_escape(lcf, buf, value->data, value->len);
}
}
static uintptr_t
-ngx_http_log_escape(u_char *dst, u_char *src, size_t size)
+ngx_http_log_escape(ngx_http_log_loc_conf_t *lcf, u_char *dst, u_char *src,
+ size_t size)
{
- ngx_uint_t n;
- static u_char hex[] = "0123456789ABCDEF";
+ ngx_uint_t n;
+ static u_char hex[] = "0123456789ABCDEF";
static uint32_t escape[] = {
0xffffffff, /* 1111 1111 1111 1111 1111 1111 1111 1111 */
@@ -698,6 +714,12 @@
0xffffffff, /* 1111 1111 1111 1111 1111 1111 1111 1111 */
};
+ if (lcf->escape_non_ascii) {
+ ngx_memset(&escape[4], 0xff, sizeof(uint32_t) * 4);
+
+ } else {
+ ngx_memzero(&escape[4], sizeof(uint32_t) * 4);
+ }
if (dst == NULL) {
@@ -781,6 +803,7 @@
}
conf->open_file_cache = NGX_CONF_UNSET_PTR;
+ conf->escape_non_ascii = NGX_CONF_UNSET;
return conf;
}
@@ -796,6 +819,8 @@
ngx_http_log_fmt_t *fmt;
ngx_http_log_main_conf_t *lmcf;
+ ngx_conf_merge_value(conf->escape_non_ascii, prev->escape_non_ascii, 1);
+
if (conf->open_file_cache == NGX_CONF_UNSET_PTR) {
conf->open_file_cache = prev->open_file_cache;

View File

@ -0,0 +1,36 @@
diff -urp nginx-1.9.3/auto/cc/clang nginx-1.9.3-patched/auto/cc/clang
--- nginx-1.9.3/auto/cc/clang 2014-03-04 03:39:24.000000000 -0800
+++ nginx-1.9.3-patched/auto/cc/clang 2014-03-13 20:54:26.241413360 -0700
@@ -89,7 +89,7 @@ CFLAGS="$CFLAGS -Wconditional-uninitiali
CFLAGS="$CFLAGS -Wno-unused-parameter"
# stop on warning
-CFLAGS="$CFLAGS -Werror"
+#CFLAGS="$CFLAGS -Werror"
# debug
CFLAGS="$CFLAGS -g"
diff -urp nginx-1.9.3/auto/cc/gcc nginx-1.9.3-patched/auto/cc/gcc
--- nginx-1.9.3/auto/cc/gcc 2014-03-04 03:39:24.000000000 -0800
+++ nginx-1.9.3-patched/auto/cc/gcc 2014-03-13 20:54:13.301355329 -0700
@@ -168,7 +168,7 @@ esac
# stop on warning
-CFLAGS="$CFLAGS -Werror"
+#CFLAGS="$CFLAGS -Werror"
# debug
CFLAGS="$CFLAGS -g"
diff -urp nginx-1.9.3/auto/cc/icc nginx-1.9.3-patched/auto/cc/icc
--- nginx-1.9.3/auto/cc/icc 2014-03-04 03:39:24.000000000 -0800
+++ nginx-1.9.3-patched/auto/cc/icc 2014-03-13 20:54:13.301355329 -0700
@@ -115,7 +115,7 @@ case "$NGX_ICC_VER" in
esac
# stop on warning
-CFLAGS="$CFLAGS -Werror"
+#CFLAGS="$CFLAGS -Werror"
# debug
CFLAGS="$CFLAGS -g"

View File

@ -0,0 +1,90 @@
--- nginx-1.9.3/src/http/ngx_http_core_module.c 2010-12-14 18:38:42.000000000 +0800
+++ nginx-1.9.3-patched/src/http/ngx_http_core_module.c 2011-01-30 19:24:34.956354518 +0800
@@ -57,6 +57,8 @@
void *conf);
static char *ngx_http_core_error_page(ngx_conf_t *cf, ngx_command_t *cmd,
void *conf);
+static char *ngx_http_core_no_error_pages(ngx_conf_t *cf, ngx_command_t *cmd,
+ void *conf);
static char *ngx_http_core_try_files(ngx_conf_t *cf, ngx_command_t *cmd,
void *conf);
static char *ngx_http_core_open_file_cache(ngx_conf_t *cf, ngx_command_t *cmd,
@@ -614,6 +616,14 @@
0,
NULL },
+ { ngx_string("no_error_pages"),
+ NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_HTTP_LIF_CONF
+ |NGX_CONF_NOARGS,
+ ngx_http_core_no_error_pages,
+ NGX_HTTP_LOC_CONF_OFFSET,
+ 0,
+ NULL },
+
{ ngx_string("try_files"),
NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_2MORE,
ngx_http_core_try_files,
@@ -3052,7 +3062,6 @@
* clcf->types = NULL;
* clcf->default_type = { 0, NULL };
* clcf->error_log = NULL;
- * clcf->error_pages = NULL;
* clcf->try_files = NULL;
* clcf->client_body_path = NULL;
* clcf->regex = NULL;
@@ -3062,6 +3071,7 @@
* clcf->gzip_proxied = 0;
*/
+ clcf->error_pages = NGX_CONF_UNSET_PTR;
clcf->client_max_body_size = NGX_CONF_UNSET;
clcf->client_body_buffer_size = NGX_CONF_UNSET_SIZE;
clcf->client_body_timeout = NGX_CONF_UNSET_MSEC;
@@ -3250,9 +3260,7 @@
}
}
- if (conf->error_pages == NULL && prev->error_pages) {
- conf->error_pages = prev->error_pages;
- }
+ ngx_conf_merge_ptr_value(conf->error_pages, prev->error_pages, NULL);
ngx_conf_merge_str_value(conf->default_type,
prev->default_type, "text/plain");
@@ -3988,6 +3996,10 @@
ngx_http_compile_complex_value_t ccv;
if (clcf->error_pages == NULL) {
+ return "conflicts with \"no_error_pages\"";
+ }
+
+ if (clcf->error_pages == NGX_CONF_UNSET_PTR) {
clcf->error_pages = ngx_array_create(cf->pool, 4,
sizeof(ngx_http_err_page_t));
if (clcf->error_pages == NULL) {
@@ -4095,6 +4107,25 @@
static char *
+ngx_http_core_no_error_pages(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
+{
+ ngx_http_core_loc_conf_t *clcf = conf;
+
+ if (clcf->error_pages == NULL) {
+ return "is duplicate";
+ }
+
+ if (clcf->error_pages != NGX_CONF_UNSET_PTR) {
+ return "conflicts with \"error_page\"";
+ }
+
+ clcf->error_pages = NULL;
+
+ return NGX_CONF_OK;
+}
+
+
+static char *
ngx_http_core_try_files(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
{
ngx_http_core_loc_conf_t *clcf = conf;

View File

@ -0,0 +1,585 @@
diff --minimal '--exclude=*.swp' '--exclude=*~' -up nginx-1.9.3/src/core/nginx.h nginx-1.9.3-patched/src/core/nginx.h
--- nginx-1.9.3/src/core/nginx.h 2014-07-08 06:22:39.000000000 -0700
+++ nginx-1.9.3-patched/src/core/nginx.h 2014-07-13 19:21:54.117099631 -0700
@@ -10,7 +10,7 @@
#define nginx_version 1009003
#define NGINX_VERSION "1.9.3"
-#define NGINX_VER "openresty/" NGINX_VERSION ".unknown"
+#define NGINX_VER "openresty/" NGINX_VERSION ".unknown (no pool)"
#ifdef NGX_BUILD
diff --minimal '--exclude=*.swp' '--exclude=*~' -up nginx-1.9.3/src/core/ngx_array.c nginx-1.9.3-patched/src/core/ngx_array.c
--- nginx-1.9.3/src/core/ngx_array.c 2014-07-08 06:22:39.000000000 -0700
+++ nginx-1.9.3-patched/src/core/ngx_array.c 2014-07-13 19:21:54.117099631 -0700
@@ -30,26 +30,30 @@ ngx_array_create(ngx_pool_t *p, ngx_uint
void
ngx_array_destroy(ngx_array_t *a)
{
- ngx_pool_t *p;
+ ngx_pool_t *p;
+ ngx_array_link_t *link;
p = a->pool;
- if ((u_char *) a->elts + a->size * a->nalloc == p->d.last) {
- p->d.last -= a->size * a->nalloc;
+ if (a->elts) {
+ ngx_pfree(p, a->elts);
}
- if ((u_char *) a + sizeof(ngx_array_t) == p->d.last) {
- p->d.last = (u_char *) a;
+ for (link = a->old_elts; link; link = link->next) {
+ ngx_pfree(p, link->elts);
}
+
+ ngx_pfree(p, a);
}
void *
ngx_array_push(ngx_array_t *a)
{
- void *elt, *new;
- size_t size;
- ngx_pool_t *p;
+ void *elt, *new;
+ size_t size;
+ ngx_pool_t *p;
+ ngx_array_link_t *link;
if (a->nelts == a->nalloc) {
@@ -59,29 +63,27 @@ ngx_array_push(ngx_array_t *a)
p = a->pool;
- if ((u_char *) a->elts + size == p->d.last
- && p->d.last + a->size <= p->d.end)
- {
- /*
- * the array allocation is the last in the pool
- * and there is space for new allocation
- */
-
- p->d.last += a->size;
- a->nalloc++;
+ /* allocate a new array */
- } else {
- /* allocate a new array */
+ new = ngx_palloc(p, 2 * size);
+ if (new == NULL) {
+ return NULL;
+ }
- new = ngx_palloc(p, 2 * size);
- if (new == NULL) {
- return NULL;
- }
+ ngx_memcpy(new, a->elts, size);
- ngx_memcpy(new, a->elts, size);
- a->elts = new;
- a->nalloc *= 2;
+ link = ngx_palloc(p, sizeof(ngx_array_link_t));
+ if (link == NULL) {
+ ngx_pfree(p, new);
+ return NULL;
}
+
+ link->next = a->old_elts;
+ link->elts = a->elts;
+ a->old_elts = link;
+
+ a->elts = new;
+ a->nalloc *= 2;
}
elt = (u_char *) a->elts + a->size * a->nelts;
@@ -95,11 +97,10 @@ void *
ngx_array_push_n(ngx_array_t *a, ngx_uint_t n)
{
void *elt, *new;
- size_t size;
ngx_uint_t nalloc;
ngx_pool_t *p;
- size = n * a->size;
+ ngx_array_link_t *link;
if (a->nelts + n > a->nalloc) {
@@ -107,31 +108,27 @@ ngx_array_push_n(ngx_array_t *a, ngx_uin
p = a->pool;
- if ((u_char *) a->elts + a->size * a->nalloc == p->d.last
- && p->d.last + size <= p->d.end)
- {
- /*
- * the array allocation is the last in the pool
- * and there is space for new allocation
- */
+ nalloc = 2 * ((n >= a->nalloc) ? n : a->nalloc);
- p->d.last += size;
- a->nalloc += n;
+ new = ngx_palloc(p, nalloc * a->size);
+ if (new == NULL) {
+ return NULL;
+ }
- } else {
- /* allocate a new array */
+ ngx_memcpy(new, a->elts, a->nelts * a->size);
- nalloc = 2 * ((n >= a->nalloc) ? n : a->nalloc);
+ link = ngx_palloc(p, sizeof(ngx_array_link_t));
+ if (link == NULL) {
+ ngx_pfree(p, new);
+ return NULL;
+ }
- new = ngx_palloc(p, nalloc * a->size);
- if (new == NULL) {
- return NULL;
- }
+ link->next = a->old_elts;
+ link->elts = a->elts;
+ a->old_elts = link;
- ngx_memcpy(new, a->elts, a->nelts * a->size);
- a->elts = new;
- a->nalloc = nalloc;
- }
+ a->elts = new;
+ a->nalloc = nalloc;
}
elt = (u_char *) a->elts + a->size * a->nelts;
diff --minimal '--exclude=*.swp' '--exclude=*~' -up nginx-1.9.3/src/core/ngx_array.h nginx-1.9.3-patched/src/core/ngx_array.h
--- nginx-1.9.3/src/core/ngx_array.h 2014-07-08 06:22:39.000000000 -0700
+++ nginx-1.9.3-patched/src/core/ngx_array.h 2014-07-13 19:21:54.118099637 -0700
@@ -13,12 +13,23 @@
#include <ngx_core.h>
+typedef struct ngx_array_link_s ngx_array_link_t;
+
+
+struct ngx_array_link_s {
+ void *elts;
+ ngx_array_link_t *next;
+};
+
+
typedef struct {
void *elts;
ngx_uint_t nelts;
size_t size;
ngx_uint_t nalloc;
ngx_pool_t *pool;
+
+ ngx_array_link_t *old_elts;
} ngx_array_t;
@@ -40,6 +51,7 @@ ngx_array_init(ngx_array_t *array, ngx_p
array->size = size;
array->nalloc = n;
array->pool = pool;
+ array->old_elts = NULL;
array->elts = ngx_palloc(pool, n * size);
if (array->elts == NULL) {
diff --minimal '--exclude=*.swp' '--exclude=*~' -up nginx-1.9.3/src/core/ngx_palloc.c nginx-1.9.3-patched/src/core/ngx_palloc.c
--- nginx-1.9.3/src/core/ngx_palloc.c 2014-07-08 06:22:39.000000000 -0700
+++ nginx-1.9.3-patched/src/core/ngx_palloc.c 2014-07-13 20:04:41.786419098 -0700
@@ -9,32 +9,26 @@
#include <ngx_core.h>
-static void *ngx_palloc_block(ngx_pool_t *pool, size_t size);
-static void *ngx_palloc_large(ngx_pool_t *pool, size_t size);
+static void * ngx_malloc(ngx_pool_t *pool, size_t size);
ngx_pool_t *
ngx_create_pool(size_t size, ngx_log_t *log)
{
- ngx_pool_t *p;
+ ngx_pool_t *p;
- p = ngx_memalign(NGX_POOL_ALIGNMENT, size, log);
+ size = sizeof(ngx_pool_t);
+ p = ngx_alloc(size, log);
if (p == NULL) {
return NULL;
}
- p->d.last = (u_char *) p + sizeof(ngx_pool_t);
- p->d.end = (u_char *) p + size;
- p->d.next = NULL;
- p->d.failed = 0;
+ ngx_memzero(p, size);
size = size - sizeof(ngx_pool_t);
p->max = (size < NGX_MAX_ALLOC_FROM_POOL) ? size : NGX_MAX_ALLOC_FROM_POOL;
p->current = p;
- p->chain = NULL;
- p->large = NULL;
- p->cleanup = NULL;
p->log = log;
return p;
@@ -44,8 +38,7 @@ ngx_create_pool(size_t size, ngx_log_t *
void
ngx_destroy_pool(ngx_pool_t *pool)
{
- ngx_pool_t *p, *n;
- ngx_pool_large_t *l;
+ ngx_pool_data_t *d, *n;
ngx_pool_cleanup_t *c;
for (c = pool->cleanup; c; c = c->next) {
@@ -56,13 +49,9 @@ ngx_destroy_pool(ngx_pool_t *pool)
}
}
- for (l = pool->large; l; l = l->next) {
-
- ngx_log_debug1(NGX_LOG_DEBUG_ALLOC, pool->log, 0, "free: %p", l->alloc);
-
- if (l->alloc) {
- ngx_free(l->alloc);
- }
+ if (pool->d == NULL) {
+ ngx_free(pool);
+ return;
}
#if (NGX_DEBUG)
@@ -72,9 +61,9 @@ ngx_destroy_pool(ngx_pool_t *pool)
* so we cannot use this log while free()ing the pool
*/
- for (p = pool, n = pool->d.next; /* void */; p = n, n = n->d.next) {
+ for (d = pool->d, n = d->next; ; d = n, n = n->next) {
ngx_log_debug2(NGX_LOG_DEBUG_ALLOC, pool->log, 0,
- "free: %p, unused: %uz", p, p->d.end - p->d.last);
+ "free: %p, unused: %d", d, 0);
if (n == NULL) {
break;
@@ -83,170 +72,82 @@ ngx_destroy_pool(ngx_pool_t *pool)
#endif
- for (p = pool, n = pool->d.next; /* void */; p = n, n = n->d.next) {
- ngx_free(p);
+ for (d = pool->d, n = d->next; ; d = n, n = n->next) {
+ ngx_free(d->alloc);
+ ngx_free(d);
if (n == NULL) {
break;
}
}
+
+ pool->d = NULL;
+ ngx_free(pool);
}
void
ngx_reset_pool(ngx_pool_t *pool)
{
- ngx_pool_t *p;
- ngx_pool_large_t *l;
+ ngx_pool_data_t *d, *n;
+ ngx_pool_data_t *saved = NULL;
- for (l = pool->large; l; l = l->next) {
- if (l->alloc) {
- ngx_free(l->alloc);
+ if (pool->d) {
+ for (d = pool->d, n = d->next; ; d = n, n = n->next) {
+ if (d->alloc == pool->log) {
+ saved = d;
+ continue;
+ }
+
+ ngx_free(d->alloc);
+ ngx_free(d);
+
+ if (n == NULL) {
+ break;
+ }
}
- }
- for (p = pool; p; p = p->d.next) {
- p->d.last = (u_char *) p + sizeof(ngx_pool_t);
- p->d.failed = 0;
+ pool->d = saved;
+ pool->current = pool;
+ pool->chain = NULL;
}
-
- pool->current = pool;
- pool->chain = NULL;
- pool->large = NULL;
}
void *
ngx_palloc(ngx_pool_t *pool, size_t size)
{
- u_char *m;
- ngx_pool_t *p;
-
- if (size <= pool->max) {
-
- p = pool->current;
-
- do {
- m = ngx_align_ptr(p->d.last, NGX_ALIGNMENT);
-
- if ((size_t) (p->d.end - m) >= size) {
- p->d.last = m + size;
-
- return m;
- }
-
- p = p->d.next;
-
- } while (p);
-
- return ngx_palloc_block(pool, size);
- }
-
- return ngx_palloc_large(pool, size);
+ return ngx_malloc(pool, size);
}
void *
ngx_pnalloc(ngx_pool_t *pool, size_t size)
{
- u_char *m;
- ngx_pool_t *p;
-
- if (size <= pool->max) {
-
- p = pool->current;
-
- do {
- m = p->d.last;
-
- if ((size_t) (p->d.end - m) >= size) {
- p->d.last = m + size;
-
- return m;
- }
-
- p = p->d.next;
-
- } while (p);
-
- return ngx_palloc_block(pool, size);
- }
-
- return ngx_palloc_large(pool, size);
-}
-
-
-static void *
-ngx_palloc_block(ngx_pool_t *pool, size_t size)
-{
- u_char *m;
- size_t psize;
- ngx_pool_t *p, *new;
-
- psize = (size_t) (pool->d.end - (u_char *) pool);
-
- m = ngx_memalign(NGX_POOL_ALIGNMENT, psize, pool->log);
- if (m == NULL) {
- return NULL;
- }
-
- new = (ngx_pool_t *) m;
-
- new->d.end = m + psize;
- new->d.next = NULL;
- new->d.failed = 0;
-
- m += sizeof(ngx_pool_data_t);
- m = ngx_align_ptr(m, NGX_ALIGNMENT);
- new->d.last = m + size;
-
- for (p = pool->current; p->d.next; p = p->d.next) {
- if (p->d.failed++ > 4) {
- pool->current = p->d.next;
- }
- }
-
- p->d.next = new;
-
- return m;
+ return ngx_malloc(pool, size);
}
static void *
-ngx_palloc_large(ngx_pool_t *pool, size_t size)
+ngx_malloc(ngx_pool_t *pool, size_t size)
{
- void *p;
- ngx_uint_t n;
- ngx_pool_large_t *large;
+ void *p;
+ ngx_pool_data_t *d;
p = ngx_alloc(size, pool->log);
if (p == NULL) {
return NULL;
}
- n = 0;
-
- for (large = pool->large; large; large = large->next) {
- if (large->alloc == NULL) {
- large->alloc = p;
- return p;
- }
-
- if (n++ > 3) {
- break;
- }
- }
-
- large = ngx_palloc(pool, sizeof(ngx_pool_large_t));
- if (large == NULL) {
+ d = ngx_alloc(sizeof(ngx_pool_data_t), pool->log);
+ if (d == NULL){
ngx_free(p);
return NULL;
}
- large->alloc = p;
- large->next = pool->large;
- pool->large = large;
-
+ d->alloc = p;
+ d->next = pool->d;
+ pool->d = d;
return p;
}
@@ -255,38 +156,48 @@ void *
ngx_pmemalign(ngx_pool_t *pool, size_t size, size_t alignment)
{
void *p;
- ngx_pool_large_t *large;
+ ngx_pool_data_t *d;
p = ngx_memalign(alignment, size, pool->log);
if (p == NULL) {
return NULL;
}
- large = ngx_palloc(pool, sizeof(ngx_pool_large_t));
- if (large == NULL) {
+ d = ngx_alloc(sizeof(ngx_pool_data_t), pool->log);
+ if (d == NULL){
ngx_free(p);
return NULL;
}
- large->alloc = p;
- large->next = pool->large;
- pool->large = large;
-
+ d->alloc = p;
+ d->next = pool->d;
+ pool->d = d;
return p;
}
ngx_int_t
-ngx_pfree(ngx_pool_t *pool, void *p)
+ngx_pfree(ngx_pool_t *pool, void *data)
{
- ngx_pool_large_t *l;
+ ngx_pool_data_t *p, *d;
- for (l = pool->large; l; l = l->next) {
- if (p == l->alloc) {
- ngx_log_debug1(NGX_LOG_DEBUG_ALLOC, pool->log, 0,
- "free: %p", l->alloc);
- ngx_free(l->alloc);
- l->alloc = NULL;
+ p = NULL;
+ for (d = pool->d; d; p = d, d = d->next) {
+ if (data == d->alloc) {
+
+ ngx_log_debug1(NGX_LOG_DEBUG_ALLOC, pool->log, 0, "free: %p", d->alloc);
+
+ ngx_free(d->alloc);
+ d->alloc = NULL;
+
+ if (p) {
+ p->next = d->next;
+
+ } else {
+ pool->d = d->next;
+ }
+
+ ngx_free(d);
return NGX_OK;
}
diff --minimal '--exclude=*.swp' '--exclude=*~' -up nginx-1.9.3/src/core/ngx_palloc.h nginx-1.9.3-patched/src/core/ngx_palloc.h
--- nginx-1.9.3/src/core/ngx_palloc.h 2014-07-08 06:22:39.000000000 -0700
+++ nginx-1.9.3-patched/src/core/ngx_palloc.h 2014-07-13 19:21:54.119099642 -0700
@@ -38,28 +38,21 @@ struct ngx_pool_cleanup_s {
};
-typedef struct ngx_pool_large_s ngx_pool_large_t;
-
-struct ngx_pool_large_s {
- ngx_pool_large_t *next;
- void *alloc;
-};
+typedef struct ngx_pool_data_s ngx_pool_large_t;
+typedef struct ngx_pool_data_s ngx_pool_data_t;
-typedef struct {
- u_char *last;
- u_char *end;
- ngx_pool_t *next;
- ngx_uint_t failed;
-} ngx_pool_data_t;
+struct ngx_pool_data_s {
+ ngx_pool_data_t *next;
+ void *alloc;
+};
struct ngx_pool_s {
- ngx_pool_data_t d;
+ ngx_pool_data_t *d;
size_t max;
ngx_pool_t *current;
ngx_chain_t *chain;
- ngx_pool_large_t *large;
ngx_pool_cleanup_t *cleanup;
ngx_log_t *log;
};

View File

@ -0,0 +1,26 @@
# HG changeset patch
# User Yichun Zhang <agentzh@gmail.com>
# Date 1386694955 28800
# Node ID 9ba6b149669f1f02eeb4cdc0ebd364a949b5c469
# Parent 30e806b8636af5fd3f03ec17df24801f390f7511
Configure: added new option --with-pcre-conf-opt=OPTIONS.
diff -r 30e806b8636a -r 9ba6b149669f auto/options
--- a/auto/options Mon Dec 09 10:16:44 2013 +0400
+++ b/auto/options Tue Dec 10 09:02:35 2013 -0800
@@ -286,6 +286,7 @@
--with-pcre) USE_PCRE=YES ;;
--with-pcre=*) PCRE="$value" ;;
--with-pcre-opt=*) PCRE_OPT="$value" ;;
+ --with-pcre-conf-opt=*) PCRE_CONF_OPT="$value" ;;
--with-pcre-jit) PCRE_JIT=YES ;;
--with-openssl=*) OPENSSL="$value" ;;
@@ -441,6 +442,7 @@
--with-pcre force PCRE library usage
--with-pcre=DIR set path to PCRE library sources
--with-pcre-opt=OPTIONS set additional build options for PCRE
+ --with-pcre-conf-opt=OPTIONS set additional configure options for PCRE
--with-pcre-jit build PCRE with JIT compilation support
--with-md5=DIR set path to md5 library sources

View File

@ -0,0 +1,15 @@
--- nginx-1.9.3/src/http/modules/ngx_http_proxy_module.c 2013-10-08 05:07:14.000000000 -0700
+++ nginx-1.9.3-patched/src/http/modules/ngx_http_proxy_module.c 2013-10-27 15:29:41.619378592 -0700
@@ -602,10 +602,10 @@ static ngx_keyval_t ngx_http_proxy_cach
static ngx_http_variable_t ngx_http_proxy_vars[] = {
{ ngx_string("proxy_host"), NULL, ngx_http_proxy_host_variable, 0,
- NGX_HTTP_VAR_CHANGEABLE|NGX_HTTP_VAR_NOCACHEABLE|NGX_HTTP_VAR_NOHASH, 0 },
+ NGX_HTTP_VAR_CHANGEABLE|NGX_HTTP_VAR_NOCACHEABLE, 0 },
{ ngx_string("proxy_port"), NULL, ngx_http_proxy_port_variable, 0,
- NGX_HTTP_VAR_CHANGEABLE|NGX_HTTP_VAR_NOCACHEABLE|NGX_HTTP_VAR_NOHASH, 0 },
+ NGX_HTTP_VAR_CHANGEABLE|NGX_HTTP_VAR_NOCACHEABLE, 0 },
{ ngx_string("proxy_add_x_forwarded_for"), NULL,
ngx_http_proxy_add_x_forwarded_for_variable, 0, NGX_HTTP_VAR_NOHASH, 0 },

View File

@ -0,0 +1,24 @@
diff -ur nginx-1.9.3/src/core/nginx.h nginx-1.9.3-patched/src/core/nginx.h
--- nginx-1.9.3/src/core/nginx.h 2010-02-12 17:31:01.000000000 +0800
+++ nginx-1.9.3-patched/src/core/nginx.h 2010-03-30 10:52:13.240702627 +0800
@@ -10,7 +10,7 @@
#define nginx_version 1009003
#define NGINX_VERSION "1.9.3"
-#define NGINX_VER "nginx/" NGINX_VERSION
+#define NGINX_VER "openresty/" NGINX_VERSION ".unknown"
#define NGINX_VAR "NGINX"
#define NGX_OLDPID_EXT ".oldbin"
diff -ur nginx-1.9.3/src/http/ngx_http_header_filter_module.c nginx-1.9.3-patched/src/http/ngx_http_header_filter_module.c
--- nginx-1.9.3/src/http/ngx_http_header_filter_module.c 2010-03-03 23:14:04.000000000 +0800
+++ nginx-1.9.3-patched/src/http/ngx_http_header_filter_module.c 2010-03-30 10:52:53.670909405 +0800
@@ -45,7 +45,7 @@
};
-static char ngx_http_server_string[] = "Server: nginx" CRLF;
+static char ngx_http_server_string[] = "Server: openresty" CRLF;
static char ngx_http_server_full_string[] = "Server: " NGINX_VER CRLF;

View File

@ -0,0 +1,44 @@
# HG changeset patch
# User Yichun Zhang <agentzh@gmail.com>
# Date 1390506359 28800
# Node ID 17186b98c235c07e94c64e5853689f790f173756
# Parent 4b50d1f299d8a69f3e3f7975132e1490352642fe
Variable: setting $args should invalidate unparsed uri.
diff -r 4b50d1f299d8 -r 17186b98c235 src/http/ngx_http_variables.c
--- a/src/http/ngx_http_variables.c Fri Jan 10 11:22:14 2014 -0800
+++ b/src/http/ngx_http_variables.c Thu Jan 23 11:45:59 2014 -0800
@@ -15,6 +15,8 @@
ngx_http_variable_value_t *v, uintptr_t data);
static void ngx_http_variable_request_set(ngx_http_request_t *r,
ngx_http_variable_value_t *v, uintptr_t data);
+static void ngx_http_variable_request_args_set(ngx_http_request_t *r,
+ ngx_http_variable_value_t *v, uintptr_t data);
static ngx_int_t ngx_http_variable_request_get_size(ngx_http_request_t *r,
ngx_http_variable_value_t *v, uintptr_t data);
static void ngx_http_variable_request_set_size(ngx_http_request_t *r,
@@ -218,7 +220,7 @@
NGX_HTTP_VAR_NOCACHEABLE, 0 },
{ ngx_string("args"),
- ngx_http_variable_request_set,
+ ngx_http_variable_request_args_set,
ngx_http_variable_request,
offsetof(ngx_http_request_t, args),
NGX_HTTP_VAR_CHANGEABLE|NGX_HTTP_VAR_NOCACHEABLE, 0 },
@@ -647,6 +649,15 @@
static void
+ngx_http_variable_request_args_set(ngx_http_request_t *r,
+ ngx_http_variable_value_t *v, uintptr_t data)
+{
+ r->valid_unparsed_uri = 0;
+ ngx_http_variable_request_set(r, v, data);
+}
+
+
+static void
ngx_http_variable_request_set(ngx_http_request_t *r,
ngx_http_variable_value_t *v, uintptr_t data)
{

View File

@ -0,0 +1,138 @@
diff --git a/src/core/ngx_slab.c b/src/core/ngx_slab.c
index c3a27f7..1bde432 100644
--- a/src/core/ngx_slab.c
+++ b/src/core/ngx_slab.c
@@ -6,6 +6,7 @@
#include <ngx_config.h>
#include <ngx_core.h>
+#include <assert.h>
#define NGX_SLAB_PAGE_MASK 3
@@ -111,6 +112,7 @@ ngx_slab_init(ngx_slab_pool_t *pool)
ngx_memzero(p, pages * sizeof(ngx_slab_page_t));
pool->pages = (ngx_slab_page_t *) p;
+ pool->npages = pages;
pool->free.prev = 0;
pool->free.next = (ngx_slab_page_t *) p;
@@ -118,6 +120,7 @@ ngx_slab_init(ngx_slab_pool_t *pool)
pool->pages->slab = pages;
pool->pages->next = &pool->free;
pool->pages->prev = (uintptr_t) &pool->free;
+ pool->pages->prev_slab = 0;
pool->start = (u_char *)
ngx_align_ptr((uintptr_t) p + pages * sizeof(ngx_slab_page_t),
@@ -625,9 +628,16 @@ ngx_slab_alloc_pages(ngx_slab_pool_t *pool, ngx_uint_t pages)
if (page->slab >= pages) {
if (page->slab > pages) {
+ /* adjust the next adjacent block's "prev_slab" field */
+ p = &page[page->slab];
+ if (p < pool->pages + pool->npages) {
+ p->prev_slab = page->slab - pages;
+ }
+
page[pages].slab = page->slab - pages;
page[pages].next = page->next;
page[pages].prev = page->prev;
+ page[pages].prev_slab = pages;
p = (ngx_slab_page_t *) page->prev;
p->next = &page[pages];
@@ -651,6 +661,7 @@ ngx_slab_alloc_pages(ngx_slab_pool_t *pool, ngx_uint_t pages)
p->slab = NGX_SLAB_PAGE_BUSY;
p->next = NULL;
p->prev = NGX_SLAB_PAGE;
+ p->prev_slab = 0;
p++;
}
@@ -668,7 +679,7 @@ static void
ngx_slab_free_pages(ngx_slab_pool_t *pool, ngx_slab_page_t *page,
ngx_uint_t pages)
{
- ngx_slab_page_t *prev;
+ ngx_slab_page_t *prev, *p;
page->slab = pages--;
@@ -682,6 +693,53 @@ ngx_slab_free_pages(ngx_slab_pool_t *pool, ngx_slab_page_t *page,
page->next->prev = page->prev;
}
+ /* merge the next adjacent free block if it is free */
+
+ p = &page[page->slab];
+ if (p < pool->pages + pool->npages
+ && !(p->slab & NGX_SLAB_PAGE_START)
+ && p->next != NULL
+ && (p->prev & NGX_SLAB_PAGE_MASK) == NGX_SLAB_PAGE)
+ {
+ page->slab += p->slab;
+
+ /* remove the next adjacent block from the free list */
+
+ prev = (ngx_slab_page_t *) p->prev;
+ prev->next = p->next;
+ p->next->prev = p->prev;
+
+ /* adjust the "prev_slab" field in the next next adjacent block */
+ if (p + p->slab < pool->pages + pool->npages) {
+ p[p->slab].prev_slab = page->slab;
+ }
+
+ ngx_memzero(p, sizeof(ngx_slab_page_t));
+ }
+
+ if (page->prev_slab) {
+ /* merge the previous adjacent block if it is free */
+
+ p = page - page->prev_slab;
+ if (!(p->slab & NGX_SLAB_PAGE_START)
+ && p->next != NULL
+ && (p->prev & NGX_SLAB_PAGE_MASK) == NGX_SLAB_PAGE)
+ {
+ assert(p->slab == page->prev_slab);
+
+ p->slab += page->slab;
+ ngx_memzero(page, sizeof(ngx_slab_page_t));
+
+ /* adjust the "prev_slab" field in the next adjacent block */
+ if (p + p->slab < pool->pages + pool->npages) {
+ p[p->slab].prev_slab = p->slab;
+ }
+
+ /* skip adding "page" to the free list */
+ return;
+ }
+ }
+
page->prev = (uintptr_t) &pool->free;
page->next = pool->free.next;
diff --git a/src/core/ngx_slab.h b/src/core/ngx_slab.h
index c5e420b..287ac79 100644
--- a/src/core/ngx_slab.h
+++ b/src/core/ngx_slab.h
@@ -19,6 +19,8 @@ struct ngx_slab_page_s {
uintptr_t slab;
ngx_slab_page_t *next;
uintptr_t prev;
+ uintptr_t prev_slab;
+ /* number of pages for the previous adjacent block */
};
@@ -31,6 +33,8 @@ typedef struct {
ngx_slab_page_t *pages;
ngx_slab_page_t free;
+ ngx_uint_t npages;
+
u_char *start;
u_char *end;

View File

@ -0,0 +1,40 @@
diff -rudp nginx-1.9.3/src/http/ngx_http_upstream.c nginx-1.9.3-patched/src/http/ngx_http_upstream.c
--- nginx-1.9.3/src/http/ngx_http_upstream.c 2012-08-06 10:34:08.000000000 -0700
+++ nginx-1.9.3-patched/src/http/ngx_http_upstream.c 2012-12-05 14:46:41.741173058 -0800
@@ -1216,6 +1216,7 @@ ngx_http_upstream_connect(ngx_http_reque
}
u->request_sent = 0;
+ u->request_all_sent = 0;
if (rc == NGX_AGAIN) {
ngx_add_timer(c->write, u->conf->connect_timeout);
@@ -1418,6 +1419,8 @@ ngx_http_upstream_send_request(ngx_http_
/* rc == NGX_OK */
+ u->request_all_sent = 1;
+
if (c->tcp_nopush == NGX_TCP_NOPUSH_SET) {
if (ngx_tcp_push(c->fd) == NGX_ERROR) {
ngx_log_error(NGX_LOG_CRIT, c->log, ngx_socket_errno,
@@ -1484,7 +1487,7 @@ ngx_http_upstream_send_request_handler(n
#endif
- if (u->header_sent) {
+ if (u->request_all_sent) {
u->write_event_handler = ngx_http_upstream_dummy_handler;
(void) ngx_handle_write_event(c->write, 0);
diff -rudp nginx-1.9.3/src/http/ngx_http_upstream.h nginx-1.9.3-patched/src/http/ngx_http_upstream.h
--- nginx-1.9.3/src/http/ngx_http_upstream.h 2012-02-13 03:01:58.000000000 -0800
+++ nginx-1.9.3-patched/src/http/ngx_http_upstream.h 2012-12-05 14:41:09.763514741 -0800
@@ -324,6 +324,7 @@ struct ngx_http_upstream_s {
unsigned keepalive:1;
unsigned request_sent:1;
+ unsigned request_all_sent:1;
unsigned header_sent:1;
};

View File

@ -86,6 +86,7 @@ sub run_test ($) {
#$expected_makefile =~ s/\$OPENRESTY_BUILD_DIR\b/$BuildRoot/gs; #$expected_makefile =~ s/\$OPENRESTY_BUILD_DIR\b/$BuildRoot/gs;
$makefile =~ s/\Q$BuildRoot\E/\$OPENRESTY_BUILD_DIR/g; $makefile =~ s/\Q$BuildRoot\E/\$OPENRESTY_BUILD_DIR/g;
$makefile =~ s/\Q$DistRoot\E/\$OPENRESTY_DIR/g;
is($makefile, $expected_makefile, "$name - Makefile ok"); is($makefile, $expected_makefile, "$name - Makefile ok");
} }

1987
t/sanity.t

File diff suppressed because it is too large Load Diff

26
util/build-win32.sh Normal file
View File

@ -0,0 +1,26 @@
#!/bin/bash
rm -rf objs || exit 1
mkdir -p objs/lib || exit 1
cd objs/lib || exit 1
ls ../../..
tar -xf ../../../openssl-1.0.2d.tar.gz
tar -xf ../../../zlib-1.2.8.tar.gz
tar -xf ../../../pcre-8.37.tar.gz
cd ../..
#--with-openssl-opt="no-asm" \
./configure --with-cc=gcc --with-ipv6 --prefix= \
--with-cc-opt='-DFD_SETSIZE=1024' \
--sbin-path=nginx.exe \
--with-ipv6 \
--with-pcre-jit \
--with-luajit-xcflags="-DLUAJIT_NUMMODE=2 -DLUAJIT_ENABLE_LUA52COMPAT" \
--with-pcre=objs/lib/pcre-8.37 \
--with-zlib=objs/lib/zlib-1.2.8 \
--with-openssl=objs/lib/openssl-1.0.2d \
--with-select_module -j5 || exit 1
#gmake -j5
make || exit 1
make install

164
util/configure vendored
View File

@ -33,6 +33,8 @@ for my $opt (@ARGV) {
} }
} }
my @extra_make_env;
my ($platform, $on_solaris); my ($platform, $on_solaris);
if ($OS =~ /solaris|sunos/i) { if ($OS =~ /solaris|sunos/i) {
@ -43,7 +45,9 @@ if ($OS =~ /solaris|sunos/i) {
$platform = $OS; $platform = $OS;
} elsif ($OS eq 'MSWin32') { } elsif ($OS eq 'MSWin32') {
die "MS Windows not supported. Abort.\n"; die "MS Windows not supported. Abort.\n",
"(You need to use the MSYS toolchain, ",
"including MinGW gcc, MSYS perl, MSYS bash, and etc.\n";
} elsif ($OS =~ /^(?:MacOS|darwin|rhapsody)$/) { } elsif ($OS =~ /^(?:MacOS|darwin|rhapsody)$/) {
$platform = 'macosx'; $platform = 'macosx';
@ -54,6 +58,9 @@ if ($OS =~ /solaris|sunos/i) {
} elsif ($OS =~ /^(?:openbsd|netbsd|dragonfly)$/) { } elsif ($OS =~ /^(?:openbsd|netbsd|dragonfly)$/) {
$platform = 'bsd'; $platform = 'bsd';
} elsif ($OS eq 'msys') {
$platform = 'msys';
} else { } else {
$platform = 'posix'; $platform = 'posix';
} }
@ -153,6 +160,9 @@ for my $opt (@ARGV) {
if ($opt =~ /^--prefix=(.*)/) { if ($opt =~ /^--prefix=(.*)/) {
$prefix = $1; $prefix = $1;
if ($prefix eq '') {
$prefix = '.';
}
} elsif ($opt eq '--without-lua51') { } elsif ($opt eq '--without-lua51') {
undef $resty_opts{lua}; undef $resty_opts{lua};
@ -276,8 +286,15 @@ for my $opt (@ARGV) {
} elsif ($opt =~ /^--with-(openssl|pcre|zlib|libatomic|md5|sha1)=(.*)/) { } elsif ($opt =~ /^--with-(openssl|pcre|zlib|libatomic|md5|sha1)=(.*)/) {
my $path = File::Spec->rel2abs($2); my ($lib, $path) = ($1, $2);
push @ngx_opts, "--with-$1=$path"; if ($lib eq 'openssl' && $OS eq 'darwin') {
if (`uname -a` =~ /\bx86_64\b/) {
$ENV{KERNEL_BITS} = 64;
push @extra_make_env, 'KERNEL_BITS=64';
}
}
$path = File::Spec->rel2abs($path);
push @ngx_opts, "--with-$lib=$path";
} elsif ($opt =~ /^--\w.*/) { } elsif ($opt =~ /^--\w.*/) {
push @ngx_opts, $opt; push @ngx_opts, $opt;
@ -289,7 +306,12 @@ for my $opt (@ARGV) {
print "platform: $platform ($OS)\n"; print "platform: $platform ($OS)\n";
my $ngx_prefix = "$prefix/nginx"; my $ngx_prefix;
if ($platform eq 'msys') {
$ngx_prefix = "$prefix";
} else {
$ngx_prefix = "$prefix/nginx";
}
my $postamble = ''; my $postamble = '';
@ -329,6 +351,12 @@ if ($postamble) {
sub env ($$) { sub env ($$) {
my ($name, $val) = @_; my ($name, $val) = @_;
if (!defined $name) {
die "env not defined";
}
if (!defined $val) {
die "env $name takes undef value";
}
print "export $name='$val'\n"; print "export $name='$val'\n";
$ENV{$name} = $val; $ENV{$name} = $val;
} }
@ -380,7 +408,7 @@ sub build_resty_opts {
} }
} else { } else {
if (can_run("gmake")) { if (can_run("gmake")) { # msys has no gmake
$make = 'gmake'; $make = 'gmake';
} else { } else {
@ -528,8 +556,8 @@ _END_
if ($opts->{luajit_path}) { if ($opts->{luajit_path}) {
my $luajit_prefix = $opts->{luajit_path}; my $luajit_prefix = $opts->{luajit_path};
my $lib = "$luajit_prefix/lib"; my $lib = File::Spec->catfile($luajit_prefix, "lib");
my $inc = "$luajit_prefix/include/luajit-2.1"; my $inc = File::Spec->catfile($luajit_prefix, "include", "luajit-2.1");
env LUAJIT_LIB => $lib; env LUAJIT_LIB => $lib;
env LUAJIT_INC => $inc; env LUAJIT_INC => $inc;
@ -541,7 +569,7 @@ _END_
} elsif ($opts->{luajit}) { } elsif ($opts->{luajit}) {
my $luajit_src = auto_complete 'LuaJIT'; my $luajit_src = auto_complete 'LuaJIT';
my $luajit_prefix = "$prefix/luajit"; my $luajit_prefix = File::Spec->catfile($prefix, "luajit");
my $luajit_root = File::Spec->rel2abs("luajit-root"); my $luajit_root = File::Spec->rel2abs("luajit-root");
if (-d $luajit_root) { if (-d $luajit_root) {
@ -600,16 +628,43 @@ _END_
shell "${make}$extra_opts PREFIX=$luajit_prefix", $dry_run; shell "${make}$extra_opts PREFIX=$luajit_prefix", $dry_run;
} }
shell "${make} install$extra_opts PREFIX=$luajit_prefix DESTDIR=$luajit_root", $dry_run; my ($lib, $inc);
if ($platform eq 'msys') {
$lib = $luajit_root;
shell "install -m 0755 src/luajit.exe src/lua51.dll $lib/", $dry_run;
my $lua_jit_dir = File::Spec->catfile($luajit_root, "lua", "jit");
shell "mkdir -p $lua_jit_dir", $dry_run;
shell "install -m 0644 src/jit/*.lua $lua_jit_dir/", $dry_run;
$inc = File::Spec->catfile($luajit_root, "include", "luajit-2.1");
shell "mkdir -p $inc", $dry_run;
shell "cd src && install -m 0644 lua.h lualib.h lauxlib.h luaconf.h lua.hpp luajit.h $inc/",
$dry_run;
} else {
shell "${make} install$extra_opts PREFIX=$luajit_prefix DESTDIR=$luajit_root/", $dry_run;
$lib = File::Spec->catfile($luajit_root, $luajit_prefix, "lib");
$inc = File::Spec->catfile($luajit_root, $luajit_prefix, "include", "luajit-2.1");
}
push @make_cmds, "cd $root_dir/build/$luajit_src && " push @make_cmds, "cd $root_dir/build/$luajit_src && "
. "\$(MAKE)$extra_opts PREFIX=$luajit_prefix"; . "\$(MAKE)$extra_opts PREFIX=$luajit_prefix";
push @make_install_cmds, "cd $root_dir/build/$luajit_src && " my $abs_luajit_src = File::Spec->rel2abs(File::Spec->catfile($root_dir, "build", $luajit_src), $root_dir);
. "\$(MAKE) install$extra_opts PREFIX=$luajit_prefix DESTDIR=\$(DESTDIR)";
my $lib = "$luajit_root$luajit_prefix/lib"; if ($platform eq 'msys') {
my $inc = "$luajit_root$luajit_prefix/include/luajit-2.1"; push @make_install_cmds, "cd $abs_luajit_src && "
. "cp -rv $luajit_root/* \$(DESTDIR)$prefix/";
} else {
push @make_install_cmds, "cd $abs_luajit_src && "
. "\$(MAKE) install$extra_opts PREFIX=$luajit_prefix DESTDIR=\$(DESTDIR)";
}
env LUAJIT_LIB => $lib; env LUAJIT_LIB => $lib;
env LUAJIT_INC => $inc; env LUAJIT_INC => $inc;
@ -617,16 +672,18 @@ _END_
#unshift @ngx_ld_opts, "-L$lib"; #unshift @ngx_ld_opts, "-L$lib";
#unshift @ngx_cc_opts, "-I$inc"; #unshift @ngx_cc_opts, "-I$inc";
push @ngx_rpaths, "$luajit_prefix/lib"; if ($platform ne 'msys') {
push @ngx_rpaths, File::Spec->catfile($luajit_prefix, "lib");
}
cd '..'; cd '..';
} elsif ($opts->{lua_path}) { } elsif ($opts->{lua_path}) {
my $lua_prefix = $opts->{lua_path}; my $lua_prefix = $opts->{lua_path};
env LUA_LIB => "$lua_prefix/lib"; env LUA_LIB => File::Spec->catfile($lua_prefix, "lib");
env LUA_INC => "$lua_prefix/include"; env LUA_INC => File::Spec->catfile($lua_prefix, "include");
push @ngx_rpaths, "$lua_prefix/lib"; push @ngx_rpaths, File::Spec->catfile($lua_prefix, "lib");
} elsif ($opts->{lua}) { } elsif ($opts->{lua}) {
# build stdandard lua # build stdandard lua
@ -637,7 +694,7 @@ _END_
die "No lua5 found"; die "No lua5 found";
} }
my $lua_prefix = "$prefix/lua"; my $lua_prefix = File::Spec->catfile($prefix, "lua");
my $lua_root = File::Spec->rel2abs("lua-root"); my $lua_root = File::Spec->rel2abs("lua-root");
if (-d $lua_root) { if (-d $lua_root) {
@ -660,10 +717,11 @@ _END_
shell "${make}$extra_opts $platform", $dry_run; shell "${make}$extra_opts $platform", $dry_run;
} }
shell "${make} install$extra_opts INSTALL_TOP=$lua_root$lua_prefix", $dry_run; my $install_top = File::Spec->catfile($lua_root, $lua_prefix);
shell "${make} install$extra_opts INSTALL_TOP=$install_top/", $dry_run;
env LUA_LIB => "$lua_root$lua_prefix/lib"; env LUA_LIB => File::Spec->catfile($lua_root, $lua_prefix, "lib");
env LUA_INC => "$lua_root$lua_prefix/include"; env LUA_INC => File::Spec->catfile($lua_root, $lua_prefix, "include");
push @make_cmds, "cd $root_dir/build/$lua_src && \$(MAKE)$extra_opts $platform"; push @make_cmds, "cd $root_dir/build/$lua_src && \$(MAKE)$extra_opts $platform";
@ -678,19 +736,30 @@ _END_
{ {
# build lua modules # build lua modules
my $lualib_prefix = "$prefix/lualib"; my $lualib_prefix = File::Spec->catfile($prefix, "lualib");
my $ngx_lua_dir = auto_complete 'ngx_lua'; my $ngx_lua_dir = auto_complete 'ngx_lua';
open my $in, ">>$ngx_lua_dir/config" or open my $in, ">>$ngx_lua_dir/config" or
die "Cannot open $ngx_lua_dir/config for appending: $!\n"; die "Cannot open $ngx_lua_dir/config for appending: $!\n";
{
my $path_prefix = $lualib_prefix;
#if (File::Spec->rel2abs($lualib_prefix) ne File::Spec->canonpath($lualib_prefix)
#&& $platform eq 'msys')
#{
# being a relative path and on MSYS
#$path_prefix = "!/$lualib_prefix";
#}
print $in <<"_EOC_"; print $in <<"_EOC_";
ngx_lua_dquote='"' ngx_lua_dquote='"'
CFLAGS="\$CFLAGS -DLUA_DEFAULT_PATH='\$ngx_lua_dquote$lualib_prefix/?.lua;$lualib_prefix/?/init.lua\$ngx_lua_dquote'" CFLAGS="\$CFLAGS -DLUA_DEFAULT_PATH='\$ngx_lua_dquote$path_prefix/?.lua;$path_prefix/?/init.lua\$ngx_lua_dquote'"
CFLAGS="\$CFLAGS -DLUA_DEFAULT_CPATH='\$ngx_lua_dquote$lualib_prefix/?.so\$ngx_lua_dquote'" CFLAGS="\$CFLAGS -DLUA_DEFAULT_CPATH='\$ngx_lua_dquote$path_prefix/?.so\$ngx_lua_dquote'"
_EOC_ _EOC_
}
close $in; close $in;
@ -711,6 +780,11 @@ _EOC_
my $extra_opts = " DESTDIR=\$(DESTDIR) LUA_INCLUDE_DIR=$lua_inc " . my $extra_opts = " DESTDIR=\$(DESTDIR) LUA_INCLUDE_DIR=$lua_inc " .
"LUA_CMODULE_DIR=$lualib_prefix LUA_MODULE_DIR=$lualib_prefix"; "LUA_CMODULE_DIR=$lualib_prefix LUA_MODULE_DIR=$lualib_prefix";
if ($platform eq 'msys') {
my $luajit_root = File::Spec->rel2abs("luajit-root");
$extra_opts .= " CJSON_LDFLAGS=\"-shared -L$luajit_root -llua51\"";
}
if ($on_solaris) { if ($on_solaris) {
#$extra_opts .= " INSTALL=$root_dir/build/install"; #$extra_opts .= " INSTALL=$root_dir/build/install";
if ($opts->{debug}) { if ($opts->{debug}) {
@ -762,11 +836,15 @@ _EOC_
my $extra_opts = " DESTDIR=\$(DESTDIR) LUA_INCLUDE_DIR=$lua_inc " . my $extra_opts = " DESTDIR=\$(DESTDIR) LUA_INCLUDE_DIR=$lua_inc " .
"LUA_LIB_DIR=$lualib_prefix"; "LUA_LIB_DIR=$lualib_prefix";
if ($platform eq 'msys') {
my $luajit_root = File::Spec->rel2abs("luajit-root");
$extra_opts .= " LDFLAGS=\"-shared -L$luajit_root -llua51\"";
}
if ($on_solaris) { if ($on_solaris) {
$extra_opts .= " INSTALL=$root_dir/build/install"; $extra_opts .= " INSTALL=$root_dir/build/install";
if ($opts->{debug}) { if ($opts->{debug}) {
$extra_opts .= " CFLAGS=\"-g -O -Wall\""; $extra_opts .= " CFLAGS=\"-g -O -Wall\"";
} }
} else { } else {
@ -809,6 +887,11 @@ _EOC_
my $extra_opts = " DESTDIR=\$(DESTDIR) LUA_INCLUDE_DIR=$lua_inc " . my $extra_opts = " DESTDIR=\$(DESTDIR) LUA_INCLUDE_DIR=$lua_inc " .
"LUA_LIB_DIR=$lualib_prefix"; "LUA_LIB_DIR=$lualib_prefix";
if ($platform eq 'msys') {
my $luajit_root = File::Spec->rel2abs("luajit-root");
$extra_opts .= " LDFLAGS=\"-shared -L$luajit_root -llua51\"";
}
if ($on_solaris) { if ($on_solaris) {
$extra_opts .= " INSTALL=$root_dir/build/install"; $extra_opts .= " INSTALL=$root_dir/build/install";
if ($opts->{debug}) { if ($opts->{debug}) {
@ -861,9 +944,17 @@ _EOC_
# configure resty-cli: # configure resty-cli:
{
my $resty_cli_dir = auto_complete 'resty-cli'; my $resty_cli_dir = auto_complete 'resty-cli';
my $target_dir;
if ($platform eq 'msys') {
$target_dir = "\$(DESTDIR)$prefix/";
} else {
$target_dir = "\$(DESTDIR)$prefix/bin/";
}
push @make_install_cmds, "cd $root_dir/build/$resty_cli_dir && " push @make_install_cmds, "cd $root_dir/build/$resty_cli_dir && "
. "$root_dir/build/install resty \$(DESTDIR)/$prefix/bin/"; . "$root_dir/build/install resty $target_dir";
}
# prepare nginx configure line # prepare nginx configure line
@ -898,17 +989,16 @@ sub usage ($) {
my $msg = <<'_EOC_'; my $msg = <<'_EOC_';
--help this message --help this message
--prefix=PATH set the installation prefix (default to /usr/local/openresty). --prefix=PATH set the installation prefix (default to /usr/local/openresty)
--with-debug enable the debugging logging and also enable -O0 -g for the C compiler. --with-debug enable debug logging
this not only affects nginx, but also other components.
--with-dtrace-probes enable dtrace USDT probes --with-dtrace-probes enable dtrace USDT probes
--with-dtrace=PATH set dtrace utility pathname --with-dtrace=PATH set dtrace utility pathname
--with-no-pool-patch enable the no-pool patch for debugging memory issues. --with-no-pool-patch enable the no-pool patch for debugging memory issues
-jN pass -jN option to make while building the bundled -jN pass -jN option to make while building the bundled
Lua 5.1 interpreter or LuaJIT 2.1. Lua 5.1 interpreter or LuaJIT 2.1
_EOC_ _EOC_
@ -1007,12 +1097,13 @@ Options directly inherited from nginx
--builddir=DIR set the build directory --builddir=DIR set the build directory
--with-rtsig_module enable rtsig module
--with-select_module enable select module --with-select_module enable select module
--without-select_module disable select module --without-select_module disable select module
--with-poll_module enable poll module --with-poll_module enable poll module
--without-poll_module disable poll module --without-poll_module disable poll module
--with-threads enable thread pool support
--with-file-aio enable file aio support --with-file-aio enable file aio support
--with-ipv6 enable ipv6 support --with-ipv6 enable ipv6 support
@ -1140,6 +1231,15 @@ sub gen_makefile {
open my $out, ">Makefile" or open my $out, ">Makefile" or
die "Cannot open Makefile for writing: $!\n"; die "Cannot open Makefile for writing: $!\n";
for my $line (@extra_make_env) {
print $out "export $line\n";
}
if (File::Spec->rel2abs($prefix) ne File::Spec->canonpath($prefix)) {
# prefix is a relative path.
print $out "DESTDIR ?= $root_dir/\n\n";
}
print $out ".PHONY: all install clean\n\n"; print $out ".PHONY: all install clean\n\n";
print $out "all:\n\t" . join("\n\t", @make_cmds) . "\n\n"; print $out "all:\n\t" . join("\n\t", @make_cmds) . "\n\n";

View File

@ -67,6 +67,7 @@ write_config_file "/tmp/nginx.conf";
warn "=== Without Gzip/SSL/PCRE ===\n"; warn "=== Without Gzip/SSL/PCRE ===\n";
$prefix = "/usr/local/openresty-nogzip"; $prefix = "/usr/local/openresty-nogzip";
sh "sudo rm -rf $prefix/lualib $prefix/luajit $prefix/bin $prefix/lua $prefix/nginx/sbin $prefix/nginx/html";
unless ($opts{f}) { unless ($opts{f}) {
sh "./configure $cfg_opts --without-http_rewrite_module --without-http_ssl_module --without-pcre --without-http_gzip_module --prefix=$prefix -j$jobs > /dev/null"; sh "./configure $cfg_opts --without-http_rewrite_module --without-http_ssl_module --without-pcre --without-http_gzip_module --prefix=$prefix -j$jobs > /dev/null";
} }
@ -87,8 +88,28 @@ sh "sudo $prefix/nginx/sbin/nginx -sstop";
$cfg_opts .= " --with-http_iconv_module"; $cfg_opts .= " --with-http_iconv_module";
warn "\n=== --with-threads ===\n";
$prefix = "/usr/local/openresty-threads";
sh "sudo rm -rf $prefix/lualib $prefix/luajit $prefix/bin $prefix/lua $prefix/nginx/sbin $prefix/nginx/html";
unless ($opts{f}) {
sh "./configure $cfg_opts --with-threads --prefix=$prefix -j$jobs > /dev/null";
}
sh "$make -j$jobs > /dev/null";
sh "sudo $make install > /dev/null";
sh "sudo cp /tmp/nginx.conf $prefix/nginx/conf/nginx.conf";
sh "$prefix/nginx/sbin/nginx -V 2>&1 |grep $ver";
sh "$prefix/nginx/sbin/nginx -V 2>&1 |grep '\\--with-threads'";
system "sudo killall nginx > /dev/null 2>&1";
sh "sudo $prefix/nginx/sbin/nginx";
sh "curl -si localhost/lua|grep $lua";
sh "curl -si localhost/lua|grep $ver";
sh "curl -si localhost/cjson|grep 'json.safe: '";
sh qq{$prefix/bin/resty -e 'ngx.say("Hello World!")'|grep 'Hello World'};
sh "sudo $prefix/nginx/sbin/nginx -sstop";
warn "\n=== No Pool Build ===\n"; warn "\n=== No Pool Build ===\n";
$prefix = "/usr/local/openresty-nopool"; $prefix = "/usr/local/openresty-nopool";
sh "sudo rm -rf $prefix/lualib $prefix/luajit $prefix/bin $prefix/lua $prefix/nginx/sbin $prefix/nginx/html";
unless ($opts{f}) { unless ($opts{f}) {
sh "./configure --with-no-pool-patch $cfg_opts --prefix=$prefix -j$jobs > /dev/null"; sh "./configure --with-no-pool-patch $cfg_opts --prefix=$prefix -j$jobs > /dev/null";
} }
@ -108,6 +129,7 @@ sh "sudo $prefix/nginx/sbin/nginx -sstop";
warn "\n=== Normal Build ===\n"; warn "\n=== Normal Build ===\n";
$prefix = "/usr/local/openresty"; $prefix = "/usr/local/openresty";
sh "sudo rm -rf $prefix/lualib $prefix/luajit $prefix/bin $prefix/lua $prefix/nginx/sbin $prefix/nginx/html";
unless ($opts{f}) { unless ($opts{f}) {
sh "./configure $cfg_opts -j$jobs > /dev/null"; sh "./configure $cfg_opts -j$jobs > /dev/null";
} }
@ -125,6 +147,7 @@ sh "sudo $prefix/nginx/sbin/nginx -sstop";
warn "\n=== Debug Build ===\n"; warn "\n=== Debug Build ===\n";
$prefix = "/usr/local/openresty-debug"; $prefix = "/usr/local/openresty-debug";
sh "sudo rm -rf $prefix/lualib $prefix/luajit $prefix/bin $prefix/lua $prefix/nginx/sbin $prefix/nginx/html";
unless ($opts{f}) { unless ($opts{f}) {
my $more_cfg_opts = ''; my $more_cfg_opts = '';
if ($lua eq 'LuaJIT') { if ($lua eq 'LuaJIT') {
@ -147,6 +170,7 @@ sh "sudo $prefix/nginx/sbin/nginx -sstop";
warn "\n=== DTrace Build ===\n"; warn "\n=== DTrace Build ===\n";
$prefix = "/usr/local/openresty-dtrace"; $prefix = "/usr/local/openresty-dtrace";
sh "sudo rm -rf $prefix/lualib $prefix/luajit $prefix/bin $prefix/lua $prefix/nginx/sbin $prefix/nginx/html";
unless ($opts{f}) { unless ($opts{f}) {
sh "./configure $cfg_opts --with-dtrace-probes --prefix=$prefix -j$jobs > /dev/null"; sh "./configure $cfg_opts --with-dtrace-probes --prefix=$prefix -j$jobs > /dev/null";
} }

20
util/fix-pod2markdown Executable file
View File

@ -0,0 +1,20 @@
#!/usr/bin/env perl
use strict;
use warnings;
my $indented;
while (<>) {
if (/^ \S/) {
$indented = 1;
print;
next;
}
if ($indented) {
if (/^[^-\#=\s]/) {
print "\n";
}
undef $indented;
}
print;
}

View File

@ -26,7 +26,7 @@ fi
################################# #################################
ver="$main_ver" ver="$main_ver"
$root/util/get-tarball "http://nginx.org/download/nginx-$ver.tar.gz" -O nginx-$ver.tar.gz || exit 1 $root/util/get-tarball "http://openresty.org/download/nginx-$ver.tar.gz" -O nginx-$ver.tar.gz || exit 1
tar -xzf nginx-$ver.tar.gz || exit 1 tar -xzf nginx-$ver.tar.gz || exit 1
cd nginx-$ver || exit 1 cd nginx-$ver || exit 1
@ -251,9 +251,12 @@ echo "$info_txt applying the pcre_conf_opt patch for nginx $ver"
patch -p1 < $root/patches/nginx-$ver-pcre_conf_opt.patch || exit 1 patch -p1 < $root/patches/nginx-$ver-pcre_conf_opt.patch || exit 1
echo echo
echo "$info_txt applying the upstream_filter_finalize patch for nginx" answer=`$root/util/ver-ge "$main_ver" 1.9.2`
patch -p1 < $root/patches/nginx-$main_ver-upstream_filter_finalize.patch || exit 1 if [ "$answer" = "N" ]; then
echo echo "$info_txt applying the upstream_filter_finalize patch for nginx"
patch -p1 < $root/patches/nginx-$main_ver-upstream_filter_finalize.patch || exit 1
echo
fi
answer=`$root/util/ver-ge "$main_ver" 1.5.9` answer=`$root/util/ver-ge "$main_ver" 1.5.9`
if [ "$answer" = "N" ]; then if [ "$answer" = "N" ]; then
@ -292,6 +295,10 @@ fi
rm -f *.patch || exit 1 rm -f *.patch || exit 1
echo "$info_txt applying the always_enable_cc_feature_tests patch to nginx"
patch -p1 < $root/patches/nginx-$main_ver-always_enable_cc_feature_tests.patch
echo
cd .. || exit 1 cd .. || exit 1
cp $root/patches/nginx-$main_ver-no_pool.patch ./nginx-no_pool.patch || exit 1 cp $root/patches/nginx-$main_ver-no_pool.patch ./nginx-no_pool.patch || exit 1
@ -338,14 +345,14 @@ mv openresty-rds-json-nginx-module-* rds-json-nginx-module-$ver || exit 1
################################# #################################
ver=0.06 ver=0.07
$root/util/get-tarball "https://github.com/openresty/rds-csv-nginx-module/tarball/v$ver" -O rds-csv-nginx-module-$ver.tar.gz || exit 1 $root/util/get-tarball "https://github.com/openresty/rds-csv-nginx-module/tarball/v$ver" -O rds-csv-nginx-module-$ver.tar.gz || exit 1
tar -xzf rds-csv-nginx-module-$ver.tar.gz || exit 1 tar -xzf rds-csv-nginx-module-$ver.tar.gz || exit 1
mv openresty-rds-csv-nginx-module-* rds-csv-nginx-module-$ver || exit 1 mv openresty-rds-csv-nginx-module-* rds-csv-nginx-module-$ver || exit 1
################################# #################################
ver=0.26 ver=0.28
$root/util/get-tarball "https://github.com/openresty/headers-more-nginx-module/tarball/v$ver" -O headers-more-nginx-module-$ver.tar.gz || exit 1 $root/util/get-tarball "https://github.com/openresty/headers-more-nginx-module/tarball/v$ver" -O headers-more-nginx-module-$ver.tar.gz || exit 1
tar -xzf headers-more-nginx-module-$ver.tar.gz || exit 1 tar -xzf headers-more-nginx-module-$ver.tar.gz || exit 1
mv openresty-headers-more-nginx-module-* headers-more-nginx-module-$ver || exit 1 mv openresty-headers-more-nginx-module-* headers-more-nginx-module-$ver || exit 1
@ -359,14 +366,14 @@ mv openresty-drizzle-nginx-module-* drizzle-nginx-module-$ver || exit 1
################################# #################################
ver=0.9.16 ver=0.9.19
$root/util/get-tarball "https://github.com/openresty/lua-nginx-module/tarball/v$ver" -O lua-nginx-module-$ver.tar.gz || exit 1 $root/util/get-tarball "https://github.com/openresty/lua-nginx-module/tarball/v$ver" -O lua-nginx-module-$ver.tar.gz || exit 1
tar -xzf lua-nginx-module-$ver.tar.gz || exit 1 tar -xzf lua-nginx-module-$ver.tar.gz || exit 1
mv openresty-lua-nginx-module-* ngx_lua-$ver || exit 1 mv openresty-lua-nginx-module-* ngx_lua-$ver || exit 1
################################# #################################
ver=0.03 ver=0.04
$root/util/get-tarball "https://github.com/openresty/lua-upstream-nginx-module/tarball/v$ver" -O lua-upstream-nginx-module-$ver.tar.gz || exit 1 $root/util/get-tarball "https://github.com/openresty/lua-upstream-nginx-module/tarball/v$ver" -O lua-upstream-nginx-module-$ver.tar.gz || exit 1
tar -xzf lua-upstream-nginx-module-$ver.tar.gz || exit 1 tar -xzf lua-upstream-nginx-module-$ver.tar.gz || exit 1
mv openresty-lua-upstream-nginx-module-* ngx_lua_upstream-$ver || exit 1 mv openresty-lua-upstream-nginx-module-* ngx_lua_upstream-$ver || exit 1
@ -401,7 +408,7 @@ mv calio-form-input-nginx-module-* form-input-nginx-module-$ver || exit 1
################################# #################################
ver=0.11 ver=0.13
$root/util/get-tarball "https://github.com/calio/iconv-nginx-module/tarball/v$ver" -O iconv-nginx-module-$ver.tar.gz || exit 1 $root/util/get-tarball "https://github.com/calio/iconv-nginx-module/tarball/v$ver" -O iconv-nginx-module-$ver.tar.gz || exit 1
tar -xzf iconv-nginx-module-$ver.tar.gz || exit 1 tar -xzf iconv-nginx-module-$ver.tar.gz || exit 1
mv calio-iconv-nginx-module-* iconv-nginx-module-$ver || exit 1 mv calio-iconv-nginx-module-* iconv-nginx-module-$ver || exit 1
@ -440,7 +447,7 @@ cd ..
################################# #################################
ver=1.0rc6 ver=1.0rc7
$root/util/get-tarball "https://github.com/FRiCKLE/ngx_postgres/tarball/$ver" -O ngx_postgres-$ver.tar.gz || exit 1 $root/util/get-tarball "https://github.com/FRiCKLE/ngx_postgres/tarball/$ver" -O ngx_postgres-$ver.tar.gz || exit 1
tar -xzf ngx_postgres-$ver.tar.gz || exit 1 tar -xzf ngx_postgres-$ver.tar.gz || exit 1
mv FRiCKLE-ngx_postgres-* ngx_postgres-$ver || exit 1 mv FRiCKLE-ngx_postgres-* ngx_postgres-$ver || exit 1
@ -461,7 +468,7 @@ mv openresty-redis2-nginx-module-* redis2-nginx-module-$ver || exit 1
################################# #################################
ver=0.03 ver=0.04
$root/util/get-tarball "https://github.com/openresty/resty-cli/tarball/v$ver" -O resty-cli-$ver.tar.gz || exit 1 $root/util/get-tarball "https://github.com/openresty/resty-cli/tarball/v$ver" -O resty-cli-$ver.tar.gz || exit 1
tar -xzf resty-cli-$ver.tar.gz || exit 1 tar -xzf resty-cli-$ver.tar.gz || exit 1
mv openresty-resty-cli-* resty-cli-$ver || exit 1 mv openresty-resty-cli-* resty-cli-$ver || exit 1
@ -494,17 +501,17 @@ echo
################################# #################################
ver=2.1-20150622 ver=2.1-20151028
$root/util/get-tarball "https://github.com/openresty/luajit2/archive/v$ver.tar.gz" -O "LuaJIT-$ver.tar.gz" || exit 1 $root/util/get-tarball "https://github.com/openresty/luajit2/archive/v$ver.tar.gz" -O "LuaJIT-$ver.tar.gz" || exit 1
tar -xzf LuaJIT-$ver.tar.gz || exit 1 tar -xzf LuaJIT-$ver.tar.gz || exit 1
mv luajit2-* LuaJIT-$ver || exit 1 mv luajit2-* LuaJIT-$ver || exit 1
#echo "$info_txt applying luajit-$ver hotfix #1 patch for luajit $ver"
#$root/util/get-tarball http://luajit.org/download/v2.0.1_hotfix1.patch -O hotfix.patch #$root/util/get-tarball http://luajit.org/download/v2.0.1_hotfix1.patch -O hotfix.patch
#cd LuaJIT-$ver || exit 1; cd LuaJIT-$ver || exit 1;
#patch -p1 < ../hotfix.patch || exit 1 echo "$info_txt applying the luajit-win32-default-paths patch hotfix #1 patch for luajit $ver"
patch -p1 < $root/patches/luajit-win32-default-paths.patch || exit 1
#rm ../hotfix.patch #rm ../hotfix.patch
#cd .. || exit 1 cd .. || exit 1
#$root/util/get-tarball http://luajit.org/download/beta11_hotfix1.patch -O beta11_hotfix1.patch #$root/util/get-tarball http://luajit.org/download/beta11_hotfix1.patch -O beta11_hotfix1.patch
#patch -p1 < beta11_hotfix1.patch || exit 1 #patch -p1 < beta11_hotfix1.patch || exit 1
@ -515,26 +522,38 @@ mv luajit2-* LuaJIT-$ver || exit 1
################################# #################################
ver=2.1.0.2 ver=2.1.0.3
$root/util/get-tarball "https://github.com/openresty/lua-cjson/archive/$ver.tar.gz" -O "lua-cjson-$ver.tar.gz" || exit 1 $root/util/get-tarball "https://github.com/openresty/lua-cjson/archive/$ver.tar.gz" -O "lua-cjson-$ver.tar.gz" || exit 1
tar -xzf lua-cjson-$ver.tar.gz || exit 1 tar -xzf lua-cjson-$ver.tar.gz || exit 1
cd lua-cjson-$ver || exit 1 #cd lua-cjson-$ver || exit 1
#patch -p1 < $root/patches/lua_cjson-$ver-array_detection_fix.patch || exit 1 #patch -p1 < $root/patches/lua_cjson-$ver-array_detection_fix.patch || exit 1
cd .. #sed 's/\$(DESTDIR)\//$(DESTDIR)/g' Makefile > mk || exit 1
#mv mk Makefile || exit 1
#cd ..
################################# #################################
ver=0.10 ver=0.12
$root/util/get-tarball "https://github.com/openresty/lua-redis-parser/tarball/v$ver" -O "lua-redis-parser-$ver.tar.gz" || exit 1 $root/util/get-tarball "https://github.com/openresty/lua-redis-parser/tarball/v$ver" -O "lua-redis-parser-$ver.tar.gz" || exit 1
tar -xzf lua-redis-parser-$ver.tar.gz || exit 1 tar -xzf lua-redis-parser-$ver.tar.gz || exit 1
mv openresty-lua-redis-parser-* lua-redis-parser-$ver || exit 1 mv openresty-lua-redis-parser-* lua-redis-parser-$ver || exit 1
#cd lua-redis-parser-$ver || exit 1
#patch -p1 < $root/patches/lua_cjson-$ver-array_detection_fix.patch || exit 1
#sed 's/\$(DESTDIR)\//$(DESTDIR)/g' Makefile > mk || exit 1
#mv mk Makefile || exit 1
#cd ..
################################# #################################
ver=0.05 ver=0.06
$root/util/get-tarball "https://github.com/openresty/lua-rds-parser/tarball/v$ver" -O "lua-rds-parser-$ver.tar.gz" || exit 1 $root/util/get-tarball "https://github.com/openresty/lua-rds-parser/tarball/v$ver" -O "lua-rds-parser-$ver.tar.gz" || exit 1
tar -xzf lua-rds-parser-$ver.tar.gz || exit 1 tar -xzf lua-rds-parser-$ver.tar.gz || exit 1
mv openresty-lua-rds-parser-* lua-rds-parser-$ver || exit 1 mv openresty-lua-rds-parser-* lua-rds-parser-$ver || exit 1
cd lua-rds-parser-$ver || exit 1
#patch -p1 < $root/patches/lua_cjson-$ver-array_detection_fix.patch || exit 1
sed 's/\$(DESTDIR)\//$(DESTDIR)/g' Makefile > mk || exit 1
mv mk Makefile || exit 1
cd ..
################################# #################################
@ -542,6 +561,11 @@ ver=0.14
$root/util/get-tarball "https://github.com/openresty/lua-resty-dns/tarball/v$ver" -O "lua-resty-dns-$ver.tar.gz" || exit 1 $root/util/get-tarball "https://github.com/openresty/lua-resty-dns/tarball/v$ver" -O "lua-resty-dns-$ver.tar.gz" || exit 1
tar -xzf lua-resty-dns-$ver.tar.gz || exit 1 tar -xzf lua-resty-dns-$ver.tar.gz || exit 1
mv openresty-lua-resty-dns-* lua-resty-dns-$ver || exit 1 mv openresty-lua-resty-dns-* lua-resty-dns-$ver || exit 1
cd lua-resty-dns-$ver || exit 1
#patch -p1 < $root/patches/lua_cjson-$ver-array_detection_fix.patch || exit 1
sed 's/\$(DESTDIR)\//$(DESTDIR)/g' Makefile > mk || exit 1
mv mk Makefile || exit 1
cd ..
################################# #################################
@ -549,13 +573,23 @@ ver=0.13
$root/util/get-tarball "https://github.com/openresty/lua-resty-memcached/tarball/v$ver" -O "lua-resty-memcached-$ver.tar.gz" || exit 1 $root/util/get-tarball "https://github.com/openresty/lua-resty-memcached/tarball/v$ver" -O "lua-resty-memcached-$ver.tar.gz" || exit 1
tar -xzf lua-resty-memcached-$ver.tar.gz || exit 1 tar -xzf lua-resty-memcached-$ver.tar.gz || exit 1
mv openresty-lua-resty-memcached-* lua-resty-memcached-$ver || exit 1 mv openresty-lua-resty-memcached-* lua-resty-memcached-$ver || exit 1
cd lua-resty-memcached-$ver || exit 1
#patch -p1 < $root/patches/lua_cjson-$ver-array_detection_fix.patch || exit 1
sed 's/\$(DESTDIR)\//$(DESTDIR)/g' Makefile > mk || exit 1
mv mk Makefile || exit 1
cd ..
################################# #################################
ver=0.20 ver=0.21
$root/util/get-tarball "https://github.com/openresty/lua-resty-redis/tarball/v$ver" -O "lua-resty-redis-$ver.tar.gz" || exit 1 $root/util/get-tarball "https://github.com/openresty/lua-resty-redis/tarball/v$ver" -O "lua-resty-redis-$ver.tar.gz" || exit 1
tar -xzf lua-resty-redis-$ver.tar.gz || exit 1 tar -xzf lua-resty-redis-$ver.tar.gz || exit 1
mv openresty-lua-resty-redis-* lua-resty-redis-$ver || exit 1 mv openresty-lua-resty-redis-* lua-resty-redis-$ver || exit 1
cd lua-resty-redis-$ver || exit 1
#patch -p1 < $root/patches/lua_cjson-$ver-array_detection_fix.patch || exit 1
sed 's/\$(DESTDIR)\//$(DESTDIR)/g' Makefile > mk || exit 1
mv mk Makefile || exit 1
cd ..
################################# #################################
@ -563,6 +597,11 @@ ver=0.15
$root/util/get-tarball "https://github.com/openresty/lua-resty-mysql/tarball/v$ver" -O "lua-resty-mysql-$ver.tar.gz" || exit 1 $root/util/get-tarball "https://github.com/openresty/lua-resty-mysql/tarball/v$ver" -O "lua-resty-mysql-$ver.tar.gz" || exit 1
tar -xzf lua-resty-mysql-$ver.tar.gz || exit 1 tar -xzf lua-resty-mysql-$ver.tar.gz || exit 1
mv openresty-lua-resty-mysql-* lua-resty-mysql-$ver || exit 1 mv openresty-lua-resty-mysql-* lua-resty-mysql-$ver || exit 1
cd lua-resty-mysql-$ver || exit 1
#patch -p1 < $root/patches/lua_cjson-$ver-array_detection_fix.patch || exit 1
sed 's/\$(DESTDIR)\//$(DESTDIR)/g' Makefile > mk || exit 1
mv mk Makefile || exit 1
cd ..
################################# #################################
@ -570,6 +609,11 @@ ver=0.09
$root/util/get-tarball "https://github.com/openresty/lua-resty-upload/tarball/v$ver" -O "lua-resty-upload-$ver.tar.gz" || exit 1 $root/util/get-tarball "https://github.com/openresty/lua-resty-upload/tarball/v$ver" -O "lua-resty-upload-$ver.tar.gz" || exit 1
tar -xzf lua-resty-upload-$ver.tar.gz || exit 1 tar -xzf lua-resty-upload-$ver.tar.gz || exit 1
mv openresty-lua-resty-upload-* lua-resty-upload-$ver || exit 1 mv openresty-lua-resty-upload-* lua-resty-upload-$ver || exit 1
cd lua-resty-upload-$ver || exit 1
#patch -p1 < $root/patches/lua_cjson-$ver-array_detection_fix.patch || exit 1
sed 's/\$(DESTDIR)\//$(DESTDIR)/g' Makefile > mk || exit 1
mv mk Makefile || exit 1
cd ..
################################# #################################
@ -577,6 +621,11 @@ ver=0.09
$root/util/get-tarball "https://github.com/openresty/lua-resty-string/tarball/v$ver" -O "lua-resty-string-$ver.tar.gz" || exit 1 $root/util/get-tarball "https://github.com/openresty/lua-resty-string/tarball/v$ver" -O "lua-resty-string-$ver.tar.gz" || exit 1
tar -xzf lua-resty-string-$ver.tar.gz || exit 1 tar -xzf lua-resty-string-$ver.tar.gz || exit 1
mv openresty-lua-resty-string-* lua-resty-string-$ver || exit 1 mv openresty-lua-resty-string-* lua-resty-string-$ver || exit 1
cd lua-resty-string-$ver || exit 1
#patch -p1 < $root/patches/lua_cjson-$ver-array_detection_fix.patch || exit 1
sed 's/\$(DESTDIR)\//$(DESTDIR)/g' Makefile > mk || exit 1
mv mk Makefile || exit 1
cd ..
################################# #################################
@ -584,6 +633,11 @@ ver=0.05
$root/util/get-tarball "https://github.com/openresty/lua-resty-websocket/tarball/v$ver" -O "lua-resty-websocket-$ver.tar.gz" || exit 1 $root/util/get-tarball "https://github.com/openresty/lua-resty-websocket/tarball/v$ver" -O "lua-resty-websocket-$ver.tar.gz" || exit 1
tar -xzf lua-resty-websocket-$ver.tar.gz || exit 1 tar -xzf lua-resty-websocket-$ver.tar.gz || exit 1
mv openresty-lua-resty-websocket-* lua-resty-websocket-$ver || exit 1 mv openresty-lua-resty-websocket-* lua-resty-websocket-$ver || exit 1
cd lua-resty-websocket-$ver || exit 1
#patch -p1 < $root/patches/lua_cjson-$ver-array_detection_fix.patch || exit 1
sed 's/\$(DESTDIR)\//$(DESTDIR)/g' Makefile > mk || exit 1
mv mk Makefile || exit 1
cd ..
################################# #################################
@ -591,6 +645,11 @@ ver=0.04
$root/util/get-tarball "https://github.com/openresty/lua-resty-lock/tarball/v$ver" -O "lua-resty-lock-$ver.tar.gz" || exit 1 $root/util/get-tarball "https://github.com/openresty/lua-resty-lock/tarball/v$ver" -O "lua-resty-lock-$ver.tar.gz" || exit 1
tar -xzf lua-resty-lock-$ver.tar.gz || exit 1 tar -xzf lua-resty-lock-$ver.tar.gz || exit 1
mv openresty-lua-resty-lock-* lua-resty-lock-$ver || exit 1 mv openresty-lua-resty-lock-* lua-resty-lock-$ver || exit 1
cd lua-resty-lock-$ver || exit 1
#patch -p1 < $root/patches/lua_cjson-$ver-array_detection_fix.patch || exit 1
sed 's/\$(DESTDIR)\//$(DESTDIR)/g' Makefile > mk || exit 1
mv mk Makefile || exit 1
cd ..
################################# #################################
@ -598,13 +657,23 @@ ver=0.04
$root/util/get-tarball "https://github.com/openresty/lua-resty-lrucache/tarball/v$ver" -O "lua-resty-lrucache-$ver.tar.gz" || exit 1 $root/util/get-tarball "https://github.com/openresty/lua-resty-lrucache/tarball/v$ver" -O "lua-resty-lrucache-$ver.tar.gz" || exit 1
tar -xzf lua-resty-lrucache-$ver.tar.gz || exit 1 tar -xzf lua-resty-lrucache-$ver.tar.gz || exit 1
mv openresty-lua-resty-lrucache-* lua-resty-lrucache-$ver || exit 1 mv openresty-lua-resty-lrucache-* lua-resty-lrucache-$ver || exit 1
cd lua-resty-lrucache-$ver || exit 1
#patch -p1 < $root/patches/lua_cjson-$ver-array_detection_fix.patch || exit 1
sed 's/\$(DESTDIR)\//$(DESTDIR)/g' Makefile > mk || exit 1
mv mk Makefile || exit 1
cd ..
################################# #################################
ver=0.1.1 ver=0.1.2
$root/util/get-tarball "https://github.com/openresty/lua-resty-core/tarball/v$ver" -O "lua-resty-core-$ver.tar.gz" || exit 1 $root/util/get-tarball "https://github.com/openresty/lua-resty-core/tarball/v$ver" -O "lua-resty-core-$ver.tar.gz" || exit 1
tar -xzf lua-resty-core-$ver.tar.gz || exit 1 tar -xzf lua-resty-core-$ver.tar.gz || exit 1
mv openresty-lua-resty-core-* lua-resty-core-$ver || exit 1 mv openresty-lua-resty-core-* lua-resty-core-$ver || exit 1
cd lua-resty-core-$ver || exit 1
#patch -p1 < $root/patches/lua_cjson-$ver-array_detection_fix.patch || exit 1
sed 's/\$(DESTDIR)\//$(DESTDIR)/g' Makefile > mk || exit 1
mv mk Makefile || exit 1
cd ..
################################# #################################
@ -612,15 +681,27 @@ ver=0.03
$root/util/get-tarball "https://github.com/openresty/lua-resty-upstream-healthcheck/tarball/v$ver" -O "lua-resty-upstream-healthcheck-$ver.tar.gz" || exit 1 $root/util/get-tarball "https://github.com/openresty/lua-resty-upstream-healthcheck/tarball/v$ver" -O "lua-resty-upstream-healthcheck-$ver.tar.gz" || exit 1
tar -xzf lua-resty-upstream-healthcheck-$ver.tar.gz || exit 1 tar -xzf lua-resty-upstream-healthcheck-$ver.tar.gz || exit 1
mv openresty-lua-resty-upstream-healthcheck-* lua-resty-upstream-healthcheck-$ver || exit 1 mv openresty-lua-resty-upstream-healthcheck-* lua-resty-upstream-healthcheck-$ver || exit 1
cd lua-resty-upstream-healthcheck-$ver || exit 1
#patch -p1 < $root/patches/lua_cjson-$ver-array_detection_fix.patch || exit 1
sed 's/\$(DESTDIR)\//$(DESTDIR)/g' Makefile > mk || exit 1
mv mk Makefile || exit 1
cd ..
################################# #################################
rm *.tar.gz rm *.tar.gz
cd .. cd ..
cp $root/util/configure ./ cp $root/util/configure ./ || exit 1
cp $root/README.markdown ./ #markdown2pod -e utf8 -d GitHub $root/README.markdown|$root/util/fix-pod2markdown|pod2text > README || exit 1
cp $root/util/install bundle/ cp $root/README.markdown ./ || exit 1
cp $root/util/install bundle/ || exit 1
mkdir util || exit 1
cp $root/util/package-win32.sh util/ || exit 1
cp $root/util/build-win32.sh util/ || exit 1
cp $root/COPYRIGHT ./ || exit 1
markdown2pod -e utf8 -d GitHub $root/doc/README-win32.md|$root/util/fix-pod2markdown|pod2text > README-win32.txt || exit 1
unix2dos README-win32.txt || exit 1
find bundle -name '*~' -delete find bundle -name '*~' -delete
cd $root cd $root

30
util/package-nginx.sh Executable file
View File

@ -0,0 +1,30 @@
#!/bin/bash
. ./util/ver
ver=$main_ver
cd ..
if [ ! -d nginx ]; then
echo "../nginx/ not found." > /dev/stderr
exit 1
fi
if [ ! -d nginx/.git ]; then
echo "../nginx/.git not found." > /dev/stderr
exit 1
fi
rm -rf nginx-$ver
rm -f nginx-$ver.tar.gz
git clone nginx nginx-$ver || exit 1
cd nginx-$ver/ || exit 1
git co release-$ver || exit 1
rm -rf .git || exit 1
rm .hgtags || exit 1
mv docs/text/README ./ || exit 1
mv auto/configure ./ || exit 1
rm -rf src/mysql || exit 1
cd ..
tar czvf nginx-$ver.tar.gz nginx-$ver || exit 1
ls -lh ./nginx-$ver.tar.gz
ls -lh ~/work/nginx-$ver.tar.gz
scp nginx-$ver.tar.gz agentzh.org:~/www/agentzh/misc/nginx/

19
util/package-win32.sh Executable file
View File

@ -0,0 +1,19 @@
#!/bin/bash
name=`pwd|perl -e '$d=<>;$d=~s{.*?/}{}g;$d=~s/$//g;print $d'`
name="$name-win32"
echo $name
if [ -d $name ]; then
rm -rf $name
fi
mkdir $name || exit 1
cp -r resty nginx.exe luajit.exe lua51.dll lua include lualib html conf logs $name/ || exit 1
cp COPYRIGHT $name/ || exit 1
cp /c/MinGW/bin/libgcc_s_dw2-1.dll $name/ || exit 1
cd $name || exit 1
PATH=/c/Strawberry/perl/bin:$PATH cmd /c 'pl2bat.bat resty' || exit 1
cp ../README-win32.txt README.txt
unix2dos conf/* html/*.html || exit 1
cd .. || exit 1
zip -r $name.zip $name || exit 1
echo $name.zip

View File

@ -1,6 +1,6 @@
#!/bin/bash #!/bin/bash
main_ver=1.7.10 main_ver=1.9.3
minor_ver=2 minor_ver=2
version=$main_ver.$minor_ver version=$main_ver.$minor_ver
echo $version echo $version