mirror of
https://github.com/openresty/openresty.git
synced 2024-10-13 00:29:41 +00:00
Compare commits
111 Commits
Author | SHA1 | Date | |
---|---|---|---|
753ef7074b | |||
8c6b0f77af | |||
52962f3fc9 | |||
0e31ce1662 | |||
da90bd7671 | |||
4a80309873 | |||
383901b193 | |||
9bd838251f | |||
e5fd373848 | |||
db38504310 | |||
2351c7c7aa | |||
f3d36df365 | |||
220b940e66 | |||
c0c2f883e9 | |||
9cf02ba0c0 | |||
5760ca8dee | |||
e1b492fc18 | |||
cada794d74 | |||
ec162777c3 | |||
a9a8ebee7a | |||
ac4d52423c | |||
c0a85e7e3e | |||
c64ff34957 | |||
54b824d1f4 | |||
cdedd89613 | |||
8ebc5c5b16 | |||
e12c526577 | |||
a78f6e3741 | |||
62cc6b3758 | |||
e60f9030ab | |||
eb33b0b08f | |||
83eeb14f6c | |||
d996a90c14 | |||
584c1a7e12 | |||
3882d2572e | |||
ce64259d66 | |||
9b439dde0e | |||
ed8b6996e9 | |||
5fc5745de0 | |||
d55f45c7ff | |||
cba6fbd864 | |||
caea3438eb | |||
cde439a55a | |||
38abb277b5 | |||
1c106bf487 | |||
3cacb62a10 | |||
4374e25548 | |||
0e95be39c1 | |||
d68403407d | |||
f5329c7781 | |||
3ac11ef73c | |||
5db4e19482 | |||
fa3af6cdf8 | |||
828a7eec41 | |||
1f4045ef2c | |||
6a17d2c784 | |||
6624c48881 | |||
7f15701e76 | |||
1220e284aa | |||
d831e27995 | |||
033b2d88ff | |||
622ddd7bb0 | |||
3e94b37750 | |||
2d0119084e | |||
b19b53d6cc | |||
04da1876f0 | |||
e82486be60 | |||
f84e035e45 | |||
c02caa3587 | |||
24eed036c5 | |||
87c988e4ba | |||
46881fd2dc | |||
4907d14700 | |||
60e72cbf82 | |||
97a05513eb | |||
7d0443d5d7 | |||
ce65738299 | |||
2871ccb9ac | |||
aab5001ffc | |||
53952e347e | |||
19de4329b8 | |||
af48ac42d5 | |||
126786276b | |||
ffb5acf592 | |||
9bcdd4b62f | |||
b0a74456ba | |||
357bb4a977 | |||
3ddbf6f8d4 | |||
e1b680f985 | |||
389f3a8041 | |||
2d6112943f | |||
99d5e37f3b | |||
f57f48f6ce | |||
d332766a3f | |||
2e5d8d5179 | |||
9295450eb8 | |||
73db05ca54 | |||
a7f1816ba1 | |||
613241d40d | |||
fc386017f3 | |||
b1f99a6156 | |||
fec2e0249c | |||
d225abe6d1 | |||
5df64b4e63 | |||
78dd9dbc23 | |||
ca9a9824d5 | |||
42d53db5b9 | |||
441cee68b1 | |||
58c89f206d | |||
1f7f6a31b2 | |||
795f52d06c |
4
.gitattributes
vendored
Normal file
4
.gitattributes
vendored
Normal file
@ -0,0 +1,4 @@
|
||||
*.t linguist-language=Text
|
||||
demo/* linguist-language=Text
|
||||
clients/* linguist-language=Text
|
||||
* linguist-language=C
|
4
.gitignore
vendored
4
.gitignore
vendored
@ -66,7 +66,11 @@ util/blog-rows.sql
|
||||
util/comments.sql
|
||||
util/posts.sql
|
||||
ngx_openresty-*
|
||||
openresty-*
|
||||
work/
|
||||
reindex
|
||||
t/*.t_
|
||||
upload
|
||||
upload-win32
|
||||
html_out/
|
||||
TODO
|
||||
|
237
COPYRIGHT
Normal file
237
COPYRIGHT
Normal 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
|
4
Makefile
4
Makefile
@ -7,8 +7,8 @@ test: all
|
||||
prove -r t
|
||||
|
||||
try-luajit: all
|
||||
cd ngx_openresty-`./util/ver` && ./configure --with-luajit
|
||||
cd openresty-`./util/ver` && ./configure --with-luajit
|
||||
|
||||
try-lua: all
|
||||
cd ngx_openresty-`./util/ver` && ./configure && $(MAKE)
|
||||
cd openresty-`./util/ver` && ./configure && $(MAKE)
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
Name
|
||||
====
|
||||
|
||||
ngx_openresty - Turning Nginx into a full-fledged Web App Server
|
||||
OpenResty - Turning Nginx into a Full-Fledged Scriptable Web Platform
|
||||
|
||||
Table of Contents
|
||||
=================
|
||||
@ -17,7 +17,7 @@ Table of Contents
|
||||
Description
|
||||
===========
|
||||
|
||||
ngx_openresty is a full-fledged web application server by bundling the standard nginx core,
|
||||
OpenResty is a full-fledged web application server by bundling the standard nginx core,
|
||||
lots of 3rd-party nginx modules, as well as most of their external dependencies.
|
||||
|
||||
This bundle is maintained Yichun Zhang (agentzh).
|
||||
@ -40,14 +40,25 @@ For Bundle Maintainers
|
||||
|
||||
The bundle's source is at the following git repository:
|
||||
|
||||
https://github.com/agentzh/ngx_openresty
|
||||
https://github.com/openresty/openresty
|
||||
|
||||
To reproduce the bundle tarball, just do
|
||||
|
||||
make
|
||||
```bash
|
||||
make
|
||||
```
|
||||
|
||||
at the top of the bundle source tree.
|
||||
|
||||
Please note that you may need to install some extra dependencies, like `perl`, `dos2unix` and
|
||||
the Perl CPAN mdoule `Markdown::Pod`. On Fedora 22, for example, installing the dependencies
|
||||
is as simple as running the following commands:
|
||||
|
||||
```bash
|
||||
sudo dnf install perl dos2unix
|
||||
sudo cpan Markdown::Pod
|
||||
```
|
||||
|
||||
[Back to TOC](#table-of-contents)
|
||||
|
||||
Mailing List
|
||||
@ -68,7 +79,7 @@ Report Bugs
|
||||
|
||||
You're very welcome to report issues on GitHub:
|
||||
|
||||
https://github.com/agentzh/ngx_openresty/issues
|
||||
https://github.com/openresty/openresty/issues
|
||||
|
||||
[Back to TOC](#table-of-contents)
|
||||
|
||||
@ -77,7 +88,7 @@ Copyright & License
|
||||
|
||||
The bundle itself is licensed under the 2-clause BSD license.
|
||||
|
||||
Copyright (c) 2011-2014, Yichun "agentzh" Zhang (章亦春) <agentzh@gmail.com>, CloudFlare Inc.
|
||||
Copyright (c) 2011-2016, Yichun "agentzh" Zhang (章亦春) <agentzh@gmail.com>, CloudFlare Inc.
|
||||
|
||||
This module is licensed under the terms of the BSD license.
|
||||
|
||||
|
@ -73,7 +73,7 @@
|
||||
<a href="site-binary.tar.gz">Compiled form (.tar.gz)</a>
|
||||
</li>
|
||||
<li class="module-list-item">
|
||||
<a target="_blank" href="http://github.com/agentzh/ngx_openresty/tree/master/demo/[% blog_owner == 'agentzh' ? "Blog" : "Blog2" %]/">
|
||||
<a target="_blank" href="http://github.com/openresty/openresty/tree/master/demo/[% blog_owner == 'agentzh' ? "Blog" : "Blog2" %]/">
|
||||
Source code (Git)
|
||||
</a>
|
||||
</li>
|
||||
|
182
doc/README-win32.md
Normal file
182
doc/README-win32.md
Normal 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/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/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.
|
14
patches/luajit-win32-default-paths.patch
Normal file
14
patches/luajit-win32-default-paths.patch
Normal 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!
|
19
patches/nginx-1.9.2-cache_manager_exit.patch
Normal file
19
patches/nginx-1.9.2-cache_manager_exit.patch
Normal 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) {
|
1148
patches/nginx-1.9.2-dtrace.patch
Normal file
1148
patches/nginx-1.9.2-dtrace.patch
Normal file
File diff suppressed because it is too large
Load Diff
11
patches/nginx-1.9.2-gcc-maybe-uninitialized-warning.patch
Normal file
11
patches/nginx-1.9.2-gcc-maybe-uninitialized-warning.patch
Normal 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;
|
||||
|
20
patches/nginx-1.9.2-hash_overflow.patch
Normal file
20
patches/nginx-1.9.2-hash_overflow.patch
Normal 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; "
|
13
patches/nginx-1.9.2-larger_max_error_str.patch
Normal file
13
patches/nginx-1.9.2-larger_max_error_str.patch
Normal 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
|
||||
|
||||
|
||||
/*********************************/
|
115
patches/nginx-1.9.2-log_escape_non_ascii.patch
Normal file
115
patches/nginx-1.9.2-log_escape_non_ascii.patch
Normal 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;
|
36
patches/nginx-1.9.2-no_Werror.patch
Normal file
36
patches/nginx-1.9.2-no_Werror.patch
Normal 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"
|
90
patches/nginx-1.9.2-no_error_pages.patch
Normal file
90
patches/nginx-1.9.2-no_error_pages.patch
Normal 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;
|
585
patches/nginx-1.9.2-no_pool.patch
Normal file
585
patches/nginx-1.9.2-no_pool.patch
Normal 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;
|
||||
};
|
26
patches/nginx-1.9.2-pcre_conf_opt.patch
Normal file
26
patches/nginx-1.9.2-pcre_conf_opt.patch
Normal 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
|
15
patches/nginx-1.9.2-proxy_host_port_vars.patch
Normal file
15
patches/nginx-1.9.2-proxy_host_port_vars.patch
Normal 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 },
|
24
patches/nginx-1.9.2-server_header.patch
Normal file
24
patches/nginx-1.9.2-server_header.patch
Normal 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;
|
||||
|
||||
|
44
patches/nginx-1.9.2-setting_args_invalidates_uri.patch
Normal file
44
patches/nginx-1.9.2-setting_args_invalidates_uri.patch
Normal 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)
|
||||
{
|
138
patches/nginx-1.9.2-slab_defrag.patch
Normal file
138
patches/nginx-1.9.2-slab_defrag.patch
Normal 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;
|
||||
|
40
patches/nginx-1.9.2-upstream_pipelining.patch
Normal file
40
patches/nginx-1.9.2-upstream_pipelining.patch
Normal 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;
|
||||
};
|
||||
|
11
patches/nginx-1.9.3-always_enable_cc_feature_tests.patch
Normal file
11
patches/nginx-1.9.3-always_enable_cc_feature_tests.patch
Normal 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\"
|
19
patches/nginx-1.9.3-cache_manager_exit.patch
Normal file
19
patches/nginx-1.9.3-cache_manager_exit.patch
Normal 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) {
|
1148
patches/nginx-1.9.3-dtrace.patch
Normal file
1148
patches/nginx-1.9.3-dtrace.patch
Normal file
File diff suppressed because it is too large
Load Diff
11
patches/nginx-1.9.3-gcc-maybe-uninitialized-warning.patch
Normal file
11
patches/nginx-1.9.3-gcc-maybe-uninitialized-warning.patch
Normal 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;
|
||||
|
20
patches/nginx-1.9.3-hash_overflow.patch
Normal file
20
patches/nginx-1.9.3-hash_overflow.patch
Normal 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; "
|
13
patches/nginx-1.9.3-larger_max_error_str.patch
Normal file
13
patches/nginx-1.9.3-larger_max_error_str.patch
Normal 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
|
||||
|
||||
|
||||
/*********************************/
|
115
patches/nginx-1.9.3-log_escape_non_ascii.patch
Normal file
115
patches/nginx-1.9.3-log_escape_non_ascii.patch
Normal 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;
|
36
patches/nginx-1.9.3-no_Werror.patch
Normal file
36
patches/nginx-1.9.3-no_Werror.patch
Normal 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"
|
90
patches/nginx-1.9.3-no_error_pages.patch
Normal file
90
patches/nginx-1.9.3-no_error_pages.patch
Normal 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;
|
585
patches/nginx-1.9.3-no_pool.patch
Normal file
585
patches/nginx-1.9.3-no_pool.patch
Normal 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;
|
||||
};
|
26
patches/nginx-1.9.3-pcre_conf_opt.patch
Normal file
26
patches/nginx-1.9.3-pcre_conf_opt.patch
Normal 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
|
15
patches/nginx-1.9.3-proxy_host_port_vars.patch
Normal file
15
patches/nginx-1.9.3-proxy_host_port_vars.patch
Normal 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 },
|
24
patches/nginx-1.9.3-server_header.patch
Normal file
24
patches/nginx-1.9.3-server_header.patch
Normal 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;
|
||||
|
||||
|
44
patches/nginx-1.9.3-setting_args_invalidates_uri.patch
Normal file
44
patches/nginx-1.9.3-setting_args_invalidates_uri.patch
Normal 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)
|
||||
{
|
138
patches/nginx-1.9.3-slab_defrag.patch
Normal file
138
patches/nginx-1.9.3-slab_defrag.patch
Normal 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;
|
||||
|
40
patches/nginx-1.9.3-upstream_pipelining.patch
Normal file
40
patches/nginx-1.9.3-upstream_pipelining.patch
Normal 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;
|
||||
};
|
||||
|
11
patches/nginx-1.9.7-always_enable_cc_feature_tests.patch
Normal file
11
patches/nginx-1.9.7-always_enable_cc_feature_tests.patch
Normal file
@ -0,0 +1,11 @@
|
||||
--- nginx-1.9.7/auto/cc/conf 2015-10-30 22:47:50.000000000 +0800
|
||||
+++ nginx-1.9.7-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\"
|
19
patches/nginx-1.9.7-cache_manager_exit.patch
Normal file
19
patches/nginx-1.9.7-cache_manager_exit.patch
Normal 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) {
|
1163
patches/nginx-1.9.7-dtrace.patch
Normal file
1163
patches/nginx-1.9.7-dtrace.patch
Normal file
File diff suppressed because it is too large
Load Diff
11
patches/nginx-1.9.7-gcc-maybe-uninitialized-warning.patch
Normal file
11
patches/nginx-1.9.7-gcc-maybe-uninitialized-warning.patch
Normal file
@ -0,0 +1,11 @@
|
||||
--- nginx-1.9.7/src/http/ngx_http_request.c 2013-05-06 03:26:50.000000000 -0700
|
||||
+++ nginx-1.9.7-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;
|
||||
|
20
patches/nginx-1.9.7-hash_overflow.patch
Normal file
20
patches/nginx-1.9.7-hash_overflow.patch
Normal 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; "
|
13
patches/nginx-1.9.7-larger_max_error_str.patch
Normal file
13
patches/nginx-1.9.7-larger_max_error_str.patch
Normal file
@ -0,0 +1,13 @@
|
||||
--- nginx-1.9.7/src/core/ngx_log.h 2013-10-08 05:07:14.000000000 -0700
|
||||
+++ nginx-1.9.7-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
|
||||
|
||||
|
||||
/*********************************/
|
115
patches/nginx-1.9.7-log_escape_non_ascii.patch
Normal file
115
patches/nginx-1.9.7-log_escape_non_ascii.patch
Normal file
@ -0,0 +1,115 @@
|
||||
--- nginx-1.9.7/src/http/modules/ngx_http_log_module.c 2011-11-01 21:24:50.000000000 +0800
|
||||
+++ nginx-1.9.7-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;
|
36
patches/nginx-1.9.7-no_Werror.patch
Normal file
36
patches/nginx-1.9.7-no_Werror.patch
Normal file
@ -0,0 +1,36 @@
|
||||
diff -urp nginx-1.9.7/auto/cc/clang nginx-1.9.7-patched/auto/cc/clang
|
||||
--- nginx-1.9.7/auto/cc/clang 2014-03-04 03:39:24.000000000 -0800
|
||||
+++ nginx-1.9.7-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.7/auto/cc/gcc nginx-1.9.7-patched/auto/cc/gcc
|
||||
--- nginx-1.9.7/auto/cc/gcc 2014-03-04 03:39:24.000000000 -0800
|
||||
+++ nginx-1.9.7-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.7/auto/cc/icc nginx-1.9.7-patched/auto/cc/icc
|
||||
--- nginx-1.9.7/auto/cc/icc 2014-03-04 03:39:24.000000000 -0800
|
||||
+++ nginx-1.9.7-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"
|
90
patches/nginx-1.9.7-no_error_pages.patch
Normal file
90
patches/nginx-1.9.7-no_error_pages.patch
Normal file
@ -0,0 +1,90 @@
|
||||
--- nginx-1.9.7/src/http/ngx_http_core_module.c 2010-12-14 18:38:42.000000000 +0800
|
||||
+++ nginx-1.9.7-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;
|
585
patches/nginx-1.9.7-no_pool.patch
Normal file
585
patches/nginx-1.9.7-no_pool.patch
Normal file
@ -0,0 +1,585 @@
|
||||
diff --minimal '--exclude=*.swp' '--exclude=*~' -up nginx-1.9.7/src/core/nginx.h nginx-1.9.7-patched/src/core/nginx.h
|
||||
--- nginx-1.9.7/src/core/nginx.h 2014-07-08 06:22:39.000000000 -0700
|
||||
+++ nginx-1.9.7-patched/src/core/nginx.h 2014-07-13 19:21:54.117099631 -0700
|
||||
@@ -10,7 +10,7 @@
|
||||
|
||||
|
||||
#define nginx_version 1009007
|
||||
#define NGINX_VERSION "1.9.7"
|
||||
-#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.7/src/core/ngx_array.c nginx-1.9.7-patched/src/core/ngx_array.c
|
||||
--- nginx-1.9.7/src/core/ngx_array.c 2014-07-08 06:22:39.000000000 -0700
|
||||
+++ nginx-1.9.7-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.7/src/core/ngx_array.h nginx-1.9.7-patched/src/core/ngx_array.h
|
||||
--- nginx-1.9.7/src/core/ngx_array.h 2014-07-08 06:22:39.000000000 -0700
|
||||
+++ nginx-1.9.7-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.7/src/core/ngx_palloc.c nginx-1.9.7-patched/src/core/ngx_palloc.c
|
||||
--- nginx-1.9.7/src/core/ngx_palloc.c 2014-07-08 06:22:39.000000000 -0700
|
||||
+++ nginx-1.9.7-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.7/src/core/ngx_palloc.h nginx-1.9.7-patched/src/core/ngx_palloc.h
|
||||
--- nginx-1.9.7/src/core/ngx_palloc.h 2014-07-08 06:22:39.000000000 -0700
|
||||
+++ nginx-1.9.7-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;
|
||||
};
|
26
patches/nginx-1.9.7-pcre_conf_opt.patch
Normal file
26
patches/nginx-1.9.7-pcre_conf_opt.patch
Normal 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
|
15
patches/nginx-1.9.7-proxy_host_port_vars.patch
Normal file
15
patches/nginx-1.9.7-proxy_host_port_vars.patch
Normal file
@ -0,0 +1,15 @@
|
||||
--- nginx-1.9.7/src/http/modules/ngx_http_proxy_module.c 2013-10-08 05:07:14.000000000 -0700
|
||||
+++ nginx-1.9.7-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 },
|
565
patches/nginx-1.9.7-resolver_security_fixes.patch
Normal file
565
patches/nginx-1.9.7-resolver_security_fixes.patch
Normal file
@ -0,0 +1,565 @@
|
||||
diff -upr nginx-1.9.7-old/src/core/ngx_resolver.c nginx-1.9.7/src/core/ngx_resolver.c
|
||||
--- nginx-1.9.7-old/src/core/ngx_resolver.c 2016-01-26 11:54:55.915406799 -0800
|
||||
+++ nginx-1.9.7/src/core/ngx_resolver.c 2016-01-26 11:55:27.067782268 -0800
|
||||
@@ -59,15 +59,15 @@ ngx_int_t ngx_udp_connect(ngx_udp_connec
|
||||
static void ngx_resolver_cleanup(void *data);
|
||||
static void ngx_resolver_cleanup_tree(ngx_resolver_t *r, ngx_rbtree_t *tree);
|
||||
static ngx_int_t ngx_resolve_name_locked(ngx_resolver_t *r,
|
||||
- ngx_resolver_ctx_t *ctx);
|
||||
+ ngx_resolver_ctx_t *ctx, ngx_str_t *name);
|
||||
static void ngx_resolver_expire(ngx_resolver_t *r, ngx_rbtree_t *tree,
|
||||
ngx_queue_t *queue);
|
||||
static ngx_int_t ngx_resolver_send_query(ngx_resolver_t *r,
|
||||
ngx_resolver_node_t *rn);
|
||||
-static ngx_int_t ngx_resolver_create_name_query(ngx_resolver_node_t *rn,
|
||||
- ngx_resolver_ctx_t *ctx);
|
||||
-static ngx_int_t ngx_resolver_create_addr_query(ngx_resolver_node_t *rn,
|
||||
- ngx_resolver_ctx_t *ctx);
|
||||
+static ngx_int_t ngx_resolver_create_name_query(ngx_resolver_t *r,
|
||||
+ ngx_resolver_node_t *rn, ngx_str_t *name);
|
||||
+static ngx_int_t ngx_resolver_create_addr_query(ngx_resolver_t *r,
|
||||
+ ngx_resolver_node_t *rn, ngx_addr_t *addr);
|
||||
static void ngx_resolver_resend_handler(ngx_event_t *ev);
|
||||
static time_t ngx_resolver_resend(ngx_resolver_t *r, ngx_rbtree_t *tree,
|
||||
ngx_queue_t *queue);
|
||||
@@ -376,7 +376,7 @@ ngx_resolve_name(ngx_resolver_ctx_t *ctx
|
||||
|
||||
/* lock name mutex */
|
||||
|
||||
- rc = ngx_resolve_name_locked(r, ctx);
|
||||
+ rc = ngx_resolve_name_locked(r, ctx, &ctx->name);
|
||||
|
||||
if (rc == NGX_OK) {
|
||||
return NGX_OK;
|
||||
@@ -403,7 +403,6 @@ ngx_resolve_name(ngx_resolver_ctx_t *ctx
|
||||
void
|
||||
ngx_resolve_name_done(ngx_resolver_ctx_t *ctx)
|
||||
{
|
||||
- uint32_t hash;
|
||||
ngx_resolver_t *r;
|
||||
ngx_resolver_ctx_t *w, **p;
|
||||
ngx_resolver_node_t *rn;
|
||||
@@ -423,11 +422,9 @@ ngx_resolve_name_done(ngx_resolver_ctx_t
|
||||
|
||||
/* lock name mutex */
|
||||
|
||||
- if (ctx->state == NGX_AGAIN) {
|
||||
-
|
||||
- hash = ngx_crc32_short(ctx->name.data, ctx->name.len);
|
||||
+ if (ctx->state == NGX_AGAIN || ctx->state == NGX_RESOLVE_TIMEDOUT) {
|
||||
|
||||
- rn = ngx_resolver_lookup_name(r, &ctx->name, hash);
|
||||
+ rn = ctx->node;
|
||||
|
||||
if (rn) {
|
||||
p = &rn->waiting;
|
||||
@@ -472,23 +469,28 @@ done:
|
||||
|
||||
|
||||
static ngx_int_t
|
||||
-ngx_resolve_name_locked(ngx_resolver_t *r, ngx_resolver_ctx_t *ctx)
|
||||
+ngx_resolve_name_locked(ngx_resolver_t *r, ngx_resolver_ctx_t *ctx,
|
||||
+ ngx_str_t *name)
|
||||
{
|
||||
uint32_t hash;
|
||||
ngx_int_t rc;
|
||||
+ ngx_str_t cname;
|
||||
ngx_uint_t naddrs;
|
||||
ngx_addr_t *addrs;
|
||||
- ngx_resolver_ctx_t *next;
|
||||
+ ngx_resolver_ctx_t *next, *last;
|
||||
ngx_resolver_node_t *rn;
|
||||
|
||||
- ngx_strlow(ctx->name.data, ctx->name.data, ctx->name.len);
|
||||
+ ngx_strlow(name->data, name->data, name->len);
|
||||
|
||||
- hash = ngx_crc32_short(ctx->name.data, ctx->name.len);
|
||||
+ hash = ngx_crc32_short(name->data, name->len);
|
||||
|
||||
- rn = ngx_resolver_lookup_name(r, &ctx->name, hash);
|
||||
+ rn = ngx_resolver_lookup_name(r, name, hash);
|
||||
|
||||
if (rn) {
|
||||
|
||||
+ /* ctx can be a list after NGX_RESOLVE_CNAME */
|
||||
+ for (last = ctx; last->next; last = last->next);
|
||||
+
|
||||
if (rn->valid >= ngx_time()) {
|
||||
|
||||
ngx_log_debug0(NGX_LOG_DEBUG_CORE, r->log, 0, "resolve cached");
|
||||
@@ -516,7 +518,7 @@ ngx_resolve_name_locked(ngx_resolver_t *
|
||||
}
|
||||
}
|
||||
|
||||
- ctx->next = rn->waiting;
|
||||
+ last->next = rn->waiting;
|
||||
rn->waiting = NULL;
|
||||
|
||||
/* unlock name mutex */
|
||||
@@ -556,13 +558,13 @@ ngx_resolve_name_locked(ngx_resolver_t *
|
||||
|
||||
if (ctx->recursion++ < NGX_RESOLVER_MAX_RECURSION) {
|
||||
|
||||
- ctx->name.len = rn->cnlen;
|
||||
- ctx->name.data = rn->u.cname;
|
||||
+ cname.len = rn->cnlen;
|
||||
+ cname.data = rn->u.cname;
|
||||
|
||||
- return ngx_resolve_name_locked(r, ctx);
|
||||
+ return ngx_resolve_name_locked(r, ctx, &cname);
|
||||
}
|
||||
|
||||
- ctx->next = rn->waiting;
|
||||
+ last->next = rn->waiting;
|
||||
rn->waiting = NULL;
|
||||
|
||||
/* unlock name mutex */
|
||||
@@ -581,10 +583,29 @@ ngx_resolve_name_locked(ngx_resolver_t *
|
||||
|
||||
if (rn->waiting) {
|
||||
|
||||
- ctx->next = rn->waiting;
|
||||
+ if (ctx->event == NULL) {
|
||||
+ ctx->event = ngx_resolver_calloc(r, sizeof(ngx_event_t));
|
||||
+ if (ctx->event == NULL) {
|
||||
+ return NGX_ERROR;
|
||||
+ }
|
||||
+
|
||||
+ ctx->event->handler = ngx_resolver_timeout_handler;
|
||||
+ ctx->event->data = ctx;
|
||||
+ ctx->event->log = r->log;
|
||||
+ ctx->ident = -1;
|
||||
+
|
||||
+ ngx_add_timer(ctx->event, ctx->timeout);
|
||||
+ }
|
||||
+
|
||||
+ last->next = rn->waiting;
|
||||
rn->waiting = ctx;
|
||||
ctx->state = NGX_AGAIN;
|
||||
|
||||
+ do {
|
||||
+ ctx->node = rn;
|
||||
+ ctx = ctx->next;
|
||||
+ } while (ctx);
|
||||
+
|
||||
return NGX_AGAIN;
|
||||
}
|
||||
|
||||
@@ -623,14 +644,14 @@ ngx_resolve_name_locked(ngx_resolver_t *
|
||||
return NGX_ERROR;
|
||||
}
|
||||
|
||||
- rn->name = ngx_resolver_dup(r, ctx->name.data, ctx->name.len);
|
||||
+ rn->name = ngx_resolver_dup(r, name->data, name->len);
|
||||
if (rn->name == NULL) {
|
||||
ngx_resolver_free(r, rn);
|
||||
return NGX_ERROR;
|
||||
}
|
||||
|
||||
rn->node.key = hash;
|
||||
- rn->nlen = (u_short) ctx->name.len;
|
||||
+ rn->nlen = (u_short) name->len;
|
||||
rn->query = NULL;
|
||||
#if (NGX_HAVE_INET6)
|
||||
rn->query6 = NULL;
|
||||
@@ -639,7 +660,7 @@ ngx_resolve_name_locked(ngx_resolver_t *
|
||||
ngx_rbtree_insert(&r->name_rbtree, &rn->node);
|
||||
}
|
||||
|
||||
- rc = ngx_resolver_create_name_query(rn, ctx);
|
||||
+ rc = ngx_resolver_create_name_query(r, rn, name);
|
||||
|
||||
if (rc == NGX_ERROR) {
|
||||
goto failed;
|
||||
@@ -652,8 +673,14 @@ ngx_resolve_name_locked(ngx_resolver_t *
|
||||
ngx_resolver_free(r, rn->name);
|
||||
ngx_resolver_free(r, rn);
|
||||
|
||||
- ctx->state = NGX_RESOLVE_NXDOMAIN;
|
||||
- ctx->handler(ctx);
|
||||
+ do {
|
||||
+ ctx->state = NGX_RESOLVE_NXDOMAIN;
|
||||
+ next = ctx->next;
|
||||
+
|
||||
+ ctx->handler(ctx);
|
||||
+
|
||||
+ ctx = next;
|
||||
+ } while (ctx);
|
||||
|
||||
return NGX_OK;
|
||||
}
|
||||
@@ -674,9 +701,9 @@ ngx_resolve_name_locked(ngx_resolver_t *
|
||||
}
|
||||
|
||||
ctx->event->handler = ngx_resolver_timeout_handler;
|
||||
- ctx->event->data = rn;
|
||||
+ ctx->event->data = ctx;
|
||||
ctx->event->log = r->log;
|
||||
- rn->ident = -1;
|
||||
+ ctx->ident = -1;
|
||||
|
||||
ngx_add_timer(ctx->event, ctx->timeout);
|
||||
}
|
||||
@@ -697,6 +724,11 @@ ngx_resolve_name_locked(ngx_resolver_t *
|
||||
|
||||
ctx->state = NGX_AGAIN;
|
||||
|
||||
+ do {
|
||||
+ ctx->node = rn;
|
||||
+ ctx = ctx->next;
|
||||
+ } while (ctx);
|
||||
+
|
||||
return NGX_AGAIN;
|
||||
|
||||
failed:
|
||||
@@ -804,9 +836,22 @@ ngx_resolve_addr(ngx_resolver_ctx_t *ctx
|
||||
|
||||
if (rn->waiting) {
|
||||
|
||||
+ ctx->event = ngx_resolver_calloc(r, sizeof(ngx_event_t));
|
||||
+ if (ctx->event == NULL) {
|
||||
+ return NGX_ERROR;
|
||||
+ }
|
||||
+
|
||||
+ ctx->event->handler = ngx_resolver_timeout_handler;
|
||||
+ ctx->event->data = ctx;
|
||||
+ ctx->event->log = r->log;
|
||||
+ ctx->ident = -1;
|
||||
+
|
||||
+ ngx_add_timer(ctx->event, ctx->timeout);
|
||||
+
|
||||
ctx->next = rn->waiting;
|
||||
rn->waiting = ctx;
|
||||
ctx->state = NGX_AGAIN;
|
||||
+ ctx->node = rn;
|
||||
|
||||
/* unlock addr mutex */
|
||||
|
||||
@@ -848,7 +893,7 @@ ngx_resolve_addr(ngx_resolver_ctx_t *ctx
|
||||
ngx_rbtree_insert(tree, &rn->node);
|
||||
}
|
||||
|
||||
- if (ngx_resolver_create_addr_query(rn, ctx) != NGX_OK) {
|
||||
+ if (ngx_resolver_create_addr_query(r, rn, &ctx->addr) != NGX_OK) {
|
||||
goto failed;
|
||||
}
|
||||
|
||||
@@ -867,9 +912,9 @@ ngx_resolve_addr(ngx_resolver_ctx_t *ctx
|
||||
}
|
||||
|
||||
ctx->event->handler = ngx_resolver_timeout_handler;
|
||||
- ctx->event->data = rn;
|
||||
+ ctx->event->data = ctx;
|
||||
ctx->event->log = r->log;
|
||||
- rn->ident = -1;
|
||||
+ ctx->ident = -1;
|
||||
|
||||
ngx_add_timer(ctx->event, ctx->timeout);
|
||||
|
||||
@@ -892,6 +937,7 @@ ngx_resolve_addr(ngx_resolver_ctx_t *ctx
|
||||
/* unlock addr mutex */
|
||||
|
||||
ctx->state = NGX_AGAIN;
|
||||
+ ctx->node = rn;
|
||||
|
||||
return NGX_OK;
|
||||
|
||||
@@ -922,17 +968,11 @@ failed:
|
||||
void
|
||||
ngx_resolve_addr_done(ngx_resolver_ctx_t *ctx)
|
||||
{
|
||||
- in_addr_t addr;
|
||||
ngx_queue_t *expire_queue;
|
||||
ngx_rbtree_t *tree;
|
||||
ngx_resolver_t *r;
|
||||
ngx_resolver_ctx_t *w, **p;
|
||||
- struct sockaddr_in *sin;
|
||||
ngx_resolver_node_t *rn;
|
||||
-#if (NGX_HAVE_INET6)
|
||||
- uint32_t hash;
|
||||
- struct sockaddr_in6 *sin6;
|
||||
-#endif
|
||||
|
||||
r = ctx->resolver;
|
||||
|
||||
@@ -959,23 +999,9 @@ ngx_resolve_addr_done(ngx_resolver_ctx_t
|
||||
|
||||
/* lock addr mutex */
|
||||
|
||||
- if (ctx->state == NGX_AGAIN) {
|
||||
-
|
||||
- switch (ctx->addr.sockaddr->sa_family) {
|
||||
-
|
||||
-#if (NGX_HAVE_INET6)
|
||||
- case AF_INET6:
|
||||
- sin6 = (struct sockaddr_in6 *) ctx->addr.sockaddr;
|
||||
- hash = ngx_crc32_short(sin6->sin6_addr.s6_addr, 16);
|
||||
- rn = ngx_resolver_lookup_addr6(r, &sin6->sin6_addr, hash);
|
||||
- break;
|
||||
-#endif
|
||||
+ if (ctx->state == NGX_AGAIN || ctx->state == NGX_RESOLVE_TIMEDOUT) {
|
||||
|
||||
- default: /* AF_INET */
|
||||
- sin = (struct sockaddr_in *) ctx->addr.sockaddr;
|
||||
- addr = ntohl(sin->sin_addr.s_addr);
|
||||
- rn = ngx_resolver_lookup_addr(r, addr);
|
||||
- }
|
||||
+ rn = ctx->node;
|
||||
|
||||
if (rn) {
|
||||
p = &rn->waiting;
|
||||
@@ -1312,7 +1338,7 @@ ngx_resolver_process_response(ngx_resolv
|
||||
times = 0;
|
||||
|
||||
for (q = ngx_queue_head(&r->name_resend_queue);
|
||||
- q != ngx_queue_sentinel(&r->name_resend_queue) || times++ < 100;
|
||||
+ q != ngx_queue_sentinel(&r->name_resend_queue) && times++ < 100;
|
||||
q = ngx_queue_next(q))
|
||||
{
|
||||
rn = ngx_queue_data(q, ngx_resolver_node_t, queue);
|
||||
@@ -1975,20 +2001,39 @@ ngx_resolver_process_a(ngx_resolver_t *r
|
||||
|
||||
ngx_queue_insert_head(&r->name_expire_queue, &rn->queue);
|
||||
|
||||
+ ngx_resolver_free(r, rn->query);
|
||||
+ rn->query = NULL;
|
||||
+#if (NGX_HAVE_INET6)
|
||||
+ rn->query6 = NULL;
|
||||
+#endif
|
||||
+
|
||||
ctx = rn->waiting;
|
||||
rn->waiting = NULL;
|
||||
|
||||
if (ctx) {
|
||||
- ctx->name = name;
|
||||
|
||||
- (void) ngx_resolve_name_locked(r, ctx);
|
||||
- }
|
||||
+ if (ctx->recursion++ >= NGX_RESOLVER_MAX_RECURSION) {
|
||||
|
||||
- ngx_resolver_free(r, rn->query);
|
||||
- rn->query = NULL;
|
||||
-#if (NGX_HAVE_INET6)
|
||||
- rn->query6 = NULL;
|
||||
-#endif
|
||||
+ /* unlock name mutex */
|
||||
+
|
||||
+ do {
|
||||
+ ctx->state = NGX_RESOLVE_NXDOMAIN;
|
||||
+ next = ctx->next;
|
||||
+
|
||||
+ ctx->handler(ctx);
|
||||
+
|
||||
+ ctx = next;
|
||||
+ } while (ctx);
|
||||
+
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
+ for (next = ctx; next; next = next->next) {
|
||||
+ next->node = NULL;
|
||||
+ }
|
||||
+
|
||||
+ (void) ngx_resolve_name_locked(r, ctx, &name);
|
||||
+ }
|
||||
|
||||
/* unlock name mutex */
|
||||
|
||||
@@ -2496,27 +2541,23 @@ ngx_resolver_rbtree_insert_addr6_value(n
|
||||
|
||||
|
||||
static ngx_int_t
|
||||
-ngx_resolver_create_name_query(ngx_resolver_node_t *rn, ngx_resolver_ctx_t *ctx)
|
||||
+ngx_resolver_create_name_query(ngx_resolver_t *r, ngx_resolver_node_t *rn,
|
||||
+ ngx_str_t *name)
|
||||
{
|
||||
u_char *p, *s;
|
||||
size_t len, nlen;
|
||||
ngx_uint_t ident;
|
||||
-#if (NGX_HAVE_INET6)
|
||||
- ngx_resolver_t *r;
|
||||
-#endif
|
||||
ngx_resolver_qs_t *qs;
|
||||
ngx_resolver_hdr_t *query;
|
||||
|
||||
- nlen = ctx->name.len ? (1 + ctx->name.len + 1) : 1;
|
||||
+ nlen = name->len ? (1 + name->len + 1) : 1;
|
||||
|
||||
len = sizeof(ngx_resolver_hdr_t) + nlen + sizeof(ngx_resolver_qs_t);
|
||||
|
||||
#if (NGX_HAVE_INET6)
|
||||
- r = ctx->resolver;
|
||||
-
|
||||
- p = ngx_resolver_alloc(ctx->resolver, r->ipv6 ? len * 2 : len);
|
||||
+ p = ngx_resolver_alloc(r, r->ipv6 ? len * 2 : len);
|
||||
#else
|
||||
- p = ngx_resolver_alloc(ctx->resolver, len);
|
||||
+ p = ngx_resolver_alloc(r, len);
|
||||
#endif
|
||||
if (p == NULL) {
|
||||
return NGX_ERROR;
|
||||
@@ -2535,8 +2576,8 @@ ngx_resolver_create_name_query(ngx_resol
|
||||
|
||||
ident = ngx_random();
|
||||
|
||||
- ngx_log_debug2(NGX_LOG_DEBUG_CORE, ctx->resolver->log, 0,
|
||||
- "resolve: \"%V\" A %i", &ctx->name, ident & 0xffff);
|
||||
+ ngx_log_debug2(NGX_LOG_DEBUG_CORE, r->log, 0,
|
||||
+ "resolve: \"%V\" A %i", name, ident & 0xffff);
|
||||
|
||||
query->ident_hi = (u_char) ((ident >> 8) & 0xff);
|
||||
query->ident_lo = (u_char) (ident & 0xff);
|
||||
@@ -2566,11 +2607,11 @@ ngx_resolver_create_name_query(ngx_resol
|
||||
p--;
|
||||
*p-- = '\0';
|
||||
|
||||
- if (ctx->name.len == 0) {
|
||||
+ if (name->len == 0) {
|
||||
return NGX_DECLINED;
|
||||
}
|
||||
|
||||
- for (s = ctx->name.data + ctx->name.len - 1; s >= ctx->name.data; s--) {
|
||||
+ for (s = name->data + name->len - 1; s >= name->data; s--) {
|
||||
if (*s != '.') {
|
||||
*p = *s;
|
||||
len++;
|
||||
@@ -2606,8 +2647,8 @@ ngx_resolver_create_name_query(ngx_resol
|
||||
|
||||
ident = ngx_random();
|
||||
|
||||
- ngx_log_debug2(NGX_LOG_DEBUG_CORE, ctx->resolver->log, 0,
|
||||
- "resolve: \"%V\" AAAA %i", &ctx->name, ident & 0xffff);
|
||||
+ ngx_log_debug2(NGX_LOG_DEBUG_CORE, r->log, 0,
|
||||
+ "resolve: \"%V\" AAAA %i", name, ident & 0xffff);
|
||||
|
||||
query->ident_hi = (u_char) ((ident >> 8) & 0xff);
|
||||
query->ident_lo = (u_char) (ident & 0xff);
|
||||
@@ -2624,11 +2665,12 @@ ngx_resolver_create_name_query(ngx_resol
|
||||
|
||||
|
||||
static ngx_int_t
|
||||
-ngx_resolver_create_addr_query(ngx_resolver_node_t *rn, ngx_resolver_ctx_t *ctx)
|
||||
+ngx_resolver_create_addr_query(ngx_resolver_t *r, ngx_resolver_node_t *rn,
|
||||
+ ngx_addr_t *addr)
|
||||
{
|
||||
u_char *p, *d;
|
||||
size_t len;
|
||||
- in_addr_t addr;
|
||||
+ in_addr_t inaddr;
|
||||
ngx_int_t n;
|
||||
ngx_uint_t ident;
|
||||
ngx_resolver_hdr_t *query;
|
||||
@@ -2637,7 +2679,7 @@ ngx_resolver_create_addr_query(ngx_resol
|
||||
struct sockaddr_in6 *sin6;
|
||||
#endif
|
||||
|
||||
- switch (ctx->addr.sockaddr->sa_family) {
|
||||
+ switch (addr->sockaddr->sa_family) {
|
||||
|
||||
#if (NGX_HAVE_INET6)
|
||||
case AF_INET6:
|
||||
@@ -2654,7 +2696,7 @@ ngx_resolver_create_addr_query(ngx_resol
|
||||
+ sizeof(ngx_resolver_qs_t);
|
||||
}
|
||||
|
||||
- p = ngx_resolver_alloc(ctx->resolver, len);
|
||||
+ p = ngx_resolver_alloc(r, len);
|
||||
if (p == NULL) {
|
||||
return NGX_ERROR;
|
||||
}
|
||||
@@ -2678,11 +2720,11 @@ ngx_resolver_create_addr_query(ngx_resol
|
||||
|
||||
p += sizeof(ngx_resolver_hdr_t);
|
||||
|
||||
- switch (ctx->addr.sockaddr->sa_family) {
|
||||
+ switch (addr->sockaddr->sa_family) {
|
||||
|
||||
#if (NGX_HAVE_INET6)
|
||||
case AF_INET6:
|
||||
- sin6 = (struct sockaddr_in6 *) ctx->addr.sockaddr;
|
||||
+ sin6 = (struct sockaddr_in6 *) addr->sockaddr;
|
||||
|
||||
for (n = 15; n >= 0; n--) {
|
||||
p = ngx_sprintf(p, "\1%xd\1%xd",
|
||||
@@ -2697,11 +2739,11 @@ ngx_resolver_create_addr_query(ngx_resol
|
||||
|
||||
default: /* AF_INET */
|
||||
|
||||
- sin = (struct sockaddr_in *) ctx->addr.sockaddr;
|
||||
- addr = ntohl(sin->sin_addr.s_addr);
|
||||
+ sin = (struct sockaddr_in *) addr->sockaddr;
|
||||
+ inaddr = ntohl(sin->sin_addr.s_addr);
|
||||
|
||||
for (n = 0; n < 32; n += 8) {
|
||||
- d = ngx_sprintf(&p[1], "%ud", (addr >> n) & 0xff);
|
||||
+ d = ngx_sprintf(&p[1], "%ud", (inaddr >> n) & 0xff);
|
||||
*p = (u_char) (d - &p[1]);
|
||||
p = d;
|
||||
}
|
||||
@@ -2815,21 +2857,13 @@ done:
|
||||
static void
|
||||
ngx_resolver_timeout_handler(ngx_event_t *ev)
|
||||
{
|
||||
- ngx_resolver_ctx_t *ctx, *next;
|
||||
- ngx_resolver_node_t *rn;
|
||||
+ ngx_resolver_ctx_t *ctx;
|
||||
|
||||
- rn = ev->data;
|
||||
- ctx = rn->waiting;
|
||||
- rn->waiting = NULL;
|
||||
+ ctx = ev->data;
|
||||
|
||||
- do {
|
||||
- ctx->state = NGX_RESOLVE_TIMEDOUT;
|
||||
- next = ctx->next;
|
||||
-
|
||||
- ctx->handler(ctx);
|
||||
+ ctx->state = NGX_RESOLVE_TIMEDOUT;
|
||||
|
||||
- ctx = next;
|
||||
- } while (ctx);
|
||||
+ ctx->handler(ctx);
|
||||
}
|
||||
|
||||
|
||||
diff -upr nginx-1.9.7-old/src/core/ngx_resolver.h nginx-1.9.7/src/core/ngx_resolver.h
|
||||
--- nginx-1.9.7-old/src/core/ngx_resolver.h 2016-01-26 11:54:55.914404751 -0800
|
||||
+++ nginx-1.9.7/src/core/ngx_resolver.h 2016-01-26 11:55:27.068784001 -0800
|
||||
@@ -51,15 +51,11 @@ typedef void (*ngx_resolver_handler_pt)(
|
||||
|
||||
|
||||
typedef struct {
|
||||
- /* PTR: resolved name, A: name to resolve */
|
||||
- u_char *name;
|
||||
-
|
||||
+ ngx_rbtree_node_t node;
|
||||
ngx_queue_t queue;
|
||||
|
||||
- /* event ident must be after 3 pointers as in ngx_connection_t */
|
||||
- ngx_int_t ident;
|
||||
-
|
||||
- ngx_rbtree_node_t node;
|
||||
+ /* PTR: resolved name, A: name to resolve */
|
||||
+ u_char *name;
|
||||
|
||||
#if (NGX_HAVE_INET6)
|
||||
/* PTR: IPv6 address to resolve (IPv4 address is in rbtree node key) */
|
||||
@@ -147,6 +143,9 @@ struct ngx_resolver_ctx_s {
|
||||
ngx_resolver_t *resolver;
|
||||
ngx_udp_connection_t *udp_connection;
|
||||
|
||||
+ /* event ident must be after 3 pointers as in ngx_connection_t */
|
||||
+ ngx_int_t ident;
|
||||
+
|
||||
ngx_int_t state;
|
||||
ngx_str_t name;
|
||||
|
||||
@@ -162,6 +161,8 @@ struct ngx_resolver_ctx_s {
|
||||
ngx_uint_t quick; /* unsigned quick:1; */
|
||||
ngx_uint_t recursion;
|
||||
ngx_event_t *event;
|
||||
+
|
||||
+ ngx_resolver_node_t *node;
|
||||
};
|
||||
|
||||
|
24
patches/nginx-1.9.7-server_header.patch
Normal file
24
patches/nginx-1.9.7-server_header.patch
Normal file
@ -0,0 +1,24 @@
|
||||
diff -ur nginx-1.9.7/src/core/nginx.h nginx-1.9.7-patched/src/core/nginx.h
|
||||
--- nginx-1.9.7/src/core/nginx.h 2010-02-12 17:31:01.000000000 +0800
|
||||
+++ nginx-1.9.7-patched/src/core/nginx.h 2010-03-30 10:52:13.240702627 +0800
|
||||
@@ -10,7 +10,7 @@
|
||||
|
||||
#define nginx_version 1009007
|
||||
#define NGINX_VERSION "1.9.7"
|
||||
-#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.7/src/http/ngx_http_header_filter_module.c nginx-1.9.7-patched/src/http/ngx_http_header_filter_module.c
|
||||
--- nginx-1.9.7/src/http/ngx_http_header_filter_module.c 2010-03-03 23:14:04.000000000 +0800
|
||||
+++ nginx-1.9.7-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;
|
||||
|
||||
|
44
patches/nginx-1.9.7-setting_args_invalidates_uri.patch
Normal file
44
patches/nginx-1.9.7-setting_args_invalidates_uri.patch
Normal 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)
|
||||
{
|
138
patches/nginx-1.9.7-slab_defrag.patch
Normal file
138
patches/nginx-1.9.7-slab_defrag.patch
Normal 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;
|
||||
|
42
patches/nginx-1.9.7-ssl_cert_cb_yield.patch
Normal file
42
patches/nginx-1.9.7-ssl_cert_cb_yield.patch
Normal file
@ -0,0 +1,42 @@
|
||||
# HG changeset patch
|
||||
# User Yichun Zhang <agentzh@openresty.org>
|
||||
# Date 1451762084 28800
|
||||
# Sat Jan 02 11:14:44 2016 -0800
|
||||
# Node ID 449f0461859c16e95bdb18e8be6b94401545d3dd
|
||||
# Parent 78b4e10b4367b31367aad3c83c9c3acdd42397c4
|
||||
SSL: handled SSL_CTX_set_cert_cb() callback yielding.
|
||||
|
||||
OpenSSL 1.0.2+ introduces SSL_CTX_set_cert_cb() to allow custom
|
||||
callbacks to serve the SSL certificiates and private keys dynamically
|
||||
and lazily. The callbacks may yield for nonblocking I/O or sleeping.
|
||||
Here we added support for such usage in NGINX 3rd-party modules
|
||||
(like ngx_lua) in NGINX's event handlers for downstream SSL
|
||||
connections.
|
||||
|
||||
diff -r 78b4e10b4367 -r 449f0461859c src/event/ngx_event_openssl.c
|
||||
--- a/src/event/ngx_event_openssl.c Thu Dec 17 16:39:15 2015 +0300
|
||||
+++ b/src/event/ngx_event_openssl.c Sat Jan 02 11:14:44 2016 -0800
|
||||
@@ -1210,6 +1210,23 @@
|
||||
return NGX_AGAIN;
|
||||
}
|
||||
|
||||
+#if OPENSSL_VERSION_NUMBER >= 0x10002000L
|
||||
+ if (sslerr == SSL_ERROR_WANT_X509_LOOKUP) {
|
||||
+ c->read->handler = ngx_ssl_handshake_handler;
|
||||
+ c->write->handler = ngx_ssl_handshake_handler;
|
||||
+
|
||||
+ if (ngx_handle_read_event(c->read, 0) != NGX_OK) {
|
||||
+ return NGX_ERROR;
|
||||
+ }
|
||||
+
|
||||
+ if (ngx_handle_write_event(c->write, 0) != NGX_OK) {
|
||||
+ return NGX_ERROR;
|
||||
+ }
|
||||
+
|
||||
+ return NGX_AGAIN;
|
||||
+ }
|
||||
+#endif
|
||||
+
|
||||
err = (sslerr == SSL_ERROR_SYSCALL) ? ngx_errno : 0;
|
||||
|
||||
c->ssl->no_wait_shutdown = 1;
|
40
patches/nginx-1.9.7-upstream_pipelining.patch
Normal file
40
patches/nginx-1.9.7-upstream_pipelining.patch
Normal file
@ -0,0 +1,40 @@
|
||||
diff -rudp nginx-1.9.7/src/http/ngx_http_upstream.c nginx-1.9.7-patched/src/http/ngx_http_upstream.c
|
||||
--- nginx-1.9.7/src/http/ngx_http_upstream.c 2012-08-06 10:34:08.000000000 -0700
|
||||
+++ nginx-1.9.7-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.7/src/http/ngx_http_upstream.h nginx-1.9.7-patched/src/http/ngx_http_upstream.h
|
||||
--- nginx-1.9.7/src/http/ngx_http_upstream.h 2012-02-13 03:01:58.000000000 -0800
|
||||
+++ nginx-1.9.7-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;
|
||||
};
|
||||
|
@ -4,7 +4,7 @@
|
||||
|
||||
%define dir_name openresty
|
||||
|
||||
Name: ngx_openresty
|
||||
Name: openresty
|
||||
|
||||
Version: 1.0.5.1
|
||||
Release: 5
|
||||
@ -14,7 +14,7 @@ Group: Productivity/Networking/Web/Servers
|
||||
License: BSD
|
||||
URL: http://www.openresty.org/
|
||||
|
||||
Source0: ngx_openresty-%{version}rc%{release}.tar.gz
|
||||
Source0: openresty-%{version}rc%{release}.tar.gz
|
||||
|
||||
BuildRoot: %{build_root}
|
||||
|
||||
@ -23,11 +23,11 @@ BuildRequires: gcc >= 3.0, openssl-devel, pcre-devel, readline-devel
|
||||
Requires: openssl, pcre, readline
|
||||
|
||||
%description
|
||||
OpenResty (aka. ngx_openresty) is a full-fledged web application server by bundling the standard Nginx core, lots of 3rd-party Nginx modules, as well as most of their external dependencie
|
||||
OpenResty is a full-fledged web application server by bundling the standard Nginx core, lots of 3rd-party Nginx modules, as well as most of their external dependencie
|
||||
|
||||
%prep
|
||||
#%setup -q -n ngx_openresty-%{version}
|
||||
%setup -q -n ngx_openresty-%{version}rc%{release}
|
||||
#%setup -q -n openresty-%{version}
|
||||
%setup -q -n openresty-%{version}rc%{release}
|
||||
|
||||
%build
|
||||
#--with-pg_config=opt/pg90/bin/pg_config \
|
@ -23,7 +23,7 @@ sub run_tests {
|
||||
my $ver = `bash util/ver`;
|
||||
chomp $ver;
|
||||
|
||||
cd "ngx_openresty-$ver";
|
||||
cd "openresty-$ver";
|
||||
|
||||
$DistRoot = cwd();
|
||||
$BuildRoot = File::Spec->rel2abs("./build");
|
||||
@ -86,6 +86,7 @@ sub run_test ($) {
|
||||
#$expected_makefile =~ s/\$OPENRESTY_BUILD_DIR\b/$BuildRoot/gs;
|
||||
|
||||
$makefile =~ s/\Q$BuildRoot\E/\$OPENRESTY_BUILD_DIR/g;
|
||||
$makefile =~ s/\Q$DistRoot\E/\$OPENRESTY_DIR/g;
|
||||
|
||||
is($makefile, $expected_makefile, "$name - Makefile ok");
|
||||
}
|
||||
|
3099
t/sanity.t
3099
t/sanity.t
File diff suppressed because it is too large
Load Diff
36
util/build-win32.sh
Normal file
36
util/build-win32.sh
Normal file
@ -0,0 +1,36 @@
|
||||
#!/bin/bash
|
||||
|
||||
PCRE=pcre-8.38
|
||||
ZLIB=zlib-1.2.8
|
||||
OPENSSL=openssl-1.0.2e
|
||||
|
||||
rm -rf objs || exit 1
|
||||
mkdir -p objs/lib || exit 1
|
||||
cd objs/lib || exit 1
|
||||
ls ../../..
|
||||
tar -xf ../../../$OPENSSL.tar.gz
|
||||
tar -xf ../../../$ZLIB.tar.gz
|
||||
tar -xf ../../../$PCRE.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-http_stub_status_module \
|
||||
--with-http_realip_module \
|
||||
--with-stream \
|
||||
--with-stream_ssl_module \
|
||||
--with-http_addition_module \
|
||||
--with-http_sub_module \
|
||||
--with-luajit-xcflags="-DLUAJIT_NUMMODE=2 -DLUAJIT_ENABLE_LUA52COMPAT" \
|
||||
--with-pcre=objs/lib/$PCRE \
|
||||
--with-zlib=objs/lib/$ZLIB \
|
||||
--with-openssl=objs/lib/$OPENSSL \
|
||||
--with-select_module -j5 || exit 1
|
||||
#gmake -j5
|
||||
make || exit 1
|
||||
make install
|
210
util/configure
vendored
210
util/configure
vendored
@ -33,6 +33,8 @@ for my $opt (@ARGV) {
|
||||
}
|
||||
}
|
||||
|
||||
my @extra_make_env;
|
||||
|
||||
my ($platform, $on_solaris);
|
||||
|
||||
if ($OS =~ /solaris|sunos/i) {
|
||||
@ -43,7 +45,9 @@ if ($OS =~ /solaris|sunos/i) {
|
||||
$platform = $OS;
|
||||
|
||||
} 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)$/) {
|
||||
$platform = 'macosx';
|
||||
@ -54,6 +58,9 @@ if ($OS =~ /solaris|sunos/i) {
|
||||
} elsif ($OS =~ /^(?:openbsd|netbsd|dragonfly)$/) {
|
||||
$platform = 'bsd';
|
||||
|
||||
} elsif ($OS eq 'msys') {
|
||||
$platform = 'msys';
|
||||
|
||||
} else {
|
||||
$platform = 'posix';
|
||||
}
|
||||
@ -153,6 +160,9 @@ for my $opt (@ARGV) {
|
||||
|
||||
if ($opt =~ /^--prefix=(.*)/) {
|
||||
$prefix = $1;
|
||||
if ($prefix eq '') {
|
||||
$prefix = '.';
|
||||
}
|
||||
|
||||
} elsif ($opt eq '--without-lua51') {
|
||||
undef $resty_opts{lua};
|
||||
@ -163,6 +173,12 @@ for my $opt (@ARGV) {
|
||||
} elsif ($opt =~ /^--with-lua51=(.*)/) {
|
||||
$resty_opts{lua_path} = $1;
|
||||
|
||||
} elsif ($opt eq '--without-http_rewrite_module') {
|
||||
warn "WARNING: ngx_devel_kit is automatically disabled ",
|
||||
"because ngx_http_rewrite_module is disabled.\n";
|
||||
$resty_opts{no_ndk} = 1;
|
||||
push @ngx_opts, $opt;
|
||||
|
||||
} elsif ($opt eq '--without-lua_cjson') {
|
||||
$resty_opts{no_lua_cjson} = 1;
|
||||
|
||||
@ -270,8 +286,15 @@ for my $opt (@ARGV) {
|
||||
|
||||
} elsif ($opt =~ /^--with-(openssl|pcre|zlib|libatomic|md5|sha1)=(.*)/) {
|
||||
|
||||
my $path = File::Spec->rel2abs($2);
|
||||
push @ngx_opts, "--with-$1=$path";
|
||||
my ($lib, $path) = ($1, $2);
|
||||
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.*/) {
|
||||
push @ngx_opts, $opt;
|
||||
@ -283,7 +306,12 @@ for my $opt (@ARGV) {
|
||||
|
||||
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 = '';
|
||||
|
||||
@ -323,6 +351,12 @@ if ($postamble) {
|
||||
|
||||
sub env ($$) {
|
||||
my ($name, $val) = @_;
|
||||
if (!defined $name) {
|
||||
die "env not defined";
|
||||
}
|
||||
if (!defined $val) {
|
||||
die "env $name takes undef value";
|
||||
}
|
||||
print "export $name='$val'\n";
|
||||
$ENV{$name} = $val;
|
||||
}
|
||||
@ -374,7 +408,7 @@ sub build_resty_opts {
|
||||
}
|
||||
|
||||
} else {
|
||||
if (can_run("gmake")) {
|
||||
if (can_run("gmake")) { # msys has no gmake
|
||||
$make = 'gmake';
|
||||
|
||||
} else {
|
||||
@ -402,7 +436,7 @@ Type the following commands to build and install:
|
||||
_END_
|
||||
|
||||
if ($opts->{no_ndk}) {
|
||||
for my $name (qw(lua set_misc iconv lz_session form_input array_var)) {
|
||||
for my $name (qw(set_misc iconv lz_session form_input array_var encrypted_session)) {
|
||||
if (! $opts->{"no_http_$name"}) {
|
||||
warn "WARNING: ngx_http_${name}_module is automatically disabled ",
|
||||
"because ngx_devel_kit_module is disabled.\n";
|
||||
@ -522,20 +556,20 @@ _END_
|
||||
if ($opts->{luajit_path}) {
|
||||
my $luajit_prefix = $opts->{luajit_path};
|
||||
|
||||
my $lib = "$luajit_prefix/lib";
|
||||
my $inc = "$luajit_prefix/include/luajit-2.1";
|
||||
my $lib = File::Spec->catfile($luajit_prefix, "lib");
|
||||
my $inc = File::Spec->catfile($luajit_prefix, "include", "luajit-2.1");
|
||||
|
||||
env LUAJIT_LIB => $lib;
|
||||
env LUAJIT_INC => $inc;
|
||||
|
||||
unshift @ngx_ld_opts, "-L$lib";
|
||||
unshift @ngx_cc_opts, "-I$inc";
|
||||
#unshift @ngx_ld_opts, "-L$lib";
|
||||
#unshift @ngx_cc_opts, "-I$inc";
|
||||
|
||||
push @ngx_rpaths, "$luajit_prefix/lib";
|
||||
|
||||
} elsif ($opts->{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");
|
||||
|
||||
if (-d $luajit_root) {
|
||||
@ -549,6 +583,17 @@ _END_
|
||||
|
||||
my $extra_opts = ' TARGET_STRIP=@: CCDEBUG=-g';
|
||||
|
||||
{
|
||||
my $comp = ($cc || 'cc');
|
||||
my $ver = `$comp --version`;
|
||||
if (defined $ver && $ver =~ /\(GCC\) (\d+\.\d+)/) {
|
||||
my $v = $1;
|
||||
if ($v < 4.5) {
|
||||
$luajit_xcflags .= " -std=gnu99";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ($opts->{debug}) {
|
||||
$luajit_xcflags .= " -DLUA_USE_APICHECK -DLUA_USE_ASSERT";
|
||||
$luajit_xcflags =~ s/^ +//;
|
||||
@ -577,39 +622,79 @@ _END_
|
||||
$extra_opts .= " CC=cc";
|
||||
}
|
||||
|
||||
if ($platform eq 'macosx') {
|
||||
my $v = $ENV{MACOSX_DEPLOYMENT_TARGET};
|
||||
if (!defined $v || $v !~ /^\d+\.\d+$/) {
|
||||
$v = `sw_vers -productVersion`;
|
||||
if (defined $v && $v =~ /^\s*(\d+\.\d+)/) {
|
||||
$ENV{MACOSX_DEPLOYMENT_TARGET} = $1;
|
||||
#warn "MACOSX_DEPLOYMENT_TARGET = $1";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (defined $cores) {
|
||||
shell "${make} -j$cores$extra_opts PREFIX=$luajit_prefix", $dry_run;
|
||||
} else {
|
||||
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 && "
|
||||
. "\$(MAKE)$extra_opts PREFIX=$luajit_prefix";
|
||||
|
||||
push @make_install_cmds, "cd $root_dir/build/$luajit_src && "
|
||||
. "\$(MAKE) install$extra_opts PREFIX=$luajit_prefix DESTDIR=\$(DESTDIR)";
|
||||
my $abs_luajit_src = File::Spec->rel2abs(File::Spec->catfile($root_dir, "build", $luajit_src), $root_dir);
|
||||
|
||||
my $lib = "$luajit_root$luajit_prefix/lib";
|
||||
my $inc = "$luajit_root$luajit_prefix/include/luajit-2.1";
|
||||
if ($platform eq 'msys') {
|
||||
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_INC => $inc;
|
||||
|
||||
unshift @ngx_ld_opts, "-L$lib";
|
||||
unshift @ngx_cc_opts, "-I$inc";
|
||||
#unshift @ngx_ld_opts, "-L$lib";
|
||||
#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 '..';
|
||||
|
||||
} elsif ($opts->{lua_path}) {
|
||||
my $lua_prefix = $opts->{lua_path};
|
||||
env LUA_LIB => "$lua_prefix/lib";
|
||||
env LUA_INC => "$lua_prefix/include";
|
||||
env LUA_LIB => File::Spec->catfile($lua_prefix, "lib");
|
||||
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}) {
|
||||
# build stdandard lua
|
||||
@ -620,7 +705,7 @@ _END_
|
||||
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");
|
||||
|
||||
if (-d $lua_root) {
|
||||
@ -643,10 +728,11 @@ _END_
|
||||
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_INC => "$lua_root$lua_prefix/include";
|
||||
env LUA_LIB => File::Spec->catfile($lua_root, $lua_prefix, "lib");
|
||||
env LUA_INC => File::Spec->catfile($lua_root, $lua_prefix, "include");
|
||||
|
||||
push @make_cmds, "cd $root_dir/build/$lua_src && \$(MAKE)$extra_opts $platform";
|
||||
|
||||
@ -661,19 +747,30 @@ _END_
|
||||
{
|
||||
# build lua modules
|
||||
|
||||
my $lualib_prefix = "$prefix/lualib";
|
||||
my $lualib_prefix = File::Spec->catfile($prefix, "lualib");
|
||||
|
||||
my $ngx_lua_dir = auto_complete 'ngx_lua';
|
||||
|
||||
open my $in, ">>$ngx_lua_dir/config" or
|
||||
die "Cannot open $ngx_lua_dir/config for appending: $!\n";
|
||||
|
||||
print $in <<"_EOC_";
|
||||
{
|
||||
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_";
|
||||
|
||||
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_CPATH='\$ngx_lua_dquote$lualib_prefix/?.so\$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$path_prefix/?.so\$ngx_lua_dquote'"
|
||||
_EOC_
|
||||
}
|
||||
|
||||
close $in;
|
||||
|
||||
@ -694,6 +791,11 @@ _EOC_
|
||||
my $extra_opts = " DESTDIR=\$(DESTDIR) LUA_INCLUDE_DIR=$lua_inc " .
|
||||
"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) {
|
||||
#$extra_opts .= " INSTALL=$root_dir/build/install";
|
||||
if ($opts->{debug}) {
|
||||
@ -745,11 +847,15 @@ _EOC_
|
||||
my $extra_opts = " DESTDIR=\$(DESTDIR) LUA_INCLUDE_DIR=$lua_inc " .
|
||||
"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) {
|
||||
$extra_opts .= " INSTALL=$root_dir/build/install";
|
||||
if ($opts->{debug}) {
|
||||
$extra_opts .= " CFLAGS=\"-g -O -Wall\"";
|
||||
|
||||
}
|
||||
|
||||
} else {
|
||||
@ -792,6 +898,11 @@ _EOC_
|
||||
my $extra_opts = " DESTDIR=\$(DESTDIR) LUA_INCLUDE_DIR=$lua_inc " .
|
||||
"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) {
|
||||
$extra_opts .= " INSTALL=$root_dir/build/install";
|
||||
if ($opts->{debug}) {
|
||||
@ -844,9 +955,17 @@ _EOC_
|
||||
|
||||
# configure resty-cli:
|
||||
|
||||
my $resty_cli_dir = auto_complete 'resty-cli';
|
||||
push @make_install_cmds, "cd $root_dir/build/$resty_cli_dir && "
|
||||
. "$root_dir/build/install resty \$(DESTDIR)/$prefix/bin/";
|
||||
{
|
||||
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 && "
|
||||
. "$root_dir/build/install resty $target_dir";
|
||||
}
|
||||
|
||||
# prepare nginx configure line
|
||||
|
||||
@ -881,17 +1000,16 @@ sub usage ($) {
|
||||
my $msg = <<'_EOC_';
|
||||
--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.
|
||||
this not only affects nginx, but also other components.
|
||||
--with-debug enable debug logging
|
||||
--with-dtrace-probes enable dtrace USDT probes
|
||||
--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
|
||||
Lua 5.1 interpreter or LuaJIT 2.1.
|
||||
Lua 5.1 interpreter or LuaJIT 2.1
|
||||
|
||||
_EOC_
|
||||
|
||||
@ -990,12 +1108,13 @@ Options directly inherited from nginx
|
||||
|
||||
--builddir=DIR set the build directory
|
||||
|
||||
--with-rtsig_module enable rtsig module
|
||||
--with-select_module enable select module
|
||||
--without-select_module disable select module
|
||||
--with-poll_module enable poll module
|
||||
--without-poll_module disable poll module
|
||||
|
||||
--with-threads enable thread pool support
|
||||
|
||||
--with-file-aio enable file aio support
|
||||
--with-ipv6 enable ipv6 support
|
||||
|
||||
@ -1123,9 +1242,18 @@ sub gen_makefile {
|
||||
open my $out, ">Makefile" or
|
||||
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 "all:\n\t" . join("\n\t", @make_cmds) . "\n\n";
|
||||
print $out "all:\n\t" . join("\n\t", @make_cmds) . "\n\n";
|
||||
|
||||
print $out "install: all\n\t" . join("\n\t", @make_install_cmds) . "\n\n";
|
||||
|
||||
|
@ -15,7 +15,7 @@ getopts("lf:", \%opts) or die "Usage: $0 [-f] [-l] <cores>\n";
|
||||
my $jobs = shift || 4;
|
||||
|
||||
my $cwd = cwd();
|
||||
if ($cwd !~ /ngx_openresty-(\d+(?:\.\d+)+(?:rc\d+(?:\.\d+)?)?)$/) {
|
||||
if ($cwd !~ /openresty-(\d+(?:\.\d+)+(?:rc\d+(?:\.\d+)?)?)$/) {
|
||||
die "Bad current working directory: $cwd\n";
|
||||
}
|
||||
|
||||
@ -30,7 +30,7 @@ if ($^O eq 'freebsd' || $^O eq 'solaris') {
|
||||
$make = 'make';
|
||||
}
|
||||
|
||||
my $cfg_opts = "--with-http_iconv_module";
|
||||
my $cfg_opts = "";
|
||||
|
||||
if ($opts{l}) {
|
||||
$lua = 'Lua';
|
||||
@ -46,8 +46,10 @@ if ($^O eq 'solaris') {
|
||||
}
|
||||
|
||||
if ($^O eq 'darwin') {
|
||||
$cfg_opts .= " --with-cc-opt='-I/usr/local/include'"
|
||||
. " --with-ld-opt='-L/usr/local/lib'";
|
||||
$cfg_opts .= " --with-cc-opt='-I/usr/local/opt/openssl/include/ "
|
||||
. "-I/usr/local/opt/pcre/include/'"
|
||||
. " --with-ld-opt='-L/usr/local/opt/openssl/lib/ "
|
||||
. "-L/usr/local/opt/pcre/lib/'";
|
||||
}
|
||||
|
||||
my $prefix;
|
||||
@ -65,16 +67,79 @@ sub write_config_file ($) {
|
||||
|
||||
write_config_file "/tmp/nginx.conf";
|
||||
|
||||
warn "=== Without Gzip ===\n";
|
||||
warn "=== --with-stream ===\n";
|
||||
$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}) {
|
||||
sh "./configure $cfg_opts --without-http_gzip_module --prefix=$prefix -j$jobs > /dev/null";
|
||||
sh "./configure $cfg_opts --with-stream --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-stream'";
|
||||
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 "=== --with-stream + dtrace static probes ===\n";
|
||||
$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}) {
|
||||
sh "./configure $cfg_opts --with-dtrace-probes --with-stream --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-stream'";
|
||||
sh "$prefix/nginx/sbin/nginx -V 2>&1 |grep '\\--with-dtrace-probes'";
|
||||
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 "=== Without Gzip/SSL/PCRE ===\n";
|
||||
$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}) {
|
||||
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 "$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 '\\--without-http_gzip_module'";
|
||||
sh "$prefix/nginx/sbin/nginx -V 2>&1 |grep -v -q '\\--with-http_ssl_module'";
|
||||
sh "$prefix/nginx/sbin/nginx -V 2>&1 |grep '\\--without-pcre'";
|
||||
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";
|
||||
|
||||
$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";
|
||||
@ -85,6 +150,7 @@ sh "sudo $prefix/nginx/sbin/nginx -sstop";
|
||||
|
||||
warn "\n=== No Pool Build ===\n";
|
||||
$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}) {
|
||||
sh "./configure --with-no-pool-patch $cfg_opts --prefix=$prefix -j$jobs > /dev/null";
|
||||
}
|
||||
@ -104,6 +170,7 @@ sh "sudo $prefix/nginx/sbin/nginx -sstop";
|
||||
|
||||
warn "\n=== Normal Build ===\n";
|
||||
$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}) {
|
||||
sh "./configure $cfg_opts -j$jobs > /dev/null";
|
||||
}
|
||||
@ -121,6 +188,7 @@ sh "sudo $prefix/nginx/sbin/nginx -sstop";
|
||||
|
||||
warn "\n=== Debug Build ===\n";
|
||||
$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}) {
|
||||
my $more_cfg_opts = '';
|
||||
if ($lua eq 'LuaJIT') {
|
||||
@ -143,6 +211,7 @@ sh "sudo $prefix/nginx/sbin/nginx -sstop";
|
||||
|
||||
warn "\n=== DTrace Build ===\n";
|
||||
$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}) {
|
||||
sh "./configure $cfg_opts --with-dtrace-probes --prefix=$prefix -j$jobs > /dev/null";
|
||||
}
|
||||
@ -193,6 +262,13 @@ http {
|
||||
end
|
||||
';
|
||||
|
||||
upstream backend {
|
||||
server 0.0.0.1;
|
||||
balancer_by_lua_block {
|
||||
print("balancer!")
|
||||
}
|
||||
}
|
||||
|
||||
server {
|
||||
listen *:80;
|
||||
server_name localhost;
|
||||
|
20
util/fix-pod2markdown
Executable file
20
util/fix-pod2markdown
Executable 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;
|
||||
}
|
@ -8,7 +8,7 @@ sub cd ($);
|
||||
my $ver = `bash util/ver`;
|
||||
chomp $ver;
|
||||
|
||||
cd "ngx_openresty-$ver/bundle";
|
||||
cd "openresty-$ver/bundle";
|
||||
|
||||
opendir(my $dh, '.') or
|
||||
die "cannot opendir .: $!";
|
||||
@ -45,7 +45,7 @@ for my $t_file (@t_files) {
|
||||
warn "\n- $orig";
|
||||
warn "+ $_";
|
||||
|
||||
} elsif (s{ngx_openresty-\d+\.\d+\.\d+\.\d+(?:rc\d+)?}{ngx_openresty-$ver} && $orig ne $_) {
|
||||
} elsif (s{openresty-\d+\.\d+\.\d+\.\d+(?:rc\d+)?}{openresty-$ver} && $orig ne $_) {
|
||||
$changed++;
|
||||
|
||||
warn "\n- $orig";
|
||||
@ -75,7 +75,7 @@ for my $t_file (@t_files) {
|
||||
close $in;
|
||||
}
|
||||
|
||||
print join("\n", map { /^LuaJIT/ ? "* ~$_" : "* $_" } sort @dirs), "\n";
|
||||
#print join("\n", map { /^LuaJIT/ ? "* ~$_" : "* $_" } sort @dirs), "\n";
|
||||
|
||||
sub cd ($) {
|
||||
my $dir = shift;
|
||||
|
@ -14,7 +14,7 @@ cachefile=$work/$outfile
|
||||
if [ -s $cachefile ]; then
|
||||
cp $work/$outfile $outfile || exit 1
|
||||
else
|
||||
wget --no-check-certificate $1 -O $3 || exit 1
|
||||
wget $1 -O $3 || exit 1
|
||||
if [ $? == 0 ]; then
|
||||
cp $3 $work/ || exit 1
|
||||
fi
|
||||
|
@ -5,11 +5,11 @@ root=`perl -MCwd -e'print Cwd::abs_path(shift)' $(dirname -- "$0")/..`
|
||||
|
||||
info_txt=`perl -e 'print "\033[33m[INFO]\033[0m"'`
|
||||
|
||||
echo -n "ngx_openresty "
|
||||
echo -n "openresty "
|
||||
. ./util/ver
|
||||
echo
|
||||
|
||||
name=ngx_openresty-$version
|
||||
name=openresty-$version
|
||||
work=$root/work
|
||||
|
||||
if [ -z $debug ]; then
|
||||
@ -26,7 +26,7 @@ fi
|
||||
#################################
|
||||
|
||||
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 "https://openresty.org/download/nginx-$ver.tar.gz" -O nginx-$ver.tar.gz || exit 1
|
||||
tar -xzf nginx-$ver.tar.gz || 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
|
||||
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
|
||||
answer=`$root/util/ver-ge "$main_ver" 1.9.2`
|
||||
if [ "$answer" = "N" ]; then
|
||||
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`
|
||||
if [ "$answer" = "N" ]; then
|
||||
@ -290,8 +293,22 @@ if [ "$answer" = "N" ]; then
|
||||
echo
|
||||
fi
|
||||
|
||||
if [ "$main_ver" = "1.9.7" ]; then
|
||||
echo "$info_txt applying the resolver_security_fixes patch for nginx"
|
||||
patch -p1 < $root/patches/nginx-$main_ver-resolver_security_fixes.patch || exit 1
|
||||
echo
|
||||
fi
|
||||
|
||||
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
|
||||
|
||||
echo "$info_txt applying the ssl_cert_cb_yield.patch patch to nginx"
|
||||
patch -p1 < $root/patches/nginx-$main_ver-ssl_cert_cb_yield.patch
|
||||
echo
|
||||
|
||||
cd .. || exit 1
|
||||
|
||||
cp $root/patches/nginx-$main_ver-no_pool.patch ./nginx-no_pool.patch || exit 1
|
||||
@ -303,14 +320,14 @@ rm -rf no-pool-nginx-$ver
|
||||
|
||||
#################################
|
||||
|
||||
ver=0.57
|
||||
ver=0.58
|
||||
$root/util/get-tarball "https://github.com/openresty/echo-nginx-module/tarball/v$ver" -O echo-nginx-module-$ver.tar.gz || exit 1
|
||||
tar -xzf echo-nginx-module-$ver.tar.gz || exit 1
|
||||
mv openresty-echo-nginx-module-* echo-nginx-module-$ver || exit 1
|
||||
|
||||
#################################
|
||||
|
||||
ver=0.04
|
||||
ver=0.05
|
||||
$root/util/get-tarball "https://github.com/openresty/xss-nginx-module/tarball/v$ver" -O xss-nginx-module-$ver.tar.gz || exit 1
|
||||
tar -xzf xss-nginx-module-$ver.tar.gz || exit 1
|
||||
mv openresty-xss-nginx-module-* xss-nginx-module-$ver || exit 1
|
||||
@ -324,91 +341,91 @@ mv simpl-ngx_devel_kit-* ngx_devel_kit-$ver || exit 1
|
||||
|
||||
#################################
|
||||
|
||||
ver=0.28
|
||||
ver=0.29
|
||||
$root/util/get-tarball "https://github.com/openresty/set-misc-nginx-module/tarball/v$ver" -O set-misc-nginx-module-$ver.tar.gz || exit 1
|
||||
tar -xzf set-misc-nginx-module-$ver.tar.gz || exit 1
|
||||
mv openresty-set-misc-nginx-module-* set-misc-nginx-module-$ver || exit 1
|
||||
|
||||
#################################
|
||||
|
||||
ver=0.13
|
||||
ver=0.14
|
||||
$root/util/get-tarball "https://github.com/openresty/rds-json-nginx-module/tarball/v$ver" -O rds-json-nginx-module-$ver.tar.gz || exit 1
|
||||
tar -xzf rds-json-nginx-module-$ver.tar.gz || exit 1
|
||||
mv openresty-rds-json-nginx-module-* rds-json-nginx-module-$ver || exit 1
|
||||
|
||||
#################################
|
||||
|
||||
ver=0.05
|
||||
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
|
||||
tar -xzf rds-csv-nginx-module-$ver.tar.gz || exit 1
|
||||
mv openresty-rds-csv-nginx-module-* rds-csv-nginx-module-$ver || exit 1
|
||||
|
||||
#################################
|
||||
|
||||
ver=0.25
|
||||
ver=0.29
|
||||
$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
|
||||
mv openresty-headers-more-nginx-module-* headers-more-nginx-module-$ver || exit 1
|
||||
|
||||
#################################
|
||||
|
||||
ver=0.1.8
|
||||
ver=0.1.9
|
||||
$root/util/get-tarball "https://github.com/openresty/drizzle-nginx-module/tarball/v$ver" -O drizzle-nginx-module-$ver.tar.gz || exit 1
|
||||
tar -xzf drizzle-nginx-module-$ver.tar.gz || exit 1
|
||||
mv openresty-drizzle-nginx-module-* drizzle-nginx-module-$ver || exit 1
|
||||
|
||||
#################################
|
||||
|
||||
ver=0.9.15
|
||||
ver=0.10.0
|
||||
$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
|
||||
mv openresty-lua-nginx-module-* ngx_lua-$ver || exit 1
|
||||
|
||||
#################################
|
||||
|
||||
ver=0.02
|
||||
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
|
||||
tar -xzf lua-upstream-nginx-module-$ver.tar.gz || exit 1
|
||||
mv openresty-lua-upstream-nginx-module-* ngx_lua_upstream-$ver || exit 1
|
||||
|
||||
#################################
|
||||
|
||||
ver=0.03
|
||||
ver=0.04
|
||||
$root/util/get-tarball "https://github.com/openresty/array-var-nginx-module/tarball/v$ver" -O array-var-nginx-module-$ver.tar.gz || exit 1
|
||||
tar -xzf array-var-nginx-module-$ver.tar.gz || exit 1
|
||||
mv openresty-array-var-nginx-module-* array-var-nginx-module-$ver || exit 1
|
||||
|
||||
#################################
|
||||
|
||||
ver=0.15
|
||||
ver=0.16
|
||||
$root/util/get-tarball "https://github.com/openresty/memc-nginx-module/tarball/v$ver" -O memc-nginx-module-$ver.tar.gz || exit 1
|
||||
tar -xzf memc-nginx-module-$ver.tar.gz || exit 1
|
||||
mv openresty-memc-nginx-module-* memc-nginx-module-$ver || exit 1
|
||||
|
||||
#################################
|
||||
|
||||
ver=0.29
|
||||
ver=0.30
|
||||
$root/util/get-tarball "https://github.com/openresty/srcache-nginx-module/tarball/v$ver" -O srcache-nginx-module-$ver.tar.gz || exit 1
|
||||
tar -xzf srcache-nginx-module-$ver.tar.gz || exit 1
|
||||
mv openresty-srcache-nginx-module-* srcache-nginx-module-$ver || exit 1
|
||||
|
||||
#################################
|
||||
|
||||
ver=0.10
|
||||
ver=0.11
|
||||
$root/util/get-tarball "https://github.com/calio/form-input-nginx-module/tarball/v$ver" -O form-input-nginx-module-$ver.tar.gz || exit 1
|
||||
tar -xzf form-input-nginx-module-$ver.tar.gz || exit 1
|
||||
mv calio-form-input-nginx-module-* form-input-nginx-module-$ver || exit 1
|
||||
|
||||
#################################
|
||||
|
||||
ver=0.10
|
||||
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
|
||||
tar -xzf iconv-nginx-module-$ver.tar.gz || exit 1
|
||||
mv calio-iconv-nginx-module-* iconv-nginx-module-$ver || exit 1
|
||||
|
||||
#################################
|
||||
|
||||
ver=0.03
|
||||
ver=0.04
|
||||
$root/util/get-tarball "https://github.com/openresty/encrypted-session-nginx-module/tarball/v$ver" -O encrypted-session-nginx-module-$ver.tar.gz || exit 1
|
||||
tar -xzf encrypted-session-nginx-module-$ver.tar.gz || exit 1
|
||||
mv openresty-encrypted-session-nginx-module-* encrypted-session-nginx-module-$ver || exit 1
|
||||
@ -424,7 +441,7 @@ mv openresty-encrypted-session-nginx-module-* encrypted-session-nginx-module-$ve
|
||||
#################################
|
||||
|
||||
ver=0.3.7
|
||||
$root/util/get-tarball "http://people.freebsd.org/~osa/ngx_http_redis-$ver.tar.gz" -O redis-nginx-module-$ver.tar.gz || exit 1
|
||||
$root/util/get-tarball "https://people.freebsd.org/~osa/ngx_http_redis-$ver.tar.gz" -O redis-nginx-module-$ver.tar.gz || exit 1
|
||||
tar -xzf redis-nginx-module-$ver.tar.gz || exit 1
|
||||
mv ngx_http_redis-* redis-nginx-module-$ver || exit 1
|
||||
|
||||
@ -440,28 +457,28 @@ cd ..
|
||||
|
||||
#################################
|
||||
|
||||
ver=1.0rc5
|
||||
ver=1.0rc7
|
||||
$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
|
||||
mv FRiCKLE-ngx_postgres-* ngx_postgres-$ver || exit 1
|
||||
|
||||
#################################
|
||||
|
||||
ver=0.2rc2
|
||||
ver=0.2rc3
|
||||
$root/util/get-tarball "https://github.com/FRiCKLE/ngx_coolkit/tarball/$ver" -O ngx_coolkit-$ver.tar.gz || exit 1
|
||||
tar -xzf ngx_coolkit-$ver.tar.gz || exit 1
|
||||
mv FRiCKLE-ngx_coolkit-* ngx_coolkit-$ver || exit 1
|
||||
|
||||
#################################
|
||||
|
||||
ver=0.11
|
||||
ver=0.12
|
||||
$root/util/get-tarball "https://github.com/openresty/redis2-nginx-module/tarball/v$ver" -O redis2-nginx-module-$ver.tar.gz || exit 1
|
||||
tar -xzf redis2-nginx-module-$ver.tar.gz || exit 1
|
||||
mv openresty-redis2-nginx-module-* redis2-nginx-module-$ver || exit 1
|
||||
|
||||
#################################
|
||||
|
||||
ver=0.02
|
||||
ver=0.05
|
||||
$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
|
||||
mv openresty-resty-cli-* resty-cli-$ver || exit 1
|
||||
@ -494,17 +511,17 @@ echo
|
||||
|
||||
#################################
|
||||
|
||||
ver=2.1-20150223
|
||||
ver=2.1-20160108
|
||||
$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
|
||||
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
|
||||
#cd LuaJIT-$ver || exit 1;
|
||||
#patch -p1 < ../hotfix.patch || exit 1
|
||||
cd LuaJIT-$ver || exit 1;
|
||||
echo "$info_txt applying the luajit-win32-default-paths patch for luajit $ver"
|
||||
patch -p1 < $root/patches/luajit-win32-default-paths.patch || exit 1
|
||||
#rm ../hotfix.patch
|
||||
#cd .. || exit 1
|
||||
cd .. || exit 1
|
||||
|
||||
#$root/util/get-tarball http://luajit.org/download/beta11_hotfix1.patch -O beta11_hotfix1.patch
|
||||
#patch -p1 < beta11_hotfix1.patch || exit 1
|
||||
@ -515,26 +532,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
|
||||
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
|
||||
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
|
||||
tar -xzf lua-redis-parser-$ver.tar.gz || 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
|
||||
tar -xzf lua-rds-parser-$ver.tar.gz || 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 +571,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
|
||||
tar -xzf lua-resty-dns-$ver.tar.gz || 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 +583,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
|
||||
tar -xzf lua-resty-memcached-$ver.tar.gz || 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.22
|
||||
$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
|
||||
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 +607,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
|
||||
tar -xzf lua-resty-mysql-$ver.tar.gz || 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 +619,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
|
||||
tar -xzf lua-resty-upload-$ver.tar.gz || 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 +631,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
|
||||
tar -xzf lua-resty-string-$ver.tar.gz || 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 +643,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
|
||||
tar -xzf lua-resty-websocket-$ver.tar.gz || 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 +655,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
|
||||
tar -xzf lua-resty-lock-$ver.tar.gz || 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 +667,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
|
||||
tar -xzf lua-resty-lrucache-$ver.tar.gz || 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.0
|
||||
ver=0.1.4
|
||||
$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
|
||||
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 +691,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
|
||||
tar -xzf lua-resty-upstream-healthcheck-$ver.tar.gz || 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
|
||||
|
||||
cd ..
|
||||
cp $root/util/configure ./
|
||||
cp $root/README.markdown ./
|
||||
cp $root/util/install bundle/
|
||||
cp $root/util/configure ./ || exit 1
|
||||
#markdown2pod -e utf8 -d GitHub $root/README.markdown|$root/util/fix-pod2markdown|pod2text > README || exit 1
|
||||
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
|
||||
|
||||
cd $root
|
||||
|
34
util/package-nginx.sh
Executable file
34
util/package-nginx.sh
Executable file
@ -0,0 +1,34 @@
|
||||
#!/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
|
||||
|
||||
cd nginx || exit 1
|
||||
git pull --force || exit 1
|
||||
cd .. || exit 1
|
||||
|
||||
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
19
util/package-win32.sh
Executable 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 resty || exit 1
|
||||
cd .. || exit 1
|
||||
zip -r $name.zip $name || exit 1
|
||||
echo $name.zip
|
Reference in New Issue
Block a user