Compare commits
41 Commits
quic
...
stable-1.6
Author | SHA1 | Date |
---|---|---|
Maxim Dounin | f0870afb39 | |
Maxim Dounin | 9ab16abd02 | |
Maxim Dounin | f5db187b07 | |
Maxim Dounin | 93e86eda88 | |
Maxim Dounin | d9471299c7 | |
Ruslan Ermilov | 37115f7595 | |
Ruslan Ermilov | c04312f3eb | |
Ruslan Ermilov | f335d4e772 | |
Ruslan Ermilov | ad2d8f9939 | |
Ruslan Ermilov | 3b5ef1b5c9 | |
Ruslan Ermilov | bdbb32a743 | |
Ruslan Ermilov | d0bcef30a2 | |
Maxim Dounin | 10985599ab | |
Roman Arutyunyan | 64ef1891a7 | |
Maxim Dounin | bf614d7d95 | |
Valentin Bartenev | d1d9e40af9 | |
Ruslan Ermilov | 0f71123120 | |
Maxim Dounin | 47a61270d1 | |
Maxim Dounin | d7f841489d | |
Yichun Zhang | 1b43b3b992 | |
Maxim Dounin | 11929fbce1 | |
Maxim Dounin | 40f7f8318f | |
Maxim Dounin | 93624624cb | |
Maxim Dounin | 87bfd867b6 | |
Maxim Dounin | bf23016157 | |
Ruslan Ermilov | 2cdbe76ad4 | |
Ruslan Ermilov | 8a875278c8 | |
Maxim Dounin | 174f7a8baf | |
Maxim Dounin | 167d78addb | |
Maxim Dounin | d2124bbc7c | |
Maxim Dounin | 3d1275bdbd | |
Maxim Dounin | 39bac43204 | |
Maxim Dounin | e93c65b6f6 | |
Maxim Dounin | c2b718ee9a | |
Maxim Dounin | b24b30e74a | |
Maxim Dounin | 5afdcc4fc5 | |
Maxim Dounin | b21fd25536 | |
Maxim Dounin | 2c49caea03 | |
Maxim Konovalov | 9e0d7d45e3 | |
Maxim Dounin | b36b64c4fd | |
Maxim Dounin | fee2d9c74e |
389
README
389
README
|
@ -1,389 +0,0 @@
|
|||
Experimental QUIC support for nginx
|
||||
-----------------------------------
|
||||
|
||||
1. Introduction
|
||||
2. Building from sources
|
||||
3. Configuration
|
||||
4. Directives
|
||||
5. Clients
|
||||
6. Troubleshooting
|
||||
7. Contributing
|
||||
8. Links
|
||||
|
||||
1. Introduction
|
||||
|
||||
This is an experimental QUIC [1] / HTTP/3 [2] support for nginx.
|
||||
|
||||
The code is developed in a separate "quic" branch available
|
||||
at https://hg.nginx.org/nginx-quic. Currently it is based
|
||||
on nginx mainline 1.23.x. We merge new nginx releases into
|
||||
this branch regularly.
|
||||
|
||||
The project code base is under the same BSD license as nginx.
|
||||
|
||||
The code is currently at a beta level of quality, however
|
||||
there are several production deployments with it.
|
||||
|
||||
NGINX Development Team is working on improving HTTP/3 support to
|
||||
integrate it into the main NGINX codebase. Thus, expect further
|
||||
updates of this code, including features, changes in behaviour,
|
||||
bug fixes, and refactoring. NGINX Development team will be
|
||||
grateful for any feedback and code submissions.
|
||||
|
||||
Please contact NGINX Development Team via nginx-devel mailing list [3].
|
||||
|
||||
What works now:
|
||||
|
||||
IETF QUIC version 1 is supported. Internet drafts are no longer supported.
|
||||
|
||||
nginx should be able to respond to HTTP/3 requests over QUIC and
|
||||
it should be possible to upload and download big files without errors.
|
||||
|
||||
+ The handshake completes successfully
|
||||
+ One endpoint can update keys and its peer responds correctly
|
||||
+ 0-RTT data is being received and acted on
|
||||
+ Connection is established using TLS Resume Ticket
|
||||
+ A handshake that includes a Retry packet completes successfully
|
||||
+ Stream data is being exchanged and ACK'ed
|
||||
+ An H3 transaction succeeded
|
||||
+ One or both endpoints insert entries into dynamic table and
|
||||
subsequently reference them from header blocks
|
||||
+ Version Negotiation packet is sent to client with unknown version
|
||||
+ Lost packets are detected and retransmitted properly
|
||||
+ Clients may migrate to new address
|
||||
|
||||
2. Building from sources
|
||||
|
||||
The build is configured using the configure command.
|
||||
Refer to http://nginx.org/en/docs/configure.html for details.
|
||||
|
||||
When configuring nginx, it's possible to enable QUIC and HTTP/3
|
||||
using the following new configuration options:
|
||||
|
||||
--with-http_v3_module - enable QUIC and HTTP/3
|
||||
--with-stream_quic_module - enable QUIC in Stream
|
||||
|
||||
A library that provides QUIC support is recommended to build nginx, there
|
||||
are several of those available on the market:
|
||||
+ BoringSSL [4]
|
||||
+ LibreSSL [5]
|
||||
+ QuicTLS [6]
|
||||
|
||||
Alternatively, nginx can be configured with OpenSSL compatibility
|
||||
layer, which emulates BoringSSL QUIC API for OpenSSL. This mode is
|
||||
enabled by default if native QUIC support is not detected.
|
||||
0-RTT is not supported in OpenSSL compatibility mode.
|
||||
|
||||
Clone the NGINX QUIC repository
|
||||
|
||||
$ hg clone -b quic https://hg.nginx.org/nginx-quic
|
||||
$ cd nginx-quic
|
||||
|
||||
Use the following command to configure nginx with BoringSSL [4]
|
||||
|
||||
$ ./auto/configure --with-debug --with-http_v3_module \
|
||||
--with-cc-opt="-I../boringssl/include" \
|
||||
--with-ld-opt="-L../boringssl/build/ssl \
|
||||
-L../boringssl/build/crypto"
|
||||
$ make
|
||||
|
||||
Alternatively, nginx can be configured with QuicTLS [6]
|
||||
|
||||
$ ./auto/configure --with-debug --with-http_v3_module \
|
||||
--with-cc-opt="-I../quictls/build/include" \
|
||||
--with-ld-opt="-L../quictls/build/lib"
|
||||
|
||||
Alternatively, nginx can be configured with a modern version
|
||||
of LibreSSL [7]
|
||||
|
||||
$ ./auto/configure --with-debug --with-http_v3_module \
|
||||
--with-cc-opt="-I../libressl/build/include" \
|
||||
--with-ld-opt="-L../libressl/build/lib"
|
||||
|
||||
3. Configuration
|
||||
|
||||
The HTTP "listen" directive got a new option "quic" which enables
|
||||
QUIC as client transport protocol instead of TCP.
|
||||
|
||||
The Stream "listen" directive got a new option "quic" which enables
|
||||
QUIC as client transport protocol instead of TCP or plain UDP.
|
||||
|
||||
Along with "quic", it's also possible to specify "reuseport"
|
||||
option [8] to make it work properly with multiple workers.
|
||||
|
||||
To enable address validation:
|
||||
|
||||
quic_retry on;
|
||||
|
||||
To enable 0-RTT:
|
||||
|
||||
ssl_early_data on;
|
||||
|
||||
Make sure that TLS 1.3 is configured which is required for QUIC:
|
||||
|
||||
ssl_protocols TLSv1.3;
|
||||
|
||||
To enable GSO (Generic Segmentation Offloading):
|
||||
|
||||
quic_gso on;
|
||||
|
||||
To limit maximum UDP payload size on receive path:
|
||||
|
||||
quic_mtu <size>;
|
||||
|
||||
To set host key for various tokens:
|
||||
|
||||
quic_host_key <filename>;
|
||||
|
||||
|
||||
By default, GSO Linux-specific optimization [10] is disabled.
|
||||
Enable it in case a corresponding network interface is configured to
|
||||
support GSO.
|
||||
|
||||
A number of directives were added that configure HTTP/3:
|
||||
|
||||
http3
|
||||
http3_hq
|
||||
http3_stream_buffer_size
|
||||
http3_max_concurrent_pushes
|
||||
http3_max_concurrent_streams
|
||||
http3_push
|
||||
http3_push_preload
|
||||
|
||||
In http, an additional variable is available: $http3.
|
||||
The value of $http3 is "h3" for HTTP/3 connections,
|
||||
"hq" for hq connections, or an empty string otherwise.
|
||||
|
||||
In stream, an additional variable is available: $quic.
|
||||
The value of $quic is "quic" if QUIC connection is used,
|
||||
or an empty string otherwise.
|
||||
|
||||
Example configuration:
|
||||
|
||||
http {
|
||||
log_format quic '$remote_addr - $remote_user [$time_local] '
|
||||
'"$request" $status $body_bytes_sent '
|
||||
'"$http_referer" "$http_user_agent" "$http3"';
|
||||
|
||||
access_log logs/access.log quic;
|
||||
|
||||
server {
|
||||
# for better compatibility it's recommended
|
||||
# to use the same port for quic and https
|
||||
listen 8443 quic reuseport;
|
||||
listen 8443 ssl;
|
||||
|
||||
ssl_certificate certs/example.com.crt;
|
||||
ssl_certificate_key certs/example.com.key;
|
||||
ssl_protocols TLSv1.3;
|
||||
|
||||
location / {
|
||||
# required for browsers to direct them into quic port
|
||||
add_header Alt-Svc 'h3=":8443"; ma=86400';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
4. Directives
|
||||
|
||||
Syntax: quic_bpf on | off;
|
||||
Default: quic_bpf off;
|
||||
Context: main
|
||||
|
||||
Enables routing of QUIC packets using eBPF.
|
||||
When enabled, this allows to support QUIC connection migration.
|
||||
The directive is only supported on Linux 5.7+.
|
||||
|
||||
|
||||
Syntax: quic_retry on | off;
|
||||
Default: quic_retry off;
|
||||
Context: http | stream, server
|
||||
|
||||
Enables the QUIC Address Validation feature. This includes:
|
||||
- sending a new token in a Retry packet or a NEW_TOKEN frame
|
||||
- validating a token received in the Initial packet
|
||||
|
||||
|
||||
Syntax: quic_gso on | off;
|
||||
Default: quic_gso off;
|
||||
Context: http | stream, server
|
||||
|
||||
Enables sending in optimized batch mode using segmentation offloading.
|
||||
Optimized sending is only supported on Linux featuring UDP_SEGMENT.
|
||||
|
||||
|
||||
Syntax: quic_mtu size;
|
||||
Default: quic_mtu 65527;
|
||||
Context: http | stream, server
|
||||
|
||||
Sets the QUIC max_udp_payload_size transport parameter value.
|
||||
This is the maximum UDP payload that we are willing to receive.
|
||||
|
||||
|
||||
Syntax: quic_host_key file;
|
||||
Default: -
|
||||
Context: http | stream, server
|
||||
|
||||
Specifies a file with the secret key used to encrypt stateless reset and
|
||||
address validation tokens. By default, a randomly generated key is used.
|
||||
|
||||
|
||||
Syntax: quic_active_connection_id_limit number;
|
||||
Default: quic_active_connection_id_limit 2;
|
||||
Context: http | stream, server
|
||||
|
||||
Sets the QUIC active_connection_id_limit transport parameter value.
|
||||
This is the maximum number of connection IDs we are willing to store.
|
||||
|
||||
|
||||
Syntax: quic_timeout time;
|
||||
Default: quic_timeout 60s;
|
||||
Context: stream, server
|
||||
|
||||
Defines a timeout used to negotiate the QUIC idle timeout.
|
||||
In the http module, it is taken from the keepalive_timeout directive.
|
||||
|
||||
|
||||
Syntax: quic_stream_buffer_size size;
|
||||
Default: quic_stream_buffer_size 64k;
|
||||
Context: stream, server
|
||||
|
||||
Syntax: http3_stream_buffer_size size;
|
||||
Default: http3_stream_buffer_size 64k;
|
||||
Context: http, server
|
||||
|
||||
Sets buffer size for reading and writing of the QUIC STREAM payload.
|
||||
The buffer size is used to calculate initial flow control limits
|
||||
in the following QUIC transport parameters:
|
||||
- initial_max_data
|
||||
- initial_max_stream_data_bidi_local
|
||||
- initial_max_stream_data_bidi_remote
|
||||
- initial_max_stream_data_uni
|
||||
|
||||
|
||||
Syntax: http3_max_concurrent_pushes number;
|
||||
Default: http3_max_concurrent_pushes 10;
|
||||
Context: http, server
|
||||
|
||||
Limits the maximum number of concurrent push requests in a connection.
|
||||
|
||||
|
||||
Syntax: http3_max_concurrent_streams number;
|
||||
Default: http3_max_concurrent_streams 128;
|
||||
Context: http, server
|
||||
|
||||
Sets the maximum number of concurrent HTTP/3 streams in a connection.
|
||||
|
||||
|
||||
Syntax: http3_push uri | off;
|
||||
Default: http3_push off;
|
||||
Context: http, server, location
|
||||
|
||||
Pre-emptively sends (pushes) a request to the specified uri along with
|
||||
the response to the original request. Only relative URIs with absolute
|
||||
path will be processed, for example:
|
||||
|
||||
http3_push /static/css/main.css;
|
||||
|
||||
The uri value can contain variables.
|
||||
|
||||
Several http3_push directives can be specified on the same configuration
|
||||
level. The off parameter cancels the effect of the http3_push directives
|
||||
inherited from the previous configuration level.
|
||||
|
||||
|
||||
Syntax: http3_push_preload on | off;
|
||||
Default: http3_push_preload off;
|
||||
Context: http, server, location
|
||||
|
||||
Enables automatic conversion of preload links specified in the “Link”
|
||||
response header fields into push requests.
|
||||
|
||||
|
||||
Syntax: http3 on | off;
|
||||
Default: http3 on;
|
||||
Context: http, server
|
||||
|
||||
Enables HTTP/3 protocol negotiation.
|
||||
|
||||
|
||||
Syntax: http3_hq on | off;
|
||||
Default: http3_hq off;
|
||||
Context: http, server
|
||||
|
||||
Enables HTTP/0.9 protocol negotiation used in QUIC interoperability tests.
|
||||
|
||||
5. Clients
|
||||
|
||||
* Browsers
|
||||
|
||||
Known to work: Firefox 90+ and Chrome 92+ (QUIC version 1)
|
||||
|
||||
Beware of strange issues: sometimes browser may decide to ignore QUIC
|
||||
Cache clearing/restart might help. Always check access.log and
|
||||
error.log to make sure the browser is using HTTP/3 and not TCP https.
|
||||
|
||||
* Console clients
|
||||
|
||||
Known to work: ngtcp2, firefox's neqo and chromium's console clients:
|
||||
|
||||
$ examples/client 127.0.0.1 8443 https://example.com:8443/index.html
|
||||
|
||||
$ ./neqo-client https://127.0.0.1:8443/
|
||||
|
||||
$ chromium-build/out/my_build/quic_client http://example.com:8443
|
||||
|
||||
|
||||
In case everyhing is right, the access log should show something like:
|
||||
|
||||
127.0.0.1 - - [24/Apr/2020:11:27:29 +0300] "GET / HTTP/3" 200 805 "-"
|
||||
"nghttp3/ngtcp2 client" "quic"
|
||||
|
||||
|
||||
6. Troubleshooting
|
||||
|
||||
Here are some tips that may help to identify problems:
|
||||
|
||||
+ Ensure nginx is built with proper SSL library that supports QUIC
|
||||
|
||||
+ Ensure nginx is using the proper SSL library in runtime
|
||||
(`nginx -V` shows what it's using)
|
||||
|
||||
+ Ensure a client is actually sending requests over QUIC
|
||||
(see "Clients" section about browsers and cache)
|
||||
|
||||
We recommend to start with simple console client like ngtcp2
|
||||
to ensure the server is configured properly before trying
|
||||
with real browsers that may be very picky with certificates,
|
||||
for example.
|
||||
|
||||
+ Build nginx with debug support [9] and check the debug log.
|
||||
It should contain all details about connection and why it
|
||||
failed. All related messages contain "quic " prefix and can
|
||||
be easily filtered out.
|
||||
|
||||
+ For a deeper investigation, please enable additional debugging
|
||||
in src/event/quic/ngx_event_quic_connection.h:
|
||||
|
||||
#define NGX_QUIC_DEBUG_PACKETS
|
||||
#define NGX_QUIC_DEBUG_FRAMES
|
||||
#define NGX_QUIC_DEBUG_ALLOC
|
||||
#define NGX_QUIC_DEBUG_CRYPTO
|
||||
|
||||
7. Contributing
|
||||
|
||||
Please refer to
|
||||
http://nginx.org/en/docs/contributing_changes.html
|
||||
|
||||
8. Links
|
||||
|
||||
[1] https://datatracker.ietf.org/doc/html/rfc9000
|
||||
[2] https://datatracker.ietf.org/doc/html/rfc9114
|
||||
[3] https://mailman.nginx.org/mailman/listinfo/nginx-devel
|
||||
[4] https://boringssl.googlesource.com/boringssl/
|
||||
[5] https://www.libressl.org/
|
||||
[6] https://github.com/quictls/openssl
|
||||
[7] https://github.com/libressl-portable/portable/releases/tag/v3.6.0
|
||||
[8] https://nginx.org/en/docs/http/ngx_http_core_module.html#listen
|
||||
[9] https://nginx.org/en/docs/debugging_log.html
|
||||
[10] http://vger.kernel.org/lpc_net2018_talks/willemdebruijn-lpc2018-udpgso-paper-DRAFT-1.pdf
|
|
@ -12,3 +12,4 @@ CC_TEST_FLAGS="-Ae"
|
|||
|
||||
PCRE_OPT="$PCRE_OPT -Ae"
|
||||
ZLIB_OPT="$ZLIB_OPT -Ae"
|
||||
MD5_OPT="$MD5_OPT -Ae"
|
||||
|
|
|
@ -62,6 +62,7 @@ ngx_include_opt="-I"
|
|||
ngx_objout="-o"
|
||||
ngx_binout="-e"
|
||||
ngx_objext="obj"
|
||||
ngx_binext=".exe"
|
||||
|
||||
ngx_long_start='@&&|
|
||||
'
|
||||
|
|
|
@ -5,9 +5,8 @@
|
|||
# clang
|
||||
|
||||
|
||||
NGX_CLANG_VER=`$CC -v 2>&1 | grep 'version' 2>&1 \
|
||||
| sed -n -e 's/^.*clang version \(.*\)/\1/p' \
|
||||
-e 's/^.*LLVM version \(.*\)/\1/p'`
|
||||
NGX_CLANG_VER=`$CC -v 2>&1 | grep '\(clang\|LLVM\) version' 2>&1 \
|
||||
| sed -e 's/^.* version \(.*\)/\1/'`
|
||||
|
||||
echo " + clang version: $NGX_CLANG_VER"
|
||||
|
||||
|
@ -67,6 +66,12 @@ else
|
|||
PCRE_OPT="$PCRE_OPT -pipe"
|
||||
fi
|
||||
|
||||
if [ ".$MD5_OPT" = "." ]; then
|
||||
MD5_OPT="-O2 -pipe $CPU_OPT"
|
||||
else
|
||||
MD5_OPT="$MD5_OPT -pipe"
|
||||
fi
|
||||
|
||||
if [ ".$ZLIB_OPT" = "." ]; then
|
||||
ZLIB_OPT="-O2 -pipe $CPU_OPT"
|
||||
else
|
||||
|
@ -83,11 +88,6 @@ CFLAGS="$CFLAGS -Wconditional-uninitialized"
|
|||
# we have a lot of unused function arguments
|
||||
CFLAGS="$CFLAGS -Wno-unused-parameter"
|
||||
|
||||
# deprecated system OpenSSL library on OS X
|
||||
if [ "$NGX_SYSTEM" = "Darwin" ]; then
|
||||
CFLAGS="$CFLAGS -Wno-deprecated-declarations"
|
||||
fi
|
||||
|
||||
# stop on warning
|
||||
CFLAGS="$CFLAGS -Werror"
|
||||
|
||||
|
|
64
auto/cc/conf
64
auto/cc/conf
|
@ -5,17 +5,12 @@
|
|||
|
||||
LINK="\$(CC)"
|
||||
|
||||
MAIN_LINK=
|
||||
MODULE_LINK="-shared"
|
||||
|
||||
ngx_include_opt="-I "
|
||||
ngx_compile_opt="-c"
|
||||
ngx_pic_opt="-fPIC"
|
||||
ngx_objout="-o "
|
||||
ngx_binout="-o "
|
||||
ngx_objext="o"
|
||||
ngx_binext=
|
||||
ngx_modext=".so"
|
||||
|
||||
ngx_long_start=
|
||||
ngx_long_end=
|
||||
|
@ -50,9 +45,6 @@ if test -n "$CFLAGS"; then
|
|||
|
||||
sunc)
|
||||
|
||||
MAIN_LINK=
|
||||
MODULE_LINK="-G"
|
||||
|
||||
case "$NGX_MACHINE" in
|
||||
|
||||
i86pc)
|
||||
|
@ -117,7 +109,7 @@ else
|
|||
. auto/cc/acc
|
||||
;;
|
||||
|
||||
msvc)
|
||||
msvc*)
|
||||
# MSVC++ 6.0 SP2, MSVC++ Toolkit 2003
|
||||
|
||||
. auto/cc/msvc
|
||||
|
@ -164,40 +156,22 @@ if [ "$NGX_PLATFORM" != win32 ]; then
|
|||
fi
|
||||
|
||||
|
||||
ngx_feature="-Wl,-E switch"
|
||||
ngx_feature_name=
|
||||
ngx_feature_run=no
|
||||
ngx_feature="gcc builtin atomic operations"
|
||||
ngx_feature_name=NGX_HAVE_GCC_ATOMIC
|
||||
ngx_feature_run=yes
|
||||
ngx_feature_incs=
|
||||
ngx_feature_path=
|
||||
ngx_feature_libs=-Wl,-E
|
||||
ngx_feature_test=
|
||||
ngx_feature_libs=
|
||||
ngx_feature_test="long n = 0;
|
||||
if (!__sync_bool_compare_and_swap(&n, 0, 1))
|
||||
return 1;
|
||||
if (__sync_fetch_and_add(&n, 1) != 1)
|
||||
return 1;
|
||||
if (n != 2)
|
||||
return 1;
|
||||
__sync_synchronize();"
|
||||
. auto/feature
|
||||
|
||||
if [ $ngx_found = yes ]; then
|
||||
MAIN_LINK="-Wl,-E"
|
||||
fi
|
||||
|
||||
|
||||
if [ "$NGX_CC_NAME" = "sunc" ]; then
|
||||
echo "checking for gcc builtin atomic operations ... disabled"
|
||||
else
|
||||
ngx_feature="gcc builtin atomic operations"
|
||||
ngx_feature_name=NGX_HAVE_GCC_ATOMIC
|
||||
ngx_feature_run=yes
|
||||
ngx_feature_incs=
|
||||
ngx_feature_path=
|
||||
ngx_feature_libs=
|
||||
ngx_feature_test="long n = 0;
|
||||
if (!__sync_bool_compare_and_swap(&n, 0, 1))
|
||||
return 1;
|
||||
if (__sync_fetch_and_add(&n, 1) != 1)
|
||||
return 1;
|
||||
if (n != 2)
|
||||
return 1;
|
||||
__sync_synchronize();"
|
||||
. auto/feature
|
||||
fi
|
||||
|
||||
|
||||
if [ "$NGX_CC_NAME" = "ccc" ]; then
|
||||
echo "checking for C99 variadic macros ... disabled"
|
||||
|
@ -213,7 +187,7 @@ if [ "$NGX_PLATFORM" != win32 ]; then
|
|||
var(0, buf, \"%d\", 1);
|
||||
if (buf[0] != '1') return 1"
|
||||
. auto/feature
|
||||
fi
|
||||
fi
|
||||
|
||||
|
||||
ngx_feature="gcc variadic macros"
|
||||
|
@ -229,16 +203,6 @@ if [ "$NGX_PLATFORM" != win32 ]; then
|
|||
. auto/feature
|
||||
|
||||
|
||||
ngx_feature="gcc builtin 64 bit byteswap"
|
||||
ngx_feature_name="NGX_HAVE_GCC_BSWAP64"
|
||||
ngx_feature_run=no
|
||||
ngx_feature_incs=
|
||||
ngx_feature_path=
|
||||
ngx_feature_libs=
|
||||
ngx_feature_test="if (__builtin_bswap64(0)) return 1"
|
||||
. auto/feature
|
||||
|
||||
|
||||
# ngx_feature="inline"
|
||||
# ngx_feature_name=
|
||||
# ngx_feature_run=no
|
||||
|
|
22
auto/cc/gcc
22
auto/cc/gcc
|
@ -128,6 +128,12 @@ else
|
|||
PCRE_OPT="$PCRE_OPT $PIPE"
|
||||
fi
|
||||
|
||||
if [ ".$MD5_OPT" = "." ]; then
|
||||
MD5_OPT="-O2 -fomit-frame-pointer $PIPE $CPU_OPT"
|
||||
else
|
||||
MD5_OPT="$MD5_OPT $PIPE"
|
||||
fi
|
||||
|
||||
if [ ".$ZLIB_OPT" = "." ]; then
|
||||
ZLIB_OPT="-O2 -fomit-frame-pointer $PIPE $CPU_OPT"
|
||||
else
|
||||
|
@ -145,22 +151,18 @@ CFLAGS="$CFLAGS -Wall -Wpointer-arith"
|
|||
#CFLAGS="$CFLAGS -Winline"
|
||||
#CFLAGS="$CFLAGS -Wmissing-prototypes"
|
||||
|
||||
case "$NGX_GCC_VER" in
|
||||
2.*)
|
||||
# we have a lot of the unused function arguments
|
||||
CFLAGS="$CFLAGS -Wno-unused"
|
||||
;;
|
||||
|
||||
*)
|
||||
case "$NGX_GCC_VER" in
|
||||
3.* | 4.* )
|
||||
# we have a lot of the unused function arguments
|
||||
CFLAGS="$CFLAGS -Wno-unused-parameter"
|
||||
# 4.2.1 shows the warning in wrong places
|
||||
#CFLAGS="$CFLAGS -Wunreachable-code"
|
||||
;;
|
||||
|
||||
# deprecated system OpenSSL library on OS X
|
||||
if [ "$NGX_SYSTEM" = "Darwin" ]; then
|
||||
CFLAGS="$CFLAGS -Wno-deprecated-declarations"
|
||||
fi
|
||||
*)
|
||||
# we have a lot of the unused function arguments
|
||||
CFLAGS="$CFLAGS -Wno-unused"
|
||||
;;
|
||||
esac
|
||||
|
||||
|
|
|
@ -43,6 +43,10 @@ if [ ".$PCRE_OPT" = "." ]; then
|
|||
PCRE_OPT="-O $CPU_OPT"
|
||||
fi
|
||||
|
||||
if [ ".$MD5_OPT" = "." ]; then
|
||||
MD5_OPT="-O $CPU_OPT"
|
||||
fi
|
||||
|
||||
if [ ".$ZLIB_OPT" = "." ]; then
|
||||
ZLIB_OPT="-O $CPU_OPT"
|
||||
fi
|
||||
|
@ -85,7 +89,7 @@ CFLAGS="$CFLAGS -wd1419"
|
|||
|
||||
case "$NGX_ICC_VER" in
|
||||
9.*)
|
||||
# "cc" clobber ignored, warnings for Linux's htonl()/htons()
|
||||
# "cc" clobber ignored, warnings for Liunx's htonl()/htons()
|
||||
CFLAGS="$CFLAGS -wd1469"
|
||||
# explicit conversion of a 64-bit integral type to a smaller
|
||||
# integral type
|
||||
|
@ -99,7 +103,7 @@ case "$NGX_ICC_VER" in
|
|||
;;
|
||||
|
||||
8.*)
|
||||
# "cc" clobber ignored, warnings for Linux's htonl()/htons()
|
||||
# "cc" clobber ignored, warnings for Liunx's htonl()/htons()
|
||||
CFLAGS="$CFLAGS -wd1469"
|
||||
# floating-point equality and inequality comparisons are unreliable,
|
||||
# warning on SvTRUE()
|
||||
|
|
55
auto/cc/msvc
55
auto/cc/msvc
|
@ -3,39 +3,9 @@
|
|||
# Copyright (C) Nginx, Inc.
|
||||
|
||||
|
||||
# MSVC 6.0 SP2 cl 12.00
|
||||
# MSVC Toolkit 2003 (7.1) cl 13.10
|
||||
# MSVC 2005 Express Edition SP1 (8.0) cl 14.00
|
||||
# MSVC 2008 Express Edition (9.0) cl 15.00
|
||||
# MSVC 2010 (10.0) cl 16.00
|
||||
# MSVC 2015 (14.0) cl 19.00
|
||||
|
||||
|
||||
NGX_MSVC_VER=`$NGX_WINE $CC 2>&1 | grep 'C/C++.* [0-9][0-9]*\.[0-9]' 2>&1 \
|
||||
| sed -e 's/^.* \([0-9][0-9]*\.[0-9].*\)/\1/'`
|
||||
|
||||
echo " + cl version: $NGX_MSVC_VER"
|
||||
|
||||
have=NGX_COMPILER value="\"cl $NGX_MSVC_VER\"" . auto/define
|
||||
|
||||
|
||||
ngx_msvc_ver=`echo $NGX_MSVC_VER | sed -e 's/^\([0-9]*\).*/\1/'`
|
||||
|
||||
|
||||
# detect x64 builds
|
||||
|
||||
case "$NGX_MSVC_VER" in
|
||||
|
||||
*x64)
|
||||
NGX_MACHINE=amd64
|
||||
;;
|
||||
|
||||
*)
|
||||
NGX_MACHINE=i386
|
||||
;;
|
||||
|
||||
esac
|
||||
|
||||
# MSVC 6.0 SP2
|
||||
# MSVC Toolkit 2003 (7.1)
|
||||
# MSVC 2005 Express Edition SP1 (8.0)
|
||||
|
||||
# optimizations
|
||||
|
||||
|
@ -120,17 +90,17 @@ CORE_LIBS="$CORE_LIBS kernel32.lib user32.lib"
|
|||
#CORE_LINK="$CORE_LINK -subsystem:windows -entry:mainCRTStartup"
|
||||
|
||||
# debug
|
||||
# msvc under Wine issues
|
||||
# C1902: Program database manager mismatch; please check your installation
|
||||
if [ -z "$NGX_WINE" ]; then
|
||||
CFLAGS="$CFLAGS -Zi -Fd$NGX_OBJS/nginx.pdb"
|
||||
# msvc8 under Wine issues
|
||||
# Program database manager mismatch; please check your installation
|
||||
if [ $NGX_CC_NAME != msvc8 ]; then
|
||||
CFLAGS="$CFLAGS -Zi"
|
||||
CORE_LINK="$CORE_LINK -debug"
|
||||
fi
|
||||
|
||||
|
||||
# MSVC 2005 supports C99 variadic macros
|
||||
if [ "$ngx_msvc_ver" -ge 14 ]; then
|
||||
have=NGX_HAVE_C99_VARIADIC_MACROS . auto/have
|
||||
if [ $NGX_CC_NAME = msvc8 ]; then
|
||||
have=NGX_HAVE_C99_VARIADIC_MACROS . auto/have
|
||||
fi
|
||||
|
||||
|
||||
|
@ -148,15 +118,10 @@ NGX_RCC="rc -fo$NGX_RES \$(CORE_INCS) $NGX_WIN32_RC"
|
|||
CORE_LINK="$NGX_RES $CORE_LINK"
|
||||
|
||||
|
||||
# dynamic modules
|
||||
#MAIN_LINK="-link -def:$NGX_OBJS/nginx.def"
|
||||
#MODULE_LINK="-LD $NGX_OBJS/nginx.lib"
|
||||
|
||||
|
||||
ngx_pic_opt=
|
||||
ngx_objout="-Fo"
|
||||
ngx_binout="-Fe"
|
||||
ngx_objext="obj"
|
||||
ngx_binext=".exe"
|
||||
|
||||
ngx_long_start='@<<
|
||||
'
|
||||
|
|
33
auto/cc/name
33
auto/cc/name
|
@ -25,8 +25,31 @@ fi
|
|||
|
||||
|
||||
if [ "$CC" = cl ]; then
|
||||
NGX_CC_NAME=msvc
|
||||
echo " + using Microsoft Visual C++ compiler"
|
||||
if `$NGX_WINE $CC -v 2>&1 \
|
||||
| grep '^Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 16' \
|
||||
>/dev/null 2>&1`; then
|
||||
|
||||
NGX_CC_NAME=msvc10
|
||||
echo " + using Microsoft Visual C++ 10 compiler"
|
||||
|
||||
elif `$NGX_WINE $CC -v 2>&1 \
|
||||
| grep '^Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 14' \
|
||||
>/dev/null 2>&1`; then
|
||||
|
||||
NGX_CC_NAME=msvc8
|
||||
echo " + using Microsoft Visual C++ 8 compiler"
|
||||
|
||||
elif `$NGX_WINE $CC -v 2>&1 \
|
||||
| grep '^Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 13' \
|
||||
>/dev/null 2>&1`; then
|
||||
|
||||
NGX_CC_NAME=msvc7
|
||||
echo " + using Microsoft Visual C++ 7 compiler"
|
||||
|
||||
else
|
||||
NGX_CC_NAME=msvc
|
||||
echo " + using Microsoft Visual C++ compiler"
|
||||
fi
|
||||
|
||||
elif [ "$CC" = wcl386 ]; then
|
||||
NGX_CC_NAME=owc
|
||||
|
@ -44,11 +67,7 @@ elif `$CC -v 2>&1 | grep 'gcc version' >/dev/null 2>&1`; then
|
|||
NGX_CC_NAME=gcc
|
||||
echo " + using GNU C compiler"
|
||||
|
||||
elif `$CC -v 2>&1 | grep 'clang version' >/dev/null 2>&1`; then
|
||||
NGX_CC_NAME=clang
|
||||
echo " + using Clang C compiler"
|
||||
|
||||
elif `$CC -v 2>&1 | grep 'LLVM version' >/dev/null 2>&1`; then
|
||||
elif `$CC -v 2>&1 | grep '\(clang\|LLVM\) version' >/dev/null 2>&1`; then
|
||||
NGX_CC_NAME=clang
|
||||
echo " + using Clang C compiler"
|
||||
|
||||
|
|
|
@ -84,6 +84,7 @@ ngx_include_opt="-i="
|
|||
ngx_objout="-fo"
|
||||
ngx_binout="-fe="
|
||||
ngx_objext="obj"
|
||||
ngx_binext=".exe"
|
||||
|
||||
ngx_regex_dirsep='\\'
|
||||
ngx_dirsep="\\"
|
||||
|
|
17
auto/cc/sunc
17
auto/cc/sunc
|
@ -8,10 +8,7 @@
|
|||
# Sun C 5.9 SunOS_i386 2007/05/03 Sun Studio 12
|
||||
# Sun C 5.9 SunOS_sparc 2007/05/03
|
||||
# Sun C 5.10 SunOS_i386 2009/06/03 Sun Studio 12.1
|
||||
# Sun C 5.11 SunOS_i386 2010/08/13 Oracle Solaris Studio 12.2
|
||||
# Sun C 5.12 SunOS_i386 2011/11/16 Oracle Solaris Studio 12.3
|
||||
# Sun C 5.13 SunOS_i386 2014/10/20 Oracle Solaris Studio 12.4
|
||||
# Sun C 5.14 SunOS_i386 2016/05/31 Oracle Developer Studio 12.5
|
||||
# Sun C 5.11 SunOS_i386 2010/08/13 Sun Studio 12.2
|
||||
|
||||
NGX_SUNC_VER=`$CC -V 2>&1 | grep 'Sun C' 2>&1 \
|
||||
| sed -e 's/^.* Sun C \(.*\)/\1/'`
|
||||
|
@ -23,10 +20,7 @@ have=NGX_COMPILER value="\"Sun C $NGX_SUNC_VER\"" . auto/define
|
|||
|
||||
cat << END > $NGX_AUTOTEST.c
|
||||
|
||||
int main(void) {
|
||||
printf("%d", __SUNPRO_C);
|
||||
return 0;
|
||||
}
|
||||
int main() { printf("%d", __SUNPRO_C); }
|
||||
|
||||
END
|
||||
|
||||
|
@ -63,9 +57,6 @@ case "$NGX_MACHINE" in
|
|||
|
||||
esac
|
||||
|
||||
MAIN_LINK=
|
||||
MODULE_LINK="-G"
|
||||
|
||||
|
||||
# optimizations
|
||||
|
||||
|
@ -151,6 +142,10 @@ if [ ".$PCRE_OPT" = "." ]; then
|
|||
PCRE_OPT="$ngx_fast $IPO $CPU_OPT"
|
||||
fi
|
||||
|
||||
if [ ".$MD5_OPT" = "." ]; then
|
||||
MD5_OPT="$ngx_fast $IPO $CPU_OPT"
|
||||
fi
|
||||
|
||||
if [ ".$ZLIB_OPT" = "." ]; then
|
||||
ZLIB_OPT="$ngx_fast $IPO $CPU_OPT"
|
||||
fi
|
||||
|
|
|
@ -11,7 +11,7 @@ export LC_ALL
|
|||
. auto/init
|
||||
. auto/sources
|
||||
|
||||
test -d $NGX_OBJS || mkdir -p $NGX_OBJS
|
||||
test -d $NGX_OBJS || mkdir $NGX_OBJS
|
||||
|
||||
echo > $NGX_AUTO_HEADERS_H
|
||||
echo > $NGX_AUTOCONF_ERR
|
||||
|
@ -36,7 +36,7 @@ if test -z "$NGX_PLATFORM"; then
|
|||
NGX_PLATFORM="$NGX_SYSTEM:$NGX_RELEASE:$NGX_MACHINE";
|
||||
|
||||
case "$NGX_SYSTEM" in
|
||||
MINGW32_* | MINGW64_* | MSYS_*)
|
||||
MINGW32_*)
|
||||
NGX_PLATFORM=win32
|
||||
;;
|
||||
esac
|
||||
|
@ -44,7 +44,6 @@ if test -z "$NGX_PLATFORM"; then
|
|||
else
|
||||
echo "building for $NGX_PLATFORM"
|
||||
NGX_SYSTEM=$NGX_PLATFORM
|
||||
NGX_MACHINE=i386
|
||||
fi
|
||||
|
||||
. auto/cc/conf
|
||||
|
@ -59,7 +58,6 @@ if [ "$NGX_PLATFORM" != win32 ]; then
|
|||
. auto/unix
|
||||
fi
|
||||
|
||||
. auto/threads
|
||||
. auto/modules
|
||||
. auto/lib/conf
|
||||
|
||||
|
@ -88,10 +86,6 @@ have=NGX_PID_PATH value="\"$NGX_PID_PATH\"" . auto/define
|
|||
have=NGX_LOCK_PATH value="\"$NGX_LOCK_PATH\"" . auto/define
|
||||
have=NGX_ERROR_LOG_PATH value="\"$NGX_ERROR_LOG_PATH\"" . auto/define
|
||||
|
||||
if [ ".$NGX_ERROR_LOG_PATH" = "." ]; then
|
||||
have=NGX_ERROR_LOG_STDERR . auto/have
|
||||
fi
|
||||
|
||||
have=NGX_HTTP_LOG_PATH value="\"$NGX_HTTP_LOG_PATH\"" . auto/define
|
||||
have=NGX_HTTP_CLIENT_TEMP_PATH value="\"$NGX_HTTP_CLIENT_TEMP_PATH\""
|
||||
. auto/define
|
||||
|
@ -114,8 +108,4 @@ have=NGX_HTTP_SCGI_TEMP_PATH value="\"$NGX_HTTP_SCGI_TEMP_PATH\""
|
|||
have=NGX_USER value="\"$NGX_USER\"" . auto/define
|
||||
have=NGX_GROUP value="\"$NGX_GROUP\"" . auto/define
|
||||
|
||||
if [ ".$NGX_BUILD" != "." ]; then
|
||||
have=NGX_BUILD value="\"$NGX_BUILD\"" . auto/define
|
||||
fi
|
||||
|
||||
. auto/summary
|
||||
|
|
|
@ -4,18 +4,13 @@
|
|||
|
||||
|
||||
echo $ngx_n "checking for system byte ordering ...$ngx_c"
|
||||
|
||||
cat << END >> $NGX_AUTOCONF_ERR
|
||||
|
||||
----------------------------------------
|
||||
checking for system byte ordering
|
||||
|
||||
END
|
||||
echo >> $NGX_ERR
|
||||
echo "checking for system byte ordering" >> $NGX_ERR
|
||||
|
||||
|
||||
cat << END > $NGX_AUTOTEST.c
|
||||
|
||||
int main(void) {
|
||||
int main() {
|
||||
int i = 0x11223344;
|
||||
char *p;
|
||||
|
||||
|
|
|
@ -31,7 +31,7 @@ cat << END > $NGX_AUTOTEST.c
|
|||
$NGX_INCLUDE_UNISTD_H
|
||||
$ngx_feature_incs
|
||||
|
||||
int main(void) {
|
||||
int main() {
|
||||
$ngx_feature_test;
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -20,7 +20,7 @@ cat << END > $NGX_AUTOTEST.c
|
|||
$NGX_INCLUDE_SYS_PARAM_H
|
||||
#include <$ngx_include>
|
||||
|
||||
int main(void) {
|
||||
int main() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -45,6 +45,9 @@ if [ -x $NGX_AUTOTEST ]; then
|
|||
|
||||
eval "NGX_INCLUDE_$ngx_name='#include <$ngx_include>'"
|
||||
|
||||
#STUB
|
||||
eval "NGX_$ngx_name='#include <$ngx_include>'"
|
||||
|
||||
else
|
||||
echo " not found"
|
||||
|
||||
|
|
|
@ -48,6 +48,4 @@ default: build
|
|||
|
||||
clean:
|
||||
rm -rf Makefile $NGX_OBJS
|
||||
|
||||
.PHONY: default clean
|
||||
END
|
||||
|
|
90
auto/install
90
auto/install
|
@ -3,7 +3,7 @@
|
|||
# Copyright (C) Nginx, Inc.
|
||||
|
||||
|
||||
if [ $USE_PERL != NO ]; then
|
||||
if [ $USE_PERL = YES ]; then
|
||||
|
||||
cat << END >> $NGX_MAKEFILE
|
||||
|
||||
|
@ -20,24 +20,16 @@ case ".$NGX_SBIN_PATH" in
|
|||
./*)
|
||||
;;
|
||||
|
||||
.)
|
||||
NGX_SBIN_PATH=$NGX_PREFIX/sbin/nginx
|
||||
;;
|
||||
|
||||
*)
|
||||
NGX_SBIN_PATH=$NGX_PREFIX/$NGX_SBIN_PATH
|
||||
;;
|
||||
esac
|
||||
|
||||
|
||||
case ".$NGX_MODULES_PATH" in
|
||||
./*)
|
||||
;;
|
||||
|
||||
*)
|
||||
NGX_MODULES_PATH=$NGX_PREFIX/$NGX_MODULES_PATH
|
||||
;;
|
||||
esac
|
||||
|
||||
NGX_MODULES_PATH=`dirname $NGX_MODULES_PATH/.`
|
||||
|
||||
|
||||
case ".$NGX_CONF_PATH" in
|
||||
./*)
|
||||
;;
|
||||
|
@ -104,57 +96,58 @@ $NGX_OBJS/nginx.8: $NGX_MAN $NGX_AUTO_CONFIG_H
|
|||
-e "s|%%ERROR_LOG_PATH%%|${NGX_ERROR_LOG_PATH:-stderr}|" \\
|
||||
< $NGX_MAN > \$@
|
||||
|
||||
install: build $NGX_INSTALL_PERL_MODULES
|
||||
install: $NGX_OBJS${ngx_dirsep}nginx${ngx_binext} \
|
||||
$NGX_INSTALL_PERL_MODULES
|
||||
test -d '\$(DESTDIR)$NGX_PREFIX' || mkdir -p '\$(DESTDIR)$NGX_PREFIX'
|
||||
|
||||
test -d '\$(DESTDIR)`dirname "$NGX_SBIN_PATH"`' \\
|
||||
test -d '\$(DESTDIR)`dirname "$NGX_SBIN_PATH"`' \
|
||||
|| mkdir -p '\$(DESTDIR)`dirname "$NGX_SBIN_PATH"`'
|
||||
test ! -f '\$(DESTDIR)$NGX_SBIN_PATH' \\
|
||||
|| mv '\$(DESTDIR)$NGX_SBIN_PATH' \\
|
||||
test ! -f '\$(DESTDIR)$NGX_SBIN_PATH' \
|
||||
|| mv '\$(DESTDIR)$NGX_SBIN_PATH' \
|
||||
'\$(DESTDIR)$NGX_SBIN_PATH.old'
|
||||
cp $NGX_OBJS/nginx '\$(DESTDIR)$NGX_SBIN_PATH'
|
||||
|
||||
test -d '\$(DESTDIR)$NGX_CONF_PREFIX' \\
|
||||
test -d '\$(DESTDIR)$NGX_CONF_PREFIX' \
|
||||
|| mkdir -p '\$(DESTDIR)$NGX_CONF_PREFIX'
|
||||
|
||||
cp conf/koi-win '\$(DESTDIR)$NGX_CONF_PREFIX'
|
||||
cp conf/koi-utf '\$(DESTDIR)$NGX_CONF_PREFIX'
|
||||
cp conf/win-utf '\$(DESTDIR)$NGX_CONF_PREFIX'
|
||||
|
||||
test -f '\$(DESTDIR)$NGX_CONF_PREFIX/mime.types' \\
|
||||
test -f '\$(DESTDIR)$NGX_CONF_PREFIX/mime.types' \
|
||||
|| cp conf/mime.types '\$(DESTDIR)$NGX_CONF_PREFIX'
|
||||
cp conf/mime.types '\$(DESTDIR)$NGX_CONF_PREFIX/mime.types.default'
|
||||
|
||||
test -f '\$(DESTDIR)$NGX_CONF_PREFIX/fastcgi_params' \\
|
||||
test -f '\$(DESTDIR)$NGX_CONF_PREFIX/fastcgi_params' \
|
||||
|| cp conf/fastcgi_params '\$(DESTDIR)$NGX_CONF_PREFIX'
|
||||
cp conf/fastcgi_params \\
|
||||
cp conf/fastcgi_params \
|
||||
'\$(DESTDIR)$NGX_CONF_PREFIX/fastcgi_params.default'
|
||||
|
||||
test -f '\$(DESTDIR)$NGX_CONF_PREFIX/fastcgi.conf' \\
|
||||
test -f '\$(DESTDIR)$NGX_CONF_PREFIX/fastcgi.conf' \
|
||||
|| cp conf/fastcgi.conf '\$(DESTDIR)$NGX_CONF_PREFIX'
|
||||
cp conf/fastcgi.conf '\$(DESTDIR)$NGX_CONF_PREFIX/fastcgi.conf.default'
|
||||
|
||||
test -f '\$(DESTDIR)$NGX_CONF_PREFIX/uwsgi_params' \\
|
||||
test -f '\$(DESTDIR)$NGX_CONF_PREFIX/uwsgi_params' \
|
||||
|| cp conf/uwsgi_params '\$(DESTDIR)$NGX_CONF_PREFIX'
|
||||
cp conf/uwsgi_params \\
|
||||
cp conf/uwsgi_params \
|
||||
'\$(DESTDIR)$NGX_CONF_PREFIX/uwsgi_params.default'
|
||||
|
||||
test -f '\$(DESTDIR)$NGX_CONF_PREFIX/scgi_params' \\
|
||||
test -f '\$(DESTDIR)$NGX_CONF_PREFIX/scgi_params' \
|
||||
|| cp conf/scgi_params '\$(DESTDIR)$NGX_CONF_PREFIX'
|
||||
cp conf/scgi_params \\
|
||||
cp conf/scgi_params \
|
||||
'\$(DESTDIR)$NGX_CONF_PREFIX/scgi_params.default'
|
||||
|
||||
test -f '\$(DESTDIR)$NGX_CONF_PATH' \\
|
||||
test -f '\$(DESTDIR)$NGX_CONF_PATH' \
|
||||
|| cp conf/nginx.conf '\$(DESTDIR)$NGX_CONF_PATH'
|
||||
cp conf/nginx.conf '\$(DESTDIR)$NGX_CONF_PREFIX/nginx.conf.default'
|
||||
|
||||
test -d '\$(DESTDIR)`dirname "$NGX_PID_PATH"`' \\
|
||||
test -d '\$(DESTDIR)`dirname "$NGX_PID_PATH"`' \
|
||||
|| mkdir -p '\$(DESTDIR)`dirname "$NGX_PID_PATH"`'
|
||||
|
||||
test -d '\$(DESTDIR)`dirname "$NGX_HTTP_LOG_PATH"`' \\
|
||||
|| mkdir -p '\$(DESTDIR)`dirname "$NGX_HTTP_LOG_PATH"`'
|
||||
test -d '\$(DESTDIR)`dirname "$NGX_HTTP_LOG_PATH"`' || \
|
||||
mkdir -p '\$(DESTDIR)`dirname "$NGX_HTTP_LOG_PATH"`'
|
||||
|
||||
test -d '\$(DESTDIR)$NGX_PREFIX/html' \\
|
||||
test -d '\$(DESTDIR)$NGX_PREFIX/html' \
|
||||
|| cp -R $NGX_HTML '\$(DESTDIR)$NGX_PREFIX'
|
||||
END
|
||||
|
||||
|
@ -162,51 +155,24 @@ END
|
|||
if test -n "$NGX_ERROR_LOG_PATH"; then
|
||||
cat << END >> $NGX_MAKEFILE
|
||||
|
||||
test -d '\$(DESTDIR)`dirname "$NGX_ERROR_LOG_PATH"`' \\
|
||||
|| mkdir -p '\$(DESTDIR)`dirname "$NGX_ERROR_LOG_PATH"`'
|
||||
test -d '\$(DESTDIR)`dirname "$NGX_ERROR_LOG_PATH"`' || \
|
||||
mkdir -p '\$(DESTDIR)`dirname "$NGX_ERROR_LOG_PATH"`'
|
||||
END
|
||||
|
||||
fi
|
||||
|
||||
|
||||
if test -n "$DYNAMIC_MODULES"; then
|
||||
cat << END >> $NGX_MAKEFILE
|
||||
|
||||
test -d '\$(DESTDIR)$NGX_MODULES_PATH' \\
|
||||
|| mkdir -p '\$(DESTDIR)$NGX_MODULES_PATH'
|
||||
END
|
||||
|
||||
fi
|
||||
|
||||
|
||||
for ngx_module in $DYNAMIC_MODULES
|
||||
do
|
||||
ngx_module=$ngx_module$ngx_modext
|
||||
|
||||
cat << END >> $NGX_MAKEFILE
|
||||
|
||||
test ! -f '\$(DESTDIR)$NGX_MODULES_PATH/$ngx_module' \\
|
||||
|| mv '\$(DESTDIR)$NGX_MODULES_PATH/$ngx_module' \\
|
||||
'\$(DESTDIR)$NGX_MODULES_PATH/$ngx_module.old'
|
||||
cp $NGX_OBJS/$ngx_module '\$(DESTDIR)$NGX_MODULES_PATH/$ngx_module'
|
||||
END
|
||||
|
||||
done
|
||||
|
||||
|
||||
# create Makefile
|
||||
|
||||
cat << END >> Makefile
|
||||
|
||||
build:
|
||||
\$(MAKE) -f $NGX_MAKEFILE
|
||||
\$(MAKE) -f $NGX_MAKEFILE manpage
|
||||
|
||||
install:
|
||||
\$(MAKE) -f $NGX_MAKEFILE install
|
||||
|
||||
modules:
|
||||
\$(MAKE) -f $NGX_MAKEFILE modules
|
||||
|
||||
upgrade:
|
||||
$NGX_SBIN_PATH -t
|
||||
|
||||
|
@ -215,6 +181,4 @@ upgrade:
|
|||
test -f $NGX_PID_PATH.oldbin
|
||||
|
||||
kill -QUIT \`cat $NGX_PID_PATH.oldbin\`
|
||||
|
||||
.PHONY: build install modules upgrade
|
||||
END
|
||||
|
|
|
@ -7,7 +7,7 @@ if [ $USE_PCRE = YES -o $PCRE != NONE ]; then
|
|||
. auto/lib/pcre/conf
|
||||
|
||||
else
|
||||
if [ $USE_PCRE = DISABLED -a $HTTP = YES -a $HTTP_REWRITE = YES ]; then
|
||||
if [ $USE_PCRE = DISABLED -a $HTTP_REWRITE = YES ]; then
|
||||
|
||||
cat << END
|
||||
|
||||
|
@ -25,23 +25,52 @@ if [ $USE_OPENSSL = YES ]; then
|
|||
. auto/lib/openssl/conf
|
||||
fi
|
||||
|
||||
if [ $USE_MD5 = YES ]; then
|
||||
|
||||
if [ $USE_OPENSSL = YES ]; then
|
||||
have=NGX_HAVE_OPENSSL_MD5_H . auto/have
|
||||
have=NGX_OPENSSL_MD5 . auto/have
|
||||
have=NGX_HAVE_MD5 . auto/have
|
||||
MD5=YES
|
||||
MD5_LIB=OpenSSL
|
||||
|
||||
else
|
||||
. auto/lib/md5/conf
|
||||
fi
|
||||
|
||||
fi
|
||||
|
||||
if [ $USE_SHA1 = YES ]; then
|
||||
|
||||
if [ $USE_OPENSSL = YES ]; then
|
||||
have=NGX_HAVE_OPENSSL_SHA1_H . auto/have
|
||||
have=NGX_HAVE_SHA1 . auto/have
|
||||
SHA1=YES
|
||||
SHA1_LIB=OpenSSL
|
||||
|
||||
else
|
||||
. auto/lib/sha1/conf
|
||||
fi
|
||||
|
||||
fi
|
||||
|
||||
if [ $USE_ZLIB = YES ]; then
|
||||
. auto/lib/zlib/conf
|
||||
fi
|
||||
|
||||
if [ $USE_LIBXSLT != NO ]; then
|
||||
if [ $USE_LIBXSLT = YES ]; then
|
||||
. auto/lib/libxslt/conf
|
||||
fi
|
||||
|
||||
if [ $USE_LIBGD != NO ]; then
|
||||
if [ $USE_LIBGD = YES ]; then
|
||||
. auto/lib/libgd/conf
|
||||
fi
|
||||
|
||||
if [ $USE_PERL != NO ]; then
|
||||
if [ $USE_PERL = YES ]; then
|
||||
. auto/lib/perl/conf
|
||||
fi
|
||||
|
||||
if [ $USE_GEOIP != NO ]; then
|
||||
if [ $HTTP_GEOIP = YES ]; then
|
||||
. auto/lib/geoip/conf
|
||||
fi
|
||||
|
||||
|
|
|
@ -67,23 +67,20 @@ fi
|
|||
if [ $ngx_found = yes ]; then
|
||||
|
||||
CORE_INCS="$CORE_INCS $ngx_feature_path"
|
||||
CORE_LIBS="$CORE_LIBS $ngx_feature_libs"
|
||||
|
||||
if [ $USE_GEOIP = YES ]; then
|
||||
CORE_LIBS="$CORE_LIBS $ngx_feature_libs"
|
||||
if [ $NGX_IPV6 = YES ]; then
|
||||
ngx_feature="GeoIP IPv6 support"
|
||||
ngx_feature_name="NGX_HAVE_GEOIP_V6"
|
||||
ngx_feature_run=no
|
||||
ngx_feature_incs="#include <stdio.h>
|
||||
#include <GeoIP.h>"
|
||||
#ngx_feature_path=
|
||||
#ngx_feature_libs=
|
||||
ngx_feature_test="printf(\"%d\", GEOIP_CITY_EDITION_REV0_V6);"
|
||||
. auto/feature
|
||||
fi
|
||||
|
||||
NGX_LIB_GEOIP=$ngx_feature_libs
|
||||
|
||||
ngx_feature="GeoIP IPv6 support"
|
||||
ngx_feature_name="NGX_HAVE_GEOIP_V6"
|
||||
ngx_feature_run=no
|
||||
ngx_feature_incs="#include <stdio.h>
|
||||
#include <GeoIP.h>"
|
||||
#ngx_feature_path=
|
||||
#ngx_feature_libs=
|
||||
ngx_feature_test="printf(\"%d\", GEOIP_CITY_EDITION_REV0_V6);"
|
||||
. auto/feature
|
||||
|
||||
else
|
||||
|
||||
cat << END
|
||||
|
|
|
@ -9,8 +9,7 @@
|
|||
ngx_feature_incs=
|
||||
ngx_feature_path=
|
||||
ngx_feature_libs="-lprofiler"
|
||||
ngx_feature_test="void ProfilerStop(void);
|
||||
ProfilerStop()"
|
||||
ngx_feature_test="ProfilerStop()"
|
||||
. auto/feature
|
||||
|
||||
|
||||
|
@ -53,7 +52,7 @@ else
|
|||
|
||||
cat << END
|
||||
|
||||
$0: error: the Google perftools module requires the Google perftools
|
||||
$0: error: the Google perftool module requires the Google perftools
|
||||
library. You can either do not enable the module or install the library.
|
||||
|
||||
END
|
||||
|
|
|
@ -9,8 +9,7 @@
|
|||
ngx_feature_incs="#include <gd.h>"
|
||||
ngx_feature_path=
|
||||
ngx_feature_libs="-lgd"
|
||||
ngx_feature_test="gdImagePtr img = gdImageCreateFromGifPtr(1, NULL);
|
||||
(void) img"
|
||||
ngx_feature_test="gdImagePtr img = gdImageCreateFromGifPtr(1, NULL);"
|
||||
. auto/feature
|
||||
|
||||
|
||||
|
@ -68,18 +67,7 @@ fi
|
|||
if [ $ngx_found = yes ]; then
|
||||
|
||||
CORE_INCS="$CORE_INCS $ngx_feature_path"
|
||||
|
||||
if [ $USE_LIBGD = YES ]; then
|
||||
CORE_LIBS="$CORE_LIBS $ngx_feature_libs"
|
||||
fi
|
||||
|
||||
NGX_LIB_LIBGD=$ngx_feature_libs
|
||||
|
||||
ngx_feature="GD WebP support"
|
||||
ngx_feature_name="NGX_HAVE_GD_WEBP"
|
||||
ngx_feature_test="gdImagePtr img = gdImageCreateFromWebpPtr(1, NULL);
|
||||
(void) img"
|
||||
. auto/feature
|
||||
CORE_LIBS="$CORE_LIBS $ngx_feature_libs"
|
||||
|
||||
else
|
||||
|
||||
|
|
|
@ -16,8 +16,8 @@
|
|||
ngx_feature_libs="-lxml2 -lxslt"
|
||||
ngx_feature_test="xmlParserCtxtPtr ctxt = NULL;
|
||||
xsltStylesheetPtr sheet = NULL;
|
||||
xmlDocPtr doc = NULL;
|
||||
xmlParseChunk(ctxt, NULL, 0, 0);
|
||||
xmlDocPtr doc;
|
||||
doc = xmlParseChunk(ctxt, NULL, 0, 0);
|
||||
xsltApplyStylesheet(sheet, doc, NULL);"
|
||||
. auto/feature
|
||||
|
||||
|
@ -76,12 +76,7 @@ fi
|
|||
if [ $ngx_found = yes ]; then
|
||||
|
||||
CORE_INCS="$CORE_INCS $ngx_feature_path"
|
||||
|
||||
if [ $USE_LIBXSLT = YES ]; then
|
||||
CORE_LIBS="$CORE_LIBS $ngx_feature_libs"
|
||||
fi
|
||||
|
||||
NGX_LIB_LIBXSLT=$ngx_feature_libs
|
||||
CORE_LIBS="$CORE_LIBS $ngx_feature_libs"
|
||||
|
||||
else
|
||||
|
||||
|
@ -157,9 +152,5 @@ fi
|
|||
|
||||
|
||||
if [ $ngx_found = yes ]; then
|
||||
if [ $USE_LIBXSLT = YES ]; then
|
||||
CORE_LIBS="$CORE_LIBS -lexslt"
|
||||
fi
|
||||
|
||||
NGX_LIB_LIBXSLT="$NGX_LIB_LIBXSLT -lexslt"
|
||||
CORE_LIBS="$CORE_LIBS -lexslt"
|
||||
fi
|
||||
|
|
|
@ -7,6 +7,14 @@ if [ $PCRE != NONE -a $PCRE != NO -a $PCRE != YES ]; then
|
|||
. auto/lib/pcre/make
|
||||
fi
|
||||
|
||||
if [ $MD5 != NONE -a $MD5 != NO -a $MD5 != YES ]; then
|
||||
. auto/lib/md5/make
|
||||
fi
|
||||
|
||||
if [ $SHA1 != NONE -a $SHA1 != NO -a $SHA1 != YES ]; then
|
||||
. auto/lib/sha1/make
|
||||
fi
|
||||
|
||||
if [ $OPENSSL != NONE -a $OPENSSL != NO -a $OPENSSL != YES ]; then
|
||||
. auto/lib/openssl/make
|
||||
fi
|
||||
|
@ -19,6 +27,6 @@ if [ $NGX_LIBATOMIC != NO -a $NGX_LIBATOMIC != YES ]; then
|
|||
. auto/lib/libatomic/make
|
||||
fi
|
||||
|
||||
if [ $USE_PERL != NO ]; then
|
||||
if [ $USE_PERL = YES ]; then
|
||||
. auto/lib/perl/make
|
||||
fi
|
||||
|
|
|
@ -0,0 +1,103 @@
|
|||
|
||||
# Copyright (C) Igor Sysoev
|
||||
# Copyright (C) Nginx, Inc.
|
||||
|
||||
|
||||
if [ $MD5 != NONE ]; then
|
||||
|
||||
if grep MD5_Init $MD5/md5.h 2>&1 >/dev/null; then
|
||||
# OpenSSL md5
|
||||
OPENSSL_MD5=YES
|
||||
have=NGX_HAVE_OPENSSL_MD5 . auto/have
|
||||
have=NGX_OPENSSL_MD5 . auto/have
|
||||
else
|
||||
# rsaref md5
|
||||
OPENSSL_MD5=NO
|
||||
fi
|
||||
|
||||
have=NGX_HAVE_MD5 . auto/have
|
||||
CORE_INCS="$CORE_INCS $MD5"
|
||||
|
||||
case "$NGX_CC_NAME" in
|
||||
|
||||
msvc* | owc* | bcc)
|
||||
LINK_DEPS="$LINK_DEPS $MD5/md5.lib"
|
||||
CORE_LIBS="$CORE_LIBS $MD5/md5.lib"
|
||||
;;
|
||||
|
||||
icc*)
|
||||
LINK_DEPS="$LINK_DEPS $MD5/libmd5.a"
|
||||
|
||||
# to allow -ipo optimization we link with the *.o but not library
|
||||
CORE_LIBS="$CORE_LIBS $MD5/md5_dgst.o"
|
||||
|
||||
if [ $MD5_ASM = YES ]; then
|
||||
CORE_LIBS="$CORE_LIBS $MD5/asm/mx86-elf.o"
|
||||
fi
|
||||
;;
|
||||
|
||||
*)
|
||||
LINK_DEPS="$LINK_DEPS $MD5/libmd5.a"
|
||||
CORE_LIBS="$CORE_LIBS $MD5/libmd5.a"
|
||||
#CORE_LIBS="$CORE_LIBS -L $MD5 -lmd5"
|
||||
;;
|
||||
|
||||
esac
|
||||
|
||||
else
|
||||
|
||||
if [ "$NGX_PLATFORM" != win32 ]; then
|
||||
|
||||
MD5=NO
|
||||
|
||||
# FreeBSD, Solaris 10
|
||||
|
||||
ngx_feature="md5 in system md library"
|
||||
ngx_feature_name=NGX_HAVE_MD5
|
||||
ngx_feature_run=no
|
||||
ngx_feature_incs="#include <md5.h>"
|
||||
ngx_feature_path=
|
||||
ngx_feature_libs="-lmd"
|
||||
ngx_feature_test="MD5_CTX md5; MD5Init(&md5)"
|
||||
. auto/feature
|
||||
|
||||
ngx_md5_lib="system md"
|
||||
|
||||
if [ $ngx_found = no ]; then
|
||||
|
||||
# Solaris 8/9
|
||||
|
||||
ngx_feature="md5 in system md5 library"
|
||||
ngx_feature_libs="-lmd5"
|
||||
. auto/feature
|
||||
|
||||
ngx_md5_lib="system md5"
|
||||
fi
|
||||
|
||||
if [ $ngx_found = no ]; then
|
||||
|
||||
# OpenSSL crypto library
|
||||
|
||||
ngx_feature="md5 in system OpenSSL crypto library"
|
||||
ngx_feature_name="NGX_OPENSSL_MD5"
|
||||
ngx_feature_incs="#include <openssl/md5.h>"
|
||||
ngx_feature_libs="-lcrypto"
|
||||
ngx_feature_test="MD5_CTX md5; MD5_Init(&md5)"
|
||||
. auto/feature
|
||||
|
||||
ngx_md5_lib="system crypto"
|
||||
|
||||
if [ $ngx_found = yes ]; then
|
||||
have=NGX_HAVE_OPENSSL_MD5_H . auto/have
|
||||
have=NGX_HAVE_MD5 . auto/have
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ $ngx_found = yes ]; then
|
||||
CORE_LIBS="$CORE_LIBS $ngx_feature_libs"
|
||||
MD5=YES
|
||||
MD5_LIB=$ngx_md5_lib
|
||||
fi
|
||||
fi
|
||||
|
||||
fi
|
|
@ -0,0 +1,96 @@
|
|||
|
||||
# Copyright (C) Igor Sysoev
|
||||
# Copyright (C) Nginx, Inc.
|
||||
|
||||
|
||||
case "$NGX_CC_NAME" in
|
||||
|
||||
msvc*)
|
||||
ngx_makefile=makefile.msvc
|
||||
ngx_opt="CPU_OPT=\"$CPU_OPT\" LIBC=$LIBC MD5_ASM=$MD5_ASM"
|
||||
ngx_md5="MD5=\"$MD5\""
|
||||
;;
|
||||
|
||||
owc*)
|
||||
ngx_makefile=makefile.owc
|
||||
ngx_opt="CPU_OPT=\"$CPU_OPT\""
|
||||
ngx_md5=`echo MD5=\"$MD5\" | sed -e "s/\//$ngx_regex_dirsep/g"`
|
||||
;;
|
||||
|
||||
bcc)
|
||||
ngx_makefile=makefile.bcc
|
||||
ngx_opt="-DCPU_OPT=\"$CPU_OPT\" -DMD5_ASM=$MD5_ASM"
|
||||
ngx_md5=`echo \-DMD5=\"$MD5\" | sed -e "s/\//$ngx_regex_dirsep/g"`
|
||||
;;
|
||||
|
||||
esac
|
||||
|
||||
|
||||
done=NO
|
||||
|
||||
|
||||
case "$NGX_PLATFORM" in
|
||||
|
||||
win32)
|
||||
cat << END >> $NGX_MAKEFILE
|
||||
|
||||
`echo "$MD5/md5.lib: $NGX_MAKEFILE" | sed -e "s/\//$ngx_regex_dirsep/g"`
|
||||
\$(MAKE) -f auto/lib/md5/$ngx_makefile $ngx_opt $ngx_md5
|
||||
|
||||
END
|
||||
|
||||
done=YES
|
||||
;;
|
||||
|
||||
SunOS:*:i86pc)
|
||||
if [ $MD5_ASM = YES ]; then
|
||||
|
||||
cat << END >> $NGX_MAKEFILE
|
||||
|
||||
$MD5/libmd5.a: $NGX_MAKEFILE
|
||||
cd $MD5 \\
|
||||
&& \$(MAKE) CFLAGS="$MD5_OPT -DSOL -DMD5_ASM -DL_ENDIAN" \\
|
||||
CC="\$(CC)" CPP="\$(CPP)" \\
|
||||
MD5_ASM_OBJ=asm/mx86-sol.o clean libmd5.a
|
||||
|
||||
END
|
||||
|
||||
done=YES
|
||||
fi
|
||||
;;
|
||||
|
||||
# FreeBSD: i386
|
||||
# Linux: i686
|
||||
|
||||
*:i386 | *:i686)
|
||||
if [ $MD5_ASM = YES ]; then
|
||||
|
||||
cat << END >> $NGX_MAKEFILE
|
||||
|
||||
$MD5/libmd5.a: $NGX_MAKEFILE
|
||||
cd $MD5 \\
|
||||
&& \$(MAKE) CFLAGS="$MD5_OPT -DELF -DMD5_ASM -DL_ENDIAN" \\
|
||||
CC="\$(CC)" CPP="\$(CPP)" \\
|
||||
MD5_ASM_OBJ=asm/mx86-elf.o clean libmd5.a
|
||||
|
||||
END
|
||||
|
||||
done=YES
|
||||
fi
|
||||
;;
|
||||
|
||||
esac
|
||||
|
||||
|
||||
if [ $done = NO ]; then
|
||||
|
||||
cat << END >> $NGX_MAKEFILE
|
||||
|
||||
$MD5/libmd5.a: $NGX_MAKEFILE
|
||||
cd $MD5 \\
|
||||
&& \$(MAKE) CFLAGS="$MD5_OPT" \\
|
||||
CC="\$(CC)" MD5_ASM_OBJ= clean libmd5.a
|
||||
|
||||
END
|
||||
|
||||
fi
|
|
@ -0,0 +1,22 @@
|
|||
|
||||
# Copyright (C) Igor Sysoev
|
||||
# Copyright (C) Nginx, Inc.
|
||||
|
||||
|
||||
CFLAGS = -q -O2 -tWM $(CPU_OPT) -DL_ENDIAN
|
||||
|
||||
!if "$(MD5_ASM)" == "YES"
|
||||
|
||||
md5.lib:
|
||||
cd $(MD5)
|
||||
bcc32 -c $(CFLAGS) -DMD5_ASM md5_dgst.c
|
||||
tlib md5.lib +md5_dgst.obj +"asm\m-win32.obj"
|
||||
|
||||
!else
|
||||
|
||||
md5.lib:
|
||||
cd $(MD5)
|
||||
bcc32 -c $(CFLAGS) md5_dgst.c
|
||||
tlib md5.lib +md5_dgst.obj
|
||||
|
||||
!endif
|
|
@ -0,0 +1,22 @@
|
|||
|
||||
# Copyright (C) Igor Sysoev
|
||||
# Copyright (C) Nginx, Inc.
|
||||
|
||||
|
||||
CFLAGS = -nologo -O2 -Ob1 -Oi -Gs $(LIBC) $(CPU_OPT) -D L_ENDIAN
|
||||
|
||||
!IF "$(MD5_ASM)" == "YES"
|
||||
|
||||
md5.lib:
|
||||
cd $(MD5)
|
||||
cl -c $(CFLAGS) -D MD5_ASM md5_dgst.c
|
||||
link -lib -out:md5.lib md5_dgst.obj asm/m-win32.obj
|
||||
|
||||
!ELSE
|
||||
|
||||
md5.lib:
|
||||
cd $(MD5)
|
||||
cl -c $(CFLAGS) md5_dgst.c
|
||||
link -lib -out:md5.lib md5_dgst.obj
|
||||
|
||||
!ENDIF
|
|
@ -0,0 +1,11 @@
|
|||
|
||||
# Copyright (C) Igor Sysoev
|
||||
# Copyright (C) Nginx, Inc.
|
||||
|
||||
|
||||
CFLAGS = -zq -bt=nt -bm -ot -op -oi -oe -s $(CPU_OPT)
|
||||
|
||||
md5.lib:
|
||||
cd $(MD5)
|
||||
wcl386 -c $(CFLAGS) -dL_ENDIAN md5_dgst.c
|
||||
wlib -n md5.lib md5_dgst.obj
|
|
@ -5,31 +5,18 @@
|
|||
|
||||
if [ $OPENSSL != NONE ]; then
|
||||
|
||||
have=NGX_OPENSSL . auto/have
|
||||
have=NGX_SSL . auto/have
|
||||
|
||||
if [ $USE_OPENSSL_QUIC = YES ]; then
|
||||
have=NGX_QUIC . auto/have
|
||||
have=NGX_QUIC_OPENSSL_COMPAT . auto/have
|
||||
fi
|
||||
|
||||
case "$CC" in
|
||||
|
||||
cl | bcc32)
|
||||
have=NGX_OPENSSL . auto/have
|
||||
have=NGX_SSL . auto/have
|
||||
|
||||
CFLAGS="$CFLAGS -DNO_SYS_TYPES_H"
|
||||
|
||||
CORE_INCS="$CORE_INCS $OPENSSL/openssl/include"
|
||||
CORE_DEPS="$CORE_DEPS $OPENSSL/openssl/include/openssl/ssl.h"
|
||||
|
||||
if [ -f $OPENSSL/ms/do_ms.bat ]; then
|
||||
# before OpenSSL 1.1.0
|
||||
CORE_LIBS="$CORE_LIBS $OPENSSL/openssl/lib/ssleay32.lib"
|
||||
CORE_LIBS="$CORE_LIBS $OPENSSL/openssl/lib/libeay32.lib"
|
||||
else
|
||||
# OpenSSL 1.1.0+
|
||||
CORE_LIBS="$CORE_LIBS $OPENSSL/openssl/lib/libssl.lib"
|
||||
CORE_LIBS="$CORE_LIBS $OPENSSL/openssl/lib/libcrypto.lib"
|
||||
fi
|
||||
CORE_LIBS="$CORE_LIBS $OPENSSL/openssl/lib/ssleay32.lib"
|
||||
CORE_LIBS="$CORE_LIBS $OPENSSL/openssl/lib/libeay32.lib"
|
||||
|
||||
# libeay32.lib requires gdi32.lib
|
||||
CORE_LIBS="$CORE_LIBS gdi32.lib"
|
||||
|
@ -38,12 +25,14 @@ if [ $OPENSSL != NONE ]; then
|
|||
;;
|
||||
|
||||
*)
|
||||
have=NGX_OPENSSL . auto/have
|
||||
have=NGX_SSL . auto/have
|
||||
|
||||
CORE_INCS="$CORE_INCS $OPENSSL/.openssl/include"
|
||||
CORE_DEPS="$CORE_DEPS $OPENSSL/.openssl/include/openssl/ssl.h"
|
||||
CORE_LIBS="$CORE_LIBS $OPENSSL/.openssl/lib/libssl.a"
|
||||
CORE_LIBS="$CORE_LIBS $OPENSSL/.openssl/lib/libcrypto.a"
|
||||
CORE_LIBS="$CORE_LIBS $NGX_LIBDL"
|
||||
CORE_LIBS="$CORE_LIBS $NGX_LIBPTHREAD"
|
||||
|
||||
if [ "$NGX_PLATFORM" = win32 ]; then
|
||||
CORE_LIBS="$CORE_LIBS -lgdi32 -lcrypt32 -lws2_32"
|
||||
|
@ -62,98 +51,14 @@ else
|
|||
ngx_feature_run=no
|
||||
ngx_feature_incs="#include <openssl/ssl.h>"
|
||||
ngx_feature_path=
|
||||
ngx_feature_libs="-lssl -lcrypto $NGX_LIBDL $NGX_LIBPTHREAD"
|
||||
ngx_feature_test="SSL_CTX_set_options(NULL, 0)"
|
||||
ngx_feature_libs="-lssl -lcrypto"
|
||||
ngx_feature_test="SSL_library_init()"
|
||||
. auto/feature
|
||||
|
||||
if [ $ngx_found = no ]; then
|
||||
|
||||
# FreeBSD port
|
||||
|
||||
ngx_feature="OpenSSL library in /usr/local/"
|
||||
ngx_feature_path="/usr/local/include"
|
||||
|
||||
if [ $NGX_RPATH = YES ]; then
|
||||
ngx_feature_libs="-R/usr/local/lib -L/usr/local/lib -lssl -lcrypto"
|
||||
else
|
||||
ngx_feature_libs="-L/usr/local/lib -lssl -lcrypto"
|
||||
fi
|
||||
|
||||
ngx_feature_libs="$ngx_feature_libs $NGX_LIBDL $NGX_LIBPTHREAD"
|
||||
|
||||
. auto/feature
|
||||
fi
|
||||
|
||||
if [ $ngx_found = no ]; then
|
||||
|
||||
# NetBSD port
|
||||
|
||||
ngx_feature="OpenSSL library in /usr/pkg/"
|
||||
ngx_feature_path="/usr/pkg/include"
|
||||
|
||||
if [ $NGX_RPATH = YES ]; then
|
||||
ngx_feature_libs="-R/usr/pkg/lib -L/usr/pkg/lib -lssl -lcrypto"
|
||||
else
|
||||
ngx_feature_libs="-L/usr/pkg/lib -lssl -lcrypto"
|
||||
fi
|
||||
|
||||
ngx_feature_libs="$ngx_feature_libs $NGX_LIBDL $NGX_LIBPTHREAD"
|
||||
|
||||
. auto/feature
|
||||
fi
|
||||
|
||||
if [ $ngx_found = no ]; then
|
||||
|
||||
# MacPorts
|
||||
|
||||
ngx_feature="OpenSSL library in /opt/local/"
|
||||
ngx_feature_path="/opt/local/include"
|
||||
|
||||
if [ $NGX_RPATH = YES ]; then
|
||||
ngx_feature_libs="-R/opt/local/lib -L/opt/local/lib -lssl -lcrypto"
|
||||
else
|
||||
ngx_feature_libs="-L/opt/local/lib -lssl -lcrypto"
|
||||
fi
|
||||
|
||||
ngx_feature_libs="$ngx_feature_libs $NGX_LIBDL $NGX_LIBPTHREAD"
|
||||
|
||||
. auto/feature
|
||||
fi
|
||||
|
||||
if [ $ngx_found = yes ]; then
|
||||
have=NGX_SSL . auto/have
|
||||
CORE_INCS="$CORE_INCS $ngx_feature_path"
|
||||
CORE_LIBS="$CORE_LIBS $ngx_feature_libs"
|
||||
CORE_LIBS="$CORE_LIBS $ngx_feature_libs $NGX_LIBDL"
|
||||
OPENSSL=YES
|
||||
|
||||
if [ $USE_OPENSSL_QUIC = YES ]; then
|
||||
|
||||
ngx_feature="OpenSSL QUIC support"
|
||||
ngx_feature_name="NGX_QUIC"
|
||||
ngx_feature_test="SSL_set_quic_method(NULL, NULL)"
|
||||
. auto/feature
|
||||
|
||||
if [ $ngx_found = no ]; then
|
||||
have=NGX_QUIC_OPENSSL_COMPAT . auto/have
|
||||
|
||||
ngx_feature="OpenSSL QUIC compatibility"
|
||||
ngx_feature_test="SSL_CTX_add_custom_ext(NULL, 0, 0,
|
||||
NULL, NULL, NULL, NULL, NULL)"
|
||||
. auto/feature
|
||||
fi
|
||||
|
||||
if [ $ngx_found = no ]; then
|
||||
cat << END
|
||||
|
||||
$0: error: certain modules require OpenSSL QUIC support.
|
||||
You can either do not enable the modules, or install the OpenSSL library with
|
||||
QUIC support into the system, or build the OpenSSL library with QUIC support
|
||||
statically from the source with nginx by using --with-openssl=<path> option.
|
||||
|
||||
END
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
|
|
|
@ -7,24 +7,11 @@ case "$CC" in
|
|||
|
||||
cl)
|
||||
|
||||
case "$NGX_MACHINE" in
|
||||
|
||||
amd64)
|
||||
OPENSSL_TARGET=VC-WIN64A
|
||||
;;
|
||||
|
||||
*)
|
||||
OPENSSL_TARGET=VC-WIN32
|
||||
;;
|
||||
|
||||
esac
|
||||
|
||||
cat << END >> $NGX_MAKEFILE
|
||||
|
||||
$OPENSSL/openssl/include/openssl/ssl.h: $NGX_MAKEFILE
|
||||
\$(MAKE) -f auto/lib/openssl/makefile.msvc \
|
||||
OPENSSL="$OPENSSL" OPENSSL_OPT="$OPENSSL_OPT" \
|
||||
OPENSSL_TARGET="$OPENSSL_TARGET"
|
||||
OPENSSL="$OPENSSL" OPENSSL_OPT="$OPENSSL_OPT"
|
||||
|
||||
END
|
||||
|
||||
|
@ -54,6 +41,11 @@ END
|
|||
;;
|
||||
|
||||
*)
|
||||
case $USE_THREADS in
|
||||
NO) OPENSSL_OPT="$OPENSSL_OPT no-threads" ;;
|
||||
*) OPENSSL_OPT="$OPENSSL_OPT threads" ;;
|
||||
esac
|
||||
|
||||
case $OPENSSL in
|
||||
/*) ngx_prefix="$OPENSSL/.openssl" ;;
|
||||
*) ngx_prefix="$PWD/$OPENSSL/.openssl" ;;
|
||||
|
@ -64,9 +56,9 @@ END
|
|||
$OPENSSL/.openssl/include/openssl/ssl.h: $NGX_MAKEFILE
|
||||
cd $OPENSSL \\
|
||||
&& if [ -f Makefile ]; then \$(MAKE) clean; fi \\
|
||||
&& ./config --prefix=$ngx_prefix no-shared no-threads $OPENSSL_OPT \\
|
||||
&& ./config --prefix=$ngx_prefix no-shared $OPENSSL_OPT \\
|
||||
&& \$(MAKE) \\
|
||||
&& \$(MAKE) install_sw LIBDIR=lib
|
||||
&& \$(MAKE) install LIBDIR=lib
|
||||
|
||||
END
|
||||
|
||||
|
|
|
@ -6,16 +6,9 @@
|
|||
all:
|
||||
cd $(OPENSSL)
|
||||
|
||||
perl Configure $(OPENSSL_TARGET) no-shared no-threads \
|
||||
--prefix="%cd%/openssl" \
|
||||
--openssldir="%cd%/openssl/ssl" \
|
||||
$(OPENSSL_OPT)
|
||||
perl Configure VC-WIN32 no-shared --prefix=openssl $(OPENSSL_OPT)
|
||||
|
||||
if exist ms\do_ms.bat ( \
|
||||
ms\do_ms \
|
||||
&& $(MAKE) -f ms\nt.mak \
|
||||
&& $(MAKE) -f ms\nt.mak install \
|
||||
) else ( \
|
||||
$(MAKE) \
|
||||
&& $(MAKE) install_sw \
|
||||
)
|
||||
ms\do_ms
|
||||
|
||||
$(MAKE) -f ms\nt.mak
|
||||
$(MAKE) -f ms\nt.mak install
|
||||
|
|
|
@ -4,62 +4,87 @@
|
|||
|
||||
|
||||
if [ $PCRE != NONE ]; then
|
||||
CORE_INCS="$CORE_INCS $PCRE"
|
||||
|
||||
if [ -f $PCRE/src/pcre2.h.generic ]; then
|
||||
case "$NGX_CC_NAME" in
|
||||
|
||||
PCRE_LIBRARY=PCRE2
|
||||
|
||||
have=NGX_PCRE . auto/have
|
||||
have=NGX_PCRE2 . auto/have
|
||||
|
||||
if [ "$NGX_PLATFORM" = win32 ]; then
|
||||
have=PCRE2_STATIC . auto/have
|
||||
fi
|
||||
|
||||
CORE_INCS="$CORE_INCS $PCRE/src/"
|
||||
CORE_DEPS="$CORE_DEPS $PCRE/src/pcre2.h"
|
||||
|
||||
case "$NGX_CC_NAME" in
|
||||
|
||||
msvc)
|
||||
LINK_DEPS="$LINK_DEPS $PCRE/src/pcre2-8.lib"
|
||||
CORE_LIBS="$CORE_LIBS $PCRE/src/pcre2-8.lib"
|
||||
;;
|
||||
|
||||
*)
|
||||
LINK_DEPS="$LINK_DEPS $PCRE/.libs/libpcre2-8.a"
|
||||
CORE_LIBS="$CORE_LIBS $PCRE/.libs/libpcre2-8.a"
|
||||
;;
|
||||
|
||||
esac
|
||||
|
||||
else
|
||||
|
||||
PCRE_LIBRARY=PCRE
|
||||
|
||||
have=NGX_PCRE . auto/have
|
||||
|
||||
if [ "$NGX_PLATFORM" = win32 ]; then
|
||||
msvc* | owc* | bcc)
|
||||
have=NGX_PCRE . auto/have
|
||||
have=PCRE_STATIC . auto/have
|
||||
fi
|
||||
CORE_DEPS="$CORE_DEPS $PCRE/pcre.h"
|
||||
LINK_DEPS="$LINK_DEPS $PCRE/pcre.lib"
|
||||
CORE_LIBS="$CORE_LIBS $PCRE/pcre.lib"
|
||||
;;
|
||||
|
||||
CORE_INCS="$CORE_INCS $PCRE"
|
||||
CORE_DEPS="$CORE_DEPS $PCRE/pcre.h"
|
||||
icc* )
|
||||
have=NGX_PCRE . auto/have
|
||||
CORE_DEPS="$CORE_DEPS $PCRE/pcre.h"
|
||||
|
||||
case "$NGX_CC_NAME" in
|
||||
LINK_DEPS="$LINK_DEPS $PCRE/.libs/libpcre.a"
|
||||
|
||||
msvc | owc | bcc)
|
||||
LINK_DEPS="$LINK_DEPS $PCRE/pcre.lib"
|
||||
CORE_LIBS="$CORE_LIBS $PCRE/pcre.lib"
|
||||
;;
|
||||
echo $ngx_n "checking for PCRE library ...$ngx_c"
|
||||
|
||||
*)
|
||||
LINK_DEPS="$LINK_DEPS $PCRE/.libs/libpcre.a"
|
||||
CORE_LIBS="$CORE_LIBS $PCRE/.libs/libpcre.a"
|
||||
;;
|
||||
if [ -f $PCRE/pcre.h ]; then
|
||||
ngx_pcre_ver=`grep PCRE_MAJOR $PCRE/pcre.h \
|
||||
| sed -e 's/^.*PCRE_MAJOR.* \(.*\)$/\1/'`
|
||||
|
||||
else if [ -f $PCRE/configure.in ]; then
|
||||
ngx_pcre_ver=`grep PCRE_MAJOR= $PCRE/configure.in \
|
||||
| sed -e 's/^.*=\(.*\)$/\1/'`
|
||||
|
||||
else
|
||||
ngx_pcre_ver=`grep pcre_major, $PCRE/configure.ac \
|
||||
| sed -e 's/^.*pcre_major,.*\[\(.*\)\].*$/\1/'`
|
||||
fi
|
||||
fi
|
||||
|
||||
echo " $ngx_pcre_ver major version found"
|
||||
|
||||
# to allow -ipo optimization we link with the *.o but not library
|
||||
|
||||
case "$ngx_pcre_ver" in
|
||||
4|5)
|
||||
CORE_LIBS="$CORE_LIBS $PCRE/pcre.o"
|
||||
;;
|
||||
|
||||
6)
|
||||
CORE_LIBS="$CORE_LIBS $PCRE/pcre_chartables.o"
|
||||
CORE_LIBS="$CORE_LIBS $PCRE/pcre_compile.o"
|
||||
CORE_LIBS="$CORE_LIBS $PCRE/pcre_exec.o"
|
||||
CORE_LIBS="$CORE_LIBS $PCRE/pcre_fullinfo.o"
|
||||
CORE_LIBS="$CORE_LIBS $PCRE/pcre_globals.o"
|
||||
CORE_LIBS="$CORE_LIBS $PCRE/pcre_tables.o"
|
||||
CORE_LIBS="$CORE_LIBS $PCRE/pcre_try_flipped.o"
|
||||
;;
|
||||
|
||||
*)
|
||||
CORE_LIBS="$CORE_LIBS $PCRE/pcre_chartables.o"
|
||||
CORE_LIBS="$CORE_LIBS $PCRE/pcre_compile.o"
|
||||
CORE_LIBS="$CORE_LIBS $PCRE/pcre_exec.o"
|
||||
CORE_LIBS="$CORE_LIBS $PCRE/pcre_fullinfo.o"
|
||||
CORE_LIBS="$CORE_LIBS $PCRE/pcre_globals.o"
|
||||
CORE_LIBS="$CORE_LIBS $PCRE/pcre_tables.o"
|
||||
CORE_LIBS="$CORE_LIBS $PCRE/pcre_try_flipped.o"
|
||||
CORE_LIBS="$CORE_LIBS $PCRE/pcre_newline.o"
|
||||
;;
|
||||
|
||||
esac
|
||||
;;
|
||||
|
||||
*)
|
||||
have=NGX_PCRE . auto/have
|
||||
|
||||
if [ "$NGX_PLATFORM" = win32 ]; then
|
||||
have=PCRE_STATIC . auto/have
|
||||
fi
|
||||
|
||||
CORE_DEPS="$CORE_DEPS $PCRE/pcre.h"
|
||||
LINK_DEPS="$LINK_DEPS $PCRE/.libs/libpcre.a"
|
||||
CORE_LIBS="$CORE_LIBS $PCRE/.libs/libpcre.a"
|
||||
;;
|
||||
|
||||
esac
|
||||
|
||||
esac
|
||||
fi
|
||||
|
||||
if [ $PCRE_JIT = YES ]; then
|
||||
have=NGX_HAVE_PCRE_JIT . auto/have
|
||||
|
@ -69,48 +94,8 @@ if [ $PCRE != NONE ]; then
|
|||
else
|
||||
|
||||
if [ "$NGX_PLATFORM" != win32 ]; then
|
||||
|
||||
PCRE=NO
|
||||
fi
|
||||
|
||||
if [ $PCRE = NO -a $PCRE2 != DISABLED ]; then
|
||||
|
||||
ngx_feature="PCRE2 library"
|
||||
ngx_feature_name="NGX_PCRE2"
|
||||
ngx_feature_run=no
|
||||
ngx_feature_incs="#define PCRE2_CODE_UNIT_WIDTH 8
|
||||
#include <pcre2.h>"
|
||||
ngx_feature_path=
|
||||
ngx_feature_libs="-lpcre2-8"
|
||||
ngx_feature_test="pcre2_code *re;
|
||||
re = pcre2_compile(NULL, 0, 0, NULL, NULL, NULL);
|
||||
if (re == NULL) return 1"
|
||||
. auto/feature
|
||||
|
||||
if [ $ngx_found = no ]; then
|
||||
|
||||
# pcre2-config
|
||||
|
||||
ngx_pcre2_prefix=`pcre2-config --prefix 2>/dev/null`
|
||||
|
||||
if [ -n "$ngx_pcre2_prefix" ]; then
|
||||
ngx_feature="PCRE2 library in $ngx_pcre2_prefix"
|
||||
ngx_feature_path=`pcre2-config --cflags \
|
||||
| sed -n -e 's/.*-I *\([^ ][^ ]*\).*/\1/p'`
|
||||
ngx_feature_libs=`pcre2-config --libs8`
|
||||
. auto/feature
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ $ngx_found = yes ]; then
|
||||
have=NGX_PCRE . auto/have
|
||||
CORE_INCS="$CORE_INCS $ngx_feature_path"
|
||||
CORE_LIBS="$CORE_LIBS $ngx_feature_libs"
|
||||
PCRE=YES
|
||||
PCRE_LIBRARY=PCRE2
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ $PCRE = NO ]; then
|
||||
|
||||
ngx_feature="PCRE library"
|
||||
ngx_feature_name="NGX_PCRE"
|
||||
|
@ -186,7 +171,6 @@ else
|
|||
CORE_INCS="$CORE_INCS $ngx_feature_path"
|
||||
CORE_LIBS="$CORE_LIBS $ngx_feature_libs"
|
||||
PCRE=YES
|
||||
PCRE_LIBRARY=PCRE
|
||||
fi
|
||||
|
||||
if [ $PCRE = YES ]; then
|
||||
|
|
|
@ -3,138 +3,36 @@
|
|||
# Copyright (C) Nginx, Inc.
|
||||
|
||||
|
||||
if [ $PCRE_LIBRARY = PCRE2 ]; then
|
||||
case "$NGX_CC_NAME" in
|
||||
|
||||
# PCRE2
|
||||
msvc*)
|
||||
ngx_makefile=makefile.msvc
|
||||
ngx_opt="CPU_OPT=\"$CPU_OPT\" LIBC=$LIBC"
|
||||
ngx_pcre="PCRE=\"$PCRE\""
|
||||
;;
|
||||
|
||||
if [ $NGX_CC_NAME = msvc ]; then
|
||||
owc*)
|
||||
ngx_makefile=makefile.owc
|
||||
ngx_opt="CPU_OPT=\"$CPU_OPT\""
|
||||
ngx_pcre=`echo PCRE=\"$PCRE\" | sed -e "s/\//$ngx_regex_dirsep/g"`
|
||||
;;
|
||||
|
||||
# With PCRE2, it is not possible to compile all sources.
|
||||
# Since list of source files changes between versions, we
|
||||
# test files which might not be present.
|
||||
bcc)
|
||||
ngx_makefile=makefile.bcc
|
||||
ngx_opt="-DCPU_OPT=\"$CPU_OPT\""
|
||||
ngx_pcre=`echo \-DPCRE=\"$PCRE\" | sed -e "s/\//$ngx_regex_dirsep/g"`
|
||||
;;
|
||||
|
||||
ngx_pcre_srcs="pcre2_auto_possess.c \
|
||||
pcre2_chartables.c \
|
||||
pcre2_compile.c \
|
||||
pcre2_config.c \
|
||||
pcre2_context.c \
|
||||
pcre2_dfa_match.c \
|
||||
pcre2_error.c \
|
||||
pcre2_jit_compile.c \
|
||||
pcre2_maketables.c \
|
||||
pcre2_match.c \
|
||||
pcre2_match_data.c \
|
||||
pcre2_newline.c \
|
||||
pcre2_ord2utf.c \
|
||||
pcre2_pattern_info.c \
|
||||
pcre2_string_utils.c \
|
||||
pcre2_study.c \
|
||||
pcre2_substitute.c \
|
||||
pcre2_substring.c \
|
||||
pcre2_tables.c \
|
||||
pcre2_ucd.c \
|
||||
pcre2_valid_utf.c \
|
||||
pcre2_xclass.c"
|
||||
*)
|
||||
ngx_makefile=
|
||||
;;
|
||||
|
||||
ngx_pcre_test="pcre2_convert.c \
|
||||
pcre2_extuni.c \
|
||||
pcre2_find_bracket.c \
|
||||
pcre2_script_run.c \
|
||||
pcre2_serialize.c"
|
||||
|
||||
for ngx_src in $ngx_pcre_test
|
||||
do
|
||||
if [ -f $PCRE/src/$ngx_src ]; then
|
||||
ngx_pcre_srcs="$ngx_pcre_srcs $ngx_src"
|
||||
fi
|
||||
done
|
||||
|
||||
ngx_pcre_objs=`echo $ngx_pcre_srcs \
|
||||
| sed -e "s#\([^ ]*\.\)c#\1$ngx_objext#g"`
|
||||
|
||||
ngx_pcre_srcs=`echo $ngx_pcre_srcs \
|
||||
| sed -e "s/ *\([^ ][^ ]*\)/$ngx_regex_cont\1/g"`
|
||||
ngx_pcre_objs=`echo $ngx_pcre_objs \
|
||||
| sed -e "s/ *\([^ ][^ ]*\)/$ngx_regex_cont\1/g"`
|
||||
|
||||
cat << END >> $NGX_MAKEFILE
|
||||
|
||||
PCRE_CFLAGS = -O2 -Ob1 -Oi -Gs $LIBC $CPU_OPT
|
||||
PCRE_FLAGS = -DHAVE_CONFIG_H -DPCRE2_STATIC -DPCRE2_CODE_UNIT_WIDTH=8 \\
|
||||
-DHAVE_MEMMOVE
|
||||
|
||||
PCRE_SRCS = $ngx_pcre_srcs
|
||||
PCRE_OBJS = $ngx_pcre_objs
|
||||
|
||||
$PCRE/src/pcre2.h:
|
||||
cd $PCRE/src \\
|
||||
&& copy /y config.h.generic config.h \\
|
||||
&& copy /y pcre2.h.generic pcre2.h \\
|
||||
&& copy /y pcre2_chartables.c.dist pcre2_chartables.c
|
||||
|
||||
$PCRE/src/pcre2-8.lib: $PCRE/src/pcre2.h $NGX_MAKEFILE
|
||||
cd $PCRE/src \\
|
||||
&& cl -nologo -c \$(PCRE_CFLAGS) -I . \$(PCRE_FLAGS) \$(PCRE_SRCS) \\
|
||||
&& link -lib -out:pcre2-8.lib -verbose:lib \$(PCRE_OBJS)
|
||||
|
||||
END
|
||||
|
||||
else
|
||||
|
||||
cat << END >> $NGX_MAKEFILE
|
||||
|
||||
$PCRE/src/pcre2.h: $PCRE/Makefile
|
||||
|
||||
$PCRE/Makefile: $NGX_MAKEFILE
|
||||
cd $PCRE \\
|
||||
&& if [ -f Makefile ]; then \$(MAKE) distclean; fi \\
|
||||
&& CC="\$(CC)" CFLAGS="$PCRE_OPT" \\
|
||||
./configure --disable-shared $PCRE_CONF_OPT
|
||||
|
||||
$PCRE/.libs/libpcre2-8.a: $PCRE/Makefile
|
||||
cd $PCRE \\
|
||||
&& \$(MAKE) libpcre2-8.la
|
||||
|
||||
END
|
||||
|
||||
fi
|
||||
esac
|
||||
|
||||
|
||||
else
|
||||
if [ -n "$ngx_makefile" ]; then
|
||||
|
||||
# PCRE
|
||||
|
||||
case "$NGX_CC_NAME" in
|
||||
|
||||
msvc)
|
||||
ngx_makefile=makefile.msvc
|
||||
ngx_opt="CPU_OPT=\"$CPU_OPT\" LIBC=$LIBC"
|
||||
ngx_pcre="PCRE=\"$PCRE\""
|
||||
;;
|
||||
|
||||
owc)
|
||||
ngx_makefile=makefile.owc
|
||||
ngx_opt="CPU_OPT=\"$CPU_OPT\""
|
||||
ngx_pcre=`echo PCRE=\"$PCRE\" | sed -e "s/\//$ngx_regex_dirsep/g"`
|
||||
;;
|
||||
|
||||
bcc)
|
||||
ngx_makefile=makefile.bcc
|
||||
ngx_opt="-DCPU_OPT=\"$CPU_OPT\""
|
||||
ngx_pcre=`echo \-DPCRE=\"$PCRE\" \
|
||||
| sed -e "s/\//$ngx_regex_dirsep/g"`
|
||||
;;
|
||||
|
||||
*)
|
||||
ngx_makefile=
|
||||
;;
|
||||
|
||||
esac
|
||||
|
||||
|
||||
if [ -n "$ngx_makefile" ]; then
|
||||
|
||||
cat << END >> $NGX_MAKEFILE
|
||||
cat << END >> $NGX_MAKEFILE
|
||||
|
||||
`echo "$PCRE/pcre.lib: $PCRE/pcre.h $NGX_MAKEFILE" \
|
||||
| sed -e "s/\//$ngx_regex_dirsep/g"`
|
||||
|
@ -145,9 +43,9 @@ else
|
|||
|
||||
END
|
||||
|
||||
else
|
||||
else
|
||||
|
||||
cat << END >> $NGX_MAKEFILE
|
||||
cat << END >> $NGX_MAKEFILE
|
||||
|
||||
$PCRE/pcre.h: $PCRE/Makefile
|
||||
|
||||
|
@ -163,6 +61,4 @@ $PCRE/.libs/libpcre.a: $PCRE/Makefile
|
|||
|
||||
END
|
||||
|
||||
fi
|
||||
|
||||
fi
|
||||
|
|
|
@ -12,9 +12,9 @@ NGX_PERL_VER=`$NGX_PERL -v 2>&1 | grep '^This is perl' 2>&1 \
|
|||
if test -n "$NGX_PERL_VER"; then
|
||||
echo " + perl version: $NGX_PERL_VER"
|
||||
|
||||
if [ "`$NGX_PERL -e 'use 5.008006; print "OK"'`" != "OK" ]; then
|
||||
if [ "`$NGX_PERL -e 'use 5.006001; print "OK"'`" != "OK" ]; then
|
||||
echo
|
||||
echo "$0: error: perl 5.8.6 or higher is required"
|
||||
echo "$0: error: perl 5.6.1 or higher is required"
|
||||
echo
|
||||
|
||||
exit 1;
|
||||
|
@ -28,10 +28,8 @@ if test -n "$NGX_PERL_VER"; then
|
|||
exit 1;
|
||||
fi
|
||||
|
||||
NGX_PM_CFLAGS=`$NGX_PERL -MExtUtils::Embed -e ccopts`
|
||||
NGX_PM_LDFLAGS=`$NGX_PERL -MConfig -e 'print $Config{lddlflags}'`
|
||||
|
||||
NGX_PERL_CFLAGS="$CFLAGS `$NGX_PERL -MExtUtils::Embed -e ccopts`"
|
||||
NGX_PM_CFLAGS=`$NGX_PERL -MExtUtils::Embed -e ccopts`
|
||||
|
||||
# gcc 4.1/4.2 warn about unused values in pTHX_
|
||||
NGX_PERL_CFLAGS=`echo $NGX_PERL_CFLAGS \
|
||||
|
@ -43,8 +41,6 @@ if test -n "$NGX_PERL_VER"; then
|
|||
ngx_perl_ldopts=`$NGX_PERL -MExtUtils::Embed -e ldopts`
|
||||
|
||||
ngx_perl_dlext=`$NGX_PERL -MConfig -e 'print $Config{dlext}'`
|
||||
ngx_perl_libdir="src/http/modules/perl/blib/arch/auto"
|
||||
ngx_perl_module="$ngx_perl_libdir/nginx/nginx.$ngx_perl_dlext"
|
||||
|
||||
if $NGX_PERL -V:usemultiplicity | grep define > /dev/null; then
|
||||
have=NGX_HAVE_PERL_MULTIPLICITY . auto/have
|
||||
|
@ -56,17 +52,8 @@ if test -n "$NGX_PERL_VER"; then
|
|||
ngx_perl_ldopts=`echo $ngx_perl_ldopts | sed 's/ -pthread//'`
|
||||
fi
|
||||
|
||||
if [ "$NGX_SYSTEM" = "Darwin" ]; then
|
||||
# OS X system perl wants to link universal binaries
|
||||
ngx_perl_ldopts=`echo $ngx_perl_ldopts \
|
||||
| sed -e 's/-arch i386//' -e 's/-arch x86_64//'`
|
||||
fi
|
||||
|
||||
if [ $USE_PERL = YES ]; then
|
||||
CORE_LINK="$CORE_LINK $ngx_perl_ldopts"
|
||||
fi
|
||||
|
||||
NGX_LIB_PERL="$ngx_perl_ldopts"
|
||||
CORE_LINK="$CORE_LINK $ngx_perl_ldopts"
|
||||
LINK_DEPS="$LINK_DEPS $NGX_OBJS/src/http/modules/perl/blib/arch/auto/nginx/nginx.$ngx_perl_dlext"
|
||||
|
||||
if test -n "$NGX_PERL_MODULES"; then
|
||||
have=NGX_PERL_MODULES value="(u_char *) \"$NGX_PERL_MODULES\""
|
||||
|
@ -76,7 +63,7 @@ if test -n "$NGX_PERL_VER"; then
|
|||
|
||||
else
|
||||
echo
|
||||
echo "$0: error: perl 5.8.6 or higher is required"
|
||||
echo "$0: error: perl 5.6.1 or higher is required"
|
||||
echo
|
||||
|
||||
exit 1;
|
||||
|
|
|
@ -3,12 +3,12 @@
|
|||
# Copyright (C) Nginx, Inc.
|
||||
|
||||
|
||||
v=`grep 'define NGINX_VERSION' src/core/nginx.h | sed -e 's/^.*"\(.*\)".*/\1/'`
|
||||
|
||||
|
||||
cat << END >> $NGX_MAKEFILE
|
||||
|
||||
$NGX_OBJS/src/http/modules/perl/ngx_http_perl_module.o: \\
|
||||
$NGX_OBJS/$ngx_perl_module
|
||||
|
||||
$NGX_OBJS/$ngx_perl_module: \\
|
||||
$NGX_OBJS/src/http/modules/perl/blib/arch/auto/nginx/nginx.$ngx_perl_dlext: \\
|
||||
\$(CORE_DEPS) \$(HTTP_DEPS) \\
|
||||
src/http/modules/perl/ngx_http_perl_module.h \\
|
||||
$NGX_OBJS/src/http/modules/perl/Makefile
|
||||
|
@ -24,11 +24,7 @@ $NGX_OBJS/src/http/modules/perl/Makefile: \\
|
|||
src/http/modules/perl/nginx.pm \\
|
||||
src/http/modules/perl/nginx.xs \\
|
||||
src/http/modules/perl/typemap
|
||||
grep 'define NGINX_VERSION' src/core/nginx.h \\
|
||||
| sed -e 's/^.*"\(.*\)".*/\1/' > \\
|
||||
$NGX_OBJS/src/http/modules/perl/version
|
||||
sed "s/%%VERSION%%/\`cat $NGX_OBJS/src/http/modules/perl/version\`/" \\
|
||||
src/http/modules/perl/nginx.pm > \\
|
||||
sed "s/%%VERSION%%/$v/" src/http/modules/perl/nginx.pm > \\
|
||||
$NGX_OBJS/src/http/modules/perl/nginx.pm
|
||||
cp -p src/http/modules/perl/nginx.xs $NGX_OBJS/src/http/modules/perl/
|
||||
cp -p src/http/modules/perl/typemap $NGX_OBJS/src/http/modules/perl/
|
||||
|
@ -36,7 +32,6 @@ $NGX_OBJS/src/http/modules/perl/Makefile: \\
|
|||
|
||||
cd $NGX_OBJS/src/http/modules/perl \\
|
||||
&& NGX_PM_CFLAGS="\$(NGX_PM_CFLAGS) -g $NGX_CC_OPT" \\
|
||||
NGX_PM_LDFLAGS="$NGX_LD_OPT \$(NGX_PM_LDFLAGS)" \\
|
||||
NGX_INCS="$CORE_INCS $NGX_OBJS $HTTP_INCS" \\
|
||||
NGX_DEPS="\$(CORE_DEPS) \$(HTTP_DEPS)" \\
|
||||
$NGX_PERL Makefile.PL \\
|
||||
|
|
|
@ -0,0 +1,79 @@
|
|||
|
||||
# Copyright (C) Igor Sysoev
|
||||
# Copyright (C) Nginx, Inc.
|
||||
|
||||
|
||||
if [ $SHA1 != NONE ]; then
|
||||
|
||||
have=NGX_HAVE_SHA1 . auto/have
|
||||
CORE_INCS="$CORE_INCS $SHA1"
|
||||
|
||||
case "$NGX_CC_NAME" in
|
||||
|
||||
msvc* | owc* | bcc)
|
||||
LINK_DEPS="$LINK_DEPS $SHA1/sha1.lib"
|
||||
CORE_LIBS="$CORE_LIBS $SHA1/sha1.lib"
|
||||
;;
|
||||
|
||||
icc*)
|
||||
LINK_DEPS="$LINK_DEPS $SHA1/libsha.a"
|
||||
|
||||
# to allow -ipo optimization we link with the *.o but not library
|
||||
CORE_LIBS="$CORE_LIBS $SHA1/sha1_dgst.o"
|
||||
|
||||
if [ $SHA1_ASM = YES ]; then
|
||||
CORE_LIBS="$CORE_LIBS $SHA1/asm/sx86-elf.o"
|
||||
fi
|
||||
;;
|
||||
|
||||
*)
|
||||
LINK_DEPS="$LINK_DEPS $SHA1/libsha.a"
|
||||
CORE_LIBS="$CORE_LIBS $SHA1/libsha.a"
|
||||
#CORE_LIBS="$CORE_LIBS -L $SHA1 -lsha"
|
||||
;;
|
||||
|
||||
esac
|
||||
|
||||
else
|
||||
|
||||
if [ "$NGX_PLATFORM" != win32 ]; then
|
||||
|
||||
SHA1=NO
|
||||
|
||||
# FreeBSD
|
||||
|
||||
ngx_feature="sha1 in system md library"
|
||||
ngx_feature_name=NGX_HAVE_SHA1
|
||||
ngx_feature_run=no
|
||||
ngx_feature_incs="#include <sha.h>"
|
||||
ngx_feature_path=
|
||||
ngx_feature_libs="-lmd"
|
||||
ngx_feature_test="SHA_CTX sha1; SHA1_Init(&sha1)"
|
||||
. auto/feature
|
||||
|
||||
ngx_sha1_lib="system md"
|
||||
|
||||
if [ $ngx_found = no ]; then
|
||||
|
||||
# OpenSSL crypto library
|
||||
|
||||
ngx_feature="sha1 in system OpenSSL crypto library"
|
||||
ngx_feature_incs="#include <openssl/sha.h>"
|
||||
ngx_feature_libs="-lcrypto"
|
||||
. auto/feature
|
||||
|
||||
ngx_sha1_lib="system crypto"
|
||||
|
||||
if [ $ngx_found = yes ]; then
|
||||
have=NGX_HAVE_OPENSSL_SHA1_H . auto/have
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ $ngx_found = yes ]; then
|
||||
CORE_LIBS="$CORE_LIBS $ngx_feature_libs"
|
||||
SHA1=YES
|
||||
SHA1_LIB=$ngx_sha1_lib
|
||||
fi
|
||||
fi
|
||||
|
||||
fi
|
|
@ -0,0 +1,96 @@
|
|||
|
||||
# Copyright (C) Igor Sysoev
|
||||
# Copyright (C) Nginx, Inc.
|
||||
|
||||
|
||||
case "$NGX_CC_NAME" in
|
||||
|
||||
msvc*)
|
||||
ngx_makefile=makefile.msvc
|
||||
ngx_opt="CPU_OPT=\"$CPU_OPT\" LIBC=$LIBC SHA1_ASM=$SHA1_ASM"
|
||||
ngx_sha1="SHA1=\"$SHA1\""
|
||||
;;
|
||||
|
||||
owc*)
|
||||
ngx_makefile=makefile.owc
|
||||
ngx_opt="CPU_OPT=\"$CPU_OPT\""
|
||||
ngx_sha1=`echo SHA1=\"$SHA1\" | sed -e "s/\//$ngx_regex_dirsep/g"`
|
||||
;;
|
||||
|
||||
bcc)
|
||||
ngx_makefile=makefile.bcc
|
||||
ngx_opt="-DCPU_OPT=\"$CPU_OPT\" -DSHA1_ASM=$SHA1_ASM"
|
||||
ngx_sha1=`echo \-DSHA1=\"$SHA1\" | sed -e "s/\//$ngx_regex_dirsep/g"`
|
||||
;;
|
||||
|
||||
esac
|
||||
|
||||
|
||||
done=NO
|
||||
|
||||
|
||||
case "$NGX_PLATFORM" in
|
||||
|
||||
win32)
|
||||
cat << END >> $NGX_MAKEFILE
|
||||
|
||||
`echo "$SHA1/sha1.lib: $NGX_MAKEFILE" | sed -e "s/\//$ngx_regex_dirsep/g"`
|
||||
\$(MAKE) -f auto/lib/sha1/$ngx_makefile $ngx_opt $ngx_sha1
|
||||
|
||||
END
|
||||
|
||||
done=YES
|
||||
;;
|
||||
|
||||
SunOS:*:i86pc)
|
||||
if [ $SHA1_ASM = YES ]; then
|
||||
|
||||
cat << END >> $NGX_MAKEFILE
|
||||
|
||||
$SHA1/libsha.a: $NGX_MAKEFILE
|
||||
cd $SHA1 \\
|
||||
&& \$(MAKE) CFLAGS="$SHA1_OPT -DSOL -DSHA1_ASM -DL_ENDIAN" \\
|
||||
CC="\$(CC)" CPP="\$(CPP)" \\
|
||||
SHA_ASM_OBJ=asm/sx86-sol.o clean libsha.a
|
||||
|
||||
END
|
||||
|
||||
done=YES
|
||||
fi
|
||||
;;
|
||||
|
||||
# FreeBSD: i386
|
||||
# Linux: i686
|
||||
|
||||
*:i386 | *:i686)
|
||||
if [ $SHA1_ASM = YES ]; then
|
||||
|
||||
cat << END >> $NGX_MAKEFILE
|
||||
|
||||
$SHA1/libsha.a: $NGX_MAKEFILE
|
||||
cd $SHA1 \\
|
||||
&& \$(MAKE) CFLAGS="$SHA1_OPT -DELF -DSHA1_ASM -DL_ENDIAN" \\
|
||||
CC="\$(CC)" CPP="\$(CPP)" \\
|
||||
SHA_ASM_OBJ=asm/sx86-elf.o clean libsha.a
|
||||
|
||||
END
|
||||
|
||||
done=YES
|
||||
fi
|
||||
;;
|
||||
|
||||
esac
|
||||
|
||||
|
||||
if [ $done = NO ]; then
|
||||
|
||||
cat << END >> $NGX_MAKEFILE
|
||||
|
||||
$SHA1/libsha.a: $NGX_MAKEFILE
|
||||
cd $SHA1 \\
|
||||
&& \$(MAKE) CFLAGS="$SHA1_OPT" \\
|
||||
CC="\$(CC)" SHA_ASM_OBJ= clean libsha.a
|
||||
|
||||
END
|
||||
|
||||
fi
|
|
@ -0,0 +1,22 @@
|
|||
|
||||
# Copyright (C) Igor Sysoev
|
||||
# Copyright (C) Nginx, Inc.
|
||||
|
||||
|
||||
CFLAGS = -q -O2 -tWM $(CPU_OPT) -DL_ENDIAN
|
||||
|
||||
!if "$(SHA1_ASM)" == "YES"
|
||||
|
||||
sha1.lib:
|
||||
cd $(SHA1)
|
||||
bcc32 -c $(CFLAGS) -DSHA1_ASM sha1dgst.c
|
||||
tlib sha1.lib +sha1dgst.obj +"asm\s-win32.obj"
|
||||
|
||||
!else
|
||||
|
||||
sha1.lib:
|
||||
cd $(SHA1)
|
||||
bcc32 -c $(CFLAGS) sha1dgst.c
|
||||
tlib sha1.lib +sha1dgst.obj
|
||||
|
||||
!endif
|
|
@ -0,0 +1,22 @@
|
|||
|
||||
# Copyright (C) Igor Sysoev
|
||||
# Copyright (C) Nginx, Inc.
|
||||
|
||||
|
||||
CFLAGS = -nologo -O2 -Ob1 -Oi -Gs $(LIBC) $(CPU_OPT) -D L_ENDIAN
|
||||
|
||||
!IF "$(SHA1_ASM)" == "YES"
|
||||
|
||||
sha1.lib:
|
||||
cd $(SHA1)
|
||||
cl -c $(CFLAGS) -D SHA1_ASM sha1dgst.c
|
||||
link -lib -out:sha1.lib sha1dgst.obj asm/s-win32.obj
|
||||
|
||||
!ELSE
|
||||
|
||||
sha1.lib:
|
||||
cd $(SHA1)
|
||||
cl -c $(CFLAGS) sha1dgst.c
|
||||
link -lib -out:sha1.lib sha1dgst.obj
|
||||
|
||||
!ENDIF
|
|
@ -0,0 +1,11 @@
|
|||
|
||||
# Copyright (C) Igor Sysoev
|
||||
# Copyright (C) Nginx, Inc.
|
||||
|
||||
|
||||
CFLAGS = -zq -bt=nt -bm -ot -op -oi -oe -s $(CPU_OPT)
|
||||
|
||||
sha1.lib:
|
||||
cd $(SHA1)
|
||||
wcl386 -c $(CFLAGS) -dL_ENDIAN sha1dgst.c
|
||||
wlib -n sha1.lib sha1dgst.obj
|
|
@ -0,0 +1,40 @@
|
|||
|
||||
# Copyright (C) Igor Sysoev
|
||||
# Copyright (C) Nginx, Inc.
|
||||
|
||||
|
||||
echo $ngx_n "checking for $ngx_lib ...$ngx_c"
|
||||
|
||||
cat << END >> $NGX_AUTOCONF_ERR
|
||||
|
||||
----------------------------------------
|
||||
checking for $ngx_lib
|
||||
|
||||
END
|
||||
|
||||
ngx_found=no
|
||||
|
||||
cat << END > $NGX_AUTOTEST.c
|
||||
|
||||
$ngx_lib_incs
|
||||
|
||||
int main() {
|
||||
$ngx_lib_test;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
eval "$CC $cc_test_flags $ngx_lib_cflags \
|
||||
-o $NGX_AUTOTEST $NGX_AUTOTEST.c $ngx_libs \
|
||||
>> $NGX_ERR 2>&1"
|
||||
|
||||
if [ -x $NGX_AUTOTEST ]; then
|
||||
echo " found"
|
||||
|
||||
ngx_found=yes
|
||||
|
||||
else
|
||||
echo " not found"
|
||||
fi
|
||||
|
||||
rm -rf $NGX_AUTOTEST*
|
|
@ -8,13 +8,13 @@ if [ $ZLIB != NONE ]; then
|
|||
|
||||
case "$NGX_CC_NAME" in
|
||||
|
||||
msvc | owc | bcc)
|
||||
msvc* | owc* | bcc)
|
||||
have=NGX_ZLIB . auto/have
|
||||
LINK_DEPS="$LINK_DEPS $ZLIB/zlib.lib"
|
||||
CORE_LIBS="$CORE_LIBS $ZLIB/zlib.lib"
|
||||
;;
|
||||
|
||||
icc)
|
||||
icc*)
|
||||
have=NGX_ZLIB . auto/have
|
||||
LINK_DEPS="$LINK_DEPS $ZLIB/libz.a"
|
||||
|
||||
|
|
|
@ -5,14 +5,14 @@
|
|||
|
||||
case "$NGX_CC_NAME" in
|
||||
|
||||
msvc)
|
||||
msvc*)
|
||||
ngx_makefile=makefile.msvc
|
||||
ngx_opt="CPU_OPT=\"$CPU_OPT\" LIBC=$LIBC"
|
||||
ngx_zlib="ZLIB=\"$ZLIB\""
|
||||
|
||||
;;
|
||||
|
||||
owc)
|
||||
owc*)
|
||||
ngx_makefile=makefile.owc
|
||||
ngx_opt="CPU_OPT=\"$CPU_OPT\""
|
||||
ngx_zlib=`echo ZLIB=\"$ZLIB\" | sed -e "s/\//$ngx_regex_dirsep/g"`
|
||||
|
|
|
@ -0,0 +1,10 @@
|
|||
--- zlib.h Thu Jul 9 20:06:56 1998
|
||||
+++ zlib-1.1.3/zlib.h Tue Mar 22 13:41:04 2005
|
||||
@@ -709,7 +709,6 @@
|
||||
(0 in case of error).
|
||||
*/
|
||||
|
||||
-ZEXTERN int ZEXPORTVA gzprintf OF((gzFile file, const char *format, ...));
|
||||
/*
|
||||
Converts, formats, and writes the args to the compressed file under
|
||||
control of the format string, as in fprintf. gzprintf returns the number of
|
301
auto/make
301
auto/make
|
@ -6,12 +6,10 @@
|
|||
echo "creating $NGX_MAKEFILE"
|
||||
|
||||
mkdir -p $NGX_OBJS/src/core $NGX_OBJS/src/event $NGX_OBJS/src/event/modules \
|
||||
$NGX_OBJS/src/event/quic \
|
||||
$NGX_OBJS/src/os/unix $NGX_OBJS/src/os/win32 \
|
||||
$NGX_OBJS/src/http $NGX_OBJS/src/http/v2 $NGX_OBJS/src/http/v3 \
|
||||
$NGX_OBJS/src/http/modules $NGX_OBJS/src/http/modules/perl \
|
||||
$NGX_OBJS/src/http $NGX_OBJS/src/http/modules \
|
||||
$NGX_OBJS/src/http/modules/perl \
|
||||
$NGX_OBJS/src/mail \
|
||||
$NGX_OBJS/src/stream \
|
||||
$NGX_OBJS/src/misc
|
||||
|
||||
|
||||
|
@ -32,13 +30,12 @@ END
|
|||
if test -n "$NGX_PERL_CFLAGS"; then
|
||||
echo NGX_PERL_CFLAGS = $NGX_PERL_CFLAGS >> $NGX_MAKEFILE
|
||||
echo NGX_PM_CFLAGS = $NGX_PM_CFLAGS >> $NGX_MAKEFILE
|
||||
echo NGX_PM_LDFLAGS = $NGX_PM_LDFLAGS >> $NGX_MAKEFILE
|
||||
fi
|
||||
|
||||
|
||||
# ALL_INCS, required by the addons and by OpenWatcom C precompiled headers
|
||||
|
||||
ngx_incs=`echo $CORE_INCS $NGX_OBJS $HTTP_INCS $MAIL_INCS $STREAM_INCS\
|
||||
ngx_incs=`echo $CORE_INCS $NGX_OBJS $HTTP_INCS $MAIL_INCS\
|
||||
| sed -e "s/ *\([^ ][^ ]*\)/$ngx_regex_cont$ngx_include_opt\1/g" \
|
||||
-e "s/\//$ngx_regex_dirsep/g"`
|
||||
|
||||
|
@ -52,7 +49,7 @@ END
|
|||
ngx_all_srcs="$CORE_SRCS"
|
||||
|
||||
|
||||
# the core dependencies and include paths
|
||||
# the core dependences and include paths
|
||||
|
||||
ngx_deps=`echo $CORE_DEPS $NGX_AUTO_CONFIG_H $NGX_PCH \
|
||||
| sed -e "s/ *\([^ ][^ ]*\)/$ngx_regex_cont\1/g" \
|
||||
|
@ -72,7 +69,7 @@ CORE_INCS = $ngx_include_opt$ngx_incs
|
|||
END
|
||||
|
||||
|
||||
# the http dependencies and include paths
|
||||
# the http dependences and include paths
|
||||
|
||||
if [ $HTTP = YES ]; then
|
||||
|
||||
|
@ -98,13 +95,11 @@ END
|
|||
fi
|
||||
|
||||
|
||||
# the mail dependencies and include paths
|
||||
# the mail dependences and include paths
|
||||
|
||||
if [ $MAIL != NO ]; then
|
||||
if [ $MAIL = YES ]; then
|
||||
|
||||
if [ $MAIL = YES ]; then
|
||||
ngx_all_srcs="$ngx_all_srcs $MAIL_SRCS"
|
||||
fi
|
||||
ngx_all_srcs="$ngx_all_srcs $MAIL_SRCS"
|
||||
|
||||
ngx_deps=`echo $MAIL_DEPS \
|
||||
| sed -e "s/ *\([^ ][^ ]*\)/$ngx_regex_cont\1/g" \
|
||||
|
@ -126,38 +121,10 @@ END
|
|||
fi
|
||||
|
||||
|
||||
# the stream dependencies and include paths
|
||||
|
||||
if [ $STREAM != NO ]; then
|
||||
|
||||
if [ $STREAM = YES ]; then
|
||||
ngx_all_srcs="$ngx_all_srcs $STREAM_SRCS"
|
||||
fi
|
||||
|
||||
ngx_deps=`echo $STREAM_DEPS \
|
||||
| sed -e "s/ *\([^ ][^ ]*\)/$ngx_regex_cont\1/g" \
|
||||
-e "s/\//$ngx_regex_dirsep/g"`
|
||||
|
||||
ngx_incs=`echo $STREAM_INCS \
|
||||
| sed -e "s/ *\([^ ][^ ]*\)/$ngx_regex_cont$ngx_include_opt\1/g" \
|
||||
-e "s/\//$ngx_regex_dirsep/g"`
|
||||
|
||||
cat << END >> $NGX_MAKEFILE
|
||||
|
||||
STREAM_DEPS = $ngx_deps
|
||||
ngx_all_srcs="$ngx_all_srcs $NGX_MISC_SRCS"
|
||||
|
||||
|
||||
STREAM_INCS = $ngx_include_opt$ngx_incs
|
||||
|
||||
END
|
||||
|
||||
fi
|
||||
|
||||
|
||||
ngx_all_srcs="$ngx_all_srcs $MISC_SRCS"
|
||||
|
||||
|
||||
if test -n "$NGX_ADDON_SRCS$DYNAMIC_MODULES"; then
|
||||
if test -n "$NGX_ADDON_SRCS"; then
|
||||
|
||||
cat << END >> $NGX_MAKEFILE
|
||||
|
||||
|
@ -210,7 +177,6 @@ ngx_objs=`echo $ngx_all_objs $ngx_modules_obj \
|
|||
| sed -e "s/ *\([^ ][^ ]*\)/$ngx_long_regex_cont\1/g" \
|
||||
-e "s/\//$ngx_regex_dirsep/g"`
|
||||
|
||||
ngx_libs=
|
||||
if test -n "$NGX_LD_OPT$CORE_LIBS"; then
|
||||
ngx_libs=`echo $NGX_LD_OPT $CORE_LIBS \
|
||||
| sed -e "s/\//$ngx_regex_dirsep/g" -e "s/^/$ngx_long_regex_cont/"`
|
||||
|
@ -219,22 +185,13 @@ fi
|
|||
ngx_link=${CORE_LINK:+`echo $CORE_LINK \
|
||||
| sed -e "s/\//$ngx_regex_dirsep/g" -e "s/^/$ngx_long_regex_cont/"`}
|
||||
|
||||
ngx_main_link=${MAIN_LINK:+`echo $MAIN_LINK \
|
||||
| sed -e "s/\//$ngx_regex_dirsep/g" -e "s/^/$ngx_long_regex_cont/"`}
|
||||
|
||||
|
||||
cat << END >> $NGX_MAKEFILE
|
||||
|
||||
build: binary modules manpage
|
||||
|
||||
binary: $NGX_OBJS${ngx_dirsep}nginx$ngx_binext
|
||||
|
||||
$NGX_OBJS${ngx_dirsep}nginx$ngx_binext: $ngx_deps$ngx_spacer
|
||||
\$(LINK) $ngx_long_start$ngx_binout$NGX_OBJS${ngx_dirsep}nginx$ngx_binext$ngx_long_cont$ngx_objs$ngx_libs$ngx_link$ngx_main_link
|
||||
$NGX_OBJS${ngx_dirsep}nginx${ngx_binext}: $ngx_deps$ngx_spacer
|
||||
\$(LINK) ${ngx_long_start}${ngx_binout}$NGX_OBJS${ngx_dirsep}nginx$ngx_long_cont$ngx_objs$ngx_libs$ngx_link
|
||||
$ngx_rcc
|
||||
$ngx_long_end
|
||||
|
||||
modules:
|
||||
${ngx_long_end}
|
||||
END
|
||||
|
||||
|
||||
|
@ -283,7 +240,7 @@ if [ $HTTP = YES ]; then
|
|||
ngx_cc="\$(CC) $ngx_compile_opt \$(CFLAGS) $ngx_use_pch \$(ALL_INCS)"
|
||||
else
|
||||
ngx_cc="\$(CC) $ngx_compile_opt \$(CFLAGS) \$(CORE_INCS) \$(HTTP_INCS)"
|
||||
ngx_perl_cc="\$(CC) $ngx_compile_opt \$(NGX_PERL_CFLAGS)"
|
||||
ngx_perl_cc="\$(CC) $ngx_compile_opt \$(NGX_PERL_CFLAGS) "
|
||||
ngx_perl_cc="$ngx_perl_cc \$(CORE_INCS) \$(HTTP_INCS)"
|
||||
fi
|
||||
|
||||
|
@ -314,7 +271,7 @@ $ngx_obj: \$(CORE_DEPS) \$(HTTP_DEPS)$ngx_cont$ngx_src
|
|||
END
|
||||
|
||||
fi
|
||||
done
|
||||
done
|
||||
|
||||
fi
|
||||
|
||||
|
@ -344,48 +301,18 @@ $ngx_obj: \$(CORE_DEPS) \$(MAIL_DEPS)$ngx_cont$ngx_src
|
|||
$ngx_cc$ngx_tab$ngx_objout$ngx_obj$ngx_tab$ngx_src$NGX_AUX
|
||||
|
||||
END
|
||||
done
|
||||
|
||||
fi
|
||||
|
||||
|
||||
# the stream sources
|
||||
|
||||
if [ $STREAM = YES ]; then
|
||||
|
||||
if test -n "$NGX_PCH"; then
|
||||
ngx_cc="\$(CC) $ngx_compile_opt \$(CFLAGS) $ngx_use_pch \$(ALL_INCS)"
|
||||
else
|
||||
ngx_cc="\$(CC) $ngx_compile_opt \$(CFLAGS) \$(CORE_INCS) \$(STREAM_INCS)"
|
||||
fi
|
||||
|
||||
for ngx_src in $STREAM_SRCS
|
||||
do
|
||||
ngx_src=`echo $ngx_src | sed -e "s/\//$ngx_regex_dirsep/g"`
|
||||
ngx_obj=`echo $ngx_src \
|
||||
| sed -e "s#^\(.*\.\)cpp\\$#$ngx_objs_dir\1$ngx_objext#g" \
|
||||
-e "s#^\(.*\.\)cc\\$#$ngx_objs_dir\1$ngx_objext#g" \
|
||||
-e "s#^\(.*\.\)c\\$#$ngx_objs_dir\1$ngx_objext#g" \
|
||||
-e "s#^\(.*\.\)S\\$#$ngx_objs_dir\1$ngx_objext#g"`
|
||||
|
||||
cat << END >> $NGX_MAKEFILE
|
||||
|
||||
$ngx_obj: \$(CORE_DEPS) \$(STREAM_DEPS)$ngx_cont$ngx_src
|
||||
$ngx_cc$ngx_tab$ngx_objout$ngx_obj$ngx_tab$ngx_src$NGX_AUX
|
||||
|
||||
END
|
||||
done
|
||||
done
|
||||
|
||||
fi
|
||||
|
||||
|
||||
# the misc sources
|
||||
|
||||
if test -n "$MISC_SRCS"; then
|
||||
if test -n "$NGX_MISC_SRCS"; then
|
||||
|
||||
ngx_cc="\$(CC) $ngx_compile_opt \$(CFLAGS) $ngx_use_pch \$(ALL_INCS)"
|
||||
|
||||
for ngx_src in $MISC_SRCS
|
||||
for ngx_src in $NGX_MISC_SRCS
|
||||
do
|
||||
ngx_src=`echo $ngx_src | sed -e "s/\//$ngx_regex_dirsep/g"`
|
||||
ngx_obj=`echo $ngx_src \
|
||||
|
@ -400,7 +327,7 @@ $ngx_obj: \$(CORE_DEPS) $ngx_cont$ngx_src
|
|||
$ngx_cc$ngx_tab$ngx_objout$ngx_obj$ngx_tab$ngx_src$NGX_AUX
|
||||
|
||||
END
|
||||
done
|
||||
done
|
||||
|
||||
fi
|
||||
|
||||
|
@ -432,16 +359,16 @@ $ngx_obj: \$(ADDON_DEPS)$ngx_cont$ngx_src
|
|||
$ngx_cc$ngx_tab$ngx_objout$ngx_obj$ngx_tab$ngx_src$NGX_AUX
|
||||
|
||||
END
|
||||
done
|
||||
done
|
||||
|
||||
fi
|
||||
|
||||
|
||||
# the addons config.make
|
||||
|
||||
if test -n "$NGX_ADDONS$DYNAMIC_ADDONS"; then
|
||||
if test -n "$NGX_ADDONS"; then
|
||||
|
||||
for ngx_addon_dir in $NGX_ADDONS $DYNAMIC_ADDONS
|
||||
for ngx_addon_dir in $NGX_ADDONS
|
||||
do
|
||||
if test -f $ngx_addon_dir/config.make; then
|
||||
. $ngx_addon_dir/config.make
|
||||
|
@ -488,187 +415,3 @@ $ngx_pch
|
|||
END
|
||||
|
||||
fi
|
||||
|
||||
|
||||
# dynamic modules
|
||||
|
||||
if test -n "$NGX_PCH"; then
|
||||
ngx_cc="\$(CC) $ngx_compile_opt $ngx_pic_opt \$(CFLAGS) $ngx_use_pch \$(ALL_INCS)"
|
||||
else
|
||||
ngx_cc="\$(CC) $ngx_compile_opt $ngx_pic_opt \$(CFLAGS) \$(ALL_INCS)"
|
||||
ngx_perl_cc="\$(CC) $ngx_compile_opt $ngx_pic_opt \$(NGX_PERL_CFLAGS)"
|
||||
ngx_perl_cc="$ngx_perl_cc \$(ALL_INCS)"
|
||||
fi
|
||||
|
||||
for ngx_module in $DYNAMIC_MODULES
|
||||
do
|
||||
eval ngx_module_srcs="\$${ngx_module}_SRCS"
|
||||
eval ngx_module_shrd="\$${ngx_module}_SHRD"
|
||||
eval eval ngx_module_libs="\\\"\$${ngx_module}_LIBS\\\""
|
||||
|
||||
eval ngx_module_modules="\$${ngx_module}_MODULES"
|
||||
eval ngx_module_order="\$${ngx_module}_ORDER"
|
||||
|
||||
ngx_modules_c=$NGX_OBJS/${ngx_module}_modules.c
|
||||
|
||||
cat << END > $ngx_modules_c
|
||||
|
||||
#include <ngx_config.h>
|
||||
#include <ngx_core.h>
|
||||
|
||||
END
|
||||
|
||||
for mod in $ngx_module_modules
|
||||
do
|
||||
echo "extern ngx_module_t $mod;" >> $ngx_modules_c
|
||||
done
|
||||
|
||||
echo >> $ngx_modules_c
|
||||
echo 'ngx_module_t *ngx_modules[] = {' >> $ngx_modules_c
|
||||
|
||||
for mod in $ngx_module_modules
|
||||
do
|
||||
echo " &$mod," >> $ngx_modules_c
|
||||
done
|
||||
|
||||
cat << END >> $ngx_modules_c
|
||||
NULL
|
||||
};
|
||||
|
||||
END
|
||||
|
||||
echo 'char *ngx_module_names[] = {' >> $ngx_modules_c
|
||||
|
||||
for mod in $ngx_module_modules
|
||||
do
|
||||
echo " \"$mod\"," >> $ngx_modules_c
|
||||
done
|
||||
|
||||
cat << END >> $ngx_modules_c
|
||||
NULL
|
||||
};
|
||||
|
||||
END
|
||||
|
||||
echo 'char *ngx_module_order[] = {' >> $ngx_modules_c
|
||||
|
||||
for mod in $ngx_module_order
|
||||
do
|
||||
echo " \"$mod\"," >> $ngx_modules_c
|
||||
done
|
||||
|
||||
cat << END >> $ngx_modules_c
|
||||
NULL
|
||||
};
|
||||
|
||||
END
|
||||
|
||||
ngx_modules_c=`echo $ngx_modules_c | sed -e "s/\//$ngx_regex_dirsep/g"`
|
||||
|
||||
ngx_modules_obj=`echo $ngx_modules_c \
|
||||
| sed -e "s/\(.*\.\)c/\1$ngx_objext/"`
|
||||
|
||||
ngx_module_objs=
|
||||
for ngx_src in $ngx_module_srcs $ngx_module_shrd
|
||||
do
|
||||
case "$ngx_src" in
|
||||
src/*)
|
||||
ngx_obj=$ngx_src
|
||||
;;
|
||||
*)
|
||||
ngx_obj="addon/`basename \`dirname $ngx_src\``"
|
||||
mkdir -p $NGX_OBJS/$ngx_obj
|
||||
ngx_obj="$ngx_obj/`basename $ngx_src`"
|
||||
;;
|
||||
esac
|
||||
|
||||
ngx_module_objs="$ngx_module_objs $ngx_obj"
|
||||
done
|
||||
|
||||
ngx_module_objs=`echo $ngx_module_objs \
|
||||
| sed -e "s#\([^ ]*\.\)cpp#$NGX_OBJS\/\1$ngx_objext#g" \
|
||||
-e "s#\([^ ]*\.\)cc#$NGX_OBJS\/\1$ngx_objext#g" \
|
||||
-e "s#\([^ ]*\.\)c#$NGX_OBJS\/\1$ngx_objext#g" \
|
||||
-e "s#\([^ ]*\.\)S#$NGX_OBJS\/\1$ngx_objext#g"`
|
||||
|
||||
ngx_deps=`echo $ngx_module_objs $ngx_modules_obj $LINK_DEPS \
|
||||
| sed -e "s/ *\([^ ][^ ]*\)/$ngx_regex_cont\1/g" \
|
||||
-e "s/\//$ngx_regex_dirsep/g"`
|
||||
|
||||
ngx_objs=`echo $ngx_module_objs $ngx_modules_obj \
|
||||
| sed -e "s/ *\([^ ][^ ]*\)/$ngx_long_regex_cont\1/g" \
|
||||
-e "s/\//$ngx_regex_dirsep/g"`
|
||||
|
||||
ngx_obj=$NGX_OBJS$ngx_dirsep$ngx_module$ngx_modext
|
||||
|
||||
if [ "$NGX_PLATFORM" = win32 ]; then
|
||||
ngx_module_libs="$CORE_LIBS $ngx_module_libs"
|
||||
fi
|
||||
|
||||
ngx_libs=
|
||||
if test -n "$NGX_LD_OPT$ngx_module_libs"; then
|
||||
ngx_libs=`echo $NGX_LD_OPT $ngx_module_libs \
|
||||
| sed -e "s/\//$ngx_regex_dirsep/g" -e "s/^/$ngx_long_regex_cont/"`
|
||||
fi
|
||||
|
||||
ngx_link=${CORE_LINK:+`echo $CORE_LINK \
|
||||
| sed -e "s/\//$ngx_regex_dirsep/g" -e "s/^/$ngx_long_regex_cont/"`}
|
||||
|
||||
ngx_module_link=${MODULE_LINK:+`echo $MODULE_LINK \
|
||||
| sed -e "s/\//$ngx_regex_dirsep/g" -e "s/^/$ngx_long_regex_cont/"`}
|
||||
|
||||
|
||||
cat << END >> $NGX_MAKEFILE
|
||||
|
||||
modules: $ngx_obj
|
||||
|
||||
$ngx_obj: $ngx_deps$ngx_spacer
|
||||
\$(LINK) $ngx_long_start$ngx_binout$ngx_obj$ngx_long_cont$ngx_objs$ngx_libs$ngx_link$ngx_module_link
|
||||
$ngx_long_end
|
||||
|
||||
$ngx_modules_obj: \$(CORE_DEPS)$ngx_cont$ngx_modules_c
|
||||
$ngx_cc$ngx_tab$ngx_objout$ngx_modules_obj$ngx_tab$ngx_modules_c$NGX_AUX
|
||||
|
||||
END
|
||||
|
||||
for ngx_source in $ngx_module_srcs
|
||||
do
|
||||
case "$ngx_source" in
|
||||
src/*)
|
||||
ngx_obj=`echo $ngx_source | sed -e "s/\//$ngx_regex_dirsep/g"`
|
||||
;;
|
||||
*)
|
||||
ngx_obj="addon/`basename \`dirname $ngx_source\``"
|
||||
ngx_obj=`echo $ngx_obj/\`basename $ngx_source\` \
|
||||
| sed -e "s/\//$ngx_regex_dirsep/g"`
|
||||
;;
|
||||
esac
|
||||
|
||||
ngx_obj=`echo $ngx_obj \
|
||||
| sed -e "s#^\(.*\.\)cpp\\$#$ngx_objs_dir\1$ngx_objext#g" \
|
||||
-e "s#^\(.*\.\)cc\\$#$ngx_objs_dir\1$ngx_objext#g" \
|
||||
-e "s#^\(.*\.\)c\\$#$ngx_objs_dir\1$ngx_objext#g" \
|
||||
-e "s#^\(.*\.\)S\\$#$ngx_objs_dir\1$ngx_objext#g"`
|
||||
|
||||
ngx_src=`echo $ngx_source | sed -e "s/\//$ngx_regex_dirsep/g"`
|
||||
|
||||
if [ $ngx_source = src/http/modules/perl/ngx_http_perl_module.c ]; then
|
||||
|
||||
cat << END >> $NGX_MAKEFILE
|
||||
|
||||
$ngx_obj: \$(ADDON_DEPS)$ngx_cont$ngx_src
|
||||
$ngx_perl_cc$ngx_tab$ngx_objout$ngx_obj$ngx_tab$ngx_src$NGX_AUX
|
||||
|
||||
END
|
||||
else
|
||||
|
||||
cat << END >> $NGX_MAKEFILE
|
||||
|
||||
$ngx_obj: \$(ADDON_DEPS)$ngx_cont$ngx_src
|
||||
$ngx_cc$ngx_tab$ngx_objout$ngx_obj$ngx_tab$ngx_src$NGX_AUX
|
||||
|
||||
END
|
||||
|
||||
fi
|
||||
done
|
||||
done
|
||||
|
|
178
auto/module
178
auto/module
|
@ -1,178 +0,0 @@
|
|||
|
||||
# Copyright (C) Ruslan Ermilov
|
||||
# Copyright (C) Nginx, Inc.
|
||||
|
||||
|
||||
case $ngx_module_type in
|
||||
HTTP_*) ngx_var=HTTP ;;
|
||||
*) ngx_var=$ngx_module_type ;;
|
||||
esac
|
||||
|
||||
|
||||
if [ "$ngx_module_link" = DYNAMIC ]; then
|
||||
|
||||
for ngx_module in $ngx_module_name; do
|
||||
# extract the first name
|
||||
break
|
||||
done
|
||||
|
||||
DYNAMIC_MODULES="$DYNAMIC_MODULES $ngx_module"
|
||||
|
||||
eval ${ngx_module}_MODULES=\"$ngx_module_name\"
|
||||
|
||||
if [ -z "$ngx_module_order" -a \
|
||||
\( "$ngx_module_type" = "HTTP_FILTER" \
|
||||
-o "$ngx_module_type" = "HTTP_AUX_FILTER" \) ]
|
||||
then
|
||||
eval ${ngx_module}_ORDER=\"$ngx_module_name \
|
||||
ngx_http_copy_filter_module\"
|
||||
else
|
||||
eval ${ngx_module}_ORDER=\"$ngx_module_order\"
|
||||
fi
|
||||
|
||||
srcs=
|
||||
shrd=
|
||||
for src in $ngx_module_srcs
|
||||
do
|
||||
found=no
|
||||
for old in $DYNAMIC_MODULES_SRCS
|
||||
do
|
||||
if [ $src = $old ]; then
|
||||
found=yes
|
||||
break
|
||||
fi
|
||||
done
|
||||
|
||||
if [ $found = no ]; then
|
||||
srcs="$srcs $src"
|
||||
else
|
||||
shrd="$shrd $src"
|
||||
fi
|
||||
done
|
||||
eval ${ngx_module}_SRCS=\"$srcs\"
|
||||
eval ${ngx_module}_SHRD=\"$shrd\"
|
||||
|
||||
DYNAMIC_MODULES_SRCS="$DYNAMIC_MODULES_SRCS $srcs"
|
||||
|
||||
if test -n "$ngx_module_incs"; then
|
||||
CORE_INCS="$CORE_INCS $ngx_module_incs"
|
||||
fi
|
||||
|
||||
if test -n "$ngx_module_deps"; then
|
||||
NGX_ADDON_DEPS="$NGX_ADDON_DEPS $ngx_module_deps"
|
||||
fi
|
||||
|
||||
libs=
|
||||
for lib in $ngx_module_libs
|
||||
do
|
||||
case $lib in
|
||||
|
||||
LIBXSLT | LIBGD | GEOIP | PERL)
|
||||
libs="$libs \$NGX_LIB_$lib"
|
||||
|
||||
if eval [ "\$USE_${lib}" = NO ] ; then
|
||||
eval USE_${lib}=DYNAMIC
|
||||
fi
|
||||
;;
|
||||
|
||||
PCRE | OPENSSL | ZLIB)
|
||||
eval USE_${lib}=YES
|
||||
;;
|
||||
|
||||
MD5 | SHA1)
|
||||
# obsolete
|
||||
;;
|
||||
|
||||
*)
|
||||
libs="$libs $lib"
|
||||
;;
|
||||
|
||||
esac
|
||||
done
|
||||
eval ${ngx_module}_LIBS=\'$libs\'
|
||||
|
||||
elif [ "$ngx_module_link" = YES ]; then
|
||||
|
||||
eval ${ngx_module_type}_MODULES=\"\$${ngx_module_type}_MODULES \
|
||||
$ngx_module_name\"
|
||||
|
||||
eval ${ngx_var}_SRCS=\"\$${ngx_var}_SRCS $ngx_module_srcs\"
|
||||
|
||||
if test -n "$ngx_module_incs"; then
|
||||
eval ${ngx_var}_INCS=\"\$${ngx_var}_INCS $ngx_module_incs\"
|
||||
fi
|
||||
|
||||
if test -n "$ngx_module_deps"; then
|
||||
eval ${ngx_var}_DEPS=\"\$${ngx_var}_DEPS $ngx_module_deps\"
|
||||
fi
|
||||
|
||||
for lib in $ngx_module_libs
|
||||
do
|
||||
case $lib in
|
||||
|
||||
PCRE | OPENSSL | ZLIB | LIBXSLT | LIBGD | PERL | GEOIP)
|
||||
eval USE_${lib}=YES
|
||||
;;
|
||||
|
||||
MD5 | SHA1)
|
||||
# obsolete
|
||||
;;
|
||||
|
||||
*)
|
||||
CORE_LIBS="$CORE_LIBS $lib"
|
||||
;;
|
||||
|
||||
esac
|
||||
done
|
||||
|
||||
elif [ "$ngx_module_link" = ADDON ]; then
|
||||
|
||||
eval ${ngx_module_type}_MODULES=\"\$${ngx_module_type}_MODULES \
|
||||
$ngx_module_name\"
|
||||
|
||||
srcs=
|
||||
for src in $ngx_module_srcs
|
||||
do
|
||||
found=no
|
||||
for old in $NGX_ADDON_SRCS
|
||||
do
|
||||
if [ $src = $old ]; then
|
||||
found=yes
|
||||
break
|
||||
fi
|
||||
done
|
||||
|
||||
if [ $found = no ]; then
|
||||
srcs="$srcs $src"
|
||||
fi
|
||||
done
|
||||
|
||||
NGX_ADDON_SRCS="$NGX_ADDON_SRCS $srcs"
|
||||
|
||||
if test -n "$ngx_module_incs"; then
|
||||
eval ${ngx_var}_INCS=\"\$${ngx_var}_INCS $ngx_module_incs\"
|
||||
fi
|
||||
|
||||
if test -n "$ngx_module_deps"; then
|
||||
NGX_ADDON_DEPS="$NGX_ADDON_DEPS $ngx_module_deps"
|
||||
fi
|
||||
|
||||
for lib in $ngx_module_libs
|
||||
do
|
||||
case $lib in
|
||||
|
||||
PCRE | OPENSSL | ZLIB | LIBXSLT | LIBGD | PERL | GEOIP)
|
||||
eval USE_${lib}=YES
|
||||
;;
|
||||
|
||||
MD5 | SHA1)
|
||||
# obsolete
|
||||
;;
|
||||
|
||||
*)
|
||||
CORE_LIBS="$CORE_LIBS $lib"
|
||||
;;
|
||||
|
||||
esac
|
||||
done
|
||||
fi
|
1767
auto/modules
1767
auto/modules
File diff suppressed because it is too large
Load Diff
254
auto/options
254
auto/options
|
@ -7,7 +7,6 @@ help=no
|
|||
|
||||
NGX_PREFIX=
|
||||
NGX_SBIN_PATH=
|
||||
NGX_MODULES_PATH=
|
||||
NGX_CONF_PREFIX=
|
||||
NGX_CONF_PATH=
|
||||
NGX_ERROR_LOG_PATH=
|
||||
|
@ -15,7 +14,6 @@ NGX_PID_PATH=
|
|||
NGX_LOCK_PATH=
|
||||
NGX_USER=
|
||||
NGX_GROUP=
|
||||
NGX_BUILD=
|
||||
|
||||
CC=${CC:-cc}
|
||||
CPP=
|
||||
|
@ -31,6 +29,7 @@ NGX_RPATH=NO
|
|||
NGX_TEST_BUILD_DEVPOLL=NO
|
||||
NGX_TEST_BUILD_EVENTPORT=NO
|
||||
NGX_TEST_BUILD_EPOLL=NO
|
||||
NGX_TEST_BUILD_RTSIG=NO
|
||||
NGX_TEST_BUILD_SOLARIS_SENDFILEV=NO
|
||||
|
||||
NGX_PLATFORM=
|
||||
|
@ -38,14 +37,15 @@ NGX_WINE=
|
|||
|
||||
EVENT_FOUND=NO
|
||||
|
||||
EVENT_RTSIG=NO
|
||||
EVENT_SELECT=NO
|
||||
EVENT_POLL=NO
|
||||
EVENT_AIO=NO
|
||||
|
||||
USE_THREADS=NO
|
||||
|
||||
NGX_FILE_AIO=NO
|
||||
|
||||
QUIC_BPF=NO
|
||||
NGX_IPV6=NO
|
||||
|
||||
HTTP=YES
|
||||
|
||||
|
@ -60,9 +60,9 @@ HTTP_CACHE=YES
|
|||
HTTP_CHARSET=YES
|
||||
HTTP_GZIP=YES
|
||||
HTTP_SSL=NO
|
||||
HTTP_V2=NO
|
||||
HTTP_V3=NO
|
||||
HTTP_SPDY=NO
|
||||
HTTP_SSI=YES
|
||||
HTTP_POSTPONE=NO
|
||||
HTTP_REALIP=NO
|
||||
HTTP_XSLT=NO
|
||||
HTTP_IMAGE_FILTER=NO
|
||||
|
@ -72,9 +72,7 @@ HTTP_DAV=NO
|
|||
HTTP_ACCESS=YES
|
||||
HTTP_AUTH_BASIC=YES
|
||||
HTTP_AUTH_REQUEST=NO
|
||||
HTTP_MIRROR=YES
|
||||
HTTP_USERID=YES
|
||||
HTTP_SLICE=NO
|
||||
HTTP_AUTOINDEX=YES
|
||||
HTTP_RANDOM_INDEX=NO
|
||||
HTTP_STATUS=NO
|
||||
|
@ -88,7 +86,6 @@ HTTP_PROXY=YES
|
|||
HTTP_FASTCGI=YES
|
||||
HTTP_UWSGI=YES
|
||||
HTTP_SCGI=YES
|
||||
HTTP_GRPC=YES
|
||||
HTTP_PERL=NO
|
||||
HTTP_MEMCACHED=YES
|
||||
HTTP_LIMIT_CONN=YES
|
||||
|
@ -101,12 +98,9 @@ HTTP_FLV=NO
|
|||
HTTP_MP4=NO
|
||||
HTTP_GUNZIP=NO
|
||||
HTTP_GZIP_STATIC=NO
|
||||
HTTP_UPSTREAM_HASH=YES
|
||||
HTTP_UPSTREAM_IP_HASH=YES
|
||||
HTTP_UPSTREAM_LEAST_CONN=YES
|
||||
HTTP_UPSTREAM_RANDOM=YES
|
||||
HTTP_UPSTREAM_KEEPALIVE=YES
|
||||
HTTP_UPSTREAM_ZONE=YES
|
||||
|
||||
# STUB
|
||||
HTTP_STUB_STATUS=NO
|
||||
|
@ -117,45 +111,27 @@ MAIL_POP3=YES
|
|||
MAIL_IMAP=YES
|
||||
MAIL_SMTP=YES
|
||||
|
||||
STREAM=NO
|
||||
STREAM_SSL=NO
|
||||
STREAM_QUIC=NO
|
||||
STREAM_REALIP=NO
|
||||
STREAM_LIMIT_CONN=YES
|
||||
STREAM_ACCESS=YES
|
||||
STREAM_GEO=YES
|
||||
STREAM_GEOIP=NO
|
||||
STREAM_MAP=YES
|
||||
STREAM_SPLIT_CLIENTS=YES
|
||||
STREAM_RETURN=YES
|
||||
STREAM_SET=YES
|
||||
STREAM_UPSTREAM_HASH=YES
|
||||
STREAM_UPSTREAM_LEAST_CONN=YES
|
||||
STREAM_UPSTREAM_RANDOM=YES
|
||||
STREAM_UPSTREAM_ZONE=YES
|
||||
STREAM_SSL_PREREAD=NO
|
||||
|
||||
DYNAMIC_MODULES=
|
||||
DYNAMIC_MODULES_SRCS=
|
||||
|
||||
NGX_ADDONS=
|
||||
NGX_ADDON_SRCS=
|
||||
NGX_ADDON_DEPS=
|
||||
DYNAMIC_ADDONS=
|
||||
|
||||
NGX_COMPAT=NO
|
||||
|
||||
USE_PCRE=NO
|
||||
PCRE=NONE
|
||||
PCRE_OPT=
|
||||
PCRE_CONF_OPT=
|
||||
PCRE_JIT=NO
|
||||
PCRE2=YES
|
||||
|
||||
USE_OPENSSL=NO
|
||||
USE_OPENSSL_QUIC=NO
|
||||
OPENSSL=NONE
|
||||
|
||||
USE_MD5=NO
|
||||
MD5=NONE
|
||||
MD5_OPT=
|
||||
MD5_ASM=NO
|
||||
|
||||
USE_SHA1=NO
|
||||
SHA1=NONE
|
||||
SHA1_OPT=
|
||||
SHA1_ASM=NO
|
||||
|
||||
USE_ZLIB=NO
|
||||
ZLIB=NONE
|
||||
ZLIB_OPT=
|
||||
|
@ -166,13 +142,10 @@ NGX_PERL=perl
|
|||
|
||||
USE_LIBXSLT=NO
|
||||
USE_LIBGD=NO
|
||||
USE_GEOIP=NO
|
||||
|
||||
NGX_GOOGLE_PERFTOOLS=NO
|
||||
NGX_CPP_TEST=NO
|
||||
|
||||
SO_COOKIE_FOUND=NO
|
||||
|
||||
NGX_LIBATOMIC=NO
|
||||
|
||||
NGX_CPU_CACHE_LINE=
|
||||
|
@ -196,7 +169,6 @@ do
|
|||
--prefix=) NGX_PREFIX="!" ;;
|
||||
--prefix=*) NGX_PREFIX="$value" ;;
|
||||
--sbin-path=*) NGX_SBIN_PATH="$value" ;;
|
||||
--modules-path=*) NGX_MODULES_PATH="$value" ;;
|
||||
--conf-path=*) NGX_CONF_PATH="$value" ;;
|
||||
--error-log-path=*) NGX_ERROR_LOG_PATH="$value";;
|
||||
--pid-path=*) NGX_PID_PATH="$value" ;;
|
||||
|
@ -206,24 +178,20 @@ do
|
|||
|
||||
--crossbuild=*) NGX_PLATFORM="$value" ;;
|
||||
|
||||
--build=*) NGX_BUILD="$value" ;;
|
||||
--builddir=*) NGX_OBJS="$value" ;;
|
||||
|
||||
--with-rtsig_module) EVENT_RTSIG=YES ;;
|
||||
--with-select_module) EVENT_SELECT=YES ;;
|
||||
--without-select_module) EVENT_SELECT=NONE ;;
|
||||
--with-poll_module) EVENT_POLL=YES ;;
|
||||
--without-poll_module) EVENT_POLL=NONE ;;
|
||||
--with-aio_module) EVENT_AIO=YES ;;
|
||||
|
||||
--with-threads) USE_THREADS=YES ;;
|
||||
#--with-threads=*) USE_THREADS="$value" ;;
|
||||
#--with-threads) USE_THREADS="pthreads" ;;
|
||||
|
||||
--with-file-aio) NGX_FILE_AIO=YES ;;
|
||||
|
||||
--without-quic_bpf_module) QUIC_BPF=NONE ;;
|
||||
|
||||
--with-ipv6)
|
||||
NGX_POST_CONF_MSG="$NGX_POST_CONF_MSG
|
||||
$0: warning: the \"--with-ipv6\" option is deprecated"
|
||||
;;
|
||||
--with-ipv6) NGX_IPV6=YES ;;
|
||||
|
||||
--without-http) HTTP=NO ;;
|
||||
--without-http-cache) HTTP_CACHE=NO ;;
|
||||
|
@ -236,18 +204,12 @@ $0: warning: the \"--with-ipv6\" option is deprecated"
|
|||
--http-scgi-temp-path=*) NGX_HTTP_SCGI_TEMP_PATH="$value" ;;
|
||||
|
||||
--with-http_ssl_module) HTTP_SSL=YES ;;
|
||||
--with-http_v2_module) HTTP_V2=YES ;;
|
||||
--with-http_v3_module) HTTP_V3=YES ;;
|
||||
--with-http_spdy_module) HTTP_SPDY=YES ;;
|
||||
--with-http_realip_module) HTTP_REALIP=YES ;;
|
||||
--with-http_addition_module) HTTP_ADDITION=YES ;;
|
||||
--with-http_xslt_module) HTTP_XSLT=YES ;;
|
||||
--with-http_xslt_module=dynamic) HTTP_XSLT=DYNAMIC ;;
|
||||
--with-http_image_filter_module) HTTP_IMAGE_FILTER=YES ;;
|
||||
--with-http_image_filter_module=dynamic)
|
||||
HTTP_IMAGE_FILTER=DYNAMIC ;;
|
||||
--with-http_geoip_module) HTTP_GEOIP=YES ;;
|
||||
--with-http_geoip_module=dynamic)
|
||||
HTTP_GEOIP=DYNAMIC ;;
|
||||
--with-http_sub_module) HTTP_SUB=YES ;;
|
||||
--with-http_dav_module) HTTP_DAV=YES ;;
|
||||
--with-http_flv_module) HTTP_FLV=YES ;;
|
||||
|
@ -258,7 +220,6 @@ $0: warning: the \"--with-ipv6\" option is deprecated"
|
|||
--with-http_random_index_module) HTTP_RANDOM_INDEX=YES ;;
|
||||
--with-http_secure_link_module) HTTP_SECURE_LINK=YES ;;
|
||||
--with-http_degradation_module) HTTP_DEGRADATION=YES ;;
|
||||
--with-http_slice_module) HTTP_SLICE=YES ;;
|
||||
|
||||
--without-http_charset_module) HTTP_CHARSET=NO ;;
|
||||
--without-http_gzip_module) HTTP_GZIP=NO ;;
|
||||
|
@ -266,7 +227,6 @@ $0: warning: the \"--with-ipv6\" option is deprecated"
|
|||
--without-http_userid_module) HTTP_USERID=NO ;;
|
||||
--without-http_access_module) HTTP_ACCESS=NO ;;
|
||||
--without-http_auth_basic_module) HTTP_AUTH_BASIC=NO ;;
|
||||
--without-http_mirror_module) HTTP_MIRROR=NO ;;
|
||||
--without-http_autoindex_module) HTTP_AUTOINDEX=NO ;;
|
||||
--without-http_status_module) HTTP_STATUS=NO ;;
|
||||
--without-http_geo_module) HTTP_GEO=NO ;;
|
||||
|
@ -278,23 +238,23 @@ $0: warning: the \"--with-ipv6\" option is deprecated"
|
|||
--without-http_fastcgi_module) HTTP_FASTCGI=NO ;;
|
||||
--without-http_uwsgi_module) HTTP_UWSGI=NO ;;
|
||||
--without-http_scgi_module) HTTP_SCGI=NO ;;
|
||||
--without-http_grpc_module) HTTP_GRPC=NO ;;
|
||||
--without-http_memcached_module) HTTP_MEMCACHED=NO ;;
|
||||
--without-http_limit_zone_module)
|
||||
HTTP_LIMIT_CONN=NO
|
||||
NGX_POST_CONF_MSG="$NGX_POST_CONF_MSG
|
||||
$0: warning: the \"--without-http_limit_zone_module\" option is deprecated, \
|
||||
use the \"--without-http_limit_conn_module\" option instead"
|
||||
;;
|
||||
--without-http_limit_conn_module) HTTP_LIMIT_CONN=NO ;;
|
||||
--without-http_limit_req_module) HTTP_LIMIT_REQ=NO ;;
|
||||
--without-http_empty_gif_module) HTTP_EMPTY_GIF=NO ;;
|
||||
--without-http_browser_module) HTTP_BROWSER=NO ;;
|
||||
--without-http_upstream_hash_module) HTTP_UPSTREAM_HASH=NO ;;
|
||||
--without-http_upstream_ip_hash_module) HTTP_UPSTREAM_IP_HASH=NO ;;
|
||||
--without-http_upstream_least_conn_module)
|
||||
HTTP_UPSTREAM_LEAST_CONN=NO ;;
|
||||
--without-http_upstream_random_module)
|
||||
HTTP_UPSTREAM_RANDOM=NO ;;
|
||||
--without-http_upstream_keepalive_module) HTTP_UPSTREAM_KEEPALIVE=NO ;;
|
||||
--without-http_upstream_zone_module) HTTP_UPSTREAM_ZONE=NO ;;
|
||||
|
||||
--with-http_perl_module) HTTP_PERL=YES ;;
|
||||
--with-http_perl_module=dynamic) HTTP_PERL=DYNAMIC ;;
|
||||
--with-perl_modules_path=*) NGX_PERL_MODULES="$value" ;;
|
||||
--with-perl=*) NGX_PERL="$value" ;;
|
||||
|
||||
|
@ -302,60 +262,18 @@ $0: warning: the \"--with-ipv6\" option is deprecated"
|
|||
--with-http_stub_status_module) HTTP_STUB_STATUS=YES ;;
|
||||
|
||||
--with-mail) MAIL=YES ;;
|
||||
--with-mail=dynamic) MAIL=DYNAMIC ;;
|
||||
--with-mail_ssl_module) MAIL_SSL=YES ;;
|
||||
# STUB
|
||||
--with-imap)
|
||||
MAIL=YES
|
||||
NGX_POST_CONF_MSG="$NGX_POST_CONF_MSG
|
||||
$0: warning: the \"--with-imap\" option is deprecated, \
|
||||
use the \"--with-mail\" option instead"
|
||||
;;
|
||||
--with-imap_ssl_module)
|
||||
MAIL_SSL=YES
|
||||
NGX_POST_CONF_MSG="$NGX_POST_CONF_MSG
|
||||
$0: warning: the \"--with-imap_ssl_module\" option is deprecated, \
|
||||
use the \"--with-mail_ssl_module\" option instead"
|
||||
;;
|
||||
--with-imap) MAIL=YES ;;
|
||||
--with-imap_ssl_module) MAIL_SSL=YES ;;
|
||||
--without-mail_pop3_module) MAIL_POP3=NO ;;
|
||||
--without-mail_imap_module) MAIL_IMAP=NO ;;
|
||||
--without-mail_smtp_module) MAIL_SMTP=NO ;;
|
||||
|
||||
--with-stream) STREAM=YES ;;
|
||||
--with-stream=dynamic) STREAM=DYNAMIC ;;
|
||||
--with-stream_ssl_module) STREAM_SSL=YES ;;
|
||||
--with-stream_quic_module) STREAM_QUIC=YES ;;
|
||||
--with-stream_realip_module) STREAM_REALIP=YES ;;
|
||||
--with-stream_geoip_module) STREAM_GEOIP=YES ;;
|
||||
--with-stream_geoip_module=dynamic)
|
||||
STREAM_GEOIP=DYNAMIC ;;
|
||||
--with-stream_ssl_preread_module)
|
||||
STREAM_SSL_PREREAD=YES ;;
|
||||
--without-stream_limit_conn_module)
|
||||
STREAM_LIMIT_CONN=NO ;;
|
||||
--without-stream_access_module) STREAM_ACCESS=NO ;;
|
||||
--without-stream_geo_module) STREAM_GEO=NO ;;
|
||||
--without-stream_map_module) STREAM_MAP=NO ;;
|
||||
--without-stream_split_clients_module)
|
||||
STREAM_SPLIT_CLIENTS=NO ;;
|
||||
--without-stream_return_module) STREAM_RETURN=NO ;;
|
||||
--without-stream_set_module) STREAM_SET=NO ;;
|
||||
--without-stream_upstream_hash_module)
|
||||
STREAM_UPSTREAM_HASH=NO ;;
|
||||
--without-stream_upstream_least_conn_module)
|
||||
STREAM_UPSTREAM_LEAST_CONN=NO ;;
|
||||
--without-stream_upstream_random_module)
|
||||
STREAM_UPSTREAM_RANDOM=NO ;;
|
||||
--without-stream_upstream_zone_module)
|
||||
STREAM_UPSTREAM_ZONE=NO ;;
|
||||
|
||||
--with-google_perftools_module) NGX_GOOGLE_PERFTOOLS=YES ;;
|
||||
--with-cpp_test_module) NGX_CPP_TEST=YES ;;
|
||||
|
||||
--add-module=*) NGX_ADDONS="$NGX_ADDONS $value" ;;
|
||||
--add-dynamic-module=*) DYNAMIC_ADDONS="$DYNAMIC_ADDONS $value" ;;
|
||||
|
||||
--with-compat) NGX_COMPAT=YES ;;
|
||||
|
||||
--with-cc=*) CC="$value" ;;
|
||||
--with-cpp=*) CPP="$value" ;;
|
||||
|
@ -369,36 +287,17 @@ use the \"--with-mail_ssl_module\" option instead"
|
|||
--with-pcre=*) PCRE="$value" ;;
|
||||
--with-pcre-opt=*) PCRE_OPT="$value" ;;
|
||||
--with-pcre-jit) PCRE_JIT=YES ;;
|
||||
--without-pcre2) PCRE2=DISABLED ;;
|
||||
|
||||
--with-openssl=*) OPENSSL="$value" ;;
|
||||
--with-openssl-opt=*) OPENSSL_OPT="$value" ;;
|
||||
|
||||
--with-md5=*)
|
||||
NGX_POST_CONF_MSG="$NGX_POST_CONF_MSG
|
||||
$0: warning: the \"--with-md5\" option is deprecated"
|
||||
;;
|
||||
--with-md5-opt=*)
|
||||
NGX_POST_CONF_MSG="$NGX_POST_CONF_MSG
|
||||
$0: warning: the \"--with-md5-opt\" option is deprecated"
|
||||
;;
|
||||
--with-md5-asm)
|
||||
NGX_POST_CONF_MSG="$NGX_POST_CONF_MSG
|
||||
$0: warning: the \"--with-md5-asm\" option is deprecated"
|
||||
;;
|
||||
--with-md5=*) MD5="$value" ;;
|
||||
--with-md5-opt=*) MD5_OPT="$value" ;;
|
||||
--with-md5-asm) MD5_ASM=YES ;;
|
||||
|
||||
--with-sha1=*)
|
||||
NGX_POST_CONF_MSG="$NGX_POST_CONF_MSG
|
||||
$0: warning: the \"--with-sha1\" option is deprecated"
|
||||
;;
|
||||
--with-sha1-opt=*)
|
||||
NGX_POST_CONF_MSG="$NGX_POST_CONF_MSG
|
||||
$0: warning: the \"--with-sha1-opt\" option is deprecated"
|
||||
;;
|
||||
--with-sha1-asm)
|
||||
NGX_POST_CONF_MSG="$NGX_POST_CONF_MSG
|
||||
$0: warning: the \"--with-sha1-asm\" option is deprecated"
|
||||
;;
|
||||
--with-sha1=*) SHA1="$value" ;;
|
||||
--with-sha1-opt=*) SHA1_OPT="$value" ;;
|
||||
--with-sha1-asm) SHA1_ASM=YES ;;
|
||||
|
||||
--with-zlib=*) ZLIB="$value" ;;
|
||||
--with-zlib-opt=*) ZLIB_OPT="$value" ;;
|
||||
|
@ -410,6 +309,7 @@ $0: warning: the \"--with-sha1-asm\" option is deprecated"
|
|||
--test-build-devpoll) NGX_TEST_BUILD_DEVPOLL=YES ;;
|
||||
--test-build-eventport) NGX_TEST_BUILD_EVENTPORT=YES ;;
|
||||
--test-build-epoll) NGX_TEST_BUILD_EPOLL=YES ;;
|
||||
--test-build-rtsig) NGX_TEST_BUILD_RTSIG=YES ;;
|
||||
--test-build-solaris-sendfilev) NGX_TEST_BUILD_SOLARIS_SENDFILEV=YES ;;
|
||||
|
||||
*)
|
||||
|
@ -431,7 +331,6 @@ cat << END
|
|||
|
||||
--prefix=PATH set installation prefix
|
||||
--sbin-path=PATH set nginx binary pathname
|
||||
--modules-path=PATH set modules path
|
||||
--conf-path=PATH set nginx.conf pathname
|
||||
--error-log-path=PATH set error log pathname
|
||||
--pid-path=PATH set nginx.pid pathname
|
||||
|
@ -442,32 +341,24 @@ cat << END
|
|||
--group=GROUP set non-privileged group for
|
||||
worker processes
|
||||
|
||||
--build=NAME set build name
|
||||
--builddir=DIR set 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
|
||||
|
||||
--without-quic_bpf_module disable ngx_quic_bpf_module
|
||||
--with-ipv6 enable IPv6 support
|
||||
|
||||
--with-http_ssl_module enable ngx_http_ssl_module
|
||||
--with-http_v2_module enable ngx_http_v2_module
|
||||
--with-http_v3_module enable ngx_http_v3_module
|
||||
--with-http_spdy_module enable ngx_http_spdy_module
|
||||
--with-http_realip_module enable ngx_http_realip_module
|
||||
--with-http_addition_module enable ngx_http_addition_module
|
||||
--with-http_xslt_module enable ngx_http_xslt_module
|
||||
--with-http_xslt_module=dynamic enable dynamic ngx_http_xslt_module
|
||||
--with-http_image_filter_module enable ngx_http_image_filter_module
|
||||
--with-http_image_filter_module=dynamic
|
||||
enable dynamic ngx_http_image_filter_module
|
||||
--with-http_geoip_module enable ngx_http_geoip_module
|
||||
--with-http_geoip_module=dynamic enable dynamic ngx_http_geoip_module
|
||||
--with-http_sub_module enable ngx_http_sub_module
|
||||
--with-http_dav_module enable ngx_http_dav_module
|
||||
--with-http_flv_module enable ngx_http_flv_module
|
||||
|
@ -478,7 +369,6 @@ cat << END
|
|||
--with-http_random_index_module enable ngx_http_random_index_module
|
||||
--with-http_secure_link_module enable ngx_http_secure_link_module
|
||||
--with-http_degradation_module enable ngx_http_degradation_module
|
||||
--with-http_slice_module enable ngx_http_slice_module
|
||||
--with-http_stub_status_module enable ngx_http_stub_status_module
|
||||
|
||||
--without-http_charset_module disable ngx_http_charset_module
|
||||
|
@ -487,7 +377,6 @@ cat << END
|
|||
--without-http_userid_module disable ngx_http_userid_module
|
||||
--without-http_access_module disable ngx_http_access_module
|
||||
--without-http_auth_basic_module disable ngx_http_auth_basic_module
|
||||
--without-http_mirror_module disable ngx_http_mirror_module
|
||||
--without-http_autoindex_module disable ngx_http_autoindex_module
|
||||
--without-http_geo_module disable ngx_http_geo_module
|
||||
--without-http_map_module disable ngx_http_map_module
|
||||
|
@ -498,27 +387,19 @@ cat << END
|
|||
--without-http_fastcgi_module disable ngx_http_fastcgi_module
|
||||
--without-http_uwsgi_module disable ngx_http_uwsgi_module
|
||||
--without-http_scgi_module disable ngx_http_scgi_module
|
||||
--without-http_grpc_module disable ngx_http_grpc_module
|
||||
--without-http_memcached_module disable ngx_http_memcached_module
|
||||
--without-http_limit_conn_module disable ngx_http_limit_conn_module
|
||||
--without-http_limit_req_module disable ngx_http_limit_req_module
|
||||
--without-http_empty_gif_module disable ngx_http_empty_gif_module
|
||||
--without-http_browser_module disable ngx_http_browser_module
|
||||
--without-http_upstream_hash_module
|
||||
disable ngx_http_upstream_hash_module
|
||||
--without-http_upstream_ip_hash_module
|
||||
disable ngx_http_upstream_ip_hash_module
|
||||
--without-http_upstream_least_conn_module
|
||||
disable ngx_http_upstream_least_conn_module
|
||||
--without-http_upstream_random_module
|
||||
disable ngx_http_upstream_random_module
|
||||
--without-http_upstream_keepalive_module
|
||||
disable ngx_http_upstream_keepalive_module
|
||||
--without-http_upstream_zone_module
|
||||
disable ngx_http_upstream_zone_module
|
||||
|
||||
--with-http_perl_module enable ngx_http_perl_module
|
||||
--with-http_perl_module=dynamic enable dynamic ngx_http_perl_module
|
||||
--with-perl_modules_path=PATH set Perl modules path
|
||||
--with-perl=PATH set perl binary pathname
|
||||
|
||||
|
@ -538,44 +419,15 @@ cat << END
|
|||
--without-http-cache disable HTTP cache
|
||||
|
||||
--with-mail enable POP3/IMAP4/SMTP proxy module
|
||||
--with-mail=dynamic enable dynamic POP3/IMAP4/SMTP proxy module
|
||||
--with-mail_ssl_module enable ngx_mail_ssl_module
|
||||
--without-mail_pop3_module disable ngx_mail_pop3_module
|
||||
--without-mail_imap_module disable ngx_mail_imap_module
|
||||
--without-mail_smtp_module disable ngx_mail_smtp_module
|
||||
|
||||
--with-stream enable TCP/UDP proxy module
|
||||
--with-stream=dynamic enable dynamic TCP/UDP proxy module
|
||||
--with-stream_ssl_module enable ngx_stream_ssl_module
|
||||
--with-stream_quic_module enable ngx_stream_quic_module
|
||||
--with-stream_realip_module enable ngx_stream_realip_module
|
||||
--with-stream_geoip_module enable ngx_stream_geoip_module
|
||||
--with-stream_geoip_module=dynamic enable dynamic ngx_stream_geoip_module
|
||||
--with-stream_ssl_preread_module enable ngx_stream_ssl_preread_module
|
||||
--without-stream_limit_conn_module disable ngx_stream_limit_conn_module
|
||||
--without-stream_access_module disable ngx_stream_access_module
|
||||
--without-stream_geo_module disable ngx_stream_geo_module
|
||||
--without-stream_map_module disable ngx_stream_map_module
|
||||
--without-stream_split_clients_module
|
||||
disable ngx_stream_split_clients_module
|
||||
--without-stream_return_module disable ngx_stream_return_module
|
||||
--without-stream_set_module disable ngx_stream_set_module
|
||||
--without-stream_upstream_hash_module
|
||||
disable ngx_stream_upstream_hash_module
|
||||
--without-stream_upstream_least_conn_module
|
||||
disable ngx_stream_upstream_least_conn_module
|
||||
--without-stream_upstream_random_module
|
||||
disable ngx_stream_upstream_random_module
|
||||
--without-stream_upstream_zone_module
|
||||
disable ngx_stream_upstream_zone_module
|
||||
|
||||
--with-google_perftools_module enable ngx_google_perftools_module
|
||||
--with-cpp_test_module enable ngx_cpp_test_module
|
||||
|
||||
--add-module=PATH enable external module
|
||||
--add-dynamic-module=PATH enable dynamic external module
|
||||
|
||||
--with-compat dynamic modules compatibility
|
||||
--add-module=PATH enable an external module
|
||||
|
||||
--with-cc=PATH set C compiler pathname
|
||||
--with-cpp=PATH set C preprocessor pathname
|
||||
|
@ -590,7 +442,14 @@ cat << END
|
|||
--with-pcre=DIR set path to PCRE library sources
|
||||
--with-pcre-opt=OPTIONS set additional build options for PCRE
|
||||
--with-pcre-jit build PCRE with JIT compilation support
|
||||
--without-pcre2 do not use PCRE2 library
|
||||
|
||||
--with-md5=DIR set path to md5 library sources
|
||||
--with-md5-opt=OPTIONS set additional build options for md5
|
||||
--with-md5-asm use md5 assembler sources
|
||||
|
||||
--with-sha1=DIR set path to sha1 library sources
|
||||
--with-sha1-opt=OPTIONS set additional build options for sha1
|
||||
--with-sha1-asm use sha1 assembler sources
|
||||
|
||||
--with-zlib=DIR set path to zlib library sources
|
||||
--with-zlib-opt=OPTIONS set additional build options for zlib
|
||||
|
@ -612,13 +471,24 @@ END
|
|||
fi
|
||||
|
||||
|
||||
if [ $HTTP = NO ]; then
|
||||
HTTP_CHARSET=NO
|
||||
HTTP_GZIP=NO
|
||||
HTTP_SSI=NO
|
||||
HTTP_USERID=NO
|
||||
HTTP_ACCESS=NO
|
||||
HTTP_STATUS=NO
|
||||
HTTP_REWRITE=NO
|
||||
HTTP_PROXY=NO
|
||||
HTTP_FASTCGI=NO
|
||||
fi
|
||||
|
||||
|
||||
if [ ".$NGX_PLATFORM" = ".win32" ]; then
|
||||
NGX_WINE=$WINE
|
||||
fi
|
||||
|
||||
|
||||
NGX_SBIN_PATH=${NGX_SBIN_PATH:-sbin/nginx}
|
||||
NGX_MODULES_PATH=${NGX_MODULES_PATH:-modules}
|
||||
NGX_CONF_PATH=${NGX_CONF_PATH:-conf/nginx.conf}
|
||||
NGX_CONF_PREFIX=`dirname $NGX_CONF_PATH`
|
||||
NGX_PID_PATH=${NGX_PID_PATH:-logs/nginx.pid}
|
||||
|
|
22
auto/os/conf
22
auto/os/conf
|
@ -41,14 +41,6 @@ case "$NGX_PLATFORM" in
|
|||
'
|
||||
;;
|
||||
|
||||
NetBSD:*)
|
||||
CORE_INCS="$UNIX_INCS"
|
||||
CORE_DEPS="$UNIX_DEPS $POSIX_DEPS"
|
||||
CORE_SRCS="$UNIX_SRCS"
|
||||
|
||||
NGX_RPATH=YES
|
||||
;;
|
||||
|
||||
HP-UX:*)
|
||||
# HP/UX
|
||||
have=NGX_HPUX . auto/have_headers
|
||||
|
@ -68,15 +60,6 @@ case "$NGX_PLATFORM" in
|
|||
CORE_SRCS="$UNIX_SRCS"
|
||||
;;
|
||||
|
||||
GNU:*)
|
||||
# GNU Hurd
|
||||
have=NGX_GNU_HURD . auto/have_headers
|
||||
CORE_INCS="$UNIX_INCS"
|
||||
CORE_DEPS="$UNIX_DEPS $POSIX_DEPS"
|
||||
CORE_SRCS="$UNIX_SRCS"
|
||||
CC_AUX_FLAGS="$CC_AUX_FLAGS -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64"
|
||||
;;
|
||||
|
||||
*)
|
||||
CORE_INCS="$UNIX_INCS"
|
||||
CORE_DEPS="$UNIX_DEPS $POSIX_DEPS"
|
||||
|
@ -110,11 +93,6 @@ case "$NGX_MACHINE" in
|
|||
NGX_MACH_CACHE_LINE=64
|
||||
;;
|
||||
|
||||
aarch64 | arm64)
|
||||
have=NGX_ALIGNMENT value=16 . auto/define
|
||||
NGX_MACH_CACHE_LINE=64
|
||||
;;
|
||||
|
||||
*)
|
||||
have=NGX_ALIGNMENT value=16 . auto/define
|
||||
NGX_MACH_CACHE_LINE=32
|
||||
|
|
|
@ -14,12 +14,6 @@ CORE_SRCS="$UNIX_SRCS $DARWIN_SRCS"
|
|||
ngx_spacer='
|
||||
'
|
||||
|
||||
MAIN_LINK=
|
||||
MODULE_LINK="-shared -Wl,-undefined,dynamic_lookup"
|
||||
|
||||
CC_AUX_FLAGS="$CC_AUX_FLAGS -D__APPLE_USE_RFC_3542"
|
||||
|
||||
|
||||
# kqueue
|
||||
|
||||
echo " + kqueue found"
|
||||
|
@ -89,6 +83,7 @@ ngx_feature_test="int kq;
|
|||
|
||||
# sendfile()
|
||||
|
||||
CC_AUX_FLAGS="$CC_AUX_FLAGS"
|
||||
ngx_feature="sendfile()"
|
||||
ngx_feature_name="NGX_HAVE_SENDFILE"
|
||||
ngx_feature_run=yes
|
||||
|
@ -105,6 +100,7 @@ ngx_feature_test="int s = 0, fd = 1;
|
|||
. auto/feature
|
||||
|
||||
if [ $ngx_found = yes ]; then
|
||||
have=NGX_HAVE_SENDFILE . auto/have
|
||||
CORE_SRCS="$CORE_SRCS $DARWIN_SENDFILE_SRCS"
|
||||
fi
|
||||
|
||||
|
@ -115,6 +111,6 @@ ngx_feature_run=no
|
|||
ngx_feature_incs="#include <libkern/OSAtomic.h>"
|
||||
ngx_feature_path=
|
||||
ngx_feature_libs=
|
||||
ngx_feature_test="int32_t lock = 0;
|
||||
if (!OSAtomicCompareAndSwap32Barrier(0, 1, &lock)) return 1"
|
||||
ngx_feature_test="int32_t lock, n;
|
||||
n = OSAtomicCompareAndSwap32Barrier(0, 1, &lock)"
|
||||
. auto/feature
|
||||
|
|
|
@ -44,10 +44,10 @@ if [ $osreldate -gt 300007 ]; then
|
|||
CORE_SRCS="$CORE_SRCS $FREEBSD_SENDFILE_SRCS"
|
||||
fi
|
||||
|
||||
if [ $osreldate -gt 1100093 ]; then
|
||||
if [ $osreldate -gt 502103 ]; then
|
||||
echo " + sendfile()'s SF_NODISKIO found"
|
||||
|
||||
have=NGX_HAVE_SENDFILE_NODISKIO . auto/have
|
||||
have=NGX_HAVE_AIO_SENDFILE . auto/have
|
||||
fi
|
||||
|
||||
# POSIX semaphores
|
||||
|
@ -78,7 +78,7 @@ fi
|
|||
NGX_KQUEUE_CHECKED=YES
|
||||
|
||||
|
||||
# kqueue's NOTE_LOWAT
|
||||
# kqueue's NOTE_LAWAT
|
||||
|
||||
if [ \( $version -lt 500000 -a $version -ge 430000 \) \
|
||||
-o $version -ge 500018 ]
|
||||
|
@ -97,6 +97,45 @@ then
|
|||
fi
|
||||
|
||||
|
||||
if [ $USE_THREADS = "rfork" ]; then
|
||||
|
||||
echo " + using rfork()"
|
||||
|
||||
# # kqueue's EVFILT_SIGNAL is safe
|
||||
#
|
||||
# if [ $version -gt 460101 ]; then
|
||||
# echo " + kqueue's EVFILT_SIGNAL is safe"
|
||||
# have=NGX_HAVE_SAFE_EVFILT_SIGNAL . auto/have
|
||||
# else
|
||||
# echo "$0: error: the kqueue's EVFILT_SIGNAL is unsafe on this"
|
||||
# echo "FreeBSD version, so --with-threads=rfork could not be used"
|
||||
# echo
|
||||
#
|
||||
# exit 1
|
||||
# fi
|
||||
fi
|
||||
|
||||
|
||||
if [ $EVENT_AIO = YES ]; then
|
||||
if [ \( $version -lt 500000 -a $version -ge 430000 \) \
|
||||
-o $version -ge 500014 ]
|
||||
then
|
||||
have=NGX_HAVE_AIO . auto/have
|
||||
EVENT_MODULES="$EVENT_MODULES $AIO_MODULE"
|
||||
CORE_SRCS="$CORE_SRCS $AIO_SRCS"
|
||||
else
|
||||
|
||||
cat << END
|
||||
|
||||
$0: error: the kqueue does not support AIO on this FreeBSD version
|
||||
|
||||
END
|
||||
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
||||
|
||||
# cpuset_setaffinity()
|
||||
|
||||
if [ $version -ge 701000 ]; then
|
||||
|
|
147
auto/os/linux
147
auto/os/linux
|
@ -26,6 +26,18 @@ version=$((`uname -r \
|
|||
version=${version:-0}
|
||||
|
||||
|
||||
# enable the rt signals on Linux between 2.2.19 and 2.6.17
|
||||
|
||||
if [ \( $version -ge 131603 -a $version -lt 132626 \) -o $EVENT_RTSIG = YES ]
|
||||
then
|
||||
echo " + rt signals found"
|
||||
have=NGX_HAVE_RTSIG . auto/have
|
||||
EVENT_MODULES="$EVENT_MODULES $RTSIG_MODULE"
|
||||
CORE_SRCS="$CORE_SRCS $RTSIG_SRCS"
|
||||
EVENT_FOUND=YES
|
||||
fi
|
||||
|
||||
|
||||
# posix_fadvise64() had been implemented in 2.5.60
|
||||
|
||||
if [ $version -lt 132412 ]; then
|
||||
|
@ -44,7 +56,6 @@ ngx_feature_test="int efd = 0;
|
|||
struct epoll_event ee;
|
||||
ee.events = EPOLLIN|EPOLLOUT|EPOLLET;
|
||||
ee.data.ptr = NULL;
|
||||
(void) ee;
|
||||
efd = epoll_create(100);
|
||||
if (efd == -1) return 1;"
|
||||
. auto/feature
|
||||
|
@ -70,47 +81,6 @@ if [ $ngx_found = yes ]; then
|
|||
ee.data.ptr = NULL;
|
||||
epoll_ctl(efd, EPOLL_CTL_ADD, fd, &ee)"
|
||||
. auto/feature
|
||||
|
||||
|
||||
# EPOLLEXCLUSIVE appeared in Linux 4.5, glibc 2.24
|
||||
|
||||
ngx_feature="EPOLLEXCLUSIVE"
|
||||
ngx_feature_name="NGX_HAVE_EPOLLEXCLUSIVE"
|
||||
ngx_feature_run=no
|
||||
ngx_feature_incs="#include <sys/epoll.h>"
|
||||
ngx_feature_path=
|
||||
ngx_feature_libs=
|
||||
ngx_feature_test="int efd = 0, fd = 0;
|
||||
struct epoll_event ee;
|
||||
ee.events = EPOLLIN|EPOLLEXCLUSIVE;
|
||||
ee.data.ptr = NULL;
|
||||
epoll_ctl(efd, EPOLL_CTL_ADD, fd, &ee)"
|
||||
. auto/feature
|
||||
|
||||
|
||||
# eventfd()
|
||||
|
||||
ngx_feature="eventfd()"
|
||||
ngx_feature_name="NGX_HAVE_EVENTFD"
|
||||
ngx_feature_run=no
|
||||
ngx_feature_incs="#include <sys/eventfd.h>"
|
||||
ngx_feature_path=
|
||||
ngx_feature_libs=
|
||||
ngx_feature_test="(void) eventfd(0, 0)"
|
||||
. auto/feature
|
||||
|
||||
if [ $ngx_found = yes ]; then
|
||||
have=NGX_HAVE_SYS_EVENTFD_H . auto/have
|
||||
fi
|
||||
|
||||
|
||||
if [ $ngx_found = no ]; then
|
||||
|
||||
ngx_feature="eventfd() (SYS_eventfd)"
|
||||
ngx_feature_incs="#include <sys/syscall.h>"
|
||||
ngx_feature_test="(void) SYS_eventfd"
|
||||
. auto/feature
|
||||
fi
|
||||
fi
|
||||
|
||||
|
||||
|
@ -182,37 +152,17 @@ ngx_feature_test="if (prctl(PR_SET_DUMPABLE, 1, 0, 0, 0) == -1) return 1"
|
|||
. auto/feature
|
||||
|
||||
|
||||
# prctl(PR_SET_KEEPCAPS)
|
||||
# sched_setaffinity()
|
||||
|
||||
ngx_feature="prctl(PR_SET_KEEPCAPS)"
|
||||
ngx_feature_name="NGX_HAVE_PR_SET_KEEPCAPS"
|
||||
ngx_feature_run=yes
|
||||
ngx_feature_incs="#include <sys/prctl.h>"
|
||||
ngx_feature_path=
|
||||
ngx_feature_libs=
|
||||
ngx_feature_test="if (prctl(PR_SET_KEEPCAPS, 1, 0, 0, 0) == -1) return 1"
|
||||
. auto/feature
|
||||
|
||||
|
||||
# capabilities
|
||||
|
||||
ngx_feature="capabilities"
|
||||
ngx_feature_name="NGX_HAVE_CAPABILITIES"
|
||||
ngx_feature="sched_setaffinity()"
|
||||
ngx_feature_name="NGX_HAVE_SCHED_SETAFFINITY"
|
||||
ngx_feature_run=no
|
||||
ngx_feature_incs="#include <linux/capability.h>
|
||||
#include <sys/syscall.h>"
|
||||
ngx_feature_incs="#include <sched.h>"
|
||||
ngx_feature_path=
|
||||
ngx_feature_libs=
|
||||
ngx_feature_test="struct __user_cap_data_struct data;
|
||||
struct __user_cap_header_struct header;
|
||||
|
||||
header.version = _LINUX_CAPABILITY_VERSION_1;
|
||||
data.effective = CAP_TO_MASK(CAP_NET_RAW);
|
||||
data.permitted = 0;
|
||||
|
||||
(void) header;
|
||||
(void) data;
|
||||
(void) SYS_capset"
|
||||
ngx_feature_test="cpu_set_t mask;
|
||||
CPU_ZERO(&mask);
|
||||
sched_setaffinity(0, sizeof(cpu_set_t), &mask)"
|
||||
. auto/feature
|
||||
|
||||
|
||||
|
@ -232,63 +182,4 @@ ngx_feature_test="struct crypt_data cd;
|
|||
ngx_include="sys/vfs.h"; . auto/include
|
||||
|
||||
|
||||
# BPF sockhash
|
||||
|
||||
ngx_feature="BPF sockhash"
|
||||
ngx_feature_name="NGX_HAVE_BPF"
|
||||
ngx_feature_run=no
|
||||
ngx_feature_incs="#include <linux/bpf.h>
|
||||
#include <sys/syscall.h>"
|
||||
ngx_feature_path=
|
||||
ngx_feature_libs=
|
||||
ngx_feature_test="union bpf_attr attr = { 0 };
|
||||
|
||||
attr.map_flags = 0;
|
||||
attr.map_type = BPF_MAP_TYPE_SOCKHASH;
|
||||
|
||||
syscall(__NR_bpf, 0, &attr, 0);"
|
||||
. auto/feature
|
||||
|
||||
if [ $ngx_found = yes ]; then
|
||||
CORE_SRCS="$CORE_SRCS src/core/ngx_bpf.c"
|
||||
CORE_DEPS="$CORE_DEPS src/core/ngx_bpf.h"
|
||||
|
||||
if [ $QUIC_BPF != NONE ]; then
|
||||
QUIC_BPF=YES
|
||||
fi
|
||||
fi
|
||||
|
||||
|
||||
ngx_feature="SO_COOKIE"
|
||||
ngx_feature_name="NGX_HAVE_SO_COOKIE"
|
||||
ngx_feature_run=no
|
||||
ngx_feature_incs="#include <sys/socket.h>
|
||||
$NGX_INCLUDE_INTTYPES_H"
|
||||
ngx_feature_path=
|
||||
ngx_feature_libs=
|
||||
ngx_feature_test="socklen_t optlen = sizeof(uint64_t);
|
||||
uint64_t cookie;
|
||||
getsockopt(0, SOL_SOCKET, SO_COOKIE, &cookie, &optlen)"
|
||||
. auto/feature
|
||||
|
||||
if [ $ngx_found = yes ]; then
|
||||
SO_COOKIE_FOUND=YES
|
||||
fi
|
||||
|
||||
|
||||
# UDP segmentation offloading
|
||||
|
||||
ngx_feature="UDP_SEGMENT"
|
||||
ngx_feature_name="NGX_HAVE_UDP_SEGMENT"
|
||||
ngx_feature_run=no
|
||||
ngx_feature_incs="#include <sys/socket.h>
|
||||
#include <netinet/udp.h>"
|
||||
ngx_feature_path=
|
||||
ngx_feature_libs=
|
||||
ngx_feature_test="socklen_t optlen = sizeof(int);
|
||||
int val;
|
||||
getsockopt(0, SOL_UDP, UDP_SEGMENT, &val, &optlen)"
|
||||
. auto/feature
|
||||
|
||||
|
||||
CC_AUX_FLAGS="$cc_aux_flags -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64"
|
||||
|
|
|
@ -52,7 +52,7 @@ ngx_feature_run=no
|
|||
ngx_feature_incs="#include <port.h>"
|
||||
ngx_feature_path=
|
||||
ngx_feature_libs=
|
||||
ngx_feature_test="(void) port_create()"
|
||||
ngx_feature_test="int n = port_create()"
|
||||
. auto/feature
|
||||
|
||||
if [ $ngx_found = yes ]; then
|
||||
|
|
|
@ -11,18 +11,11 @@ CORE_SRCS="$WIN32_SRCS $IOCP_SRCS"
|
|||
OS_CONFIG="$WIN32_CONFIG"
|
||||
NGX_ICONS="$NGX_WIN32_ICONS"
|
||||
SELECT_SRCS=$WIN32_SELECT_SRCS
|
||||
POLL_SRCS=$WIN32_POLL_SRCS
|
||||
|
||||
ngx_pic_opt=
|
||||
ngx_binext=".exe"
|
||||
|
||||
case "$NGX_CC_NAME" in
|
||||
|
||||
gcc)
|
||||
CORE_LIBS="$CORE_LIBS -ladvapi32 -lws2_32"
|
||||
MAIN_LINK="$MAIN_LINK -Wl,--export-all-symbols"
|
||||
MAIN_LINK="$MAIN_LINK -Wl,--out-implib=$NGX_OBJS/libnginx.a"
|
||||
MODULE_LINK="-shared -L $NGX_OBJS -lnginx"
|
||||
;;
|
||||
|
||||
*)
|
||||
|
@ -32,8 +25,16 @@ case "$NGX_CC_NAME" in
|
|||
esac
|
||||
|
||||
EVENT_MODULES="$EVENT_MODULES $IOCP_MODULE"
|
||||
#EVENT_FOUND=YES
|
||||
EVENT_FOUND=YES
|
||||
|
||||
have=NGX_HAVE_INET6 . auto/have
|
||||
if [ $EVENT_SELECT = NO ]; then
|
||||
CORE_SRCS="$CORE_SRCS $SELECT_SRCS"
|
||||
EVENT_MODULES="$EVENT_MODULES $SELECT_MODULE"
|
||||
fi
|
||||
|
||||
if [ $NGX_IPV6 = YES ]; then
|
||||
have=NGX_HAVE_INET6 . auto/have
|
||||
fi
|
||||
|
||||
have=NGX_HAVE_AIO . auto/have
|
||||
have=NGX_HAVE_IOCP . auto/have
|
||||
|
|
352
auto/sources
352
auto/sources
|
@ -19,7 +19,6 @@ CORE_DEPS="src/core/nginx.h \
|
|||
src/core/ngx_queue.h \
|
||||
src/core/ngx_string.h \
|
||||
src/core/ngx_parse.h \
|
||||
src/core/ngx_parse_time.h \
|
||||
src/core/ngx_inet.h \
|
||||
src/core/ngx_file.h \
|
||||
src/core/ngx_crc.h \
|
||||
|
@ -29,19 +28,16 @@ CORE_DEPS="src/core/nginx.h \
|
|||
src/core/ngx_sha1.h \
|
||||
src/core/ngx_rbtree.h \
|
||||
src/core/ngx_radix_tree.h \
|
||||
src/core/ngx_rwlock.h \
|
||||
src/core/ngx_slab.h \
|
||||
src/core/ngx_times.h \
|
||||
src/core/ngx_shmtx.h \
|
||||
src/core/ngx_connection.h \
|
||||
src/core/ngx_cycle.h \
|
||||
src/core/ngx_conf_file.h \
|
||||
src/core/ngx_module.h \
|
||||
src/core/ngx_resolver.h \
|
||||
src/core/ngx_open_file_cache.h \
|
||||
src/core/ngx_crypt.h \
|
||||
src/core/ngx_proxy_protocol.h \
|
||||
src/core/ngx_syslog.h"
|
||||
src/core/ngx_proxy_protocol.h"
|
||||
|
||||
|
||||
CORE_SRCS="src/core/nginx.c \
|
||||
|
@ -55,13 +51,11 @@ CORE_SRCS="src/core/nginx.c \
|
|||
src/core/ngx_output_chain.c \
|
||||
src/core/ngx_string.c \
|
||||
src/core/ngx_parse.c \
|
||||
src/core/ngx_parse_time.c \
|
||||
src/core/ngx_inet.c \
|
||||
src/core/ngx_file.c \
|
||||
src/core/ngx_crc32.c \
|
||||
src/core/ngx_murmurhash.c \
|
||||
src/core/ngx_md5.c \
|
||||
src/core/ngx_sha1.c \
|
||||
src/core/ngx_rbtree.c \
|
||||
src/core/ngx_radix_tree.c \
|
||||
src/core/ngx_slab.c \
|
||||
|
@ -70,33 +64,41 @@ CORE_SRCS="src/core/nginx.c \
|
|||
src/core/ngx_connection.c \
|
||||
src/core/ngx_cycle.c \
|
||||
src/core/ngx_spinlock.c \
|
||||
src/core/ngx_rwlock.c \
|
||||
src/core/ngx_cpuinfo.c \
|
||||
src/core/ngx_conf_file.c \
|
||||
src/core/ngx_module.c \
|
||||
src/core/ngx_resolver.c \
|
||||
src/core/ngx_open_file_cache.c \
|
||||
src/core/ngx_crypt.c \
|
||||
src/core/ngx_proxy_protocol.c \
|
||||
src/core/ngx_syslog.c"
|
||||
src/core/ngx_proxy_protocol.c"
|
||||
|
||||
|
||||
REGEX_MODULE=ngx_regex_module
|
||||
REGEX_DEPS=src/core/ngx_regex.h
|
||||
REGEX_SRCS=src/core/ngx_regex.c
|
||||
|
||||
|
||||
OPENSSL_MODULE=ngx_openssl_module
|
||||
OPENSSL_DEPS=src/event/ngx_event_openssl.h
|
||||
OPENSSL_SRCS="src/event/ngx_event_openssl.c \
|
||||
src/event/ngx_event_openssl_stapling.c"
|
||||
|
||||
|
||||
EVENT_MODULES="ngx_events_module ngx_event_core_module"
|
||||
|
||||
EVENT_INCS="src/event src/event/modules src/event/quic"
|
||||
EVENT_INCS="src/event src/event/modules"
|
||||
|
||||
EVENT_DEPS="src/event/ngx_event.h \
|
||||
src/event/ngx_event_timer.h \
|
||||
src/event/ngx_event_posted.h \
|
||||
src/event/ngx_event_busy_lock.h \
|
||||
src/event/ngx_event_connect.h \
|
||||
src/event/ngx_event_pipe.h \
|
||||
src/event/ngx_event_udp.h"
|
||||
src/event/ngx_event_pipe.h"
|
||||
|
||||
EVENT_SRCS="src/event/ngx_event.c \
|
||||
src/event/ngx_event_timer.c \
|
||||
src/event/ngx_event_posted.c \
|
||||
src/event/ngx_event_busy_lock.c \
|
||||
src/event/ngx_event_accept.c \
|
||||
src/event/ngx_event_udp.c \
|
||||
src/event/ngx_event_connect.c \
|
||||
src/event/ngx_event_pipe.c"
|
||||
|
||||
|
@ -107,7 +109,6 @@ WIN32_SELECT_SRCS=src/event/modules/ngx_win32_select_module.c
|
|||
|
||||
POLL_MODULE=ngx_poll_module
|
||||
POLL_SRCS=src/event/modules/ngx_poll_module.c
|
||||
WIN32_POLL_SRCS=src/event/modules/ngx_win32_poll_module.c
|
||||
|
||||
KQUEUE_MODULE=ngx_kqueue_module
|
||||
KQUEUE_SRCS=src/event/modules/ngx_kqueue_module.c
|
||||
|
@ -121,9 +122,19 @@ EVENTPORT_SRCS=src/event/modules/ngx_eventport_module.c
|
|||
EPOLL_MODULE=ngx_epoll_module
|
||||
EPOLL_SRCS=src/event/modules/ngx_epoll_module.c
|
||||
|
||||
RTSIG_MODULE=ngx_rtsig_module
|
||||
RTSIG_SRCS=src/event/modules/ngx_rtsig_module.c
|
||||
|
||||
IOCP_MODULE=ngx_iocp_module
|
||||
IOCP_SRCS=src/event/modules/ngx_iocp_module.c
|
||||
|
||||
AIO_MODULE=ngx_aio_module
|
||||
AIO_SRCS="src/event/modules/ngx_aio_module.c \
|
||||
src/os/unix/ngx_aio_read.c \
|
||||
src/os/unix/ngx_aio_write.c \
|
||||
src/os/unix/ngx_aio_read_chain.c \
|
||||
src/os/unix/ngx_aio_write_chain.c"
|
||||
|
||||
FILE_AIO_SRCS="src/os/unix/ngx_file_aio_read.c"
|
||||
LINUX_AIO_SRCS="src/os/unix/ngx_linux_aio_read.c"
|
||||
|
||||
|
@ -145,7 +156,6 @@ UNIX_DEPS="$CORE_DEPS $EVENT_DEPS \
|
|||
src/os/unix/ngx_socket.h \
|
||||
src/os/unix/ngx_os.h \
|
||||
src/os/unix/ngx_user.h \
|
||||
src/os/unix/ngx_dlopen.h \
|
||||
src/os/unix/ngx_process_cycle.h"
|
||||
|
||||
# add to UNIX_DEPS
|
||||
|
@ -169,8 +179,6 @@ UNIX_SRCS="$CORE_SRCS $EVENT_SRCS \
|
|||
src/os/unix/ngx_udp_recv.c \
|
||||
src/os/unix/ngx_send.c \
|
||||
src/os/unix/ngx_writev_chain.c \
|
||||
src/os/unix/ngx_udp_send.c \
|
||||
src/os/unix/ngx_udp_sendmsg_chain.c \
|
||||
src/os/unix/ngx_channel.c \
|
||||
src/os/unix/ngx_shmem.c \
|
||||
src/os/unix/ngx_process.c \
|
||||
|
@ -179,21 +187,18 @@ UNIX_SRCS="$CORE_SRCS $EVENT_SRCS \
|
|||
src/os/unix/ngx_setproctitle.c \
|
||||
src/os/unix/ngx_posix_init.c \
|
||||
src/os/unix/ngx_user.c \
|
||||
src/os/unix/ngx_dlopen.c \
|
||||
src/os/unix/ngx_process_cycle.c"
|
||||
|
||||
POSIX_DEPS=src/os/unix/ngx_posix_config.h
|
||||
|
||||
THREAD_POOL_MODULE=ngx_thread_pool_module
|
||||
THREAD_POOL_DEPS=src/core/ngx_thread_pool.h
|
||||
THREAD_POOL_SRCS="src/core/ngx_thread_pool.c
|
||||
src/os/unix/ngx_thread_cond.c
|
||||
src/os/unix/ngx_thread_mutex.c
|
||||
src/os/unix/ngx_thread_id.c"
|
||||
|
||||
FREEBSD_DEPS="src/os/unix/ngx_freebsd_config.h src/os/unix/ngx_freebsd.h"
|
||||
FREEBSD_SRCS=src/os/unix/ngx_freebsd_init.c
|
||||
FREEBSD_SENDFILE_SRCS=src/os/unix/ngx_freebsd_sendfile_chain.c
|
||||
FREEBSD_RFORK_DEPS="src/os/unix/ngx_freebsd_rfork_thread.h"
|
||||
FREEBSD_RFORK_SRCS="src/os/unix/ngx_freebsd_rfork_thread.c"
|
||||
FREEBSD_RFORK_THREAD_SRCS="src/os/unix/rfork_thread.S"
|
||||
|
||||
PTHREAD_SRCS="src/os/unix/ngx_pthread_thread.c"
|
||||
|
||||
LINUX_DEPS="src/os/unix/ngx_linux_config.h src/os/unix/ngx_linux.h"
|
||||
LINUX_SRCS=src/os/unix/ngx_linux_init.c
|
||||
|
@ -225,7 +230,6 @@ WIN32_DEPS="$CORE_DEPS $EVENT_DEPS \
|
|||
src/os/win32/ngx_socket.h \
|
||||
src/os/win32/ngx_os.h \
|
||||
src/os/win32/ngx_user.h \
|
||||
src/os/win32/ngx_dlopen.h \
|
||||
src/os/win32/ngx_process_cycle.h"
|
||||
|
||||
WIN32_CONFIG=src/os/win32/ngx_win32_config.h
|
||||
|
@ -246,7 +250,6 @@ WIN32_SRCS="$CORE_SRCS $EVENT_SRCS \
|
|||
src/os/win32/ngx_wsasend_chain.c \
|
||||
src/os/win32/ngx_win32_init.c \
|
||||
src/os/win32/ngx_user.c \
|
||||
src/os/win32/ngx_dlopen.c \
|
||||
src/os/win32/ngx_event_log.c \
|
||||
src/os/win32/ngx_process_cycle.c \
|
||||
src/event/ngx_event_acceptex.c"
|
||||
|
@ -255,7 +258,294 @@ NGX_WIN32_ICONS="src/os/win32/nginx.ico"
|
|||
NGX_WIN32_RC="src/os/win32/nginx.rc"
|
||||
|
||||
|
||||
# the http modules that have their logging formats
|
||||
# must be after ngx_http_log_module
|
||||
|
||||
HTTP_MODULES="ngx_http_module \
|
||||
ngx_http_core_module \
|
||||
ngx_http_log_module \
|
||||
ngx_http_upstream_module"
|
||||
|
||||
HTTP_WRITE_FILTER_MODULE="ngx_http_write_filter_module"
|
||||
HTTP_HEADER_FILTER_MODULE="ngx_http_header_filter_module"
|
||||
|
||||
HTTP_POSTPONE_FILTER_MODULE=ngx_http_postpone_filter_module
|
||||
HTTP_COPY_FILTER_MODULE=ngx_http_copy_filter_module
|
||||
|
||||
HTTP_CHUNKED_FILTER_MODULE=ngx_http_chunked_filter_module
|
||||
HTTP_HEADERS_FILTER_MODULE=ngx_http_headers_filter_module
|
||||
|
||||
HTTP_RANGE_HEADER_FILTER_MODULE=ngx_http_range_header_filter_module
|
||||
HTTP_RANGE_BODY_FILTER_MODULE=ngx_http_range_body_filter_module
|
||||
|
||||
HTTP_NOT_MODIFIED_FILTER_MODULE=ngx_http_not_modified_filter_module
|
||||
|
||||
HTTP_STATIC_MODULE=ngx_http_static_module
|
||||
HTTP_INDEX_MODULE=ngx_http_index_module
|
||||
|
||||
HTTP_INCS="src/http src/http/modules"
|
||||
|
||||
HTTP_DEPS="src/http/ngx_http.h \
|
||||
src/http/ngx_http_request.h \
|
||||
src/http/ngx_http_config.h \
|
||||
src/http/ngx_http_core_module.h \
|
||||
src/http/ngx_http_cache.h \
|
||||
src/http/ngx_http_variables.h \
|
||||
src/http/ngx_http_script.h \
|
||||
src/http/ngx_http_upstream.h \
|
||||
src/http/ngx_http_upstream_round_robin.h \
|
||||
src/http/ngx_http_busy_lock.h"
|
||||
|
||||
HTTP_SRCS="src/http/ngx_http.c \
|
||||
src/http/ngx_http_core_module.c \
|
||||
src/http/ngx_http_special_response.c \
|
||||
src/http/ngx_http_request.c \
|
||||
src/http/ngx_http_parse.c \
|
||||
src/http/ngx_http_header_filter_module.c \
|
||||
src/http/ngx_http_write_filter_module.c \
|
||||
src/http/ngx_http_copy_filter_module.c \
|
||||
src/http/modules/ngx_http_log_module.c \
|
||||
src/http/ngx_http_request_body.c \
|
||||
src/http/ngx_http_variables.c \
|
||||
src/http/ngx_http_script.c \
|
||||
src/http/ngx_http_upstream.c \
|
||||
src/http/ngx_http_upstream_round_robin.c \
|
||||
src/http/ngx_http_parse_time.c \
|
||||
src/http/modules/ngx_http_static_module.c \
|
||||
src/http/modules/ngx_http_index_module.c \
|
||||
src/http/modules/ngx_http_chunked_filter_module.c \
|
||||
src/http/modules/ngx_http_range_filter_module.c \
|
||||
src/http/modules/ngx_http_headers_filter_module.c \
|
||||
src/http/modules/ngx_http_not_modified_filter_module.c"
|
||||
|
||||
# STUB
|
||||
HTTP_SRCS="$HTTP_SRCS src/http/ngx_http_busy_lock.c"
|
||||
|
||||
HTTP_POSTPONE_FILTER_SRCS=src/http/ngx_http_postpone_filter_module.c
|
||||
|
||||
HTTP_FILE_CACHE_SRCS=src/http/ngx_http_file_cache.c
|
||||
|
||||
HTTP_HUFF_SRCS="src/http/ngx_http_huff_decode.c
|
||||
src/http/ngx_http_huff_encode.c"
|
||||
|
||||
HTTP_SPDY_MODULE=ngx_http_spdy_module
|
||||
HTTP_SPDY_FILTER_MODULE=ngx_http_spdy_filter_module
|
||||
HTTP_SPDY_DEPS="src/http/ngx_http_spdy.h \
|
||||
src/http/ngx_http_spdy_module.h"
|
||||
HTTP_SPDY_SRCS="src/http/ngx_http_spdy.c \
|
||||
src/http/ngx_http_spdy_module.c \
|
||||
src/http/ngx_http_spdy_filter_module.c"
|
||||
|
||||
|
||||
HTTP_CHARSET_FILTER_MODULE=ngx_http_charset_filter_module
|
||||
HTTP_CHARSET_SRCS=src/http/modules/ngx_http_charset_filter_module.c
|
||||
|
||||
|
||||
HTTP_GZIP_FILTER_MODULE=ngx_http_gzip_filter_module
|
||||
HTTP_GZIP_SRCS=src/http/modules/ngx_http_gzip_filter_module.c
|
||||
|
||||
|
||||
HTTP_GUNZIP_FILTER_MODULE=ngx_http_gunzip_filter_module
|
||||
HTTP_GUNZIP_SRCS=src/http/modules/ngx_http_gunzip_filter_module.c
|
||||
|
||||
|
||||
HTTP_SSI_FILTER_MODULE=ngx_http_ssi_filter_module
|
||||
HTTP_SSI_DEPS=src/http/modules/ngx_http_ssi_filter_module.h
|
||||
HTTP_SSI_SRCS=src/http/modules/ngx_http_ssi_filter_module.c
|
||||
|
||||
|
||||
HTTP_XSLT_FILTER_MODULE=ngx_http_xslt_filter_module
|
||||
HTTP_XSLT_SRCS=src/http/modules/ngx_http_xslt_filter_module.c
|
||||
|
||||
|
||||
HTTP_IMAGE_FILTER_MODULE=ngx_http_image_filter_module
|
||||
HTTP_IMAGE_SRCS=src/http/modules/ngx_http_image_filter_module.c
|
||||
|
||||
|
||||
HTTP_SUB_FILTER_MODULE=ngx_http_sub_filter_module
|
||||
HTTP_SUB_SRCS=src/http/modules/ngx_http_sub_filter_module.c
|
||||
|
||||
|
||||
HTTP_USERID_FILTER_MODULE=ngx_http_userid_filter_module
|
||||
HTTP_USERID_SRCS=src/http/modules/ngx_http_userid_filter_module.c
|
||||
|
||||
|
||||
HTTP_REALIP_MODULE=ngx_http_realip_module
|
||||
HTTP_REALIP_SRCS=src/http/modules/ngx_http_realip_module.c
|
||||
|
||||
|
||||
HTTP_ADDITION_FILTER_MODULE=ngx_http_addition_filter_module
|
||||
HTTP_ADDITION_SRCS=src/http/modules/ngx_http_addition_filter_module.c
|
||||
|
||||
|
||||
HTTP_DAV_MODULE=ngx_http_dav_module
|
||||
HTTP_DAV_SRCS=src/http/modules/ngx_http_dav_module.c
|
||||
|
||||
|
||||
HTTP_ACCESS_MODULE=ngx_http_access_module
|
||||
HTTP_ACCESS_SRCS=src/http/modules/ngx_http_access_module.c
|
||||
|
||||
|
||||
HTTP_AUTH_BASIC_MODULE=ngx_http_auth_basic_module
|
||||
HTTP_AUTH_BASIC_SRCS=src/http/modules/ngx_http_auth_basic_module.c
|
||||
|
||||
|
||||
HTTP_AUTH_REQUEST_MODULE=ngx_http_auth_request_module
|
||||
HTTP_AUTH_REQUEST_SRCS=src/http/modules/ngx_http_auth_request_module.c
|
||||
|
||||
|
||||
HTTP_AUTOINDEX_MODULE=ngx_http_autoindex_module
|
||||
HTTP_AUTOINDEX_SRCS=src/http/modules/ngx_http_autoindex_module.c
|
||||
|
||||
|
||||
HTTP_RANDOM_INDEX_MODULE=ngx_http_random_index_module
|
||||
HTTP_RANDOM_INDEX_SRCS=src/http/modules/ngx_http_random_index_module.c
|
||||
|
||||
|
||||
HTTP_STATUS_MODULE=ngx_http_status_module
|
||||
HTTP_STATUS_SRCS=src/http/modules/ngx_http_status_module.c
|
||||
|
||||
|
||||
HTTP_GEO_MODULE=ngx_http_geo_module
|
||||
HTTP_GEO_SRCS=src/http/modules/ngx_http_geo_module.c
|
||||
|
||||
|
||||
HTTP_GEOIP_MODULE=ngx_http_geoip_module
|
||||
HTTP_GEOIP_SRCS=src/http/modules/ngx_http_geoip_module.c
|
||||
|
||||
|
||||
HTTP_MAP_MODULE=ngx_http_map_module
|
||||
HTTP_MAP_SRCS=src/http/modules/ngx_http_map_module.c
|
||||
|
||||
|
||||
HTTP_SPLIT_CLIENTS_MODULE=ngx_http_split_clients_module
|
||||
HTTP_SPLIT_CLIENTS_SRCS=src/http/modules/ngx_http_split_clients_module.c
|
||||
|
||||
|
||||
HTTP_REFERER_MODULE=ngx_http_referer_module
|
||||
HTTP_REFERER_SRCS=src/http/modules/ngx_http_referer_module.c
|
||||
|
||||
|
||||
HTTP_REWRITE_MODULE=ngx_http_rewrite_module
|
||||
HTTP_REWRITE_SRCS=src/http/modules/ngx_http_rewrite_module.c
|
||||
|
||||
|
||||
HTTP_SSL_MODULE=ngx_http_ssl_module
|
||||
HTTP_SSL_DEPS=src/http/modules/ngx_http_ssl_module.h
|
||||
HTTP_SSL_SRCS=src/http/modules/ngx_http_ssl_module.c
|
||||
|
||||
|
||||
HTTP_PROXY_MODULE=ngx_http_proxy_module
|
||||
HTTP_PROXY_SRCS=src/http/modules/ngx_http_proxy_module.c
|
||||
|
||||
|
||||
HTTP_FASTCGI_MODULE=ngx_http_fastcgi_module
|
||||
HTTP_FASTCGI_SRCS=src/http/modules/ngx_http_fastcgi_module.c
|
||||
|
||||
|
||||
HTTP_UWSGI_MODULE=ngx_http_uwsgi_module
|
||||
HTTP_UWSGI_SRCS=src/http/modules/ngx_http_uwsgi_module.c
|
||||
|
||||
|
||||
HTTP_SCGI_MODULE=ngx_http_scgi_module
|
||||
HTTP_SCGI_SRCS=src/http/modules/ngx_http_scgi_module.c
|
||||
|
||||
|
||||
HTTP_PERL_MODULE=ngx_http_perl_module
|
||||
HTTP_PERL_INCS=src/http/modules/perl
|
||||
HTTP_PERL_DEPS=src/http/modules/perl/ngx_http_perl_module.h
|
||||
HTTP_PERL_SRCS=src/http/modules/perl/ngx_http_perl_module.c
|
||||
|
||||
|
||||
HTTP_MEMCACHED_MODULE=ngx_http_memcached_module
|
||||
HTTP_MEMCACHED_SRCS=src/http/modules/ngx_http_memcached_module.c
|
||||
|
||||
|
||||
HTTP_LIMIT_CONN_MODULE=ngx_http_limit_conn_module
|
||||
HTTP_LIMIT_CONN_SRCS=src/http/modules/ngx_http_limit_conn_module.c
|
||||
|
||||
|
||||
HTTP_LIMIT_REQ_MODULE=ngx_http_limit_req_module
|
||||
HTTP_LIMIT_REQ_SRCS=src/http/modules/ngx_http_limit_req_module.c
|
||||
|
||||
|
||||
HTTP_EMPTY_GIF_MODULE=ngx_http_empty_gif_module
|
||||
HTTP_EMPTY_GIF_SRCS=src/http/modules/ngx_http_empty_gif_module.c
|
||||
|
||||
|
||||
HTTP_BROWSER_MODULE=ngx_http_browser_module
|
||||
HTTP_BROWSER_SRCS=src/http/modules/ngx_http_browser_module.c
|
||||
|
||||
|
||||
HTTP_SECURE_LINK_MODULE=ngx_http_secure_link_module
|
||||
HTTP_SECURE_LINK_SRCS=src/http/modules/ngx_http_secure_link_module.c
|
||||
|
||||
|
||||
HTTP_DEGRADATION_MODULE=ngx_http_degradation_module
|
||||
HTTP_DEGRADATION_SRCS=src/http/modules/ngx_http_degradation_module.c
|
||||
|
||||
|
||||
HTTP_FLV_MODULE=ngx_http_flv_module
|
||||
HTTP_FLV_SRCS=src/http/modules/ngx_http_flv_module.c
|
||||
|
||||
|
||||
HTTP_MP4_MODULE=ngx_http_mp4_module
|
||||
HTTP_MP4_SRCS=src/http/modules/ngx_http_mp4_module.c
|
||||
|
||||
|
||||
HTTP_GZIP_STATIC_MODULE=ngx_http_gzip_static_module
|
||||
HTTP_GZIP_STATIC_SRCS=src/http/modules/ngx_http_gzip_static_module.c
|
||||
|
||||
|
||||
HTTP_UPSTREAM_IP_HASH_MODULE=ngx_http_upstream_ip_hash_module
|
||||
HTTP_UPSTREAM_IP_HASH_SRCS=src/http/modules/ngx_http_upstream_ip_hash_module.c
|
||||
|
||||
|
||||
HTTP_UPSTREAM_LEAST_CONN_MODULE=ngx_http_upstream_least_conn_module
|
||||
HTTP_UPSTREAM_LEAST_CONN_SRCS=" \
|
||||
src/http/modules/ngx_http_upstream_least_conn_module.c"
|
||||
|
||||
|
||||
HTTP_UPSTREAM_KEEPALIVE_MODULE=ngx_http_upstream_keepalive_module
|
||||
HTTP_UPSTREAM_KEEPALIVE_SRCS=" \
|
||||
src/http/modules/ngx_http_upstream_keepalive_module.c"
|
||||
|
||||
|
||||
MAIL_INCS="src/mail"
|
||||
|
||||
MAIL_DEPS="src/mail/ngx_mail.h"
|
||||
|
||||
MAIL_MODULES="ngx_mail_module ngx_mail_core_module"
|
||||
|
||||
MAIL_SRCS="src/mail/ngx_mail.c \
|
||||
src/mail/ngx_mail_core_module.c \
|
||||
src/mail/ngx_mail_handler.c \
|
||||
src/mail/ngx_mail_parse.c"
|
||||
|
||||
MAIL_POP3_MODULE="ngx_mail_pop3_module"
|
||||
MAIL_POP3_DEPS="src/mail/ngx_mail_pop3_module.h"
|
||||
MAIL_POP3_SRCS="src/mail/ngx_mail_pop3_module.c \
|
||||
src/mail/ngx_mail_pop3_handler.c"
|
||||
|
||||
MAIL_IMAP_MODULE="ngx_mail_imap_module"
|
||||
MAIL_IMAP_DEPS="src/mail/ngx_mail_imap_module.h"
|
||||
MAIL_IMAP_SRCS="src/mail/ngx_mail_imap_module.c \
|
||||
src/mail/ngx_mail_imap_handler.c"
|
||||
|
||||
MAIL_SMTP_MODULE="ngx_mail_smtp_module"
|
||||
MAIL_SMTP_DEPS="src/mail/ngx_mail_smtp_module.h"
|
||||
MAIL_SMTP_SRCS="src/mail/ngx_mail_smtp_module.c \
|
||||
src/mail/ngx_mail_smtp_handler.c"
|
||||
|
||||
MAIL_SSL_MODULE="ngx_mail_ssl_module"
|
||||
MAIL_SSL_DEPS="src/mail/ngx_mail_ssl_module.h"
|
||||
MAIL_SSL_SRCS="src/mail/ngx_mail_ssl_module.c"
|
||||
|
||||
MAIL_AUTH_HTTP_MODULE="ngx_mail_auth_http_module"
|
||||
MAIL_AUTH_HTTP_SRCS="src/mail/ngx_mail_auth_http_module.c"
|
||||
|
||||
MAIL_PROXY_MODULE="ngx_mail_proxy_module"
|
||||
MAIL_PROXY_SRCS="src/mail/ngx_mail_proxy_module.c"
|
||||
|
||||
NGX_GOOGLE_PERFTOOLS_MODULE=ngx_google_perftools_module
|
||||
NGX_GOOGLE_PERFTOOLS_SRCS=src/misc/ngx_google_perftools_module.c
|
||||
|
||||
NGX_CPP_TEST_SRCS=src/misc/ngx_cpp_test_module.cpp
|
||||
|
|
46
auto/summary
46
auto/summary
|
@ -3,22 +3,43 @@
|
|||
# Copyright (C) Nginx, Inc.
|
||||
|
||||
|
||||
### STUB
|
||||
|
||||
if [ $USE_THREADS != NO ]; then
|
||||
|
||||
cat << END
|
||||
|
||||
$0: error: the threads support is broken now.
|
||||
|
||||
END
|
||||
exit 1
|
||||
fi
|
||||
|
||||
###
|
||||
|
||||
|
||||
echo
|
||||
echo "Configuration summary"
|
||||
|
||||
|
||||
if [ $USE_THREADS = YES ]; then
|
||||
echo " + using threads"
|
||||
fi
|
||||
#case $USE_THREADS in
|
||||
# rfork) echo " + using rfork()ed threads" ;;
|
||||
# pthreads) echo " + using libpthread threads library" ;;
|
||||
# libthr) echo " + using FreeBSD libthr threads library" ;;
|
||||
# libc_r) echo " + using FreeBSD libc_r threads library" ;;
|
||||
# linuxthreads) echo " + using FreeBSD LinuxThreads port library" ;;
|
||||
# NO) echo " + threads are not used" ;;
|
||||
# *) echo " + using lib$USE_THREADS threads library" ;;
|
||||
#esac
|
||||
|
||||
if [ $USE_PCRE = DISABLED ]; then
|
||||
echo " + PCRE library is disabled"
|
||||
|
||||
else
|
||||
case $PCRE in
|
||||
YES) echo " + using system $PCRE_LIBRARY library" ;;
|
||||
YES) echo " + using system PCRE library" ;;
|
||||
NONE) echo " + PCRE library is not used" ;;
|
||||
*) echo " + using $PCRE_LIBRARY library: $PCRE" ;;
|
||||
*) echo " + using PCRE library: $PCRE" ;;
|
||||
esac
|
||||
fi
|
||||
|
||||
|
@ -28,6 +49,20 @@ case $OPENSSL in
|
|||
*) echo " + using OpenSSL library: $OPENSSL" ;;
|
||||
esac
|
||||
|
||||
case $MD5 in
|
||||
YES) echo " + md5: using $MD5_LIB library" ;;
|
||||
NONE) echo " + md5 library is not used" ;;
|
||||
NO) echo " + using builtin md5 code" ;;
|
||||
*) echo " + using md5 library: $MD5" ;;
|
||||
esac
|
||||
|
||||
case $SHA1 in
|
||||
YES) echo " + sha1: using $SHA1_LIB library" ;;
|
||||
NONE) echo " + sha1 library is not used" ;;
|
||||
NO) echo " + sha1 library is not found" ;;
|
||||
*) echo " + using sha1 library: $SHA1" ;;
|
||||
esac
|
||||
|
||||
case $ZLIB in
|
||||
YES) echo " + using system zlib library" ;;
|
||||
NONE) echo " + zlib library is not used" ;;
|
||||
|
@ -46,7 +81,6 @@ echo
|
|||
cat << END
|
||||
nginx path prefix: "$NGX_PREFIX"
|
||||
nginx binary file: "$NGX_SBIN_PATH"
|
||||
nginx modules path: "$NGX_MODULES_PATH"
|
||||
nginx configuration prefix: "$NGX_CONF_PREFIX"
|
||||
nginx configuration file: "$NGX_CONF_PATH"
|
||||
nginx pid file: "$NGX_PID_PATH"
|
||||
|
|
21
auto/threads
21
auto/threads
|
@ -1,21 +0,0 @@
|
|||
|
||||
# Copyright (C) Nginx, Inc.
|
||||
|
||||
|
||||
if [ $USE_THREADS = YES ]; then
|
||||
|
||||
if [ "$NGX_PLATFORM" = win32 ]; then
|
||||
cat << END
|
||||
|
||||
$0: --with-threads is not supported on Windows
|
||||
|
||||
END
|
||||
exit 1
|
||||
fi
|
||||
|
||||
have=NGX_THREADS . auto/have
|
||||
CORE_DEPS="$CORE_DEPS $THREAD_POOL_DEPS"
|
||||
CORE_SRCS="$CORE_SRCS $THREAD_POOL_SRCS"
|
||||
CORE_LIBS="$CORE_LIBS -lpthread"
|
||||
NGX_LIBPTHREAD="-lpthread"
|
||||
fi
|
|
@ -25,7 +25,7 @@ $NGX_INCLUDE_UNISTD_H
|
|||
$NGX_INCLUDE_INTTYPES_H
|
||||
$NGX_INCLUDE_AUTO_CONFIG_H
|
||||
|
||||
int main(void) {
|
||||
int main() {
|
||||
printf("%d", (int) sizeof($ngx_type));
|
||||
return 0;
|
||||
}
|
||||
|
@ -45,14 +45,27 @@ if [ -x $NGX_AUTOTEST ]; then
|
|||
fi
|
||||
|
||||
|
||||
rm -rf $NGX_AUTOTEST*
|
||||
|
||||
|
||||
case $ngx_size in
|
||||
4)
|
||||
ngx_max_value=2147483647
|
||||
if [ "$ngx_type"="long" ]; then
|
||||
ngx_max_value=2147483647L
|
||||
else
|
||||
ngx_max_value=2147483647
|
||||
fi
|
||||
|
||||
ngx_max_len='(sizeof("-2147483648") - 1)'
|
||||
;;
|
||||
|
||||
8)
|
||||
ngx_max_value=9223372036854775807LL
|
||||
if [ "$ngx_type"="long long" ]; then
|
||||
ngx_max_value=9223372036854775807LL
|
||||
else
|
||||
ngx_max_value=9223372036854775807L
|
||||
fi
|
||||
|
||||
ngx_max_len='(sizeof("-9223372036854775808") - 1)'
|
||||
;;
|
||||
|
||||
|
@ -66,11 +79,6 @@ case $ngx_size in
|
|||
echo $ngx_test >> $NGX_AUTOCONF_ERR
|
||||
echo "----------" >> $NGX_AUTOCONF_ERR
|
||||
|
||||
rm -rf $NGX_AUTOTEST*
|
||||
|
||||
exit 1
|
||||
esac
|
||||
|
||||
|
||||
rm -rf $NGX_AUTOTEST*
|
||||
|
||||
|
|
|
@ -27,7 +27,7 @@ do
|
|||
#include <netinet/in.h>
|
||||
$NGX_INCLUDE_INTTYPES_H
|
||||
|
||||
int main(void) {
|
||||
int main() {
|
||||
$ngx_try i = 0;
|
||||
return (int) i;
|
||||
}
|
||||
|
@ -49,23 +49,18 @@ END
|
|||
fi
|
||||
fi
|
||||
|
||||
rm -rf $NGX_AUTOTEST*
|
||||
|
||||
if [ $ngx_found = no ]; then
|
||||
if [ $ngx_try = $ngx_type ]; then
|
||||
echo $ngx_n " $ngx_try not found$ngx_c"
|
||||
else
|
||||
echo $ngx_n ", $ngx_try not found$ngx_c"
|
||||
fi
|
||||
echo $ngx_n " $ngx_try not found$ngx_c"
|
||||
|
||||
echo "----------" >> $NGX_AUTOCONF_ERR
|
||||
cat $NGX_AUTOTEST.c >> $NGX_AUTOCONF_ERR
|
||||
echo "----------" >> $NGX_AUTOCONF_ERR
|
||||
echo $ngx_test >> $NGX_AUTOCONF_ERR
|
||||
echo "----------" >> $NGX_AUTOCONF_ERR
|
||||
fi
|
||||
|
||||
rm -rf $NGX_AUTOTEST*
|
||||
|
||||
if [ $ngx_found != no ]; then
|
||||
else
|
||||
break
|
||||
fi
|
||||
done
|
||||
|
|
|
@ -4,22 +4,17 @@
|
|||
|
||||
|
||||
echo $ngx_n "checking for uintptr_t ...$ngx_c"
|
||||
|
||||
cat << END >> $NGX_AUTOCONF_ERR
|
||||
|
||||
----------------------------------------
|
||||
checking for uintptr_t
|
||||
|
||||
END
|
||||
echo >> $NGX_AUTOCONF_ERR
|
||||
echo "checking for uintptr_t" >> $NGX_AUTOCONF_ERR
|
||||
|
||||
found=no
|
||||
|
||||
cat << END > $NGX_AUTOTEST.c
|
||||
|
||||
#include <sys/types.h>
|
||||
$NGX_INCLUDE_INTTYPES_H
|
||||
$NGX_INTTYPES_H
|
||||
|
||||
int main(void) {
|
||||
int main() {
|
||||
uintptr_t i = 0;
|
||||
return (int) i;
|
||||
}
|
||||
|
|
|
@ -75,7 +75,7 @@ if test -z "$NGX_KQUEUE_CHECKED"; then
|
|||
ngx_feature_incs="#include <sys/event.h>"
|
||||
ngx_feature_path=
|
||||
ngx_feature_libs=
|
||||
ngx_feature_test="(void) kqueue()"
|
||||
ngx_feature_test="int kq; kq = kqueue()"
|
||||
. auto/feature
|
||||
|
||||
if [ $ngx_found = yes ]; then
|
||||
|
@ -92,8 +92,7 @@ if test -z "$NGX_KQUEUE_CHECKED"; then
|
|||
ngx_feature_path=
|
||||
ngx_feature_libs=
|
||||
ngx_feature_test="struct kevent kev;
|
||||
kev.fflags = NOTE_LOWAT;
|
||||
(void) kev"
|
||||
kev.fflags = NOTE_LOWAT;"
|
||||
. auto/feature
|
||||
|
||||
|
||||
|
@ -256,23 +255,22 @@ ngx_feature_test="struct statvfs fs;
|
|||
|
||||
|
||||
ngx_feature="dlopen()"
|
||||
ngx_feature_name="NGX_HAVE_DLOPEN"
|
||||
ngx_feature_name=
|
||||
ngx_feature_run=no
|
||||
ngx_feature_incs="#include <dlfcn.h>"
|
||||
ngx_feature_path=
|
||||
ngx_feature_libs=
|
||||
ngx_feature_test="dlopen(NULL, RTLD_NOW | RTLD_GLOBAL); dlsym(NULL, \"\")"
|
||||
ngx_feature_test="dlopen(NULL, 0)"
|
||||
. auto/feature
|
||||
|
||||
|
||||
if [ $ngx_found = no ]; then
|
||||
if [ $ngx_found != yes ]; then
|
||||
|
||||
ngx_feature="dlopen() in libdl"
|
||||
ngx_feature_libs="-ldl"
|
||||
. auto/feature
|
||||
|
||||
if [ $ngx_found = yes ]; then
|
||||
CORE_LIBS="$CORE_LIBS -ldl"
|
||||
NGX_LIBDL="-ldl"
|
||||
fi
|
||||
fi
|
||||
|
@ -288,7 +286,7 @@ ngx_feature_test="sched_yield()"
|
|||
. auto/feature
|
||||
|
||||
|
||||
if [ $ngx_found = no ]; then
|
||||
if [ $ngx_found != yes ]; then
|
||||
|
||||
ngx_feature="sched_yield() in librt"
|
||||
ngx_feature_libs="-lrt"
|
||||
|
@ -300,35 +298,13 @@ if [ $ngx_found = no ]; then
|
|||
fi
|
||||
|
||||
|
||||
ngx_feature="sched_setaffinity()"
|
||||
ngx_feature_name="NGX_HAVE_SCHED_SETAFFINITY"
|
||||
ngx_feature_run=no
|
||||
ngx_feature_incs="#include <sched.h>"
|
||||
ngx_feature_path=
|
||||
ngx_feature_libs=
|
||||
ngx_feature_test="cpu_set_t mask;
|
||||
CPU_ZERO(&mask);
|
||||
sched_setaffinity(0, sizeof(cpu_set_t), &mask)"
|
||||
. auto/feature
|
||||
|
||||
|
||||
ngx_feature="SO_SETFIB"
|
||||
ngx_feature_name="NGX_HAVE_SETFIB"
|
||||
ngx_feature_run=no
|
||||
ngx_feature_incs="#include <sys/socket.h>"
|
||||
ngx_feature_path=
|
||||
ngx_feature_libs=
|
||||
ngx_feature_test="setsockopt(0, SOL_SOCKET, SO_SETFIB, NULL, 0)"
|
||||
. auto/feature
|
||||
|
||||
|
||||
ngx_feature="SO_REUSEPORT"
|
||||
ngx_feature_name="NGX_HAVE_REUSEPORT"
|
||||
ngx_feature_run=no
|
||||
ngx_feature_incs="#include <sys/socket.h>"
|
||||
ngx_feature_path=
|
||||
ngx_feature_libs=
|
||||
ngx_feature_test="setsockopt(0, SOL_SOCKET, SO_REUSEPORT, NULL, 0)"
|
||||
ngx_feature_test="setsockopt(0, SOL_SOCKET, SO_SETFIB, NULL, 4)"
|
||||
. auto/feature
|
||||
|
||||
|
||||
|
@ -342,112 +318,6 @@ ngx_feature_test="setsockopt(0, SOL_SOCKET, SO_ACCEPTFILTER, NULL, 0)"
|
|||
. auto/feature
|
||||
|
||||
|
||||
# OpenBSD bind to any address for transparent proxying
|
||||
|
||||
ngx_feature="SO_BINDANY"
|
||||
ngx_feature_name="NGX_HAVE_TRANSPARENT_PROXY"
|
||||
ngx_feature_run=no
|
||||
ngx_feature_incs="#include <sys/socket.h>"
|
||||
ngx_feature_path=
|
||||
ngx_feature_libs=
|
||||
ngx_feature_test="setsockopt(0, SOL_SOCKET, SO_BINDANY, NULL, 0)"
|
||||
. auto/feature
|
||||
|
||||
|
||||
# Linux transparent proxying
|
||||
|
||||
ngx_feature="IP_TRANSPARENT"
|
||||
ngx_feature_name="NGX_HAVE_TRANSPARENT_PROXY"
|
||||
ngx_feature_run=no
|
||||
ngx_feature_incs="#include <sys/socket.h>
|
||||
#include <netinet/in.h>"
|
||||
ngx_feature_path=
|
||||
ngx_feature_libs=
|
||||
ngx_feature_test="setsockopt(0, IPPROTO_IP, IP_TRANSPARENT, NULL, 0)"
|
||||
. auto/feature
|
||||
|
||||
|
||||
# FreeBSD bind to any address for transparent proxying
|
||||
|
||||
ngx_feature="IP_BINDANY"
|
||||
ngx_feature_name="NGX_HAVE_TRANSPARENT_PROXY"
|
||||
ngx_feature_run=no
|
||||
ngx_feature_incs="#include <sys/socket.h>
|
||||
#include <netinet/in.h>"
|
||||
ngx_feature_path=
|
||||
ngx_feature_libs=
|
||||
ngx_feature_test="setsockopt(0, IPPROTO_IP, IP_BINDANY, NULL, 0)"
|
||||
. auto/feature
|
||||
|
||||
|
||||
# Linux IP_BIND_ADDRESS_NO_PORT
|
||||
|
||||
ngx_feature="IP_BIND_ADDRESS_NO_PORT"
|
||||
ngx_feature_name="NGX_HAVE_IP_BIND_ADDRESS_NO_PORT"
|
||||
ngx_feature_run=no
|
||||
ngx_feature_incs="#include <sys/socket.h>
|
||||
#include <netinet/in.h>"
|
||||
ngx_feature_path=
|
||||
ngx_feature_libs=
|
||||
ngx_feature_test="setsockopt(0, IPPROTO_IP, IP_BIND_ADDRESS_NO_PORT, NULL, 0)"
|
||||
. auto/feature
|
||||
|
||||
|
||||
# BSD way to get IPv4 datagram destination address
|
||||
|
||||
ngx_feature="IP_RECVDSTADDR"
|
||||
ngx_feature_name="NGX_HAVE_IP_RECVDSTADDR"
|
||||
ngx_feature_run=no
|
||||
ngx_feature_incs="#include <sys/socket.h>
|
||||
#include <netinet/in.h>"
|
||||
ngx_feature_path=
|
||||
ngx_feature_libs=
|
||||
ngx_feature_test="setsockopt(0, IPPROTO_IP, IP_RECVDSTADDR, NULL, 0)"
|
||||
. auto/feature
|
||||
|
||||
|
||||
# BSD way to set IPv4 datagram source address
|
||||
|
||||
ngx_feature="IP_SENDSRCADDR"
|
||||
ngx_feature_name="NGX_HAVE_IP_SENDSRCADDR"
|
||||
ngx_feature_run=no
|
||||
ngx_feature_incs="#include <sys/socket.h>
|
||||
#include <netinet/in.h>"
|
||||
ngx_feature_path=
|
||||
ngx_feature_libs=
|
||||
ngx_feature_test="setsockopt(0, IPPROTO_IP, IP_SENDSRCADDR, NULL, 0)"
|
||||
. auto/feature
|
||||
|
||||
|
||||
# Linux way to get IPv4 datagram destination address
|
||||
|
||||
ngx_feature="IP_PKTINFO"
|
||||
ngx_feature_name="NGX_HAVE_IP_PKTINFO"
|
||||
ngx_feature_run=no
|
||||
ngx_feature_incs="#include <sys/socket.h>
|
||||
#include <netinet/in.h>"
|
||||
ngx_feature_path=
|
||||
ngx_feature_libs=
|
||||
ngx_feature_test="struct in_pktinfo pkt;
|
||||
pkt.ipi_spec_dst.s_addr = INADDR_ANY;
|
||||
(void) pkt;
|
||||
setsockopt(0, IPPROTO_IP, IP_PKTINFO, NULL, 0)"
|
||||
. auto/feature
|
||||
|
||||
|
||||
# RFC 3542 way to get IPv6 datagram destination address
|
||||
|
||||
ngx_feature="IPV6_RECVPKTINFO"
|
||||
ngx_feature_name="NGX_HAVE_IPV6_RECVPKTINFO"
|
||||
ngx_feature_run=no
|
||||
ngx_feature_incs="#include <sys/socket.h>
|
||||
#include <netinet/in.h>"
|
||||
ngx_feature_path=
|
||||
ngx_feature_libs=
|
||||
ngx_feature_test="setsockopt(0, IPPROTO_IPV6, IPV6_RECVPKTINFO, NULL, 0)"
|
||||
. auto/feature
|
||||
|
||||
|
||||
ngx_feature="TCP_DEFER_ACCEPT"
|
||||
ngx_feature_name="NGX_HAVE_DEFERRED_ACCEPT"
|
||||
ngx_feature_run=no
|
||||
|
@ -521,66 +391,43 @@ if [ $NGX_FILE_AIO = YES ]; then
|
|||
ngx_feature_incs="#include <aio.h>"
|
||||
ngx_feature_path=
|
||||
ngx_feature_libs=
|
||||
ngx_feature_test="struct aiocb iocb;
|
||||
ngx_feature_test="int n; struct aiocb iocb;
|
||||
iocb.aio_sigevent.sigev_notify = SIGEV_KEVENT;
|
||||
(void) aio_read(&iocb)"
|
||||
n = aio_read(&iocb)"
|
||||
. auto/feature
|
||||
|
||||
if [ $ngx_found = yes ]; then
|
||||
CORE_SRCS="$CORE_SRCS $FILE_AIO_SRCS"
|
||||
fi
|
||||
|
||||
if [ $ngx_found = no ]; then
|
||||
elif [ $ngx_found = no ]; then
|
||||
|
||||
ngx_feature="Linux AIO support"
|
||||
ngx_feature_name="NGX_HAVE_FILE_AIO"
|
||||
ngx_feature_run=no
|
||||
ngx_feature_incs="#include <linux/aio_abi.h>
|
||||
#include <sys/eventfd.h>"
|
||||
#include <sys/syscall.h>"
|
||||
ngx_feature_path=
|
||||
ngx_feature_libs=
|
||||
ngx_feature_test="struct iocb iocb;
|
||||
ngx_feature_test="int n = SYS_eventfd;
|
||||
struct iocb iocb;
|
||||
iocb.aio_lio_opcode = IOCB_CMD_PREAD;
|
||||
iocb.aio_flags = IOCB_FLAG_RESFD;
|
||||
iocb.aio_resfd = -1;
|
||||
(void) iocb;
|
||||
(void) eventfd(0, 0)"
|
||||
. auto/feature
|
||||
|
||||
if [ $ngx_found = yes ]; then
|
||||
have=NGX_HAVE_EVENTFD . auto/have
|
||||
have=NGX_HAVE_SYS_EVENTFD_H . auto/have
|
||||
CORE_SRCS="$CORE_SRCS $LINUX_AIO_SRCS"
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ $ngx_found = no ]; then
|
||||
|
||||
ngx_feature="Linux AIO support (SYS_eventfd)"
|
||||
ngx_feature_incs="#include <linux/aio_abi.h>
|
||||
#include <sys/syscall.h>"
|
||||
ngx_feature_test="struct iocb iocb;
|
||||
iocb.aio_lio_opcode = IOCB_CMD_PREAD;
|
||||
iocb.aio_flags = IOCB_FLAG_RESFD;
|
||||
iocb.aio_resfd = -1;
|
||||
(void) iocb;
|
||||
(void) SYS_eventfd"
|
||||
iocb.aio_resfd = -1;"
|
||||
. auto/feature
|
||||
|
||||
if [ $ngx_found = yes ]; then
|
||||
have=NGX_HAVE_EVENTFD . auto/have
|
||||
CORE_SRCS="$CORE_SRCS $LINUX_AIO_SRCS"
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ $ngx_found = no ]; then
|
||||
cat << END
|
||||
else
|
||||
cat << END
|
||||
|
||||
$0: no supported file AIO was found
|
||||
Currently file AIO is supported on FreeBSD 4.3+ and Linux 2.6.22+ only
|
||||
|
||||
END
|
||||
exit 1
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
|
@ -604,9 +451,15 @@ ngx_param=NGX_PTR_SIZE; ngx_value=$ngx_size; . auto/types/value
|
|||
|
||||
# POSIX types
|
||||
|
||||
NGX_INCLUDE_AUTO_CONFIG_H="#include \"ngx_auto_config.h\""
|
||||
case "$NGX_AUTO_CONFIG_H" in
|
||||
/*)
|
||||
NGX_INCLUDE_AUTO_CONFIG_H="#include \"$NGX_AUTO_CONFIG_H\""
|
||||
;;
|
||||
*)
|
||||
NGX_INCLUDE_AUTO_CONFIG_H="#include \"../$NGX_AUTO_CONFIG_H\""
|
||||
;;
|
||||
esac
|
||||
|
||||
ngx_type="uint32_t"; ngx_types="u_int32_t"; . auto/types/typedef
|
||||
ngx_type="uint64_t"; ngx_types="u_int64_t"; . auto/types/typedef
|
||||
|
||||
ngx_type="sig_atomic_t"; ngx_types="int"; . auto/types/typedef
|
||||
|
@ -615,7 +468,7 @@ ngx_param=NGX_SIG_ATOMIC_T_SIZE; ngx_value=$ngx_size; . auto/types/value
|
|||
|
||||
ngx_type="socklen_t"; ngx_types="int"; . auto/types/typedef
|
||||
|
||||
ngx_type="in_addr_t"; ngx_types="uint32_t u_int32_t"; . auto/types/typedef
|
||||
ngx_type="in_addr_t"; ngx_types="uint32_t"; . auto/types/typedef
|
||||
|
||||
ngx_type="in_port_t"; ngx_types="u_short"; . auto/types/typedef
|
||||
|
||||
|
@ -642,18 +495,19 @@ ngx_param=NGX_MAX_TIME_T_VALUE; ngx_value=$ngx_max_value; . auto/types/value
|
|||
# syscalls, libc calls and some features
|
||||
|
||||
|
||||
ngx_feature="AF_INET6"
|
||||
ngx_feature_name="NGX_HAVE_INET6"
|
||||
ngx_feature_run=no
|
||||
ngx_feature_incs="#include <sys/socket.h>
|
||||
#include <netinet/in.h>
|
||||
#include <arpa/inet.h>"
|
||||
ngx_feature_path=
|
||||
ngx_feature_libs=
|
||||
ngx_feature_test="struct sockaddr_in6 sin6;
|
||||
sin6.sin6_family = AF_INET6;
|
||||
(void) sin6"
|
||||
. auto/feature
|
||||
if [ $NGX_IPV6 = YES ]; then
|
||||
ngx_feature="AF_INET6"
|
||||
ngx_feature_name="NGX_HAVE_INET6"
|
||||
ngx_feature_run=no
|
||||
ngx_feature_incs="#include <sys/socket.h>
|
||||
#include <netinet/in.h>
|
||||
#include <arpa/inet.h>"
|
||||
ngx_feature_path=
|
||||
ngx_feature_libs=
|
||||
ngx_feature_test="struct sockaddr_in6 sin6;
|
||||
sin6.sin6_family = AF_INET6;"
|
||||
. auto/feature
|
||||
fi
|
||||
|
||||
|
||||
ngx_feature="setproctitle()"
|
||||
|
@ -688,49 +542,17 @@ ngx_feature_test="char buf[1]; ssize_t n; n = pwrite(1, buf, 1, 0);
|
|||
. auto/feature
|
||||
|
||||
|
||||
# pwritev() was introduced in FreeBSD 6 and Linux 2.6.30, glibc 2.10
|
||||
|
||||
ngx_feature="pwritev()"
|
||||
ngx_feature_name="NGX_HAVE_PWRITEV"
|
||||
ngx_feature_run=no
|
||||
ngx_feature_incs='#include <sys/uio.h>'
|
||||
ngx_feature="sys_nerr"
|
||||
ngx_feature_name="NGX_SYS_NERR"
|
||||
ngx_feature_run=value
|
||||
ngx_feature_incs='#include <errno.h>
|
||||
#include <stdio.h>'
|
||||
ngx_feature_path=
|
||||
ngx_feature_libs=
|
||||
ngx_feature_test="char buf[1]; struct iovec vec[1]; ssize_t n;
|
||||
vec[0].iov_base = buf;
|
||||
vec[0].iov_len = 1;
|
||||
n = pwritev(1, vec, 1, 0);
|
||||
if (n == -1) return 1"
|
||||
ngx_feature_test='printf("%d", sys_nerr);'
|
||||
. auto/feature
|
||||
|
||||
|
||||
# strerrordesc_np(), introduced in glibc 2.32
|
||||
|
||||
ngx_feature="strerrordesc_np()"
|
||||
ngx_feature_name="NGX_HAVE_STRERRORDESC_NP"
|
||||
ngx_feature_run=no
|
||||
ngx_feature_incs='#include <string.h>'
|
||||
ngx_feature_path=
|
||||
ngx_feature_libs=
|
||||
ngx_feature_test="char *p; p = strerrordesc_np(0);
|
||||
if (p == NULL) return 1"
|
||||
. auto/feature
|
||||
|
||||
|
||||
if [ $ngx_found = no ]; then
|
||||
|
||||
ngx_feature="sys_nerr"
|
||||
ngx_feature_name="NGX_SYS_NERR"
|
||||
ngx_feature_run=value
|
||||
ngx_feature_incs='#include <errno.h>
|
||||
#include <stdio.h>'
|
||||
ngx_feature_path=
|
||||
ngx_feature_libs=
|
||||
ngx_feature_test='printf("%d", sys_nerr);'
|
||||
. auto/feature
|
||||
fi
|
||||
|
||||
|
||||
if [ $ngx_found = no ]; then
|
||||
|
||||
# Cygiwn defines _sys_nerr
|
||||
|
@ -746,6 +568,34 @@ if [ $ngx_found = no ]; then
|
|||
fi
|
||||
|
||||
|
||||
if [ $ngx_found = no ]; then
|
||||
|
||||
# Solaris has no sys_nerr
|
||||
ngx_feature='maximum errno'
|
||||
ngx_feature_name=NGX_SYS_NERR
|
||||
ngx_feature_run=value
|
||||
ngx_feature_incs='#include <errno.h>
|
||||
#include <string.h>
|
||||
#include <stdio.h>'
|
||||
ngx_feature_path=
|
||||
ngx_feature_libs=
|
||||
ngx_feature_test='int n;
|
||||
char *p;
|
||||
for (n = 1; n < 1000; n++) {
|
||||
errno = 0;
|
||||
p = strerror(n);
|
||||
if (errno == EINVAL
|
||||
|| p == NULL
|
||||
|| strncmp(p, "Unknown error", 13) == 0)
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
printf("%d", n);'
|
||||
. auto/feature
|
||||
fi
|
||||
|
||||
|
||||
ngx_feature="localtime_r()"
|
||||
ngx_feature_name="NGX_HAVE_LOCALTIME_R"
|
||||
ngx_feature_run=no
|
||||
|
@ -756,30 +606,6 @@ ngx_feature_test="struct tm t; time_t c=0; localtime_r(&c, &t)"
|
|||
. auto/feature
|
||||
|
||||
|
||||
ngx_feature="clock_gettime(CLOCK_MONOTONIC)"
|
||||
ngx_feature_name="NGX_HAVE_CLOCK_MONOTONIC"
|
||||
ngx_feature_run=no
|
||||
ngx_feature_incs="#include <time.h>"
|
||||
ngx_feature_path=
|
||||
ngx_feature_libs=
|
||||
ngx_feature_test="struct timespec ts; clock_gettime(CLOCK_MONOTONIC, &ts)"
|
||||
. auto/feature
|
||||
|
||||
|
||||
if [ $ngx_found = no ]; then
|
||||
|
||||
# Linux before glibc 2.17, notably CentOS 6
|
||||
|
||||
ngx_feature="clock_gettime(CLOCK_MONOTONIC) in librt"
|
||||
ngx_feature_libs="-lrt"
|
||||
. auto/feature
|
||||
|
||||
if [ $ngx_found = yes ]; then
|
||||
CORE_LIBS="$CORE_LIBS -lrt"
|
||||
fi
|
||||
fi
|
||||
|
||||
|
||||
ngx_feature="posix_memalign()"
|
||||
ngx_feature_name="NGX_HAVE_POSIX_MEMALIGN"
|
||||
ngx_feature_run=no
|
||||
|
@ -866,7 +692,6 @@ if [ $ngx_found = no ]; then
|
|||
|
||||
if [ $ngx_found = yes ]; then
|
||||
CORE_LIBS="$CORE_LIBS -lpthread"
|
||||
NGX_LIBPTHREAD="-lpthread"
|
||||
fi
|
||||
fi
|
||||
|
||||
|
@ -908,18 +733,6 @@ ngx_feature_test="int i = FIONBIO; printf(\"%d\", i)"
|
|||
. auto/feature
|
||||
|
||||
|
||||
ngx_feature="ioctl(FIONREAD)"
|
||||
ngx_feature_name="NGX_HAVE_FIONREAD"
|
||||
ngx_feature_run=no
|
||||
ngx_feature_incs="#include <sys/ioctl.h>
|
||||
#include <stdio.h>
|
||||
$NGX_INCLUDE_SYS_FILIO_H"
|
||||
ngx_feature_path=
|
||||
ngx_feature_libs=
|
||||
ngx_feature_test="int i = FIONREAD; printf(\"%d\", i)"
|
||||
. auto/feature
|
||||
|
||||
|
||||
ngx_feature="struct tm.tm_gmtoff"
|
||||
ngx_feature_name="NGX_HAVE_GMTOFF"
|
||||
ngx_feature_run=no
|
||||
|
@ -966,16 +779,6 @@ ngx_feature_test="sysconf(_SC_NPROCESSORS_ONLN)"
|
|||
. auto/feature
|
||||
|
||||
|
||||
ngx_feature="sysconf(_SC_LEVEL1_DCACHE_LINESIZE)"
|
||||
ngx_feature_name="NGX_HAVE_LEVEL1_DCACHE_LINESIZE"
|
||||
ngx_feature_run=no
|
||||
ngx_feature_incs=
|
||||
ngx_feature_path=
|
||||
ngx_feature_libs=
|
||||
ngx_feature_test="sysconf(_SC_LEVEL1_DCACHE_LINESIZE)"
|
||||
. auto/feature
|
||||
|
||||
|
||||
ngx_feature="openat(), fstatat()"
|
||||
ngx_feature_name="NGX_HAVE_OPENAT"
|
||||
ngx_feature_run=no
|
||||
|
|
|
@ -10,7 +10,6 @@ fastcgi_param REQUEST_URI $request_uri;
|
|||
fastcgi_param DOCUMENT_URI $document_uri;
|
||||
fastcgi_param DOCUMENT_ROOT $document_root;
|
||||
fastcgi_param SERVER_PROTOCOL $server_protocol;
|
||||
fastcgi_param REQUEST_SCHEME $scheme;
|
||||
fastcgi_param HTTPS $https if_not_empty;
|
||||
|
||||
fastcgi_param GATEWAY_INTERFACE CGI/1.1;
|
||||
|
|
|
@ -9,7 +9,6 @@ fastcgi_param REQUEST_URI $request_uri;
|
|||
fastcgi_param DOCUMENT_URI $document_uri;
|
||||
fastcgi_param DOCUMENT_ROOT $document_root;
|
||||
fastcgi_param SERVER_PROTOCOL $server_protocol;
|
||||
fastcgi_param REQUEST_SCHEME $scheme;
|
||||
fastcgi_param HTTPS $https if_not_empty;
|
||||
|
||||
fastcgi_param GATEWAY_INTERFACE CGI/1.1;
|
||||
|
|
168
conf/mime.types
168
conf/mime.types
|
@ -1,99 +1,89 @@
|
|||
|
||||
types {
|
||||
text/html html htm shtml;
|
||||
text/css css;
|
||||
text/xml xml;
|
||||
image/gif gif;
|
||||
image/jpeg jpeg jpg;
|
||||
application/javascript js;
|
||||
application/atom+xml atom;
|
||||
application/rss+xml rss;
|
||||
text/html html htm shtml;
|
||||
text/css css;
|
||||
text/xml xml;
|
||||
image/gif gif;
|
||||
image/jpeg jpeg jpg;
|
||||
application/javascript js;
|
||||
application/atom+xml atom;
|
||||
application/rss+xml rss;
|
||||
|
||||
text/mathml mml;
|
||||
text/plain txt;
|
||||
text/vnd.sun.j2me.app-descriptor jad;
|
||||
text/vnd.wap.wml wml;
|
||||
text/x-component htc;
|
||||
text/mathml mml;
|
||||
text/plain txt;
|
||||
text/vnd.sun.j2me.app-descriptor jad;
|
||||
text/vnd.wap.wml wml;
|
||||
text/x-component htc;
|
||||
|
||||
image/avif avif;
|
||||
image/png png;
|
||||
image/svg+xml svg svgz;
|
||||
image/tiff tif tiff;
|
||||
image/vnd.wap.wbmp wbmp;
|
||||
image/webp webp;
|
||||
image/x-icon ico;
|
||||
image/x-jng jng;
|
||||
image/x-ms-bmp bmp;
|
||||
image/png png;
|
||||
image/tiff tif tiff;
|
||||
image/vnd.wap.wbmp wbmp;
|
||||
image/x-icon ico;
|
||||
image/x-jng jng;
|
||||
image/x-ms-bmp bmp;
|
||||
image/svg+xml svg svgz;
|
||||
image/webp webp;
|
||||
|
||||
font/woff woff;
|
||||
font/woff2 woff2;
|
||||
application/font-woff woff;
|
||||
application/java-archive jar war ear;
|
||||
application/json json;
|
||||
application/mac-binhex40 hqx;
|
||||
application/msword doc;
|
||||
application/pdf pdf;
|
||||
application/postscript ps eps ai;
|
||||
application/rtf rtf;
|
||||
application/vnd.apple.mpegurl m3u8;
|
||||
application/vnd.ms-excel xls;
|
||||
application/vnd.ms-fontobject eot;
|
||||
application/vnd.ms-powerpoint ppt;
|
||||
application/vnd.wap.wmlc wmlc;
|
||||
application/vnd.google-earth.kml+xml kml;
|
||||
application/vnd.google-earth.kmz kmz;
|
||||
application/x-7z-compressed 7z;
|
||||
application/x-cocoa cco;
|
||||
application/x-java-archive-diff jardiff;
|
||||
application/x-java-jnlp-file jnlp;
|
||||
application/x-makeself run;
|
||||
application/x-perl pl pm;
|
||||
application/x-pilot prc pdb;
|
||||
application/x-rar-compressed rar;
|
||||
application/x-redhat-package-manager rpm;
|
||||
application/x-sea sea;
|
||||
application/x-shockwave-flash swf;
|
||||
application/x-stuffit sit;
|
||||
application/x-tcl tcl tk;
|
||||
application/x-x509-ca-cert der pem crt;
|
||||
application/x-xpinstall xpi;
|
||||
application/xhtml+xml xhtml;
|
||||
application/xspf+xml xspf;
|
||||
application/zip zip;
|
||||
|
||||
application/java-archive jar war ear;
|
||||
application/json json;
|
||||
application/mac-binhex40 hqx;
|
||||
application/msword doc;
|
||||
application/pdf pdf;
|
||||
application/postscript ps eps ai;
|
||||
application/rtf rtf;
|
||||
application/vnd.apple.mpegurl m3u8;
|
||||
application/vnd.google-earth.kml+xml kml;
|
||||
application/vnd.google-earth.kmz kmz;
|
||||
application/vnd.ms-excel xls;
|
||||
application/vnd.ms-fontobject eot;
|
||||
application/vnd.ms-powerpoint ppt;
|
||||
application/vnd.oasis.opendocument.graphics odg;
|
||||
application/vnd.oasis.opendocument.presentation odp;
|
||||
application/vnd.oasis.opendocument.spreadsheet ods;
|
||||
application/vnd.oasis.opendocument.text odt;
|
||||
application/vnd.openxmlformats-officedocument.presentationml.presentation
|
||||
pptx;
|
||||
application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
|
||||
xlsx;
|
||||
application/vnd.openxmlformats-officedocument.wordprocessingml.document
|
||||
docx;
|
||||
application/vnd.wap.wmlc wmlc;
|
||||
application/wasm wasm;
|
||||
application/x-7z-compressed 7z;
|
||||
application/x-cocoa cco;
|
||||
application/x-java-archive-diff jardiff;
|
||||
application/x-java-jnlp-file jnlp;
|
||||
application/x-makeself run;
|
||||
application/x-perl pl pm;
|
||||
application/x-pilot prc pdb;
|
||||
application/x-rar-compressed rar;
|
||||
application/x-redhat-package-manager rpm;
|
||||
application/x-sea sea;
|
||||
application/x-shockwave-flash swf;
|
||||
application/x-stuffit sit;
|
||||
application/x-tcl tcl tk;
|
||||
application/x-x509-ca-cert der pem crt;
|
||||
application/x-xpinstall xpi;
|
||||
application/xhtml+xml xhtml;
|
||||
application/xspf+xml xspf;
|
||||
application/zip zip;
|
||||
application/octet-stream bin exe dll;
|
||||
application/octet-stream deb;
|
||||
application/octet-stream dmg;
|
||||
application/octet-stream iso img;
|
||||
application/octet-stream msi msp msm;
|
||||
|
||||
application/octet-stream bin exe dll;
|
||||
application/octet-stream deb;
|
||||
application/octet-stream dmg;
|
||||
application/octet-stream iso img;
|
||||
application/octet-stream msi msp msm;
|
||||
application/vnd.openxmlformats-officedocument.wordprocessingml.document docx;
|
||||
application/vnd.openxmlformats-officedocument.spreadsheetml.sheet xlsx;
|
||||
application/vnd.openxmlformats-officedocument.presentationml.presentation pptx;
|
||||
|
||||
audio/midi mid midi kar;
|
||||
audio/mpeg mp3;
|
||||
audio/ogg ogg;
|
||||
audio/x-m4a m4a;
|
||||
audio/x-realaudio ra;
|
||||
audio/midi mid midi kar;
|
||||
audio/mpeg mp3;
|
||||
audio/ogg ogg;
|
||||
audio/x-m4a m4a;
|
||||
audio/x-realaudio ra;
|
||||
|
||||
video/3gpp 3gpp 3gp;
|
||||
video/mp2t ts;
|
||||
video/mp4 mp4;
|
||||
video/mpeg mpeg mpg;
|
||||
video/quicktime mov;
|
||||
video/webm webm;
|
||||
video/x-flv flv;
|
||||
video/x-m4v m4v;
|
||||
video/x-mng mng;
|
||||
video/x-ms-asf asx asf;
|
||||
video/x-ms-wmv wmv;
|
||||
video/x-msvideo avi;
|
||||
video/3gpp 3gpp 3gp;
|
||||
video/mp2t ts;
|
||||
video/mp4 mp4;
|
||||
video/mpeg mpeg mpg;
|
||||
video/quicktime mov;
|
||||
video/webm webm;
|
||||
video/x-flv flv;
|
||||
video/x-m4v m4v;
|
||||
video/x-mng mng;
|
||||
video/x-ms-asf asx asf;
|
||||
video/x-ms-wmv wmv;
|
||||
video/x-msvideo avi;
|
||||
}
|
||||
|
|
|
@ -8,7 +8,6 @@ scgi_param DOCUMENT_URI $document_uri;
|
|||
scgi_param DOCUMENT_ROOT $document_root;
|
||||
scgi_param SCGI 1;
|
||||
scgi_param SERVER_PROTOCOL $server_protocol;
|
||||
scgi_param REQUEST_SCHEME $scheme;
|
||||
scgi_param HTTPS $https if_not_empty;
|
||||
|
||||
scgi_param REMOTE_ADDR $remote_addr;
|
||||
|
|
|
@ -8,7 +8,6 @@ uwsgi_param REQUEST_URI $request_uri;
|
|||
uwsgi_param PATH_INFO $document_uri;
|
||||
uwsgi_param DOCUMENT_ROOT $document_root;
|
||||
uwsgi_param SERVER_PROTOCOL $server_protocol;
|
||||
uwsgi_param REQUEST_SCHEME $scheme;
|
||||
uwsgi_param HTTPS $https if_not_empty;
|
||||
|
||||
uwsgi_param REMOTE_ADDR $remote_addr;
|
||||
|
|
|
@ -10,7 +10,7 @@
|
|||
|
||||
# Needs perl 5.6 or later.
|
||||
|
||||
# Written by Maxim Dounin, mdounin@mdounin.ru
|
||||
# Written by Maxim Dounin, mdounin@rambler-co.ru
|
||||
|
||||
###############################################################################
|
||||
|
||||
|
@ -33,10 +33,7 @@ while (<>) {
|
|||
|
||||
# Produce UTF-8 sequence from character code;
|
||||
|
||||
my $un_utf8 = join('',
|
||||
map { sprintf("%02X", $_) }
|
||||
unpack("U0C*", pack("U", hex($un_code)))
|
||||
);
|
||||
my $un_utf8 = join('', map { sprintf("%02X", $_) } unpack("C*", pack("U", hex($un_code))));
|
||||
|
||||
print " $cs_code $un_utf8 ; $un_name\n";
|
||||
|
||||
|
|
|
@ -1 +0,0 @@
|
|||
setlocal commentstring=#\ %s
|
File diff suppressed because it is too large
Load Diff
|
@ -3,9 +3,11 @@
|
|||
<head>
|
||||
<title>Error</title>
|
||||
<style>
|
||||
html { color-scheme: light dark; }
|
||||
body { width: 35em; margin: 0 auto;
|
||||
font-family: Tahoma, Verdana, Arial, sans-serif; }
|
||||
body {
|
||||
width: 35em;
|
||||
margin: 0 auto;
|
||||
font-family: Tahoma, Verdana, Arial, sans-serif;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
|
@ -13,7 +15,7 @@ font-family: Tahoma, Verdana, Arial, sans-serif; }
|
|||
<p>Sorry, the page you are looking for is currently unavailable.<br/>
|
||||
Please try again later.</p>
|
||||
<p>If you are the system administrator of this resource then you should check
|
||||
the error log for details.</p>
|
||||
the <a href="http://nginx.org/r/error_log">error log</a> for details.</p>
|
||||
<p><em>Faithfully yours, nginx.</em></p>
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
@ -3,9 +3,11 @@
|
|||
<head>
|
||||
<title>Welcome to nginx!</title>
|
||||
<style>
|
||||
html { color-scheme: light dark; }
|
||||
body { width: 35em; margin: 0 auto;
|
||||
font-family: Tahoma, Verdana, Arial, sans-serif; }
|
||||
body {
|
||||
width: 35em;
|
||||
margin: 0 auto;
|
||||
font-family: Tahoma, Verdana, Arial, sans-serif;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
.\"
|
||||
.\" Copyright (C) 2010, 2019 Sergey A. Osokin
|
||||
.\" Copyright (C) 2010 Sergey A. Osokin
|
||||
.\" Copyright (C) Nginx, Inc.
|
||||
.\" All rights reserved.
|
||||
.\"
|
||||
|
@ -25,7 +25,7 @@
|
|||
.\" SUCH DAMAGE.
|
||||
.\"
|
||||
.\"
|
||||
.Dd November 5, 2020
|
||||
.Dd March 6, 2012
|
||||
.Dt NGINX 8
|
||||
.Os
|
||||
.Sh NAME
|
||||
|
@ -33,9 +33,8 @@
|
|||
.Nd "HTTP and reverse proxy server, mail proxy server"
|
||||
.Sh SYNOPSIS
|
||||
.Nm
|
||||
.Op Fl ?hqTtVv
|
||||
.Op Fl ?hqtVv
|
||||
.Op Fl c Ar file
|
||||
.Op Fl e Ar file
|
||||
.Op Fl g Ar directives
|
||||
.Op Fl p Ar prefix
|
||||
.Op Fl s Ar signal
|
||||
|
@ -43,8 +42,7 @@
|
|||
.Nm
|
||||
(pronounced
|
||||
.Dq engine x )
|
||||
is an HTTP and reverse proxy server, a mail proxy server, and a generic
|
||||
TCP/UDP proxy server.
|
||||
is an HTTP and reverse proxy server, as well as a mail proxy server.
|
||||
It is known for its high performance, stability, rich feature set, simple
|
||||
configuration, and low resource consumption.
|
||||
.Pp
|
||||
|
@ -55,12 +53,6 @@ Print help.
|
|||
.It Fl c Ar file
|
||||
Use an alternative configuration
|
||||
.Ar file .
|
||||
.It Fl e Ar file
|
||||
Use an alternative error log
|
||||
.Ar file .
|
||||
Special value
|
||||
.Cm stderr
|
||||
indicates that the standard error output should be used.
|
||||
.It Fl g Ar directives
|
||||
Set global configuration directives.
|
||||
See
|
||||
|
@ -90,10 +82,6 @@ The following table shows the corresponding system signals:
|
|||
.It Cm reload
|
||||
.Dv SIGHUP
|
||||
.El
|
||||
.It Fl T
|
||||
Same as
|
||||
.Fl t ,
|
||||
but additionally dump configuration files to standard output.
|
||||
.It Fl t
|
||||
Do not run, just test the configuration file.
|
||||
.Nm
|
||||
|
@ -205,10 +193,10 @@ Development of
|
|||
started in 2002, with the first public release on October 4, 2004.
|
||||
.Sh AUTHORS
|
||||
.An -nosplit
|
||||
.An Igor Sysoev Aq Mt igor@sysoev.ru .
|
||||
.An Igor Sysoev Aq igor@sysoev.ru .
|
||||
.Pp
|
||||
This manual page was originally written by
|
||||
.An Sergey A. Osokin Aq Mt osa@FreeBSD.org.ru
|
||||
.An Sergey A. Osokin Aq osa@FreeBSD.org.ru
|
||||
as a result of compiling many
|
||||
.Nm
|
||||
documents from all over the world.
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
/*
|
||||
* Copyright (C) 2002-2021 Igor Sysoev
|
||||
* Copyright (C) 2011-2022 Nginx, Inc.
|
||||
* Copyright (C) 2002-2014 Igor Sysoev
|
||||
* Copyright (C) 2011-2014 Nginx, Inc.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -25,19 +25,13 @@ X:template = "changes" {
|
|||
' '),
|
||||
1, $conf/changes[@lang=$lang]/length)}
|
||||
|
||||
X:if "$lang='ru'" {
|
||||
!{substring(@date, 9, 2)}
|
||||
X:text {.}
|
||||
!{substring(@date, 6, 2)}
|
||||
X:text {.}
|
||||
!{substring(@date, 1, 4)}
|
||||
}
|
||||
X:if "$lang='ru'" { !{@date} }
|
||||
|
||||
X:if "$lang='en'" {
|
||||
!{substring(@date, 9, 2)}
|
||||
!{substring(@date, 1, 2)}
|
||||
!{$conf/changes[@lang=$lang]/month[number(substring(current()/@date,
|
||||
6, 2))]}
|
||||
!{substring(@date, 1, 4)}
|
||||
4, 2))]}
|
||||
!{substring(@date, 7, 4)}
|
||||
}
|
||||
|
||||
X:text { }
|
||||
|
|
|
@ -26,19 +26,13 @@
|
|||
' '),
|
||||
1, $conf/changes[@lang=$lang]/length)"/>
|
||||
|
||||
<xsl:if test="$lang='ru'">
|
||||
<xsl:value-of select="substring(@date, 9, 2)"/>
|
||||
<xsl:text>.</xsl:text>
|
||||
<xsl:value-of select="substring(@date, 6, 2)"/>
|
||||
<xsl:text>.</xsl:text>
|
||||
<xsl:value-of select="substring(@date, 1, 4)"/>
|
||||
</xsl:if>
|
||||
<xsl:if test="$lang='ru'"> <xsl:value-of select="@date"/> </xsl:if>
|
||||
|
||||
<xsl:if test="$lang='en'">
|
||||
<xsl:value-of select="substring(@date, 9, 2)"/>
|
||||
<xsl:value-of select="substring(@date, 1, 2)"/>
|
||||
<xsl:value-of select="$conf/changes[@lang=$lang]/month[number(substring(current()/@date,
|
||||
6, 2))]"/>
|
||||
<xsl:value-of select="substring(@date, 1, 4)"/>
|
||||
4, 2))]"/>
|
||||
<xsl:value-of select="substring(@date, 7, 4)"/>
|
||||
</xsl:if>
|
||||
|
||||
<xsl:text> </xsl:text>
|
||||
|
|
|
@ -4,17 +4,24 @@ VER = $(shell grep 'define NGINX_VERSION' src/core/nginx.h \
|
|||
NGINX = nginx-$(VER)
|
||||
TEMP = tmp
|
||||
|
||||
CC = cl
|
||||
OBJS = objs.msvc8
|
||||
OPENSSL = openssl-1.1.1t
|
||||
ZLIB = zlib-1.2.13
|
||||
PCRE = pcre2-10.39
|
||||
OPENSSL = openssl-1.0.1m
|
||||
ZLIB = zlib-1.2.8
|
||||
PCRE = pcre-8.35
|
||||
|
||||
|
||||
release: export
|
||||
|
||||
mv $(TEMP)/$(NGINX)/auto/configure $(TEMP)/$(NGINX)
|
||||
|
||||
# delete incomplete sources
|
||||
rm $(TEMP)/$(NGINX)/src/event/ngx_event_acceptex.c
|
||||
rm $(TEMP)/$(NGINX)/src/event/ngx_event_connectex.c
|
||||
rm $(TEMP)/$(NGINX)/src/event/modules/ngx_iocp_module.*
|
||||
rm -r $(TEMP)/$(NGINX)/src/os/win32
|
||||
|
||||
rm -r $(TEMP)/$(NGINX)/src/mysql
|
||||
|
||||
mv $(TEMP)/$(NGINX)/docs/text/LICENSE $(TEMP)/$(NGINX)
|
||||
mv $(TEMP)/$(NGINX)/docs/text/README $(TEMP)/$(NGINX)
|
||||
mv $(TEMP)/$(NGINX)/docs/html $(TEMP)/$(NGINX)
|
||||
|
@ -42,7 +49,7 @@ RELEASE:
|
|||
|
||||
win32:
|
||||
./auto/configure \
|
||||
--with-cc=$(CC) \
|
||||
--with-cc=cl \
|
||||
--builddir=$(OBJS) \
|
||||
--with-debug \
|
||||
--prefix= \
|
||||
|
@ -59,7 +66,7 @@ win32:
|
|||
--with-cc-opt=-DFD_SETSIZE=1024 \
|
||||
--with-pcre=$(OBJS)/lib/$(PCRE) \
|
||||
--with-zlib=$(OBJS)/lib/$(ZLIB) \
|
||||
--with-http_v2_module \
|
||||
--with-select_module \
|
||||
--with-http_realip_module \
|
||||
--with-http_addition_module \
|
||||
--with-http_sub_module \
|
||||
|
@ -72,14 +79,12 @@ win32:
|
|||
--with-http_auth_request_module \
|
||||
--with-http_random_index_module \
|
||||
--with-http_secure_link_module \
|
||||
--with-http_slice_module \
|
||||
--with-mail \
|
||||
--with-stream \
|
||||
--with-openssl=$(OBJS)/lib/$(OPENSSL) \
|
||||
--with-openssl-opt="no-asm no-tests -D_WIN32_WINNT=0x0501" \
|
||||
--with-openssl-opt=enable-tlsext \
|
||||
--with-http_ssl_module \
|
||||
--with-mail_ssl_module \
|
||||
--with-stream_ssl_module
|
||||
--with-ipv6
|
||||
|
||||
|
||||
zip: export
|
||||
|
|
|
@ -3,7 +3,7 @@ make -f misc/GNUmakefile release
|
|||
|
||||
the required tools:
|
||||
*) xsltproc to build CHANGES,
|
||||
*) xslscript.pl ( http://hg.nginx.org/xslscript ) to build XSLTs
|
||||
*) java and XSLScript ( http://pault.com/pault/XSLScript/ ) to build XSLTs
|
||||
from XSLScript sources.
|
||||
|
||||
|
||||
|
|
484
src/core/nginx.c
484
src/core/nginx.c
|
@ -10,9 +10,7 @@
|
|||
#include <nginx.h>
|
||||
|
||||
|
||||
static void ngx_show_version_info(void);
|
||||
static ngx_int_t ngx_add_inherited_sockets(ngx_cycle_t *cycle);
|
||||
static void ngx_cleanup_environment(void *data);
|
||||
static ngx_int_t ngx_get_options(int argc, char *const *argv);
|
||||
static ngx_int_t ngx_process_options(ngx_cycle_t *cycle);
|
||||
static ngx_int_t ngx_save_argv(ngx_cycle_t *cycle, int argc, char *const *argv);
|
||||
|
@ -25,10 +23,6 @@ static char *ngx_set_cpu_affinity(ngx_conf_t *cf, ngx_command_t *cmd,
|
|||
void *conf);
|
||||
static char *ngx_set_worker_processes(ngx_conf_t *cf, ngx_command_t *cmd,
|
||||
void *conf);
|
||||
static char *ngx_load_module(ngx_conf_t *cf, ngx_command_t *cmd, void *conf);
|
||||
#if (NGX_HAVE_DLOPEN)
|
||||
static void ngx_unload_module(void *data);
|
||||
#endif
|
||||
|
||||
|
||||
static ngx_conf_enum_t ngx_debug_points[] = {
|
||||
|
@ -124,11 +118,11 @@ static ngx_command_t ngx_core_commands[] = {
|
|||
offsetof(ngx_core_conf_t, rlimit_core),
|
||||
NULL },
|
||||
|
||||
{ ngx_string("worker_shutdown_timeout"),
|
||||
{ ngx_string("worker_rlimit_sigpending"),
|
||||
NGX_MAIN_CONF|NGX_DIRECT_CONF|NGX_CONF_TAKE1,
|
||||
ngx_conf_set_msec_slot,
|
||||
ngx_conf_set_num_slot,
|
||||
0,
|
||||
offsetof(ngx_core_conf_t, shutdown_timeout),
|
||||
offsetof(ngx_core_conf_t, rlimit_sigpending),
|
||||
NULL },
|
||||
|
||||
{ ngx_string("working_directory"),
|
||||
|
@ -145,13 +139,24 @@ static ngx_command_t ngx_core_commands[] = {
|
|||
0,
|
||||
NULL },
|
||||
|
||||
{ ngx_string("load_module"),
|
||||
#if (NGX_THREADS)
|
||||
|
||||
{ ngx_string("worker_threads"),
|
||||
NGX_MAIN_CONF|NGX_DIRECT_CONF|NGX_CONF_TAKE1,
|
||||
ngx_load_module,
|
||||
0,
|
||||
ngx_conf_set_num_slot,
|
||||
0,
|
||||
offsetof(ngx_core_conf_t, worker_threads),
|
||||
NULL },
|
||||
|
||||
{ ngx_string("thread_stack_size"),
|
||||
NGX_MAIN_CONF|NGX_DIRECT_CONF|NGX_CONF_TAKE1,
|
||||
ngx_conf_set_size_slot,
|
||||
0,
|
||||
offsetof(ngx_core_conf_t, thread_stack_size),
|
||||
NULL },
|
||||
|
||||
#endif
|
||||
|
||||
ngx_null_command
|
||||
};
|
||||
|
||||
|
@ -179,11 +184,12 @@ ngx_module_t ngx_core_module = {
|
|||
};
|
||||
|
||||
|
||||
ngx_uint_t ngx_max_module;
|
||||
|
||||
static ngx_uint_t ngx_show_help;
|
||||
static ngx_uint_t ngx_show_version;
|
||||
static ngx_uint_t ngx_show_configure;
|
||||
static u_char *ngx_prefix;
|
||||
static u_char *ngx_error_log;
|
||||
static u_char *ngx_conf_file;
|
||||
static u_char *ngx_conf_params;
|
||||
static char *ngx_signal;
|
||||
|
@ -195,11 +201,9 @@ static char **ngx_os_environ;
|
|||
int ngx_cdecl
|
||||
main(int argc, char *const *argv)
|
||||
{
|
||||
ngx_buf_t *b;
|
||||
ngx_int_t i;
|
||||
ngx_log_t *log;
|
||||
ngx_uint_t i;
|
||||
ngx_cycle_t *cycle, init_cycle;
|
||||
ngx_conf_dump_t *cd;
|
||||
ngx_core_conf_t *ccf;
|
||||
|
||||
ngx_debug_init();
|
||||
|
@ -213,7 +217,50 @@ main(int argc, char *const *argv)
|
|||
}
|
||||
|
||||
if (ngx_show_version) {
|
||||
ngx_show_version_info();
|
||||
ngx_write_stderr("nginx version: " NGINX_VER NGX_LINEFEED);
|
||||
|
||||
if (ngx_show_help) {
|
||||
ngx_write_stderr(
|
||||
"Usage: nginx [-?hvVtq] [-s signal] [-c filename] "
|
||||
"[-p prefix] [-g directives]" NGX_LINEFEED
|
||||
NGX_LINEFEED
|
||||
"Options:" NGX_LINEFEED
|
||||
" -?,-h : this help" NGX_LINEFEED
|
||||
" -v : show version and exit" NGX_LINEFEED
|
||||
" -V : show version and configure options then exit"
|
||||
NGX_LINEFEED
|
||||
" -t : test configuration and exit" NGX_LINEFEED
|
||||
" -q : suppress non-error messages "
|
||||
"during configuration testing" NGX_LINEFEED
|
||||
" -s signal : send signal to a master process: "
|
||||
"stop, quit, reopen, reload" NGX_LINEFEED
|
||||
#ifdef NGX_PREFIX
|
||||
" -p prefix : set prefix path (default: "
|
||||
NGX_PREFIX ")" NGX_LINEFEED
|
||||
#else
|
||||
" -p prefix : set prefix path (default: NONE)" NGX_LINEFEED
|
||||
#endif
|
||||
" -c filename : set configuration file (default: "
|
||||
NGX_CONF_PATH ")" NGX_LINEFEED
|
||||
" -g directives : set global directives out of configuration "
|
||||
"file" NGX_LINEFEED NGX_LINEFEED
|
||||
);
|
||||
}
|
||||
|
||||
if (ngx_show_configure) {
|
||||
ngx_write_stderr(
|
||||
#ifdef NGX_COMPILER
|
||||
"built by " NGX_COMPILER NGX_LINEFEED
|
||||
#endif
|
||||
#if (NGX_SSL)
|
||||
#ifdef SSL_CTRL_SET_TLSEXT_HOSTNAME
|
||||
"TLS SNI support enabled" NGX_LINEFEED
|
||||
#else
|
||||
"TLS SNI support disabled" NGX_LINEFEED
|
||||
#endif
|
||||
#endif
|
||||
"configure arguments:" NGX_CONFIGURE NGX_LINEFEED);
|
||||
}
|
||||
|
||||
if (!ngx_test_config) {
|
||||
return 0;
|
||||
|
@ -229,9 +276,8 @@ main(int argc, char *const *argv)
|
|||
#endif
|
||||
|
||||
ngx_pid = ngx_getpid();
|
||||
ngx_parent = ngx_getppid();
|
||||
|
||||
log = ngx_log_init(ngx_prefix, ngx_error_log);
|
||||
log = ngx_log_init(ngx_prefix);
|
||||
if (log == NULL) {
|
||||
return 1;
|
||||
}
|
||||
|
@ -275,18 +321,13 @@ main(int argc, char *const *argv)
|
|||
return 1;
|
||||
}
|
||||
|
||||
/*
|
||||
* ngx_slab_sizes_init() requires ngx_pagesize set in ngx_os_init()
|
||||
*/
|
||||
|
||||
ngx_slab_sizes_init();
|
||||
|
||||
if (ngx_add_inherited_sockets(&init_cycle) != NGX_OK) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (ngx_preinit_modules() != NGX_OK) {
|
||||
return 1;
|
||||
ngx_max_module = 0;
|
||||
for (i = 0; ngx_modules[i]; i++) {
|
||||
ngx_modules[i]->index = ngx_max_module++;
|
||||
}
|
||||
|
||||
cycle = ngx_init_cycle(&init_cycle);
|
||||
|
@ -305,23 +346,6 @@ main(int argc, char *const *argv)
|
|||
cycle->conf_file.data);
|
||||
}
|
||||
|
||||
if (ngx_dump_config) {
|
||||
cd = cycle->config_dump.elts;
|
||||
|
||||
for (i = 0; i < cycle->config_dump.nelts; i++) {
|
||||
|
||||
ngx_write_stdout("# configuration file ");
|
||||
(void) ngx_write_fd(ngx_stdout, cd[i].name.data,
|
||||
cd[i].name.len);
|
||||
ngx_write_stdout(":" NGX_LINEFEED);
|
||||
|
||||
b = cd[i].buffer;
|
||||
|
||||
(void) ngx_write_fd(ngx_stdout, b->pos, b->last - b->pos);
|
||||
ngx_write_stdout(NGX_LINEFEED);
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -387,74 +411,6 @@ main(int argc, char *const *argv)
|
|||
}
|
||||
|
||||
|
||||
static void
|
||||
ngx_show_version_info(void)
|
||||
{
|
||||
ngx_write_stderr("nginx version: " NGINX_VER_BUILD NGX_LINEFEED);
|
||||
|
||||
if (ngx_show_help) {
|
||||
ngx_write_stderr(
|
||||
"Usage: nginx [-?hvVtTq] [-s signal] [-p prefix]" NGX_LINEFEED
|
||||
" [-e filename] [-c filename] [-g directives]"
|
||||
NGX_LINEFEED NGX_LINEFEED
|
||||
"Options:" NGX_LINEFEED
|
||||
" -?,-h : this help" NGX_LINEFEED
|
||||
" -v : show version and exit" NGX_LINEFEED
|
||||
" -V : show version and configure options then exit"
|
||||
NGX_LINEFEED
|
||||
" -t : test configuration and exit" NGX_LINEFEED
|
||||
" -T : test configuration, dump it and exit"
|
||||
NGX_LINEFEED
|
||||
" -q : suppress non-error messages "
|
||||
"during configuration testing" NGX_LINEFEED
|
||||
" -s signal : send signal to a master process: "
|
||||
"stop, quit, reopen, reload" NGX_LINEFEED
|
||||
#ifdef NGX_PREFIX
|
||||
" -p prefix : set prefix path (default: " NGX_PREFIX ")"
|
||||
NGX_LINEFEED
|
||||
#else
|
||||
" -p prefix : set prefix path (default: NONE)" NGX_LINEFEED
|
||||
#endif
|
||||
" -e filename : set error log file (default: "
|
||||
#ifdef NGX_ERROR_LOG_STDERR
|
||||
"stderr)" NGX_LINEFEED
|
||||
#else
|
||||
NGX_ERROR_LOG_PATH ")" NGX_LINEFEED
|
||||
#endif
|
||||
" -c filename : set configuration file (default: " NGX_CONF_PATH
|
||||
")" NGX_LINEFEED
|
||||
" -g directives : set global directives out of configuration "
|
||||
"file" NGX_LINEFEED NGX_LINEFEED
|
||||
);
|
||||
}
|
||||
|
||||
if (ngx_show_configure) {
|
||||
|
||||
#ifdef NGX_COMPILER
|
||||
ngx_write_stderr("built by " NGX_COMPILER NGX_LINEFEED);
|
||||
#endif
|
||||
|
||||
#if (NGX_SSL)
|
||||
if (ngx_strcmp(ngx_ssl_version(), OPENSSL_VERSION_TEXT) == 0) {
|
||||
ngx_write_stderr("built with " OPENSSL_VERSION_TEXT NGX_LINEFEED);
|
||||
} else {
|
||||
ngx_write_stderr("built with " OPENSSL_VERSION_TEXT
|
||||
" (running with ");
|
||||
ngx_write_stderr((char *) (uintptr_t) ngx_ssl_version());
|
||||
ngx_write_stderr(")" NGX_LINEFEED);
|
||||
}
|
||||
#ifdef SSL_CTRL_SET_TLSEXT_HOSTNAME
|
||||
ngx_write_stderr("TLS SNI support enabled" NGX_LINEFEED);
|
||||
#else
|
||||
ngx_write_stderr("TLS SNI support disabled" NGX_LINEFEED);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
ngx_write_stderr("configure arguments:" NGX_CONFIGURE NGX_LINEFEED);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
static ngx_int_t
|
||||
ngx_add_inherited_sockets(ngx_cycle_t *cycle)
|
||||
{
|
||||
|
@ -499,16 +455,9 @@ ngx_add_inherited_sockets(ngx_cycle_t *cycle)
|
|||
ngx_memzero(ls, sizeof(ngx_listening_t));
|
||||
|
||||
ls->fd = (ngx_socket_t) s;
|
||||
ls->inherited = 1;
|
||||
}
|
||||
}
|
||||
|
||||
if (v != p) {
|
||||
ngx_log_error(NGX_LOG_EMERG, cycle->log, 0,
|
||||
"invalid socket number \"%s\" in " NGINX_VAR
|
||||
" environment variable, ignoring", v);
|
||||
}
|
||||
|
||||
ngx_inherited = 1;
|
||||
|
||||
return ngx_set_inherited_sockets(cycle);
|
||||
|
@ -518,11 +467,10 @@ ngx_add_inherited_sockets(ngx_cycle_t *cycle)
|
|||
char **
|
||||
ngx_set_environment(ngx_cycle_t *cycle, ngx_uint_t *last)
|
||||
{
|
||||
char **p, **env;
|
||||
ngx_str_t *var;
|
||||
ngx_uint_t i, n;
|
||||
ngx_core_conf_t *ccf;
|
||||
ngx_pool_cleanup_t *cln;
|
||||
char **p, **env;
|
||||
ngx_str_t *var;
|
||||
ngx_uint_t i, n;
|
||||
ngx_core_conf_t *ccf;
|
||||
|
||||
ccf = (ngx_core_conf_t *) ngx_get_conf(cycle->conf_ctx, ngx_core_module);
|
||||
|
||||
|
@ -574,25 +522,14 @@ tz_found:
|
|||
|
||||
if (last) {
|
||||
env = ngx_alloc((*last + n + 1) * sizeof(char *), cycle->log);
|
||||
if (env == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
*last = n;
|
||||
|
||||
} else {
|
||||
cln = ngx_pool_cleanup_add(cycle->pool, 0);
|
||||
if (cln == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
env = ngx_palloc(cycle->pool, (n + 1) * sizeof(char *));
|
||||
}
|
||||
|
||||
env = ngx_alloc((n + 1) * sizeof(char *), cycle->log);
|
||||
if (env == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
cln->handler = ngx_cleanup_environment;
|
||||
cln->data = env;
|
||||
if (env == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
n = 0;
|
||||
|
@ -626,25 +563,6 @@ tz_found:
|
|||
}
|
||||
|
||||
|
||||
static void
|
||||
ngx_cleanup_environment(void *data)
|
||||
{
|
||||
char **env = data;
|
||||
|
||||
if (environ == env) {
|
||||
|
||||
/*
|
||||
* if the environment is still used, as it happens on exit,
|
||||
* the only option is to leak it
|
||||
*/
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
ngx_free(env);
|
||||
}
|
||||
|
||||
|
||||
ngx_pid_t
|
||||
ngx_exec_new_binary(ngx_cycle_t *cycle, char *const *argv)
|
||||
{
|
||||
|
@ -680,9 +598,6 @@ ngx_exec_new_binary(ngx_cycle_t *cycle, char *const *argv)
|
|||
|
||||
ls = cycle->listening.elts;
|
||||
for (i = 0; i < cycle->listening.nelts; i++) {
|
||||
if (ls[i].ignore) {
|
||||
continue;
|
||||
}
|
||||
p = ngx_sprintf(p, "%ud;", ls[i].fd);
|
||||
}
|
||||
|
||||
|
@ -787,11 +702,6 @@ ngx_get_options(int argc, char *const *argv)
|
|||
ngx_test_config = 1;
|
||||
break;
|
||||
|
||||
case 'T':
|
||||
ngx_test_config = 1;
|
||||
ngx_dump_config = 1;
|
||||
break;
|
||||
|
||||
case 'q':
|
||||
ngx_quiet_mode = 1;
|
||||
break;
|
||||
|
@ -810,24 +720,6 @@ ngx_get_options(int argc, char *const *argv)
|
|||
ngx_log_stderr(0, "option \"-p\" requires directory name");
|
||||
return NGX_ERROR;
|
||||
|
||||
case 'e':
|
||||
if (*p) {
|
||||
ngx_error_log = p;
|
||||
|
||||
} else if (argv[++i]) {
|
||||
ngx_error_log = (u_char *) argv[i];
|
||||
|
||||
} else {
|
||||
ngx_log_stderr(0, "option \"-e\" requires file name");
|
||||
return NGX_ERROR;
|
||||
}
|
||||
|
||||
if (ngx_strcmp(ngx_error_log, "stderr") == 0) {
|
||||
ngx_error_log = (u_char *) "";
|
||||
}
|
||||
|
||||
goto next;
|
||||
|
||||
case 'c':
|
||||
if (*p) {
|
||||
ngx_conf_file = p;
|
||||
|
@ -1014,20 +906,12 @@ ngx_process_options(ngx_cycle_t *cycle)
|
|||
p--)
|
||||
{
|
||||
if (ngx_path_separator(*p)) {
|
||||
cycle->conf_prefix.len = p - cycle->conf_file.data + 1;
|
||||
cycle->conf_prefix.data = cycle->conf_file.data;
|
||||
cycle->conf_prefix.len = p - ngx_cycle->conf_file.data + 1;
|
||||
cycle->conf_prefix.data = ngx_cycle->conf_file.data;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (ngx_error_log) {
|
||||
cycle->error_log.len = ngx_strlen(ngx_error_log);
|
||||
cycle->error_log.data = ngx_error_log;
|
||||
|
||||
} else {
|
||||
ngx_str_set(&cycle->error_log, NGX_ERROR_LOG_PATH);
|
||||
}
|
||||
|
||||
if (ngx_conf_params) {
|
||||
cycle->conf_param.len = ngx_strlen(ngx_conf_params);
|
||||
cycle->conf_param.data = ngx_conf_params;
|
||||
|
@ -1057,7 +941,6 @@ ngx_core_module_create_conf(ngx_cycle_t *cycle)
|
|||
* ccf->pid = NULL;
|
||||
* ccf->oldpid = NULL;
|
||||
* ccf->priority = 0;
|
||||
* ccf->cpu_affinity_auto = 0;
|
||||
* ccf->cpu_affinity_n = 0;
|
||||
* ccf->cpu_affinity = NULL;
|
||||
*/
|
||||
|
@ -1065,17 +948,22 @@ ngx_core_module_create_conf(ngx_cycle_t *cycle)
|
|||
ccf->daemon = NGX_CONF_UNSET;
|
||||
ccf->master = NGX_CONF_UNSET;
|
||||
ccf->timer_resolution = NGX_CONF_UNSET_MSEC;
|
||||
ccf->shutdown_timeout = NGX_CONF_UNSET_MSEC;
|
||||
|
||||
ccf->worker_processes = NGX_CONF_UNSET;
|
||||
ccf->debug_points = NGX_CONF_UNSET;
|
||||
|
||||
ccf->rlimit_nofile = NGX_CONF_UNSET;
|
||||
ccf->rlimit_core = NGX_CONF_UNSET;
|
||||
ccf->rlimit_sigpending = NGX_CONF_UNSET;
|
||||
|
||||
ccf->user = (ngx_uid_t) NGX_CONF_UNSET_UINT;
|
||||
ccf->group = (ngx_gid_t) NGX_CONF_UNSET_UINT;
|
||||
|
||||
#if (NGX_THREADS)
|
||||
ccf->worker_threads = NGX_CONF_UNSET;
|
||||
ccf->thread_stack_size = NGX_CONF_UNSET_SIZE;
|
||||
#endif
|
||||
|
||||
if (ngx_array_init(&ccf->env, cycle->pool, 1, sizeof(ngx_str_t))
|
||||
!= NGX_OK)
|
||||
{
|
||||
|
@ -1094,15 +982,13 @@ ngx_core_module_init_conf(ngx_cycle_t *cycle, void *conf)
|
|||
ngx_conf_init_value(ccf->daemon, 1);
|
||||
ngx_conf_init_value(ccf->master, 1);
|
||||
ngx_conf_init_msec_value(ccf->timer_resolution, 0);
|
||||
ngx_conf_init_msec_value(ccf->shutdown_timeout, 0);
|
||||
|
||||
ngx_conf_init_value(ccf->worker_processes, 1);
|
||||
ngx_conf_init_value(ccf->debug_points, 0);
|
||||
|
||||
#if (NGX_HAVE_CPU_AFFINITY)
|
||||
|
||||
if (!ccf->cpu_affinity_auto
|
||||
&& ccf->cpu_affinity_n
|
||||
if (ccf->cpu_affinity_n
|
||||
&& ccf->cpu_affinity_n != 1
|
||||
&& ccf->cpu_affinity_n != (ngx_uint_t) ccf->worker_processes)
|
||||
{
|
||||
|
@ -1112,6 +998,14 @@ ngx_core_module_init_conf(ngx_cycle_t *cycle, void *conf)
|
|||
"using last mask for remaining worker processes");
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
#if (NGX_THREADS)
|
||||
|
||||
ngx_conf_init_value(ccf->worker_threads, 0);
|
||||
ngx_threads_n = ccf->worker_threads;
|
||||
ngx_conf_init_size_value(ccf->thread_stack_size, 2 * 1024 * 1024);
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
|
@ -1246,7 +1140,7 @@ ngx_set_user(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
|
|||
return NGX_CONF_OK;
|
||||
}
|
||||
|
||||
value = cf->args->elts;
|
||||
value = (ngx_str_t *) cf->args->elts;
|
||||
|
||||
ccf->username = (char *) value[1].data;
|
||||
|
||||
|
@ -1354,16 +1248,16 @@ ngx_set_cpu_affinity(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
|
|||
#if (NGX_HAVE_CPU_AFFINITY)
|
||||
ngx_core_conf_t *ccf = conf;
|
||||
|
||||
u_char ch, *p;
|
||||
u_char ch;
|
||||
uint64_t *mask;
|
||||
ngx_str_t *value;
|
||||
ngx_uint_t i, n;
|
||||
ngx_cpuset_t *mask;
|
||||
|
||||
if (ccf->cpu_affinity) {
|
||||
return "is duplicate";
|
||||
}
|
||||
|
||||
mask = ngx_palloc(cf->pool, (cf->args->nelts - 1) * sizeof(ngx_cpuset_t));
|
||||
mask = ngx_palloc(cf->pool, (cf->args->nelts - 1) * sizeof(uint64_t));
|
||||
if (mask == NULL) {
|
||||
return NGX_CONF_ERROR;
|
||||
}
|
||||
|
@ -1373,58 +1267,32 @@ ngx_set_cpu_affinity(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
|
|||
|
||||
value = cf->args->elts;
|
||||
|
||||
if (ngx_strcmp(value[1].data, "auto") == 0) {
|
||||
for (n = 1; n < cf->args->nelts; n++) {
|
||||
|
||||
if (cf->args->nelts > 3) {
|
||||
if (value[n].len > 64) {
|
||||
ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
|
||||
"invalid number of arguments in "
|
||||
"\"worker_cpu_affinity\" directive");
|
||||
"\"worker_cpu_affinity\" supports up to 64 CPUs only");
|
||||
return NGX_CONF_ERROR;
|
||||
}
|
||||
|
||||
ccf->cpu_affinity_auto = 1;
|
||||
mask[n - 1] = 0;
|
||||
|
||||
CPU_ZERO(&mask[0]);
|
||||
for (i = 0; i < (ngx_uint_t) ngx_min(ngx_ncpu, CPU_SETSIZE); i++) {
|
||||
CPU_SET(i, &mask[0]);
|
||||
}
|
||||
for (i = 0; i < value[n].len; i++) {
|
||||
|
||||
n = 2;
|
||||
|
||||
} else {
|
||||
n = 1;
|
||||
}
|
||||
|
||||
for ( /* void */ ; n < cf->args->nelts; n++) {
|
||||
|
||||
if (value[n].len > CPU_SETSIZE) {
|
||||
ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
|
||||
"\"worker_cpu_affinity\" supports up to %d CPUs only",
|
||||
CPU_SETSIZE);
|
||||
return NGX_CONF_ERROR;
|
||||
}
|
||||
|
||||
i = 0;
|
||||
CPU_ZERO(&mask[n - 1]);
|
||||
|
||||
for (p = value[n].data + value[n].len - 1;
|
||||
p >= value[n].data;
|
||||
p--)
|
||||
{
|
||||
ch = *p;
|
||||
ch = value[n].data[i];
|
||||
|
||||
if (ch == ' ') {
|
||||
continue;
|
||||
}
|
||||
|
||||
i++;
|
||||
mask[n - 1] <<= 1;
|
||||
|
||||
if (ch == '0') {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (ch == '1') {
|
||||
CPU_SET(i - 1, &mask[n - 1]);
|
||||
mask[n - 1] |= 1;
|
||||
continue;
|
||||
}
|
||||
|
||||
|
@ -1446,57 +1314,23 @@ ngx_set_cpu_affinity(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
|
|||
}
|
||||
|
||||
|
||||
ngx_cpuset_t *
|
||||
uint64_t
|
||||
ngx_get_cpu_affinity(ngx_uint_t n)
|
||||
{
|
||||
#if (NGX_HAVE_CPU_AFFINITY)
|
||||
ngx_uint_t i, j;
|
||||
ngx_cpuset_t *mask;
|
||||
ngx_core_conf_t *ccf;
|
||||
|
||||
static ngx_cpuset_t result;
|
||||
|
||||
ccf = (ngx_core_conf_t *) ngx_get_conf(ngx_cycle->conf_ctx,
|
||||
ngx_core_module);
|
||||
|
||||
if (ccf->cpu_affinity == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (ccf->cpu_affinity_auto) {
|
||||
mask = &ccf->cpu_affinity[ccf->cpu_affinity_n - 1];
|
||||
|
||||
for (i = 0, j = n; /* void */ ; i++) {
|
||||
|
||||
if (CPU_ISSET(i % CPU_SETSIZE, mask) && j-- == 0) {
|
||||
break;
|
||||
}
|
||||
|
||||
if (i == CPU_SETSIZE && j == n) {
|
||||
/* empty mask */
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/* void */
|
||||
}
|
||||
|
||||
CPU_ZERO(&result);
|
||||
CPU_SET(i % CPU_SETSIZE, &result);
|
||||
|
||||
return &result;
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (ccf->cpu_affinity_n > n) {
|
||||
return &ccf->cpu_affinity[n];
|
||||
return ccf->cpu_affinity[n];
|
||||
}
|
||||
|
||||
return &ccf->cpu_affinity[ccf->cpu_affinity_n - 1];
|
||||
|
||||
#else
|
||||
|
||||
return NULL;
|
||||
|
||||
#endif
|
||||
return ccf->cpu_affinity[ccf->cpu_affinity_n - 1];
|
||||
}
|
||||
|
||||
|
||||
|
@ -1512,7 +1346,7 @@ ngx_set_worker_processes(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
|
|||
return "is duplicate";
|
||||
}
|
||||
|
||||
value = cf->args->elts;
|
||||
value = (ngx_str_t *) cf->args->elts;
|
||||
|
||||
if (ngx_strcmp(value[1].data, "auto") == 0) {
|
||||
ccf->worker_processes = ngx_ncpu;
|
||||
|
@ -1527,101 +1361,3 @@ ngx_set_worker_processes(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
|
|||
|
||||
return NGX_CONF_OK;
|
||||
}
|
||||
|
||||
|
||||
static char *
|
||||
ngx_load_module(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
|
||||
{
|
||||
#if (NGX_HAVE_DLOPEN)
|
||||
void *handle;
|
||||
char **names, **order;
|
||||
ngx_str_t *value, file;
|
||||
ngx_uint_t i;
|
||||
ngx_module_t *module, **modules;
|
||||
ngx_pool_cleanup_t *cln;
|
||||
|
||||
if (cf->cycle->modules_used) {
|
||||
return "is specified too late";
|
||||
}
|
||||
|
||||
value = cf->args->elts;
|
||||
|
||||
file = value[1];
|
||||
|
||||
if (ngx_conf_full_name(cf->cycle, &file, 0) != NGX_OK) {
|
||||
return NGX_CONF_ERROR;
|
||||
}
|
||||
|
||||
cln = ngx_pool_cleanup_add(cf->cycle->pool, 0);
|
||||
if (cln == NULL) {
|
||||
return NGX_CONF_ERROR;
|
||||
}
|
||||
|
||||
handle = ngx_dlopen(file.data);
|
||||
if (handle == NULL) {
|
||||
ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
|
||||
ngx_dlopen_n " \"%s\" failed (%s)",
|
||||
file.data, ngx_dlerror());
|
||||
return NGX_CONF_ERROR;
|
||||
}
|
||||
|
||||
cln->handler = ngx_unload_module;
|
||||
cln->data = handle;
|
||||
|
||||
modules = ngx_dlsym(handle, "ngx_modules");
|
||||
if (modules == NULL) {
|
||||
ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
|
||||
ngx_dlsym_n " \"%V\", \"%s\" failed (%s)",
|
||||
&value[1], "ngx_modules", ngx_dlerror());
|
||||
return NGX_CONF_ERROR;
|
||||
}
|
||||
|
||||
names = ngx_dlsym(handle, "ngx_module_names");
|
||||
if (names == NULL) {
|
||||
ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
|
||||
ngx_dlsym_n " \"%V\", \"%s\" failed (%s)",
|
||||
&value[1], "ngx_module_names", ngx_dlerror());
|
||||
return NGX_CONF_ERROR;
|
||||
}
|
||||
|
||||
order = ngx_dlsym(handle, "ngx_module_order");
|
||||
|
||||
for (i = 0; modules[i]; i++) {
|
||||
module = modules[i];
|
||||
module->name = names[i];
|
||||
|
||||
if (ngx_add_module(cf, &file, module, order) != NGX_OK) {
|
||||
return NGX_CONF_ERROR;
|
||||
}
|
||||
|
||||
ngx_log_debug2(NGX_LOG_DEBUG_CORE, cf->log, 0, "module: %s i:%ui",
|
||||
module->name, module->index);
|
||||
}
|
||||
|
||||
return NGX_CONF_OK;
|
||||
|
||||
#else
|
||||
|
||||
ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
|
||||
"\"load_module\" is not supported "
|
||||
"on this platform");
|
||||
return NGX_CONF_ERROR;
|
||||
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
#if (NGX_HAVE_DLOPEN)
|
||||
|
||||
static void
|
||||
ngx_unload_module(void *data)
|
||||
{
|
||||
void *handle = data;
|
||||
|
||||
if (ngx_dlclose(handle) != 0) {
|
||||
ngx_log_error(NGX_LOG_ALERT, ngx_cycle->log, 0,
|
||||
ngx_dlclose_n " failed (%s)", ngx_dlerror());
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
|
|
|
@ -9,16 +9,10 @@
|
|||
#define _NGINX_H_INCLUDED_
|
||||
|
||||
|
||||
#define nginx_version 1023004
|
||||
#define NGINX_VERSION "1.23.4"
|
||||
#define nginx_version 1006003
|
||||
#define NGINX_VERSION "1.6.3"
|
||||
#define NGINX_VER "nginx/" NGINX_VERSION
|
||||
|
||||
#ifdef NGX_BUILD
|
||||
#define NGINX_VER_BUILD NGINX_VER " (" NGX_BUILD ")"
|
||||
#else
|
||||
#define NGINX_VER_BUILD NGINX_VER
|
||||
#endif
|
||||
|
||||
#define NGINX_VAR "NGINX"
|
||||
#define NGX_OLDPID_EXT ".oldbin"
|
||||
|
||||
|
|
|
@ -1,143 +0,0 @@
|
|||
|
||||
/*
|
||||
* Copyright (C) Nginx, Inc.
|
||||
*/
|
||||
|
||||
|
||||
#include <ngx_config.h>
|
||||
#include <ngx_core.h>
|
||||
|
||||
#define NGX_BPF_LOGBUF_SIZE (16 * 1024)
|
||||
|
||||
|
||||
static ngx_inline int
|
||||
ngx_bpf(enum bpf_cmd cmd, union bpf_attr *attr, unsigned int size)
|
||||
{
|
||||
return syscall(__NR_bpf, cmd, attr, size);
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
ngx_bpf_program_link(ngx_bpf_program_t *program, const char *symbol, int fd)
|
||||
{
|
||||
ngx_uint_t i;
|
||||
ngx_bpf_reloc_t *rl;
|
||||
|
||||
rl = program->relocs;
|
||||
|
||||
for (i = 0; i < program->nrelocs; i++) {
|
||||
if (ngx_strcmp(rl[i].name, symbol) == 0) {
|
||||
program->ins[rl[i].offset].src_reg = 1;
|
||||
program->ins[rl[i].offset].imm = fd;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
int
|
||||
ngx_bpf_load_program(ngx_log_t *log, ngx_bpf_program_t *program)
|
||||
{
|
||||
int fd;
|
||||
union bpf_attr attr;
|
||||
#if (NGX_DEBUG)
|
||||
char buf[NGX_BPF_LOGBUF_SIZE];
|
||||
#endif
|
||||
|
||||
ngx_memzero(&attr, sizeof(union bpf_attr));
|
||||
|
||||
attr.license = (uintptr_t) program->license;
|
||||
attr.prog_type = program->type;
|
||||
attr.insns = (uintptr_t) program->ins;
|
||||
attr.insn_cnt = program->nins;
|
||||
|
||||
#if (NGX_DEBUG)
|
||||
/* for verifier errors */
|
||||
attr.log_buf = (uintptr_t) buf;
|
||||
attr.log_size = NGX_BPF_LOGBUF_SIZE;
|
||||
attr.log_level = 1;
|
||||
#endif
|
||||
|
||||
fd = ngx_bpf(BPF_PROG_LOAD, &attr, sizeof(attr));
|
||||
if (fd < 0) {
|
||||
ngx_log_error(NGX_LOG_ALERT, log, ngx_errno,
|
||||
"failed to load BPF program");
|
||||
|
||||
ngx_log_debug1(NGX_LOG_DEBUG_CORE, log, 0,
|
||||
"bpf verifier: %s", buf);
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
return fd;
|
||||
}
|
||||
|
||||
|
||||
int
|
||||
ngx_bpf_map_create(ngx_log_t *log, enum bpf_map_type type, int key_size,
|
||||
int value_size, int max_entries, uint32_t map_flags)
|
||||
{
|
||||
int fd;
|
||||
union bpf_attr attr;
|
||||
|
||||
ngx_memzero(&attr, sizeof(union bpf_attr));
|
||||
|
||||
attr.map_type = type;
|
||||
attr.key_size = key_size;
|
||||
attr.value_size = value_size;
|
||||
attr.max_entries = max_entries;
|
||||
attr.map_flags = map_flags;
|
||||
|
||||
fd = ngx_bpf(BPF_MAP_CREATE, &attr, sizeof(attr));
|
||||
if (fd < 0) {
|
||||
ngx_log_error(NGX_LOG_ALERT, log, ngx_errno,
|
||||
"failed to create BPF map");
|
||||
return NGX_ERROR;
|
||||
}
|
||||
|
||||
return fd;
|
||||
}
|
||||
|
||||
|
||||
int
|
||||
ngx_bpf_map_update(int fd, const void *key, const void *value, uint64_t flags)
|
||||
{
|
||||
union bpf_attr attr;
|
||||
|
||||
ngx_memzero(&attr, sizeof(union bpf_attr));
|
||||
|
||||
attr.map_fd = fd;
|
||||
attr.key = (uintptr_t) key;
|
||||
attr.value = (uintptr_t) value;
|
||||
attr.flags = flags;
|
||||
|
||||
return ngx_bpf(BPF_MAP_UPDATE_ELEM, &attr, sizeof(attr));
|
||||
}
|
||||
|
||||
|
||||
int
|
||||
ngx_bpf_map_delete(int fd, const void *key)
|
||||
{
|
||||
union bpf_attr attr;
|
||||
|
||||
ngx_memzero(&attr, sizeof(union bpf_attr));
|
||||
|
||||
attr.map_fd = fd;
|
||||
attr.key = (uintptr_t) key;
|
||||
|
||||
return ngx_bpf(BPF_MAP_DELETE_ELEM, &attr, sizeof(attr));
|
||||
}
|
||||
|
||||
|
||||
int
|
||||
ngx_bpf_map_lookup(int fd, const void *key, void *value)
|
||||
{
|
||||
union bpf_attr attr;
|
||||
|
||||
ngx_memzero(&attr, sizeof(union bpf_attr));
|
||||
|
||||
attr.map_fd = fd;
|
||||
attr.key = (uintptr_t) key;
|
||||
attr.value = (uintptr_t) value;
|
||||
|
||||
return ngx_bpf(BPF_MAP_LOOKUP_ELEM, &attr, sizeof(attr));
|
||||
}
|
|
@ -1,43 +0,0 @@
|
|||
|
||||
/*
|
||||
* Copyright (C) Nginx, Inc.
|
||||
*/
|
||||
|
||||
|
||||
#ifndef _NGX_BPF_H_INCLUDED_
|
||||
#define _NGX_BPF_H_INCLUDED_
|
||||
|
||||
|
||||
#include <ngx_config.h>
|
||||
#include <ngx_core.h>
|
||||
|
||||
#include <linux/bpf.h>
|
||||
|
||||
|
||||
typedef struct {
|
||||
char *name;
|
||||
int offset;
|
||||
} ngx_bpf_reloc_t;
|
||||
|
||||
typedef struct {
|
||||
char *license;
|
||||
enum bpf_prog_type type;
|
||||
struct bpf_insn *ins;
|
||||
size_t nins;
|
||||
ngx_bpf_reloc_t *relocs;
|
||||
size_t nrelocs;
|
||||
} ngx_bpf_program_t;
|
||||
|
||||
|
||||
void ngx_bpf_program_link(ngx_bpf_program_t *program, const char *symbol,
|
||||
int fd);
|
||||
int ngx_bpf_load_program(ngx_log_t *log, ngx_bpf_program_t *program);
|
||||
|
||||
int ngx_bpf_map_create(ngx_log_t *log, enum bpf_map_type type, int key_size,
|
||||
int value_size, int max_entries, uint32_t map_flags);
|
||||
int ngx_bpf_map_update(int fd, const void *key, const void *value,
|
||||
uint64_t flags);
|
||||
int ngx_bpf_map_delete(int fd, const void *key);
|
||||
int ngx_bpf_map_lookup(int fd, const void *key, void *value);
|
||||
|
||||
#endif /* _NGX_BPF_H_INCLUDED_ */
|
|
@ -137,7 +137,6 @@ ngx_chain_add_copy(ngx_pool_t *pool, ngx_chain_t **chain, ngx_chain_t *in)
|
|||
while (in) {
|
||||
cl = ngx_alloc_chain_link(pool);
|
||||
if (cl == NULL) {
|
||||
*ll = NULL;
|
||||
return NGX_ERROR;
|
||||
}
|
||||
|
||||
|
@ -187,32 +186,30 @@ ngx_chain_update_chains(ngx_pool_t *p, ngx_chain_t **free, ngx_chain_t **busy,
|
|||
{
|
||||
ngx_chain_t *cl;
|
||||
|
||||
if (*out) {
|
||||
if (*busy == NULL) {
|
||||
*busy = *out;
|
||||
if (*busy == NULL) {
|
||||
*busy = *out;
|
||||
|
||||
} else {
|
||||
for (cl = *busy; cl->next; cl = cl->next) { /* void */ }
|
||||
} else {
|
||||
for (cl = *busy; cl->next; cl = cl->next) { /* void */ }
|
||||
|
||||
cl->next = *out;
|
||||
}
|
||||
|
||||
*out = NULL;
|
||||
cl->next = *out;
|
||||
}
|
||||
|
||||
*out = NULL;
|
||||
|
||||
while (*busy) {
|
||||
cl = *busy;
|
||||
|
||||
if (ngx_buf_size(cl->buf) != 0) {
|
||||
break;
|
||||
}
|
||||
|
||||
if (cl->buf->tag != tag) {
|
||||
*busy = cl->next;
|
||||
ngx_free_chain(p, cl);
|
||||
continue;
|
||||
}
|
||||
|
||||
if (ngx_buf_size(cl->buf) != 0) {
|
||||
break;
|
||||
}
|
||||
|
||||
cl->buf->pos = cl->buf->start;
|
||||
cl->buf->last = cl->buf->start;
|
||||
|
||||
|
@ -221,94 +218,3 @@ ngx_chain_update_chains(ngx_pool_t *p, ngx_chain_t **free, ngx_chain_t **busy,
|
|||
*free = cl;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
off_t
|
||||
ngx_chain_coalesce_file(ngx_chain_t **in, off_t limit)
|
||||
{
|
||||
off_t total, size, aligned, fprev;
|
||||
ngx_fd_t fd;
|
||||
ngx_chain_t *cl;
|
||||
|
||||
total = 0;
|
||||
|
||||
cl = *in;
|
||||
fd = cl->buf->file->fd;
|
||||
|
||||
do {
|
||||
size = cl->buf->file_last - cl->buf->file_pos;
|
||||
|
||||
if (size > limit - total) {
|
||||
size = limit - total;
|
||||
|
||||
aligned = (cl->buf->file_pos + size + ngx_pagesize - 1)
|
||||
& ~((off_t) ngx_pagesize - 1);
|
||||
|
||||
if (aligned <= cl->buf->file_last) {
|
||||
size = aligned - cl->buf->file_pos;
|
||||
}
|
||||
|
||||
total += size;
|
||||
break;
|
||||
}
|
||||
|
||||
total += size;
|
||||
fprev = cl->buf->file_pos + size;
|
||||
cl = cl->next;
|
||||
|
||||
} while (cl
|
||||
&& cl->buf->in_file
|
||||
&& total < limit
|
||||
&& fd == cl->buf->file->fd
|
||||
&& fprev == cl->buf->file_pos);
|
||||
|
||||
*in = cl;
|
||||
|
||||
return total;
|
||||
}
|
||||
|
||||
|
||||
ngx_chain_t *
|
||||
ngx_chain_update_sent(ngx_chain_t *in, off_t sent)
|
||||
{
|
||||
off_t size;
|
||||
|
||||
for ( /* void */ ; in; in = in->next) {
|
||||
|
||||
if (ngx_buf_special(in->buf)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (sent == 0) {
|
||||
break;
|
||||
}
|
||||
|
||||
size = ngx_buf_size(in->buf);
|
||||
|
||||
if (sent >= size) {
|
||||
sent -= size;
|
||||
|
||||
if (ngx_buf_in_memory(in->buf)) {
|
||||
in->buf->pos = in->buf->last;
|
||||
}
|
||||
|
||||
if (in->buf->in_file) {
|
||||
in->buf->file_pos = in->buf->file_last;
|
||||
}
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
if (ngx_buf_in_memory(in->buf)) {
|
||||
in->buf->pos += (size_t) sent;
|
||||
}
|
||||
|
||||
if (in->buf->in_file) {
|
||||
in->buf->file_pos += sent;
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
return in;
|
||||
}
|
||||
|
|
|
@ -72,8 +72,10 @@ typedef struct ngx_output_chain_ctx_s ngx_output_chain_ctx_t;
|
|||
|
||||
typedef ngx_int_t (*ngx_output_chain_filter_pt)(void *ctx, ngx_chain_t *in);
|
||||
|
||||
#if (NGX_HAVE_FILE_AIO)
|
||||
typedef void (*ngx_output_chain_aio_pt)(ngx_output_chain_ctx_t *ctx,
|
||||
ngx_file_t *file);
|
||||
#endif
|
||||
|
||||
struct ngx_output_chain_ctx_s {
|
||||
ngx_buf_t *buf;
|
||||
|
@ -83,21 +85,17 @@ struct ngx_output_chain_ctx_s {
|
|||
|
||||
unsigned sendfile:1;
|
||||
unsigned directio:1;
|
||||
#if (NGX_HAVE_ALIGNED_DIRECTIO)
|
||||
unsigned unaligned:1;
|
||||
#endif
|
||||
unsigned need_in_memory:1;
|
||||
unsigned need_in_temp:1;
|
||||
#if (NGX_HAVE_FILE_AIO)
|
||||
unsigned aio:1;
|
||||
|
||||
#if (NGX_HAVE_FILE_AIO || NGX_COMPAT)
|
||||
ngx_output_chain_aio_pt aio_handler;
|
||||
#endif
|
||||
|
||||
#if (NGX_THREADS || NGX_COMPAT)
|
||||
ngx_int_t (*thread_handler)(ngx_thread_task_t *task,
|
||||
ngx_file_t *file);
|
||||
ngx_thread_task_t *thread_task;
|
||||
#endif
|
||||
|
||||
off_t alignment;
|
||||
|
||||
ngx_pool_t *pool;
|
||||
|
@ -122,20 +120,20 @@ typedef struct {
|
|||
#define NGX_CHAIN_ERROR (ngx_chain_t *) NGX_ERROR
|
||||
|
||||
|
||||
#define ngx_buf_in_memory(b) ((b)->temporary || (b)->memory || (b)->mmap)
|
||||
#define ngx_buf_in_memory_only(b) (ngx_buf_in_memory(b) && !(b)->in_file)
|
||||
#define ngx_buf_in_memory(b) (b->temporary || b->memory || b->mmap)
|
||||
#define ngx_buf_in_memory_only(b) (ngx_buf_in_memory(b) && !b->in_file)
|
||||
|
||||
#define ngx_buf_special(b) \
|
||||
(((b)->flush || (b)->last_buf || (b)->sync) \
|
||||
&& !ngx_buf_in_memory(b) && !(b)->in_file)
|
||||
((b->flush || b->last_buf || b->sync) \
|
||||
&& !ngx_buf_in_memory(b) && !b->in_file)
|
||||
|
||||
#define ngx_buf_sync_only(b) \
|
||||
((b)->sync && !ngx_buf_in_memory(b) \
|
||||
&& !(b)->in_file && !(b)->flush && !(b)->last_buf)
|
||||
(b->sync \
|
||||
&& !ngx_buf_in_memory(b) && !b->in_file && !b->flush && !b->last_buf)
|
||||
|
||||
#define ngx_buf_size(b) \
|
||||
(ngx_buf_in_memory(b) ? (off_t) ((b)->last - (b)->pos): \
|
||||
((b)->file_last - (b)->file_pos))
|
||||
(ngx_buf_in_memory(b) ? (off_t) (b->last - b->pos): \
|
||||
(b->file_last - b->file_pos))
|
||||
|
||||
ngx_buf_t *ngx_create_temp_buf(ngx_pool_t *pool, size_t size);
|
||||
ngx_chain_t *ngx_create_chain_of_bufs(ngx_pool_t *pool, ngx_bufs_t *bufs);
|
||||
|
@ -146,8 +144,8 @@ ngx_chain_t *ngx_create_chain_of_bufs(ngx_pool_t *pool, ngx_bufs_t *bufs);
|
|||
|
||||
ngx_chain_t *ngx_alloc_chain_link(ngx_pool_t *pool);
|
||||
#define ngx_free_chain(pool, cl) \
|
||||
(cl)->next = (pool)->chain; \
|
||||
(pool)->chain = (cl)
|
||||
cl->next = pool->chain; \
|
||||
pool->chain = cl
|
||||
|
||||
|
||||
|
||||
|
@ -160,8 +158,5 @@ ngx_chain_t *ngx_chain_get_free_buf(ngx_pool_t *p, ngx_chain_t **free);
|
|||
void ngx_chain_update_chains(ngx_pool_t *p, ngx_chain_t **free,
|
||||
ngx_chain_t **busy, ngx_chain_t **out, ngx_buf_tag_t tag);
|
||||
|
||||
off_t ngx_chain_coalesce_file(ngx_chain_t **in, off_t limit);
|
||||
|
||||
ngx_chain_t *ngx_chain_update_sent(ngx_chain_t *in, off_t sent);
|
||||
|
||||
#endif /* _NGX_BUF_H_INCLUDED_ */
|
||||
|
|
|
@ -10,7 +10,6 @@
|
|||
|
||||
#define NGX_CONF_BUFFER 4096
|
||||
|
||||
static ngx_int_t ngx_conf_add_dump(ngx_conf_t *cf, ngx_str_t *filename);
|
||||
static ngx_int_t ngx_conf_handler(ngx_conf_t *cf, ngx_int_t last);
|
||||
static ngx_int_t ngx_conf_read_token(ngx_conf_t *cf);
|
||||
static void ngx_conf_flush_files(ngx_cycle_t *cycle);
|
||||
|
@ -98,62 +97,6 @@ ngx_conf_param(ngx_conf_t *cf)
|
|||
}
|
||||
|
||||
|
||||
static ngx_int_t
|
||||
ngx_conf_add_dump(ngx_conf_t *cf, ngx_str_t *filename)
|
||||
{
|
||||
off_t size;
|
||||
u_char *p;
|
||||
uint32_t hash;
|
||||
ngx_buf_t *buf;
|
||||
ngx_str_node_t *sn;
|
||||
ngx_conf_dump_t *cd;
|
||||
|
||||
hash = ngx_crc32_long(filename->data, filename->len);
|
||||
|
||||
sn = ngx_str_rbtree_lookup(&cf->cycle->config_dump_rbtree, filename, hash);
|
||||
|
||||
if (sn) {
|
||||
cf->conf_file->dump = NULL;
|
||||
return NGX_OK;
|
||||
}
|
||||
|
||||
p = ngx_pstrdup(cf->cycle->pool, filename);
|
||||
if (p == NULL) {
|
||||
return NGX_ERROR;
|
||||
}
|
||||
|
||||
cd = ngx_array_push(&cf->cycle->config_dump);
|
||||
if (cd == NULL) {
|
||||
return NGX_ERROR;
|
||||
}
|
||||
|
||||
size = ngx_file_size(&cf->conf_file->file.info);
|
||||
|
||||
buf = ngx_create_temp_buf(cf->cycle->pool, (size_t) size);
|
||||
if (buf == NULL) {
|
||||
return NGX_ERROR;
|
||||
}
|
||||
|
||||
cd->name.data = p;
|
||||
cd->name.len = filename->len;
|
||||
cd->buffer = buf;
|
||||
|
||||
cf->conf_file->dump = buf;
|
||||
|
||||
sn = ngx_palloc(cf->temp_pool, sizeof(ngx_str_node_t));
|
||||
if (sn == NULL) {
|
||||
return NGX_ERROR;
|
||||
}
|
||||
|
||||
sn->node.key = hash;
|
||||
sn->str = cd->name;
|
||||
|
||||
ngx_rbtree_insert(&cf->cycle->config_dump_rbtree, &sn->node);
|
||||
|
||||
return NGX_OK;
|
||||
}
|
||||
|
||||
|
||||
char *
|
||||
ngx_conf_parse(ngx_conf_t *cf, ngx_str_t *filename)
|
||||
{
|
||||
|
@ -178,7 +121,6 @@ ngx_conf_parse(ngx_conf_t *cf, ngx_str_t *filename)
|
|||
/* open configuration file */
|
||||
|
||||
fd = ngx_open_file(filename->data, NGX_FILE_RDONLY, NGX_FILE_OPEN, 0);
|
||||
|
||||
if (fd == NGX_INVALID_FILE) {
|
||||
ngx_conf_log_error(NGX_LOG_EMERG, cf, ngx_errno,
|
||||
ngx_open_file_n " \"%s\" failed",
|
||||
|
@ -216,20 +158,6 @@ ngx_conf_parse(ngx_conf_t *cf, ngx_str_t *filename)
|
|||
|
||||
type = parse_file;
|
||||
|
||||
if (ngx_dump_config
|
||||
#if (NGX_DEBUG)
|
||||
|| 1
|
||||
#endif
|
||||
)
|
||||
{
|
||||
if (ngx_conf_add_dump(cf, filename) != NGX_OK) {
|
||||
goto failed;
|
||||
}
|
||||
|
||||
} else {
|
||||
cf->conf_file->dump = NULL;
|
||||
}
|
||||
|
||||
} else if (cf->conf_file->file.fd != NGX_INVALID_FILE) {
|
||||
|
||||
type = parse_block;
|
||||
|
@ -310,7 +238,7 @@ ngx_conf_parse(ngx_conf_t *cf, ngx_str_t *filename)
|
|||
goto failed;
|
||||
}
|
||||
|
||||
ngx_conf_log_error(NGX_LOG_EMERG, cf, 0, "%s", rv);
|
||||
ngx_conf_log_error(NGX_LOG_EMERG, cf, 0, rv);
|
||||
|
||||
goto failed;
|
||||
}
|
||||
|
@ -338,7 +266,7 @@ done:
|
|||
ngx_log_error(NGX_LOG_ALERT, cf->log, ngx_errno,
|
||||
ngx_close_file_n " %s failed",
|
||||
filename->data);
|
||||
rc = NGX_ERROR;
|
||||
return NGX_CONF_ERROR;
|
||||
}
|
||||
|
||||
cf->conf_file = prev;
|
||||
|
@ -365,9 +293,9 @@ ngx_conf_handler(ngx_conf_t *cf, ngx_int_t last)
|
|||
|
||||
found = 0;
|
||||
|
||||
for (i = 0; cf->cycle->modules[i]; i++) {
|
||||
for (i = 0; ngx_modules[i]; i++) {
|
||||
|
||||
cmd = cf->cycle->modules[i]->commands;
|
||||
cmd = ngx_modules[i]->commands;
|
||||
if (cmd == NULL) {
|
||||
continue;
|
||||
}
|
||||
|
@ -384,8 +312,8 @@ ngx_conf_handler(ngx_conf_t *cf, ngx_int_t last)
|
|||
|
||||
found = 1;
|
||||
|
||||
if (cf->cycle->modules[i]->type != NGX_CONF_MODULE
|
||||
&& cf->cycle->modules[i]->type != cf->module_type)
|
||||
if (ngx_modules[i]->type != NGX_CONF_MODULE
|
||||
&& ngx_modules[i]->type != cf->module_type)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
@ -447,16 +375,16 @@ ngx_conf_handler(ngx_conf_t *cf, ngx_int_t last)
|
|||
conf = NULL;
|
||||
|
||||
if (cmd->type & NGX_DIRECT_CONF) {
|
||||
conf = ((void **) cf->ctx)[cf->cycle->modules[i]->index];
|
||||
conf = ((void **) cf->ctx)[ngx_modules[i]->index];
|
||||
|
||||
} else if (cmd->type & NGX_MAIN_CONF) {
|
||||
conf = &(((void **) cf->ctx)[cf->cycle->modules[i]->index]);
|
||||
conf = &(((void **) cf->ctx)[ngx_modules[i]->index]);
|
||||
|
||||
} else if (cf->ctx) {
|
||||
confp = *(void **) ((char *) cf->ctx + cmd->conf);
|
||||
|
||||
if (confp) {
|
||||
conf = confp[cf->cycle->modules[i]->ctx_index];
|
||||
conf = confp[ngx_modules[i]->ctx_index];
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -509,7 +437,7 @@ ngx_conf_read_token(ngx_conf_t *cf)
|
|||
ngx_uint_t found, need_space, last_space, sharp_comment, variable;
|
||||
ngx_uint_t quoted, s_quoted, d_quoted, start_line;
|
||||
ngx_str_t *word;
|
||||
ngx_buf_t *b, *dump;
|
||||
ngx_buf_t *b;
|
||||
|
||||
found = 0;
|
||||
need_space = 0;
|
||||
|
@ -522,7 +450,6 @@ ngx_conf_read_token(ngx_conf_t *cf)
|
|||
|
||||
cf->args->nelts = 0;
|
||||
b = cf->conf_file->buffer;
|
||||
dump = cf->conf_file->dump;
|
||||
start = b->pos;
|
||||
start_line = cf->conf_file->line;
|
||||
|
||||
|
@ -544,8 +471,8 @@ ngx_conf_read_token(ngx_conf_t *cf)
|
|||
}
|
||||
|
||||
ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
|
||||
"unexpected end of file, "
|
||||
"expecting \";\" or \"}\"");
|
||||
"unexpected end of file, "
|
||||
"expecting \";\" or \"}\"");
|
||||
return NGX_ERROR;
|
||||
}
|
||||
|
||||
|
@ -604,10 +531,6 @@ ngx_conf_read_token(ngx_conf_t *cf)
|
|||
b->pos = b->start + len;
|
||||
b->last = b->pos + n;
|
||||
start = b->start;
|
||||
|
||||
if (dump) {
|
||||
dump->last = ngx_cpymem(dump->last, b->pos, size);
|
||||
}
|
||||
}
|
||||
|
||||
ch = *b->pos++;
|
||||
|
@ -649,21 +572,20 @@ ngx_conf_read_token(ngx_conf_t *cf)
|
|||
need_space = 0;
|
||||
|
||||
} else {
|
||||
ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
|
||||
"unexpected \"%c\"", ch);
|
||||
return NGX_ERROR;
|
||||
ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
|
||||
"unexpected \"%c\"", ch);
|
||||
return NGX_ERROR;
|
||||
}
|
||||
}
|
||||
|
||||
if (last_space) {
|
||||
|
||||
start = b->pos - 1;
|
||||
start_line = cf->conf_file->line;
|
||||
|
||||
if (ch == ' ' || ch == '\t' || ch == CR || ch == LF) {
|
||||
continue;
|
||||
}
|
||||
|
||||
start = b->pos - 1;
|
||||
start_line = cf->conf_file->line;
|
||||
|
||||
switch (ch) {
|
||||
|
||||
case ';':
|
||||
|
@ -710,11 +632,6 @@ ngx_conf_read_token(ngx_conf_t *cf)
|
|||
last_space = 0;
|
||||
continue;
|
||||
|
||||
case '$':
|
||||
variable = 1;
|
||||
last_space = 0;
|
||||
continue;
|
||||
|
||||
default:
|
||||
last_space = 0;
|
||||
}
|
||||
|
@ -763,7 +680,7 @@ ngx_conf_read_token(ngx_conf_t *cf)
|
|||
return NGX_ERROR;
|
||||
}
|
||||
|
||||
word->data = ngx_pnalloc(cf->pool, b->pos - 1 - start + 1);
|
||||
word->data = ngx_pnalloc(cf->pool, b->pos - start + 1);
|
||||
if (word->data == NULL) {
|
||||
return NGX_ERROR;
|
||||
}
|
||||
|
@ -864,9 +781,6 @@ ngx_conf_include(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
|
|||
|
||||
file.len = name.len++;
|
||||
file.data = ngx_pstrdup(cf->pool, &name);
|
||||
if (file.data == NULL) {
|
||||
return NGX_CONF_ERROR;
|
||||
}
|
||||
|
||||
ngx_log_debug1(NGX_LOG_DEBUG_CORE, cf->log, 0, "include %s", file.data);
|
||||
|
||||
|
@ -1137,7 +1051,7 @@ ngx_conf_set_keyval_slot(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
|
|||
|
||||
a = (ngx_array_t **) (p + cmd->offset);
|
||||
|
||||
if (*a == NGX_CONF_UNSET_PTR || *a == NULL) {
|
||||
if (*a == NULL) {
|
||||
*a = ngx_array_create(cf->pool, 4, sizeof(ngx_keyval_t));
|
||||
if (*a == NULL) {
|
||||
return NGX_CONF_ERROR;
|
||||
|
@ -1378,7 +1292,7 @@ ngx_conf_set_enum_slot(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
|
|||
return NGX_CONF_OK;
|
||||
}
|
||||
|
||||
ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
|
||||
ngx_conf_log_error(NGX_LOG_WARN, cf, 0,
|
||||
"invalid value \"%s\"", value[1].data);
|
||||
|
||||
return NGX_CONF_ERROR;
|
||||
|
@ -1420,7 +1334,7 @@ ngx_conf_set_bitmask_slot(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
|
|||
}
|
||||
|
||||
if (mask[m].name.len == 0) {
|
||||
ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
|
||||
ngx_conf_log_error(NGX_LOG_WARN, cf, 0,
|
||||
"invalid value \"%s\"", value[i].data);
|
||||
|
||||
return NGX_CONF_ERROR;
|
||||
|
|
|
@ -45,11 +45,12 @@
|
|||
#define NGX_CONF_ANY 0x00000400
|
||||
#define NGX_CONF_1MORE 0x00000800
|
||||
#define NGX_CONF_2MORE 0x00001000
|
||||
#define NGX_CONF_MULTI 0x00000000 /* compatibility */
|
||||
|
||||
#define NGX_DIRECT_CONF 0x00010000
|
||||
|
||||
#define NGX_MAIN_CONF 0x01000000
|
||||
#define NGX_ANY_CONF 0xFF000000
|
||||
#define NGX_ANY_CONF 0x0F000000
|
||||
|
||||
|
||||
|
||||
|
@ -95,18 +96,58 @@ struct ngx_open_file_s {
|
|||
};
|
||||
|
||||
|
||||
typedef struct {
|
||||
ngx_file_t file;
|
||||
ngx_buf_t *buffer;
|
||||
ngx_buf_t *dump;
|
||||
ngx_uint_t line;
|
||||
} ngx_conf_file_t;
|
||||
#define NGX_MODULE_V1 0, 0, 0, 0, 0, 0, 1
|
||||
#define NGX_MODULE_V1_PADDING 0, 0, 0, 0, 0, 0, 0, 0
|
||||
|
||||
struct ngx_module_s {
|
||||
ngx_uint_t ctx_index;
|
||||
ngx_uint_t index;
|
||||
|
||||
ngx_uint_t spare0;
|
||||
ngx_uint_t spare1;
|
||||
ngx_uint_t spare2;
|
||||
ngx_uint_t spare3;
|
||||
|
||||
ngx_uint_t version;
|
||||
|
||||
void *ctx;
|
||||
ngx_command_t *commands;
|
||||
ngx_uint_t type;
|
||||
|
||||
ngx_int_t (*init_master)(ngx_log_t *log);
|
||||
|
||||
ngx_int_t (*init_module)(ngx_cycle_t *cycle);
|
||||
|
||||
ngx_int_t (*init_process)(ngx_cycle_t *cycle);
|
||||
ngx_int_t (*init_thread)(ngx_cycle_t *cycle);
|
||||
void (*exit_thread)(ngx_cycle_t *cycle);
|
||||
void (*exit_process)(ngx_cycle_t *cycle);
|
||||
|
||||
void (*exit_master)(ngx_cycle_t *cycle);
|
||||
|
||||
uintptr_t spare_hook0;
|
||||
uintptr_t spare_hook1;
|
||||
uintptr_t spare_hook2;
|
||||
uintptr_t spare_hook3;
|
||||
uintptr_t spare_hook4;
|
||||
uintptr_t spare_hook5;
|
||||
uintptr_t spare_hook6;
|
||||
uintptr_t spare_hook7;
|
||||
};
|
||||
|
||||
|
||||
typedef struct {
|
||||
ngx_str_t name;
|
||||
void *(*create_conf)(ngx_cycle_t *cycle);
|
||||
char *(*init_conf)(ngx_cycle_t *cycle, void *conf);
|
||||
} ngx_core_module_t;
|
||||
|
||||
|
||||
typedef struct {
|
||||
ngx_file_t file;
|
||||
ngx_buf_t *buffer;
|
||||
} ngx_conf_dump_t;
|
||||
ngx_uint_t line;
|
||||
} ngx_conf_file_t;
|
||||
|
||||
|
||||
typedef char *(*ngx_conf_handler_pt)(ngx_conf_t *cf,
|
||||
|
@ -128,7 +169,7 @@ struct ngx_conf_s {
|
|||
ngx_uint_t cmd_type;
|
||||
|
||||
ngx_conf_handler_pt handler;
|
||||
void *handler_conf;
|
||||
char *handler_conf;
|
||||
};
|
||||
|
||||
|
||||
|
@ -292,4 +333,8 @@ char *ngx_conf_set_enum_slot(ngx_conf_t *cf, ngx_command_t *cmd, void *conf);
|
|||
char *ngx_conf_set_bitmask_slot(ngx_conf_t *cf, ngx_command_t *cmd, void *conf);
|
||||
|
||||
|
||||
extern ngx_uint_t ngx_max_module;
|
||||
extern ngx_module_t *ngx_modules[];
|
||||
|
||||
|
||||
#endif /* _NGX_CONF_FILE_H_INCLUDED_ */
|
||||
|
|
|
@ -125,21 +125,13 @@ typedef intptr_t ngx_flag_t;
|
|||
#endif
|
||||
|
||||
|
||||
#if ((__GNU__ == 2) && (__GNUC_MINOR__ < 8))
|
||||
#define NGX_MAX_UINT32_VALUE (uint32_t) 0xffffffffLL
|
||||
#else
|
||||
#define NGX_MAX_UINT32_VALUE (uint32_t) 0xffffffff
|
||||
#endif
|
||||
|
||||
#define NGX_MAX_INT32_VALUE (uint32_t) 0x7fffffff
|
||||
|
||||
|
||||
#if (NGX_COMPAT)
|
||||
|
||||
#define NGX_COMPAT_BEGIN(slots) uint64_t spare[slots];
|
||||
#define NGX_COMPAT_END
|
||||
|
||||
#else
|
||||
|
||||
#define NGX_COMPAT_BEGIN(slots)
|
||||
#define NGX_COMPAT_END
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
#endif /* _NGX_CONFIG_H_INCLUDED_ */
|
||||
|
|
|
@ -13,12 +13,11 @@
|
|||
ngx_os_io_t ngx_io;
|
||||
|
||||
|
||||
static void ngx_drain_connections(ngx_cycle_t *cycle);
|
||||
static void ngx_drain_connections(void);
|
||||
|
||||
|
||||
ngx_listening_t *
|
||||
ngx_create_listening(ngx_conf_t *cf, struct sockaddr *sockaddr,
|
||||
socklen_t socklen)
|
||||
ngx_create_listening(ngx_conf_t *cf, void *sockaddr, socklen_t socklen)
|
||||
{
|
||||
size_t len;
|
||||
ngx_listening_t *ls;
|
||||
|
@ -48,21 +47,21 @@ ngx_create_listening(ngx_conf_t *cf, struct sockaddr *sockaddr,
|
|||
switch (ls->sockaddr->sa_family) {
|
||||
#if (NGX_HAVE_INET6)
|
||||
case AF_INET6:
|
||||
ls->addr_text_max_len = NGX_INET6_ADDRSTRLEN;
|
||||
break;
|
||||
ls->addr_text_max_len = NGX_INET6_ADDRSTRLEN;
|
||||
break;
|
||||
#endif
|
||||
#if (NGX_HAVE_UNIX_DOMAIN)
|
||||
case AF_UNIX:
|
||||
ls->addr_text_max_len = NGX_UNIX_ADDRSTRLEN;
|
||||
len++;
|
||||
break;
|
||||
ls->addr_text_max_len = NGX_UNIX_ADDRSTRLEN;
|
||||
len++;
|
||||
break;
|
||||
#endif
|
||||
case AF_INET:
|
||||
ls->addr_text_max_len = NGX_INET_ADDRSTRLEN;
|
||||
break;
|
||||
ls->addr_text_max_len = NGX_INET_ADDRSTRLEN;
|
||||
break;
|
||||
default:
|
||||
ls->addr_text_max_len = NGX_SOCKADDR_STRLEN;
|
||||
break;
|
||||
ls->addr_text_max_len = NGX_SOCKADDR_STRLEN;
|
||||
break;
|
||||
}
|
||||
|
||||
ls->addr_text.data = ngx_pnalloc(cf->pool, len);
|
||||
|
@ -91,42 +90,6 @@ ngx_create_listening(ngx_conf_t *cf, struct sockaddr *sockaddr,
|
|||
}
|
||||
|
||||
|
||||
ngx_int_t
|
||||
ngx_clone_listening(ngx_cycle_t *cycle, ngx_listening_t *ls)
|
||||
{
|
||||
#if (NGX_HAVE_REUSEPORT)
|
||||
|
||||
ngx_int_t n;
|
||||
ngx_core_conf_t *ccf;
|
||||
ngx_listening_t ols;
|
||||
|
||||
if (!ls->reuseport || ls->worker != 0) {
|
||||
return NGX_OK;
|
||||
}
|
||||
|
||||
ols = *ls;
|
||||
|
||||
ccf = (ngx_core_conf_t *) ngx_get_conf(cycle->conf_ctx, ngx_core_module);
|
||||
|
||||
for (n = 1; n < ccf->worker_processes; n++) {
|
||||
|
||||
/* create a socket for each worker process */
|
||||
|
||||
ls = ngx_array_push(&cycle->listening);
|
||||
if (ls == NULL) {
|
||||
return NGX_ERROR;
|
||||
}
|
||||
|
||||
*ls = ols;
|
||||
ls->worker = n;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
return NGX_OK;
|
||||
}
|
||||
|
||||
|
||||
ngx_int_t
|
||||
ngx_set_inherited_sockets(ngx_cycle_t *cycle)
|
||||
{
|
||||
|
@ -143,19 +106,16 @@ ngx_set_inherited_sockets(ngx_cycle_t *cycle)
|
|||
#if (NGX_HAVE_DEFERRED_ACCEPT && defined TCP_DEFER_ACCEPT)
|
||||
int timeout;
|
||||
#endif
|
||||
#if (NGX_HAVE_REUSEPORT)
|
||||
int reuseport;
|
||||
#endif
|
||||
|
||||
ls = cycle->listening.elts;
|
||||
for (i = 0; i < cycle->listening.nelts; i++) {
|
||||
|
||||
ls[i].sockaddr = ngx_palloc(cycle->pool, sizeof(ngx_sockaddr_t));
|
||||
ls[i].sockaddr = ngx_palloc(cycle->pool, NGX_SOCKADDRLEN);
|
||||
if (ls[i].sockaddr == NULL) {
|
||||
return NGX_ERROR;
|
||||
}
|
||||
|
||||
ls[i].socklen = sizeof(ngx_sockaddr_t);
|
||||
ls[i].socklen = NGX_SOCKADDRLEN;
|
||||
if (getsockname(ls[i].fd, ls[i].sockaddr, &ls[i].socklen) == -1) {
|
||||
ngx_log_error(NGX_LOG_CRIT, cycle->log, ngx_socket_errno,
|
||||
"getsockname() of the inherited "
|
||||
|
@ -164,30 +124,26 @@ ngx_set_inherited_sockets(ngx_cycle_t *cycle)
|
|||
continue;
|
||||
}
|
||||
|
||||
if (ls[i].socklen > (socklen_t) sizeof(ngx_sockaddr_t)) {
|
||||
ls[i].socklen = sizeof(ngx_sockaddr_t);
|
||||
}
|
||||
|
||||
switch (ls[i].sockaddr->sa_family) {
|
||||
|
||||
#if (NGX_HAVE_INET6)
|
||||
case AF_INET6:
|
||||
ls[i].addr_text_max_len = NGX_INET6_ADDRSTRLEN;
|
||||
len = NGX_INET6_ADDRSTRLEN + sizeof("[]:65535") - 1;
|
||||
break;
|
||||
ls[i].addr_text_max_len = NGX_INET6_ADDRSTRLEN;
|
||||
len = NGX_INET6_ADDRSTRLEN + sizeof("[]:65535") - 1;
|
||||
break;
|
||||
#endif
|
||||
|
||||
#if (NGX_HAVE_UNIX_DOMAIN)
|
||||
case AF_UNIX:
|
||||
ls[i].addr_text_max_len = NGX_UNIX_ADDRSTRLEN;
|
||||
len = NGX_UNIX_ADDRSTRLEN;
|
||||
break;
|
||||
ls[i].addr_text_max_len = NGX_UNIX_ADDRSTRLEN;
|
||||
len = NGX_UNIX_ADDRSTRLEN;
|
||||
break;
|
||||
#endif
|
||||
|
||||
case AF_INET:
|
||||
ls[i].addr_text_max_len = NGX_INET_ADDRSTRLEN;
|
||||
len = NGX_INET_ADDRSTRLEN + sizeof(":65535") - 1;
|
||||
break;
|
||||
ls[i].addr_text_max_len = NGX_INET_ADDRSTRLEN;
|
||||
len = NGX_INET_ADDRSTRLEN + sizeof(":65535") - 1;
|
||||
break;
|
||||
|
||||
default:
|
||||
ngx_log_error(NGX_LOG_CRIT, cycle->log, ngx_socket_errno,
|
||||
|
@ -214,18 +170,6 @@ ngx_set_inherited_sockets(ngx_cycle_t *cycle)
|
|||
|
||||
olen = sizeof(int);
|
||||
|
||||
if (getsockopt(ls[i].fd, SOL_SOCKET, SO_TYPE, (void *) &ls[i].type,
|
||||
&olen)
|
||||
== -1)
|
||||
{
|
||||
ngx_log_error(NGX_LOG_CRIT, cycle->log, ngx_socket_errno,
|
||||
"getsockopt(SO_TYPE) %V failed", &ls[i].addr_text);
|
||||
ls[i].ignore = 1;
|
||||
continue;
|
||||
}
|
||||
|
||||
olen = sizeof(int);
|
||||
|
||||
if (getsockopt(ls[i].fd, SOL_SOCKET, SO_RCVBUF, (void *) &ls[i].rcvbuf,
|
||||
&olen)
|
||||
== -1)
|
||||
|
@ -271,46 +215,6 @@ ngx_set_inherited_sockets(ngx_cycle_t *cycle)
|
|||
#endif
|
||||
#endif
|
||||
|
||||
#if (NGX_HAVE_REUSEPORT)
|
||||
|
||||
reuseport = 0;
|
||||
olen = sizeof(int);
|
||||
|
||||
#ifdef SO_REUSEPORT_LB
|
||||
|
||||
if (getsockopt(ls[i].fd, SOL_SOCKET, SO_REUSEPORT_LB,
|
||||
(void *) &reuseport, &olen)
|
||||
== -1)
|
||||
{
|
||||
ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_socket_errno,
|
||||
"getsockopt(SO_REUSEPORT_LB) %V failed, ignored",
|
||||
&ls[i].addr_text);
|
||||
|
||||
} else {
|
||||
ls[i].reuseport = reuseport ? 1 : 0;
|
||||
}
|
||||
|
||||
#else
|
||||
|
||||
if (getsockopt(ls[i].fd, SOL_SOCKET, SO_REUSEPORT,
|
||||
(void *) &reuseport, &olen)
|
||||
== -1)
|
||||
{
|
||||
ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_socket_errno,
|
||||
"getsockopt(SO_REUSEPORT) %V failed, ignored",
|
||||
&ls[i].addr_text);
|
||||
|
||||
} else {
|
||||
ls[i].reuseport = reuseport ? 1 : 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
if (ls[i].type != SOCK_STREAM) {
|
||||
continue;
|
||||
}
|
||||
|
||||
#if (NGX_HAVE_TCP_FASTOPEN)
|
||||
|
||||
olen = sizeof(int);
|
||||
|
@ -321,9 +225,7 @@ ngx_set_inherited_sockets(ngx_cycle_t *cycle)
|
|||
{
|
||||
err = ngx_socket_errno;
|
||||
|
||||
if (err != NGX_EOPNOTSUPP && err != NGX_ENOPROTOOPT
|
||||
&& err != NGX_EINVAL)
|
||||
{
|
||||
if (err != NGX_EOPNOTSUPP && err != NGX_ENOPROTOOPT) {
|
||||
ngx_log_error(NGX_LOG_NOTICE, cycle->log, err,
|
||||
"getsockopt(TCP_FASTOPEN) %V failed, ignored",
|
||||
&ls[i].addr_text);
|
||||
|
@ -430,46 +332,6 @@ ngx_open_listening_sockets(ngx_cycle_t *cycle)
|
|||
continue;
|
||||
}
|
||||
|
||||
#if (NGX_HAVE_REUSEPORT)
|
||||
|
||||
if (ls[i].add_reuseport) {
|
||||
|
||||
/*
|
||||
* to allow transition from a socket without SO_REUSEPORT
|
||||
* to multiple sockets with SO_REUSEPORT, we have to set
|
||||
* SO_REUSEPORT on the old socket before opening new ones
|
||||
*/
|
||||
|
||||
int reuseport = 1;
|
||||
|
||||
#ifdef SO_REUSEPORT_LB
|
||||
|
||||
if (setsockopt(ls[i].fd, SOL_SOCKET, SO_REUSEPORT_LB,
|
||||
(const void *) &reuseport, sizeof(int))
|
||||
== -1)
|
||||
{
|
||||
ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_socket_errno,
|
||||
"setsockopt(SO_REUSEPORT_LB) %V failed, "
|
||||
"ignored",
|
||||
&ls[i].addr_text);
|
||||
}
|
||||
|
||||
#else
|
||||
|
||||
if (setsockopt(ls[i].fd, SOL_SOCKET, SO_REUSEPORT,
|
||||
(const void *) &reuseport, sizeof(int))
|
||||
== -1)
|
||||
{
|
||||
ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_socket_errno,
|
||||
"setsockopt(SO_REUSEPORT) %V failed, ignored",
|
||||
&ls[i].addr_text);
|
||||
}
|
||||
#endif
|
||||
|
||||
ls[i].add_reuseport = 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
if (ls[i].fd != (ngx_socket_t) -1) {
|
||||
continue;
|
||||
}
|
||||
|
@ -491,74 +353,23 @@ ngx_open_listening_sockets(ngx_cycle_t *cycle)
|
|||
return NGX_ERROR;
|
||||
}
|
||||
|
||||
if (ls[i].type != SOCK_DGRAM || !ngx_test_config) {
|
||||
if (setsockopt(s, SOL_SOCKET, SO_REUSEADDR,
|
||||
(const void *) &reuseaddr, sizeof(int))
|
||||
== -1)
|
||||
{
|
||||
ngx_log_error(NGX_LOG_EMERG, log, ngx_socket_errno,
|
||||
"setsockopt(SO_REUSEADDR) %V failed",
|
||||
&ls[i].addr_text);
|
||||
|
||||
if (setsockopt(s, SOL_SOCKET, SO_REUSEADDR,
|
||||
(const void *) &reuseaddr, sizeof(int))
|
||||
== -1)
|
||||
{
|
||||
if (ngx_close_socket(s) == -1) {
|
||||
ngx_log_error(NGX_LOG_EMERG, log, ngx_socket_errno,
|
||||
"setsockopt(SO_REUSEADDR) %V failed",
|
||||
ngx_close_socket_n " %V failed",
|
||||
&ls[i].addr_text);
|
||||
|
||||
if (ngx_close_socket(s) == -1) {
|
||||
ngx_log_error(NGX_LOG_EMERG, log, ngx_socket_errno,
|
||||
ngx_close_socket_n " %V failed",
|
||||
&ls[i].addr_text);
|
||||
}
|
||||
|
||||
return NGX_ERROR;
|
||||
}
|
||||
|
||||
return NGX_ERROR;
|
||||
}
|
||||
|
||||
#if (NGX_HAVE_REUSEPORT)
|
||||
|
||||
if (ls[i].reuseport && !ngx_test_config) {
|
||||
int reuseport;
|
||||
|
||||
reuseport = 1;
|
||||
|
||||
#ifdef SO_REUSEPORT_LB
|
||||
|
||||
if (setsockopt(s, SOL_SOCKET, SO_REUSEPORT_LB,
|
||||
(const void *) &reuseport, sizeof(int))
|
||||
== -1)
|
||||
{
|
||||
ngx_log_error(NGX_LOG_EMERG, log, ngx_socket_errno,
|
||||
"setsockopt(SO_REUSEPORT_LB) %V failed",
|
||||
&ls[i].addr_text);
|
||||
|
||||
if (ngx_close_socket(s) == -1) {
|
||||
ngx_log_error(NGX_LOG_EMERG, log, ngx_socket_errno,
|
||||
ngx_close_socket_n " %V failed",
|
||||
&ls[i].addr_text);
|
||||
}
|
||||
|
||||
return NGX_ERROR;
|
||||
}
|
||||
|
||||
#else
|
||||
|
||||
if (setsockopt(s, SOL_SOCKET, SO_REUSEPORT,
|
||||
(const void *) &reuseport, sizeof(int))
|
||||
== -1)
|
||||
{
|
||||
ngx_log_error(NGX_LOG_EMERG, log, ngx_socket_errno,
|
||||
"setsockopt(SO_REUSEPORT) %V failed",
|
||||
&ls[i].addr_text);
|
||||
|
||||
if (ngx_close_socket(s) == -1) {
|
||||
ngx_log_error(NGX_LOG_EMERG, log, ngx_socket_errno,
|
||||
ngx_close_socket_n " %V failed",
|
||||
&ls[i].addr_text);
|
||||
}
|
||||
|
||||
return NGX_ERROR;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
|
||||
#if (NGX_HAVE_INET6 && defined IPV6_V6ONLY)
|
||||
|
||||
if (ls[i].sockaddr->sa_family == AF_INET6) {
|
||||
|
@ -578,7 +389,7 @@ ngx_open_listening_sockets(ngx_cycle_t *cycle)
|
|||
#endif
|
||||
/* TODO: close on exit */
|
||||
|
||||
if (!(ngx_event_flags & NGX_USE_IOCP_EVENT)) {
|
||||
if (!(ngx_event_flags & NGX_USE_AIO_EVENT)) {
|
||||
if (ngx_nonblocking(s) == -1) {
|
||||
ngx_log_error(NGX_LOG_EMERG, log, ngx_socket_errno,
|
||||
ngx_nonblocking_n " %V failed",
|
||||
|
@ -600,11 +411,13 @@ ngx_open_listening_sockets(ngx_cycle_t *cycle)
|
|||
if (bind(s, ls[i].sockaddr, ls[i].socklen) == -1) {
|
||||
err = ngx_socket_errno;
|
||||
|
||||
if (err != NGX_EADDRINUSE || !ngx_test_config) {
|
||||
ngx_log_error(NGX_LOG_EMERG, log, err,
|
||||
"bind() to %V failed", &ls[i].addr_text);
|
||||
if (err == NGX_EADDRINUSE && ngx_test_config) {
|
||||
continue;
|
||||
}
|
||||
|
||||
ngx_log_error(NGX_LOG_EMERG, log, err,
|
||||
"bind() to %V failed", &ls[i].addr_text);
|
||||
|
||||
if (ngx_close_socket(s) == -1) {
|
||||
ngx_log_error(NGX_LOG_EMERG, log, ngx_socket_errno,
|
||||
ngx_close_socket_n " %V failed",
|
||||
|
@ -615,9 +428,7 @@ ngx_open_listening_sockets(ngx_cycle_t *cycle)
|
|||
return NGX_ERROR;
|
||||
}
|
||||
|
||||
if (!ngx_test_config) {
|
||||
failed = 1;
|
||||
}
|
||||
failed = 1;
|
||||
|
||||
continue;
|
||||
}
|
||||
|
@ -645,25 +456,10 @@ ngx_open_listening_sockets(ngx_cycle_t *cycle)
|
|||
}
|
||||
#endif
|
||||
|
||||
if (ls[i].type != SOCK_STREAM) {
|
||||
ls[i].fd = s;
|
||||
continue;
|
||||
}
|
||||
|
||||
if (listen(s, ls[i].backlog) == -1) {
|
||||
err = ngx_socket_errno;
|
||||
|
||||
/*
|
||||
* on OpenVZ after suspend/resume EADDRINUSE
|
||||
* may be returned by listen() instead of bind(), see
|
||||
* https://bugs.openvz.org/browse/OVZ-5587
|
||||
*/
|
||||
|
||||
if (err != NGX_EADDRINUSE || !ngx_test_config) {
|
||||
ngx_log_error(NGX_LOG_EMERG, log, err,
|
||||
"listen() to %V, backlog %d failed",
|
||||
&ls[i].addr_text, ls[i].backlog);
|
||||
}
|
||||
ngx_log_error(NGX_LOG_EMERG, log, ngx_socket_errno,
|
||||
"listen() to %V, backlog %d failed",
|
||||
&ls[i].addr_text, ls[i].backlog);
|
||||
|
||||
if (ngx_close_socket(s) == -1) {
|
||||
ngx_log_error(NGX_LOG_EMERG, log, ngx_socket_errno,
|
||||
|
@ -671,15 +467,7 @@ ngx_open_listening_sockets(ngx_cycle_t *cycle)
|
|||
&ls[i].addr_text);
|
||||
}
|
||||
|
||||
if (err != NGX_EADDRINUSE) {
|
||||
return NGX_ERROR;
|
||||
}
|
||||
|
||||
if (!ngx_test_config) {
|
||||
failed = 1;
|
||||
}
|
||||
|
||||
continue;
|
||||
return NGX_ERROR;
|
||||
}
|
||||
|
||||
ls[i].listen = 1;
|
||||
|
@ -949,67 +737,6 @@ ngx_configure_listening_sockets(ngx_cycle_t *cycle)
|
|||
#endif
|
||||
|
||||
#endif /* NGX_HAVE_DEFERRED_ACCEPT */
|
||||
|
||||
#if (NGX_HAVE_IP_RECVDSTADDR)
|
||||
|
||||
if (ls[i].wildcard
|
||||
&& ls[i].type == SOCK_DGRAM
|
||||
&& ls[i].sockaddr->sa_family == AF_INET)
|
||||
{
|
||||
value = 1;
|
||||
|
||||
if (setsockopt(ls[i].fd, IPPROTO_IP, IP_RECVDSTADDR,
|
||||
(const void *) &value, sizeof(int))
|
||||
== -1)
|
||||
{
|
||||
ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_socket_errno,
|
||||
"setsockopt(IP_RECVDSTADDR) "
|
||||
"for %V failed, ignored",
|
||||
&ls[i].addr_text);
|
||||
}
|
||||
}
|
||||
|
||||
#elif (NGX_HAVE_IP_PKTINFO)
|
||||
|
||||
if (ls[i].wildcard
|
||||
&& ls[i].type == SOCK_DGRAM
|
||||
&& ls[i].sockaddr->sa_family == AF_INET)
|
||||
{
|
||||
value = 1;
|
||||
|
||||
if (setsockopt(ls[i].fd, IPPROTO_IP, IP_PKTINFO,
|
||||
(const void *) &value, sizeof(int))
|
||||
== -1)
|
||||
{
|
||||
ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_socket_errno,
|
||||
"setsockopt(IP_PKTINFO) "
|
||||
"for %V failed, ignored",
|
||||
&ls[i].addr_text);
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
#if (NGX_HAVE_INET6 && NGX_HAVE_IPV6_RECVPKTINFO)
|
||||
|
||||
if (ls[i].wildcard
|
||||
&& ls[i].type == SOCK_DGRAM
|
||||
&& ls[i].sockaddr->sa_family == AF_INET6)
|
||||
{
|
||||
value = 1;
|
||||
|
||||
if (setsockopt(ls[i].fd, IPPROTO_IPV6, IPV6_RECVPKTINFO,
|
||||
(const void *) &value, sizeof(int))
|
||||
== -1)
|
||||
{
|
||||
ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_socket_errno,
|
||||
"setsockopt(IPV6_RECVPKTINFO) "
|
||||
"for %V failed, ignored",
|
||||
&ls[i].addr_text);
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
}
|
||||
|
||||
return;
|
||||
|
@ -1033,17 +760,14 @@ ngx_close_listening_sockets(ngx_cycle_t *cycle)
|
|||
ls = cycle->listening.elts;
|
||||
for (i = 0; i < cycle->listening.nelts; i++) {
|
||||
|
||||
#if (NGX_QUIC)
|
||||
if (ls[i].quic) {
|
||||
continue;
|
||||
}
|
||||
#endif
|
||||
|
||||
c = ls[i].connection;
|
||||
|
||||
if (c) {
|
||||
if (c->read->active) {
|
||||
if (ngx_event_flags & NGX_USE_EPOLL_EVENT) {
|
||||
if (ngx_event_flags & NGX_USE_RTSIG_EVENT) {
|
||||
ngx_del_conn(c, NGX_CLOSE_EVENT);
|
||||
|
||||
} else if (ngx_event_flags & NGX_USE_EPOLL_EVENT) {
|
||||
|
||||
/*
|
||||
* it seems that Linux-2.6.x OpenVZ sends events
|
||||
|
@ -1075,8 +799,7 @@ ngx_close_listening_sockets(ngx_cycle_t *cycle)
|
|||
|
||||
if (ls[i].sockaddr->sa_family == AF_UNIX
|
||||
&& ngx_process <= NGX_PROCESS_MASTER
|
||||
&& ngx_new_binary == 0
|
||||
&& (!ls[i].inherited || ngx_getppid() != ngx_parent))
|
||||
&& ngx_new_binary == 0)
|
||||
{
|
||||
u_char *name = ls[i].addr_text.data + sizeof("unix:") - 1;
|
||||
|
||||
|
@ -1112,22 +835,31 @@ ngx_get_connection(ngx_socket_t s, ngx_log_t *log)
|
|||
return NULL;
|
||||
}
|
||||
|
||||
ngx_drain_connections((ngx_cycle_t *) ngx_cycle);
|
||||
/* ngx_mutex_lock */
|
||||
|
||||
c = ngx_cycle->free_connections;
|
||||
|
||||
if (c == NULL) {
|
||||
ngx_drain_connections();
|
||||
c = ngx_cycle->free_connections;
|
||||
}
|
||||
|
||||
if (c == NULL) {
|
||||
ngx_log_error(NGX_LOG_ALERT, log, 0,
|
||||
"%ui worker_connections are not enough",
|
||||
ngx_cycle->connection_n);
|
||||
|
||||
/* ngx_mutex_unlock */
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
ngx_cycle->free_connections = c->data;
|
||||
ngx_cycle->free_connection_n--;
|
||||
|
||||
if (ngx_cycle->files && ngx_cycle->files[s] == NULL) {
|
||||
/* ngx_mutex_unlock */
|
||||
|
||||
if (ngx_cycle->files) {
|
||||
ngx_cycle->files[s] = c;
|
||||
}
|
||||
|
||||
|
@ -1164,11 +896,15 @@ ngx_get_connection(ngx_socket_t s, ngx_log_t *log)
|
|||
void
|
||||
ngx_free_connection(ngx_connection_t *c)
|
||||
{
|
||||
/* ngx_mutex_lock */
|
||||
|
||||
c->data = ngx_cycle->free_connections;
|
||||
ngx_cycle->free_connections = c;
|
||||
ngx_cycle->free_connection_n++;
|
||||
|
||||
if (ngx_cycle->files && ngx_cycle->files[c->fd] == c) {
|
||||
/* ngx_mutex_unlock */
|
||||
|
||||
if (ngx_cycle->files) {
|
||||
ngx_cycle->files[c->fd] = NULL;
|
||||
}
|
||||
}
|
||||
|
@ -1194,32 +930,61 @@ ngx_close_connection(ngx_connection_t *c)
|
|||
ngx_del_timer(c->write);
|
||||
}
|
||||
|
||||
if (!c->shared) {
|
||||
if (ngx_del_conn) {
|
||||
ngx_del_conn(c, NGX_CLOSE_EVENT);
|
||||
if (ngx_del_conn) {
|
||||
ngx_del_conn(c, NGX_CLOSE_EVENT);
|
||||
|
||||
} else {
|
||||
if (c->read->active || c->read->disabled) {
|
||||
ngx_del_event(c->read, NGX_READ_EVENT, NGX_CLOSE_EVENT);
|
||||
}
|
||||
} else {
|
||||
if (c->read->active || c->read->disabled) {
|
||||
ngx_del_event(c->read, NGX_READ_EVENT, NGX_CLOSE_EVENT);
|
||||
}
|
||||
|
||||
if (c->write->active || c->write->disabled) {
|
||||
ngx_del_event(c->write, NGX_WRITE_EVENT, NGX_CLOSE_EVENT);
|
||||
}
|
||||
if (c->write->active || c->write->disabled) {
|
||||
ngx_del_event(c->write, NGX_WRITE_EVENT, NGX_CLOSE_EVENT);
|
||||
}
|
||||
}
|
||||
|
||||
if (c->read->posted) {
|
||||
#if (NGX_THREADS)
|
||||
|
||||
/*
|
||||
* we have to clean the connection information before the closing
|
||||
* because another thread may reopen the same file descriptor
|
||||
* before we clean the connection
|
||||
*/
|
||||
|
||||
ngx_mutex_lock(ngx_posted_events_mutex);
|
||||
|
||||
if (c->read->prev) {
|
||||
ngx_delete_posted_event(c->read);
|
||||
}
|
||||
|
||||
if (c->write->posted) {
|
||||
if (c->write->prev) {
|
||||
ngx_delete_posted_event(c->write);
|
||||
}
|
||||
|
||||
c->read->closed = 1;
|
||||
c->write->closed = 1;
|
||||
|
||||
ngx_unlock(&c->lock);
|
||||
c->read->locked = 0;
|
||||
c->write->locked = 0;
|
||||
|
||||
ngx_mutex_unlock(ngx_posted_events_mutex);
|
||||
|
||||
#else
|
||||
|
||||
if (c->read->prev) {
|
||||
ngx_delete_posted_event(c->read);
|
||||
}
|
||||
|
||||
if (c->write->prev) {
|
||||
ngx_delete_posted_event(c->write);
|
||||
}
|
||||
|
||||
c->read->closed = 1;
|
||||
c->write->closed = 1;
|
||||
|
||||
#endif
|
||||
|
||||
ngx_reusable_connection(c, 0);
|
||||
|
||||
log_error = c->log_error;
|
||||
|
@ -1229,10 +994,6 @@ ngx_close_connection(ngx_connection_t *c)
|
|||
fd = c->fd;
|
||||
c->fd = (ngx_socket_t) -1;
|
||||
|
||||
if (c->shared) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (ngx_close_socket(fd) == -1) {
|
||||
|
||||
err = ngx_socket_errno;
|
||||
|
@ -1257,7 +1018,10 @@ ngx_close_connection(ngx_connection_t *c)
|
|||
level = NGX_LOG_CRIT;
|
||||
}
|
||||
|
||||
ngx_log_error(level, c->log, err, ngx_close_socket_n " %d failed", fd);
|
||||
/* we use ngx_cycle->log because c->log was in c->pool */
|
||||
|
||||
ngx_log_error(level, ngx_cycle->log, err,
|
||||
ngx_close_socket_n " %d failed", fd);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1270,7 +1034,6 @@ ngx_reusable_connection(ngx_connection_t *c, ngx_uint_t reusable)
|
|||
|
||||
if (c->reusable) {
|
||||
ngx_queue_remove(&c->queue);
|
||||
ngx_cycle->reusable_connections_n--;
|
||||
|
||||
#if (NGX_STAT_STUB)
|
||||
(void) ngx_atomic_fetch_add(ngx_stat_waiting, -1);
|
||||
|
@ -1284,7 +1047,6 @@ ngx_reusable_connection(ngx_connection_t *c, ngx_uint_t reusable)
|
|||
|
||||
ngx_queue_insert_head(
|
||||
(ngx_queue_t *) &ngx_cycle->reusable_connections_queue, &c->queue);
|
||||
ngx_cycle->reusable_connections_n++;
|
||||
|
||||
#if (NGX_STAT_STUB)
|
||||
(void) ngx_atomic_fetch_add(ngx_stat_waiting, 1);
|
||||
|
@ -1294,36 +1056,18 @@ ngx_reusable_connection(ngx_connection_t *c, ngx_uint_t reusable)
|
|||
|
||||
|
||||
static void
|
||||
ngx_drain_connections(ngx_cycle_t *cycle)
|
||||
ngx_drain_connections(void)
|
||||
{
|
||||
ngx_uint_t i, n;
|
||||
ngx_int_t i;
|
||||
ngx_queue_t *q;
|
||||
ngx_connection_t *c;
|
||||
|
||||
if (cycle->free_connection_n > cycle->connection_n / 16
|
||||
|| cycle->reusable_connections_n == 0)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (cycle->connections_reuse_time != ngx_time()) {
|
||||
cycle->connections_reuse_time = ngx_time();
|
||||
|
||||
ngx_log_error(NGX_LOG_WARN, cycle->log, 0,
|
||||
"%ui worker_connections are not enough, "
|
||||
"reusing connections",
|
||||
cycle->connection_n);
|
||||
}
|
||||
|
||||
c = NULL;
|
||||
n = ngx_max(ngx_min(32, cycle->reusable_connections_n / 8), 1);
|
||||
|
||||
for (i = 0; i < n; i++) {
|
||||
if (ngx_queue_empty(&cycle->reusable_connections_queue)) {
|
||||
for (i = 0; i < 32; i++) {
|
||||
if (ngx_queue_empty(&ngx_cycle->reusable_connections_queue)) {
|
||||
break;
|
||||
}
|
||||
|
||||
q = ngx_queue_last(&cycle->reusable_connections_queue);
|
||||
q = ngx_queue_last(&ngx_cycle->reusable_connections_queue);
|
||||
c = ngx_queue_data(q, ngx_connection_t, queue);
|
||||
|
||||
ngx_log_debug0(NGX_LOG_DEBUG_CORE, c->log, 0,
|
||||
|
@ -1332,41 +1076,6 @@ ngx_drain_connections(ngx_cycle_t *cycle)
|
|||
c->close = 1;
|
||||
c->read->handler(c->read);
|
||||
}
|
||||
|
||||
if (cycle->free_connection_n == 0 && c && c->reusable) {
|
||||
|
||||
/*
|
||||
* if no connections were freed, try to reuse the last
|
||||
* connection again: this should free it as long as
|
||||
* previous reuse moved it to lingering close
|
||||
*/
|
||||
|
||||
ngx_log_debug0(NGX_LOG_DEBUG_CORE, c->log, 0,
|
||||
"reusing connection again");
|
||||
|
||||
c->close = 1;
|
||||
c->read->handler(c->read);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
ngx_close_idle_connections(ngx_cycle_t *cycle)
|
||||
{
|
||||
ngx_uint_t i;
|
||||
ngx_connection_t *c;
|
||||
|
||||
c = cycle->connections;
|
||||
|
||||
for (i = 0; i < cycle->connection_n; i++) {
|
||||
|
||||
/* THREAD: lock */
|
||||
|
||||
if (c[i].fd != (ngx_socket_t) -1 && c[i].idle) {
|
||||
c[i].close = 1;
|
||||
c[i].read->handler(c[i].read);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
@ -1376,47 +1085,47 @@ ngx_connection_local_sockaddr(ngx_connection_t *c, ngx_str_t *s,
|
|||
{
|
||||
socklen_t len;
|
||||
ngx_uint_t addr;
|
||||
ngx_sockaddr_t sa;
|
||||
u_char sa[NGX_SOCKADDRLEN];
|
||||
struct sockaddr_in *sin;
|
||||
#if (NGX_HAVE_INET6)
|
||||
ngx_uint_t i;
|
||||
struct sockaddr_in6 *sin6;
|
||||
#endif
|
||||
|
||||
addr = 0;
|
||||
if (c->local_socklen == 0) {
|
||||
return NGX_ERROR;
|
||||
}
|
||||
|
||||
if (c->local_socklen) {
|
||||
switch (c->local_sockaddr->sa_family) {
|
||||
switch (c->local_sockaddr->sa_family) {
|
||||
|
||||
#if (NGX_HAVE_INET6)
|
||||
case AF_INET6:
|
||||
sin6 = (struct sockaddr_in6 *) c->local_sockaddr;
|
||||
case AF_INET6:
|
||||
sin6 = (struct sockaddr_in6 *) c->local_sockaddr;
|
||||
|
||||
for (i = 0; addr == 0 && i < 16; i++) {
|
||||
addr |= sin6->sin6_addr.s6_addr[i];
|
||||
}
|
||||
for (addr = 0, i = 0; addr == 0 && i < 16; i++) {
|
||||
addr |= sin6->sin6_addr.s6_addr[i];
|
||||
}
|
||||
|
||||
break;
|
||||
break;
|
||||
#endif
|
||||
|
||||
#if (NGX_HAVE_UNIX_DOMAIN)
|
||||
case AF_UNIX:
|
||||
addr = 1;
|
||||
break;
|
||||
case AF_UNIX:
|
||||
addr = 1;
|
||||
break;
|
||||
#endif
|
||||
|
||||
default: /* AF_INET */
|
||||
sin = (struct sockaddr_in *) c->local_sockaddr;
|
||||
addr = sin->sin_addr.s_addr;
|
||||
break;
|
||||
}
|
||||
default: /* AF_INET */
|
||||
sin = (struct sockaddr_in *) c->local_sockaddr;
|
||||
addr = sin->sin_addr.s_addr;
|
||||
break;
|
||||
}
|
||||
|
||||
if (addr == 0) {
|
||||
|
||||
len = sizeof(ngx_sockaddr_t);
|
||||
len = NGX_SOCKADDRLEN;
|
||||
|
||||
if (getsockname(c->fd, &sa.sockaddr, &len) == -1) {
|
||||
if (getsockname(c->fd, (struct sockaddr *) &sa, &len) == -1) {
|
||||
ngx_connection_error(c, ngx_socket_errno, "getsockname() failed");
|
||||
return NGX_ERROR;
|
||||
}
|
||||
|
@ -1442,49 +1151,6 @@ ngx_connection_local_sockaddr(ngx_connection_t *c, ngx_str_t *s,
|
|||
}
|
||||
|
||||
|
||||
ngx_int_t
|
||||
ngx_tcp_nodelay(ngx_connection_t *c)
|
||||
{
|
||||
int tcp_nodelay;
|
||||
|
||||
if (c->tcp_nodelay != NGX_TCP_NODELAY_UNSET) {
|
||||
return NGX_OK;
|
||||
}
|
||||
|
||||
ngx_log_debug0(NGX_LOG_DEBUG_CORE, c->log, 0, "tcp_nodelay");
|
||||
|
||||
tcp_nodelay = 1;
|
||||
|
||||
if (setsockopt(c->fd, IPPROTO_TCP, TCP_NODELAY,
|
||||
(const void *) &tcp_nodelay, sizeof(int))
|
||||
== -1)
|
||||
{
|
||||
#if (NGX_SOLARIS)
|
||||
if (c->log_error == NGX_ERROR_INFO) {
|
||||
|
||||
/* Solaris returns EINVAL if a socket has been shut down */
|
||||
c->log_error = NGX_ERROR_IGNORE_EINVAL;
|
||||
|
||||
ngx_connection_error(c, ngx_socket_errno,
|
||||
"setsockopt(TCP_NODELAY) failed");
|
||||
|
||||
c->log_error = NGX_ERROR_INFO;
|
||||
|
||||
return NGX_ERROR;
|
||||
}
|
||||
#endif
|
||||
|
||||
ngx_connection_error(c, ngx_socket_errno,
|
||||
"setsockopt(TCP_NODELAY) failed");
|
||||
return NGX_ERROR;
|
||||
}
|
||||
|
||||
c->tcp_nodelay = NGX_TCP_NODELAY_SET;
|
||||
|
||||
return NGX_OK;
|
||||
}
|
||||
|
||||
|
||||
ngx_int_t
|
||||
ngx_connection_error(ngx_connection_t *c, ngx_err_t err, char *text)
|
||||
{
|
||||
|
|
|
@ -45,15 +45,12 @@ struct ngx_listening_s {
|
|||
size_t pool_size;
|
||||
/* should be here because of the AcceptEx() preread */
|
||||
size_t post_accept_buffer_size;
|
||||
/* should be here because of the deferred accept */
|
||||
ngx_msec_t post_accept_timeout;
|
||||
|
||||
ngx_listening_t *previous;
|
||||
ngx_connection_t *connection;
|
||||
|
||||
ngx_rbtree_t rbtree;
|
||||
ngx_rbtree_node_t sentinel;
|
||||
|
||||
ngx_uint_t worker;
|
||||
|
||||
unsigned open:1;
|
||||
unsigned remain:1;
|
||||
unsigned ignore:1;
|
||||
|
@ -65,22 +62,20 @@ struct ngx_listening_s {
|
|||
unsigned nonblocking:1;
|
||||
unsigned shared:1; /* shared between threads or processes */
|
||||
unsigned addr_ntop:1;
|
||||
unsigned wildcard:1;
|
||||
|
||||
#if (NGX_HAVE_INET6)
|
||||
#if (NGX_HAVE_INET6 && defined IPV6_V6ONLY)
|
||||
unsigned ipv6only:1;
|
||||
#endif
|
||||
unsigned reuseport:1;
|
||||
unsigned add_reuseport:1;
|
||||
unsigned keepalive:2;
|
||||
unsigned quic:1;
|
||||
|
||||
#if (NGX_HAVE_DEFERRED_ACCEPT)
|
||||
unsigned deferred_accept:1;
|
||||
unsigned delete_deferred:1;
|
||||
unsigned add_deferred:1;
|
||||
#if (NGX_HAVE_DEFERRED_ACCEPT && defined SO_ACCEPTFILTER)
|
||||
#ifdef SO_ACCEPTFILTER
|
||||
char *accept_filter;
|
||||
#endif
|
||||
#endif
|
||||
#if (NGX_HAVE_SETFIB)
|
||||
int setfib;
|
||||
#endif
|
||||
|
@ -93,31 +88,31 @@ struct ngx_listening_s {
|
|||
|
||||
|
||||
typedef enum {
|
||||
NGX_ERROR_ALERT = 0,
|
||||
NGX_ERROR_ERR,
|
||||
NGX_ERROR_INFO,
|
||||
NGX_ERROR_IGNORE_ECONNRESET,
|
||||
NGX_ERROR_IGNORE_EINVAL
|
||||
NGX_ERROR_ALERT = 0,
|
||||
NGX_ERROR_ERR,
|
||||
NGX_ERROR_INFO,
|
||||
NGX_ERROR_IGNORE_ECONNRESET,
|
||||
NGX_ERROR_IGNORE_EINVAL
|
||||
} ngx_connection_log_error_e;
|
||||
|
||||
|
||||
typedef enum {
|
||||
NGX_TCP_NODELAY_UNSET = 0,
|
||||
NGX_TCP_NODELAY_SET,
|
||||
NGX_TCP_NODELAY_DISABLED
|
||||
NGX_TCP_NODELAY_UNSET = 0,
|
||||
NGX_TCP_NODELAY_SET,
|
||||
NGX_TCP_NODELAY_DISABLED
|
||||
} ngx_connection_tcp_nodelay_e;
|
||||
|
||||
|
||||
typedef enum {
|
||||
NGX_TCP_NOPUSH_UNSET = 0,
|
||||
NGX_TCP_NOPUSH_SET,
|
||||
NGX_TCP_NOPUSH_DISABLED
|
||||
NGX_TCP_NOPUSH_UNSET = 0,
|
||||
NGX_TCP_NOPUSH_SET,
|
||||
NGX_TCP_NOPUSH_DISABLED
|
||||
} ngx_connection_tcp_nopush_e;
|
||||
|
||||
|
||||
#define NGX_LOWLEVEL_BUFFERED 0x0f
|
||||
#define NGX_SSL_BUFFERED 0x01
|
||||
#define NGX_HTTP_V2_BUFFERED 0x02
|
||||
#define NGX_SPDY_BUFFERED 0x02
|
||||
|
||||
|
||||
struct ngx_connection_s {
|
||||
|
@ -140,24 +135,16 @@ struct ngx_connection_s {
|
|||
|
||||
ngx_pool_t *pool;
|
||||
|
||||
int type;
|
||||
|
||||
struct sockaddr *sockaddr;
|
||||
socklen_t socklen;
|
||||
ngx_str_t addr_text;
|
||||
|
||||
ngx_proxy_protocol_t *proxy_protocol;
|
||||
ngx_str_t proxy_protocol_addr;
|
||||
|
||||
#if (NGX_QUIC || NGX_COMPAT)
|
||||
ngx_quic_stream_t *quic;
|
||||
#endif
|
||||
|
||||
#if (NGX_SSL || NGX_COMPAT)
|
||||
#if (NGX_SSL)
|
||||
ngx_ssl_connection_t *ssl;
|
||||
#endif
|
||||
|
||||
ngx_udp_connection_t *udp;
|
||||
|
||||
struct sockaddr *local_sockaddr;
|
||||
socklen_t local_socklen;
|
||||
|
||||
|
@ -167,22 +154,20 @@ struct ngx_connection_s {
|
|||
|
||||
ngx_atomic_uint_t number;
|
||||
|
||||
ngx_msec_t start_time;
|
||||
ngx_uint_t requests;
|
||||
|
||||
unsigned buffered:8;
|
||||
|
||||
unsigned log_error:3; /* ngx_connection_log_error_e */
|
||||
|
||||
unsigned unexpected_eof:1;
|
||||
unsigned timedout:1;
|
||||
unsigned error:1;
|
||||
unsigned destroyed:1;
|
||||
unsigned pipeline:1;
|
||||
|
||||
unsigned idle:1;
|
||||
unsigned reusable:1;
|
||||
unsigned close:1;
|
||||
unsigned shared:1;
|
||||
|
||||
unsigned sendfile:1;
|
||||
unsigned sndlowat:1;
|
||||
|
@ -190,41 +175,32 @@ struct ngx_connection_s {
|
|||
unsigned tcp_nopush:2; /* ngx_connection_tcp_nopush_e */
|
||||
|
||||
unsigned need_last_buf:1;
|
||||
unsigned need_flush_buf:1;
|
||||
|
||||
#if (NGX_HAVE_SENDFILE_NODISKIO || NGX_COMPAT)
|
||||
unsigned busy_count:2;
|
||||
#if (NGX_HAVE_IOCP)
|
||||
unsigned accept_context_updated:1;
|
||||
#endif
|
||||
|
||||
#if (NGX_THREADS || NGX_COMPAT)
|
||||
ngx_thread_task_t *sendfile_task;
|
||||
#if (NGX_HAVE_AIO_SENDFILE)
|
||||
unsigned aio_sendfile:1;
|
||||
unsigned busy_count:2;
|
||||
ngx_buf_t *busy_sendfile;
|
||||
#endif
|
||||
|
||||
#if (NGX_THREADS)
|
||||
ngx_atomic_t lock;
|
||||
#endif
|
||||
};
|
||||
|
||||
|
||||
#define ngx_set_connection_log(c, l) \
|
||||
\
|
||||
c->log->file = l->file; \
|
||||
c->log->next = l->next; \
|
||||
c->log->writer = l->writer; \
|
||||
c->log->wdata = l->wdata; \
|
||||
if (!(c->log->log_level & NGX_LOG_DEBUG_CONNECTION)) { \
|
||||
c->log->log_level = l->log_level; \
|
||||
}
|
||||
|
||||
|
||||
ngx_listening_t *ngx_create_listening(ngx_conf_t *cf, struct sockaddr *sockaddr,
|
||||
ngx_listening_t *ngx_create_listening(ngx_conf_t *cf, void *sockaddr,
|
||||
socklen_t socklen);
|
||||
ngx_int_t ngx_clone_listening(ngx_cycle_t *cycle, ngx_listening_t *ls);
|
||||
ngx_int_t ngx_set_inherited_sockets(ngx_cycle_t *cycle);
|
||||
ngx_int_t ngx_open_listening_sockets(ngx_cycle_t *cycle);
|
||||
void ngx_configure_listening_sockets(ngx_cycle_t *cycle);
|
||||
void ngx_close_listening_sockets(ngx_cycle_t *cycle);
|
||||
void ngx_close_connection(ngx_connection_t *c);
|
||||
void ngx_close_idle_connections(ngx_cycle_t *cycle);
|
||||
ngx_int_t ngx_connection_local_sockaddr(ngx_connection_t *c, ngx_str_t *s,
|
||||
ngx_uint_t port);
|
||||
ngx_int_t ngx_tcp_nodelay(ngx_connection_t *c);
|
||||
ngx_int_t ngx_connection_error(ngx_connection_t *c, ngx_err_t err, char *text);
|
||||
|
||||
ngx_connection_t *ngx_get_connection(ngx_socket_t s, ngx_log_t *log);
|
||||
|
|
|
@ -9,27 +9,18 @@
|
|||
#define _NGX_CORE_H_INCLUDED_
|
||||
|
||||
|
||||
#include <ngx_config.h>
|
||||
|
||||
|
||||
typedef struct ngx_module_s ngx_module_t;
|
||||
typedef struct ngx_conf_s ngx_conf_t;
|
||||
typedef struct ngx_cycle_s ngx_cycle_t;
|
||||
typedef struct ngx_pool_s ngx_pool_t;
|
||||
typedef struct ngx_chain_s ngx_chain_t;
|
||||
typedef struct ngx_log_s ngx_log_t;
|
||||
typedef struct ngx_open_file_s ngx_open_file_t;
|
||||
typedef struct ngx_command_s ngx_command_t;
|
||||
typedef struct ngx_file_s ngx_file_t;
|
||||
typedef struct ngx_event_s ngx_event_t;
|
||||
typedef struct ngx_event_aio_s ngx_event_aio_t;
|
||||
typedef struct ngx_connection_s ngx_connection_t;
|
||||
typedef struct ngx_thread_task_s ngx_thread_task_t;
|
||||
typedef struct ngx_ssl_s ngx_ssl_t;
|
||||
typedef struct ngx_proxy_protocol_s ngx_proxy_protocol_t;
|
||||
typedef struct ngx_quic_stream_s ngx_quic_stream_t;
|
||||
typedef struct ngx_ssl_connection_s ngx_ssl_connection_t;
|
||||
typedef struct ngx_udp_connection_s ngx_udp_connection_t;
|
||||
typedef struct ngx_module_s ngx_module_t;
|
||||
typedef struct ngx_conf_s ngx_conf_t;
|
||||
typedef struct ngx_cycle_s ngx_cycle_t;
|
||||
typedef struct ngx_pool_s ngx_pool_t;
|
||||
typedef struct ngx_chain_s ngx_chain_t;
|
||||
typedef struct ngx_log_s ngx_log_t;
|
||||
typedef struct ngx_open_file_s ngx_open_file_t;
|
||||
typedef struct ngx_command_s ngx_command_t;
|
||||
typedef struct ngx_file_s ngx_file_t;
|
||||
typedef struct ngx_event_s ngx_event_t;
|
||||
typedef struct ngx_event_aio_s ngx_event_aio_t;
|
||||
typedef struct ngx_connection_s ngx_connection_t;
|
||||
|
||||
typedef void (*ngx_event_handler_pt)(ngx_event_t *ev);
|
||||
typedef void (*ngx_connection_handler_pt)(ngx_connection_t *c);
|
||||
|
@ -55,9 +46,7 @@ typedef void (*ngx_connection_handler_pt)(ngx_connection_t *c);
|
|||
#include <ngx_shmem.h>
|
||||
#include <ngx_process.h>
|
||||
#include <ngx_user.h>
|
||||
#include <ngx_dlopen.h>
|
||||
#include <ngx_parse.h>
|
||||
#include <ngx_parse_time.h>
|
||||
#include <ngx_log.h>
|
||||
#include <ngx_alloc.h>
|
||||
#include <ngx_palloc.h>
|
||||
|
@ -75,7 +64,6 @@ typedef void (*ngx_connection_handler_pt)(ngx_connection_t *c);
|
|||
#endif
|
||||
#include <ngx_radix_tree.h>
|
||||
#include <ngx_times.h>
|
||||
#include <ngx_rwlock.h>
|
||||
#include <ngx_shmtx.h>
|
||||
#include <ngx_slab.h>
|
||||
#include <ngx_inet.h>
|
||||
|
@ -83,26 +71,18 @@ typedef void (*ngx_connection_handler_pt)(ngx_connection_t *c);
|
|||
#include <ngx_resolver.h>
|
||||
#if (NGX_OPENSSL)
|
||||
#include <ngx_event_openssl.h>
|
||||
#if (NGX_QUIC)
|
||||
#include <ngx_event_quic.h>
|
||||
#endif
|
||||
#endif
|
||||
#include <ngx_process_cycle.h>
|
||||
#include <ngx_conf_file.h>
|
||||
#include <ngx_module.h>
|
||||
#include <ngx_open_file_cache.h>
|
||||
#include <ngx_os.h>
|
||||
#include <ngx_connection.h>
|
||||
#include <ngx_syslog.h>
|
||||
#include <ngx_proxy_protocol.h>
|
||||
#if (NGX_HAVE_BPF)
|
||||
#include <ngx_bpf.h>
|
||||
#endif
|
||||
|
||||
|
||||
#define LF (u_char) '\n'
|
||||
#define CR (u_char) '\r'
|
||||
#define CRLF "\r\n"
|
||||
#define LF (u_char) 10
|
||||
#define CR (u_char) 13
|
||||
#define CRLF "\x0d\x0a"
|
||||
|
||||
|
||||
#define ngx_abs(value) (((value) >= 0) ? (value) : - (value))
|
||||
|
|
|
@ -8,7 +8,9 @@
|
|||
#include <ngx_core.h>
|
||||
#include <ngx_crypt.h>
|
||||
#include <ngx_md5.h>
|
||||
#if (NGX_HAVE_SHA1)
|
||||
#include <ngx_sha1.h>
|
||||
#endif
|
||||
|
||||
|
||||
#if (NGX_CRYPT)
|
||||
|
@ -17,11 +19,16 @@ static ngx_int_t ngx_crypt_apr1(ngx_pool_t *pool, u_char *key, u_char *salt,
|
|||
u_char **encrypted);
|
||||
static ngx_int_t ngx_crypt_plain(ngx_pool_t *pool, u_char *key, u_char *salt,
|
||||
u_char **encrypted);
|
||||
|
||||
#if (NGX_HAVE_SHA1)
|
||||
|
||||
static ngx_int_t ngx_crypt_ssha(ngx_pool_t *pool, u_char *key, u_char *salt,
|
||||
u_char **encrypted);
|
||||
static ngx_int_t ngx_crypt_sha(ngx_pool_t *pool, u_char *key, u_char *salt,
|
||||
u_char **encrypted);
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
static u_char *ngx_crypt_to64(u_char *p, uint32_t v, size_t n);
|
||||
|
||||
|
@ -35,11 +42,13 @@ ngx_crypt(ngx_pool_t *pool, u_char *key, u_char *salt, u_char **encrypted)
|
|||
} else if (ngx_strncmp(salt, "{PLAIN}", sizeof("{PLAIN}") - 1) == 0) {
|
||||
return ngx_crypt_plain(pool, key, salt, encrypted);
|
||||
|
||||
#if (NGX_HAVE_SHA1)
|
||||
} else if (ngx_strncmp(salt, "{SSHA}", sizeof("{SSHA}") - 1) == 0) {
|
||||
return ngx_crypt_ssha(pool, key, salt, encrypted);
|
||||
|
||||
} else if (ngx_strncmp(salt, "{SHA}", sizeof("{SHA}") - 1) == 0) {
|
||||
return ngx_crypt_sha(pool, key, salt, encrypted);
|
||||
#endif
|
||||
}
|
||||
|
||||
/* fallback to libc crypt() */
|
||||
|
@ -57,7 +66,7 @@ ngx_crypt_apr1(ngx_pool_t *pool, u_char *key, u_char *salt, u_char **encrypted)
|
|||
size_t saltlen, keylen;
|
||||
ngx_md5_t md5, ctx1;
|
||||
|
||||
/* Apache's apr1 crypt is Poul-Henning Kamp's md5 crypt with $apr1$ magic */
|
||||
/* Apache's apr1 crypt is Paul-Henning Kamp's md5 crypt with $apr1$ magic */
|
||||
|
||||
keylen = ngx_strlen(key);
|
||||
|
||||
|
@ -156,8 +165,8 @@ ngx_crypt_to64(u_char *p, uint32_t v, size_t n)
|
|||
"./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
|
||||
|
||||
while (n--) {
|
||||
*p++ = itoa64[v & 0x3f];
|
||||
v >>= 6;
|
||||
*p++ = itoa64[v & 0x3f];
|
||||
v >>= 6;
|
||||
}
|
||||
|
||||
return p;
|
||||
|
@ -184,6 +193,8 @@ ngx_crypt_plain(ngx_pool_t *pool, u_char *key, u_char *salt, u_char **encrypted)
|
|||
}
|
||||
|
||||
|
||||
#if (NGX_HAVE_SHA1)
|
||||
|
||||
static ngx_int_t
|
||||
ngx_crypt_ssha(ngx_pool_t *pool, u_char *key, u_char *salt, u_char **encrypted)
|
||||
{
|
||||
|
@ -267,4 +278,6 @@ ngx_crypt_sha(ngx_pool_t *pool, u_char *key, u_char *salt, u_char **encrypted)
|
|||
return NGX_OK;
|
||||
}
|
||||
|
||||
#endif /* NGX_HAVE_SHA1 */
|
||||
|
||||
#endif /* NGX_CRYPT */
|
||||
|
|
|
@ -15,7 +15,6 @@ static ngx_int_t ngx_init_zone_pool(ngx_cycle_t *cycle,
|
|||
ngx_shm_zone_t *shm_zone);
|
||||
static ngx_int_t ngx_test_lockfile(u_char *file, ngx_log_t *log);
|
||||
static void ngx_clean_old_cycles(ngx_event_t *ev);
|
||||
static void ngx_shutdown_timer_handler(ngx_event_t *ev);
|
||||
|
||||
|
||||
volatile ngx_cycle_t *ngx_cycle;
|
||||
|
@ -23,12 +22,14 @@ ngx_array_t ngx_old_cycles;
|
|||
|
||||
static ngx_pool_t *ngx_temp_pool;
|
||||
static ngx_event_t ngx_cleaner_event;
|
||||
static ngx_event_t ngx_shutdown_event;
|
||||
|
||||
ngx_uint_t ngx_test_config;
|
||||
ngx_uint_t ngx_dump_config;
|
||||
ngx_uint_t ngx_quiet_mode;
|
||||
|
||||
#if (NGX_THREADS)
|
||||
ngx_tls_key_t ngx_core_tls_key;
|
||||
#endif
|
||||
|
||||
|
||||
/* STUB NAME */
|
||||
static ngx_connection_t dumb;
|
||||
|
@ -39,7 +40,7 @@ ngx_cycle_t *
|
|||
ngx_init_cycle(ngx_cycle_t *old_cycle)
|
||||
{
|
||||
void *rv;
|
||||
char **senv;
|
||||
char **senv, **env;
|
||||
ngx_uint_t i, n;
|
||||
ngx_log_t *log;
|
||||
ngx_time_t *tp;
|
||||
|
@ -96,15 +97,6 @@ ngx_init_cycle(ngx_cycle_t *old_cycle)
|
|||
return NULL;
|
||||
}
|
||||
|
||||
cycle->error_log.len = old_cycle->error_log.len;
|
||||
cycle->error_log.data = ngx_pnalloc(pool, old_cycle->error_log.len + 1);
|
||||
if (cycle->error_log.data == NULL) {
|
||||
ngx_destroy_pool(pool);
|
||||
return NULL;
|
||||
}
|
||||
ngx_cpystrn(cycle->error_log.data, old_cycle->error_log.data,
|
||||
old_cycle->error_log.len + 1);
|
||||
|
||||
cycle->conf_file.len = old_cycle->conf_file.len;
|
||||
cycle->conf_file.data = ngx_pnalloc(pool, old_cycle->conf_file.len + 1);
|
||||
if (cycle->conf_file.data == NULL) {
|
||||
|
@ -124,26 +116,18 @@ ngx_init_cycle(ngx_cycle_t *old_cycle)
|
|||
|
||||
n = old_cycle->paths.nelts ? old_cycle->paths.nelts : 10;
|
||||
|
||||
if (ngx_array_init(&cycle->paths, pool, n, sizeof(ngx_path_t *))
|
||||
!= NGX_OK)
|
||||
{
|
||||
cycle->paths.elts = ngx_pcalloc(pool, n * sizeof(ngx_path_t *));
|
||||
if (cycle->paths.elts == NULL) {
|
||||
ngx_destroy_pool(pool);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
ngx_memzero(cycle->paths.elts, n * sizeof(ngx_path_t *));
|
||||
cycle->paths.nelts = 0;
|
||||
cycle->paths.size = sizeof(ngx_path_t *);
|
||||
cycle->paths.nalloc = n;
|
||||
cycle->paths.pool = pool;
|
||||
|
||||
|
||||
if (ngx_array_init(&cycle->config_dump, pool, 1, sizeof(ngx_conf_dump_t))
|
||||
!= NGX_OK)
|
||||
{
|
||||
ngx_destroy_pool(pool);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
ngx_rbtree_init(&cycle->config_dump_rbtree, &cycle->config_dump_sentinel,
|
||||
ngx_str_rbtree_insert_value);
|
||||
|
||||
if (old_cycle->open_files.part.nelts) {
|
||||
n = old_cycle->open_files.part.nelts;
|
||||
for (part = old_cycle->open_files.part.next; part; part = part->next) {
|
||||
|
@ -182,14 +166,16 @@ ngx_init_cycle(ngx_cycle_t *old_cycle)
|
|||
|
||||
n = old_cycle->listening.nelts ? old_cycle->listening.nelts : 10;
|
||||
|
||||
if (ngx_array_init(&cycle->listening, pool, n, sizeof(ngx_listening_t))
|
||||
!= NGX_OK)
|
||||
{
|
||||
cycle->listening.elts = ngx_pcalloc(pool, n * sizeof(ngx_listening_t));
|
||||
if (cycle->listening.elts == NULL) {
|
||||
ngx_destroy_pool(pool);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
ngx_memzero(cycle->listening.elts, n * sizeof(ngx_listening_t));
|
||||
cycle->listening.nelts = 0;
|
||||
cycle->listening.size = sizeof(ngx_listening_t);
|
||||
cycle->listening.nalloc = n;
|
||||
cycle->listening.pool = pool;
|
||||
|
||||
|
||||
ngx_queue_init(&cycle->reusable_connections_queue);
|
||||
|
@ -222,18 +208,12 @@ ngx_init_cycle(ngx_cycle_t *old_cycle)
|
|||
ngx_strlow(cycle->hostname.data, (u_char *) hostname, cycle->hostname.len);
|
||||
|
||||
|
||||
if (ngx_cycle_modules(cycle) != NGX_OK) {
|
||||
ngx_destroy_pool(pool);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
for (i = 0; cycle->modules[i]; i++) {
|
||||
if (cycle->modules[i]->type != NGX_CORE_MODULE) {
|
||||
for (i = 0; ngx_modules[i]; i++) {
|
||||
if (ngx_modules[i]->type != NGX_CORE_MODULE) {
|
||||
continue;
|
||||
}
|
||||
|
||||
module = cycle->modules[i]->ctx;
|
||||
module = ngx_modules[i]->ctx;
|
||||
|
||||
if (module->create_conf) {
|
||||
rv = module->create_conf(cycle);
|
||||
|
@ -241,7 +221,7 @@ ngx_init_cycle(ngx_cycle_t *old_cycle)
|
|||
ngx_destroy_pool(pool);
|
||||
return NULL;
|
||||
}
|
||||
cycle->conf_ctx[cycle->modules[i]->index] = rv;
|
||||
cycle->conf_ctx[ngx_modules[i]->index] = rv;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -292,16 +272,15 @@ ngx_init_cycle(ngx_cycle_t *old_cycle)
|
|||
cycle->conf_file.data);
|
||||
}
|
||||
|
||||
for (i = 0; cycle->modules[i]; i++) {
|
||||
if (cycle->modules[i]->type != NGX_CORE_MODULE) {
|
||||
for (i = 0; ngx_modules[i]; i++) {
|
||||
if (ngx_modules[i]->type != NGX_CORE_MODULE) {
|
||||
continue;
|
||||
}
|
||||
|
||||
module = cycle->modules[i]->ctx;
|
||||
module = ngx_modules[i]->ctx;
|
||||
|
||||
if (module->init_conf) {
|
||||
if (module->init_conf(cycle,
|
||||
cycle->conf_ctx[cycle->modules[i]->index])
|
||||
if (module->init_conf(cycle, cycle->conf_ctx[ngx_modules[i]->index])
|
||||
== NGX_CONF_ERROR)
|
||||
{
|
||||
environ = senv;
|
||||
|
@ -462,13 +441,9 @@ ngx_init_cycle(ngx_cycle_t *old_cycle)
|
|||
}
|
||||
|
||||
if (shm_zone[i].tag == oshm_zone[n].tag
|
||||
&& shm_zone[i].shm.size == oshm_zone[n].shm.size
|
||||
&& !shm_zone[i].noreuse)
|
||||
&& shm_zone[i].shm.size == oshm_zone[n].shm.size)
|
||||
{
|
||||
shm_zone[i].shm.addr = oshm_zone[n].shm.addr;
|
||||
#if (NGX_WIN32)
|
||||
shm_zone[i].shm.handle = oshm_zone[n].shm.handle;
|
||||
#endif
|
||||
|
||||
if (shm_zone[i].init(&shm_zone[i], oshm_zone[n].data)
|
||||
!= NGX_OK)
|
||||
|
@ -479,6 +454,8 @@ ngx_init_cycle(ngx_cycle_t *old_cycle)
|
|||
goto shm_zone_found;
|
||||
}
|
||||
|
||||
ngx_shm_free(&oshm_zone[n].shm);
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -516,20 +493,11 @@ ngx_init_cycle(ngx_cycle_t *old_cycle)
|
|||
continue;
|
||||
}
|
||||
|
||||
if (ls[i].remain) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (ls[i].type != nls[n].type) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (ngx_cmp_sockaddr(nls[n].sockaddr, nls[n].socklen,
|
||||
ls[i].sockaddr, ls[i].socklen, 1)
|
||||
== NGX_OK)
|
||||
{
|
||||
nls[n].fd = ls[i].fd;
|
||||
nls[n].inherited = ls[i].inherited;
|
||||
nls[n].previous = &ls[i];
|
||||
ls[i].remain = 1;
|
||||
|
||||
|
@ -572,13 +540,6 @@ ngx_init_cycle(ngx_cycle_t *old_cycle)
|
|||
nls[n].add_deferred = 1;
|
||||
}
|
||||
#endif
|
||||
|
||||
#if (NGX_HAVE_REUSEPORT)
|
||||
if (nls[n].reuseport && !ls[i].reuseport) {
|
||||
nls[n].add_reuseport = 1;
|
||||
}
|
||||
#endif
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -632,9 +593,13 @@ ngx_init_cycle(ngx_cycle_t *old_cycle)
|
|||
|
||||
pool->log = cycle->log;
|
||||
|
||||
if (ngx_init_modules(cycle) != NGX_OK) {
|
||||
/* fatal */
|
||||
exit(1);
|
||||
for (i = 0; ngx_modules[i]; i++) {
|
||||
if (ngx_modules[i]->init_module) {
|
||||
if (ngx_modules[i]->init_module(cycle) != NGX_OK) {
|
||||
/* fatal */
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
@ -670,26 +635,14 @@ ngx_init_cycle(ngx_cycle_t *old_cycle)
|
|||
n = 0;
|
||||
}
|
||||
|
||||
if (oshm_zone[i].shm.name.len != shm_zone[n].shm.name.len) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (ngx_strncmp(oshm_zone[i].shm.name.data,
|
||||
shm_zone[n].shm.name.data,
|
||||
oshm_zone[i].shm.name.len)
|
||||
!= 0)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if (oshm_zone[i].tag == shm_zone[n].tag
|
||||
&& oshm_zone[i].shm.size == shm_zone[n].shm.size
|
||||
&& !oshm_zone[i].noreuse)
|
||||
if (oshm_zone[i].shm.name.len == shm_zone[n].shm.name.len
|
||||
&& ngx_strncmp(oshm_zone[i].shm.name.data,
|
||||
shm_zone[n].shm.name.data,
|
||||
oshm_zone[i].shm.name.len)
|
||||
== 0)
|
||||
{
|
||||
goto live_shm_zone;
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
ngx_shm_free(&oshm_zone[i].shm);
|
||||
|
@ -768,9 +721,20 @@ old_shm_zone_done:
|
|||
|
||||
if (ngx_process == NGX_PROCESS_MASTER || ngx_is_init_cycle(old_cycle)) {
|
||||
|
||||
/*
|
||||
* perl_destruct() frees environ, if it is not the same as it was at
|
||||
* perl_construct() time, therefore we save the previous cycle
|
||||
* environment before ngx_conf_parse() where it will be changed.
|
||||
*/
|
||||
|
||||
env = environ;
|
||||
environ = senv;
|
||||
|
||||
ngx_destroy_pool(old_cycle->pool);
|
||||
cycle->old_cycle = NULL;
|
||||
|
||||
environ = env;
|
||||
|
||||
return cycle;
|
||||
}
|
||||
|
||||
|
@ -784,15 +748,15 @@ old_shm_zone_done:
|
|||
}
|
||||
|
||||
n = 10;
|
||||
|
||||
if (ngx_array_init(&ngx_old_cycles, ngx_temp_pool, n,
|
||||
sizeof(ngx_cycle_t *))
|
||||
!= NGX_OK)
|
||||
{
|
||||
ngx_old_cycles.elts = ngx_pcalloc(ngx_temp_pool,
|
||||
n * sizeof(ngx_cycle_t *));
|
||||
if (ngx_old_cycles.elts == NULL) {
|
||||
exit(1);
|
||||
}
|
||||
|
||||
ngx_memzero(ngx_old_cycles.elts, n * sizeof(ngx_cycle_t *));
|
||||
ngx_old_cycles.nelts = 0;
|
||||
ngx_old_cycles.size = sizeof(ngx_cycle_t *);
|
||||
ngx_old_cycles.nalloc = n;
|
||||
ngx_old_cycles.pool = ngx_temp_pool;
|
||||
|
||||
ngx_cleaner_event.handler = ngx_clean_old_cycles;
|
||||
ngx_cleaner_event.log = cycle->log;
|
||||
|
@ -853,69 +817,6 @@ failed:
|
|||
}
|
||||
}
|
||||
|
||||
/* free the newly created shared memory */
|
||||
|
||||
part = &cycle->shared_memory.part;
|
||||
shm_zone = part->elts;
|
||||
|
||||
for (i = 0; /* void */ ; i++) {
|
||||
|
||||
if (i >= part->nelts) {
|
||||
if (part->next == NULL) {
|
||||
break;
|
||||
}
|
||||
part = part->next;
|
||||
shm_zone = part->elts;
|
||||
i = 0;
|
||||
}
|
||||
|
||||
if (shm_zone[i].shm.addr == NULL) {
|
||||
continue;
|
||||
}
|
||||
|
||||
opart = &old_cycle->shared_memory.part;
|
||||
oshm_zone = opart->elts;
|
||||
|
||||
for (n = 0; /* void */ ; n++) {
|
||||
|
||||
if (n >= opart->nelts) {
|
||||
if (opart->next == NULL) {
|
||||
break;
|
||||
}
|
||||
opart = opart->next;
|
||||
oshm_zone = opart->elts;
|
||||
n = 0;
|
||||
}
|
||||
|
||||
if (shm_zone[i].shm.name.len != oshm_zone[n].shm.name.len) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (ngx_strncmp(shm_zone[i].shm.name.data,
|
||||
oshm_zone[n].shm.name.data,
|
||||
shm_zone[i].shm.name.len)
|
||||
!= 0)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if (shm_zone[i].tag == oshm_zone[n].tag
|
||||
&& shm_zone[i].shm.size == oshm_zone[n].shm.size
|
||||
&& !shm_zone[i].noreuse)
|
||||
{
|
||||
goto old_shm_zone_found;
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
ngx_shm_free(&shm_zone[i].shm);
|
||||
|
||||
old_shm_zone_found:
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
if (ngx_test_config) {
|
||||
ngx_destroy_cycle_pools(&conf);
|
||||
return NULL;
|
||||
|
@ -962,22 +863,6 @@ ngx_init_zone_pool(ngx_cycle_t *cycle, ngx_shm_zone_t *zn)
|
|||
return NGX_OK;
|
||||
}
|
||||
|
||||
#if (NGX_WIN32)
|
||||
|
||||
/* remap at the required address */
|
||||
|
||||
if (ngx_shm_remap(&zn->shm, sp->addr) != NGX_OK) {
|
||||
return NGX_ERROR;
|
||||
}
|
||||
|
||||
sp = (ngx_slab_pool_t *) zn->shm.addr;
|
||||
|
||||
if (sp == sp->addr) {
|
||||
return NGX_OK;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
ngx_log_error(NGX_LOG_EMERG, cycle->log, 0,
|
||||
"shared zone \"%V\" has no equal addresses: %p vs %p",
|
||||
&zn->shm.name, sp->addr, sp);
|
||||
|
@ -994,8 +879,7 @@ ngx_init_zone_pool(ngx_cycle_t *cycle, ngx_shm_zone_t *zn)
|
|||
|
||||
#else
|
||||
|
||||
file = ngx_pnalloc(cycle->pool,
|
||||
cycle->lock_file.len + zn->shm.name.len + 1);
|
||||
file = ngx_pnalloc(cycle->pool, cycle->lock_file.len + zn->shm.name.len);
|
||||
if (file == NULL) {
|
||||
return NGX_ERROR;
|
||||
}
|
||||
|
@ -1018,7 +902,6 @@ ngx_int_t
|
|||
ngx_create_pidfile(ngx_str_t *name, ngx_log_t *log)
|
||||
{
|
||||
size_t len;
|
||||
ngx_int_t rc;
|
||||
ngx_uint_t create;
|
||||
ngx_file_t file;
|
||||
u_char pid[NGX_INT64_LEN + 2];
|
||||
|
@ -1043,13 +926,11 @@ ngx_create_pidfile(ngx_str_t *name, ngx_log_t *log)
|
|||
return NGX_ERROR;
|
||||
}
|
||||
|
||||
rc = NGX_OK;
|
||||
|
||||
if (!ngx_test_config) {
|
||||
len = ngx_snprintf(pid, NGX_INT64_LEN + 2, "%P%N", ngx_pid) - pid;
|
||||
|
||||
if (ngx_write_file(&file, pid, len, 0) == NGX_ERROR) {
|
||||
rc = NGX_ERROR;
|
||||
return NGX_ERROR;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1058,7 +939,7 @@ ngx_create_pidfile(ngx_str_t *name, ngx_log_t *log)
|
|||
ngx_close_file_n " \"%s\" failed", file.name.data);
|
||||
}
|
||||
|
||||
return rc;
|
||||
return NGX_OK;
|
||||
}
|
||||
|
||||
|
||||
|
@ -1083,7 +964,7 @@ ngx_int_t
|
|||
ngx_signal_process(ngx_cycle_t *cycle, char *sig)
|
||||
{
|
||||
ssize_t n;
|
||||
ngx_pid_t pid;
|
||||
ngx_int_t pid;
|
||||
ngx_file_t file;
|
||||
ngx_core_conf_t *ccf;
|
||||
u_char buf[NGX_INT64_LEN + 2];
|
||||
|
@ -1121,7 +1002,7 @@ ngx_signal_process(ngx_cycle_t *cycle, char *sig)
|
|||
|
||||
pid = ngx_atoi(buf, ++n);
|
||||
|
||||
if (pid == (ngx_pid_t) NGX_ERROR) {
|
||||
if (pid == NGX_ERROR) {
|
||||
ngx_log_error(NGX_LOG_ERR, cycle->log, 0,
|
||||
"invalid PID number \"%*s\" in \"%s\"",
|
||||
n, buf, file.name.data);
|
||||
|
@ -1211,7 +1092,9 @@ ngx_reopen_files(ngx_cycle_t *cycle, ngx_uid_t user)
|
|||
if (user != (ngx_uid_t) NGX_CONF_UNSET_UINT) {
|
||||
ngx_file_info_t fi;
|
||||
|
||||
if (ngx_file_info(file[i].name.data, &fi) == NGX_FILE_ERROR) {
|
||||
if (ngx_file_info((const char *) file[i].name.data, &fi)
|
||||
== NGX_FILE_ERROR)
|
||||
{
|
||||
ngx_log_error(NGX_LOG_EMERG, cycle->log, ngx_errno,
|
||||
ngx_file_info_n " \"%s\" failed",
|
||||
file[i].name.data);
|
||||
|
@ -1221,8 +1104,6 @@ ngx_reopen_files(ngx_cycle_t *cycle, ngx_uid_t user)
|
|||
ngx_close_file_n " \"%s\" failed",
|
||||
file[i].name.data);
|
||||
}
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
if (fi.st_uid != user) {
|
||||
|
@ -1236,8 +1117,6 @@ ngx_reopen_files(ngx_cycle_t *cycle, ngx_uid_t user)
|
|||
ngx_close_file_n " \"%s\" failed",
|
||||
file[i].name.data);
|
||||
}
|
||||
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1254,8 +1133,6 @@ ngx_reopen_files(ngx_cycle_t *cycle, ngx_uid_t user)
|
|||
ngx_close_file_n " \"%s\" failed",
|
||||
file[i].name.data);
|
||||
}
|
||||
|
||||
continue;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1327,10 +1204,6 @@ ngx_shared_memory_add(ngx_conf_t *cf, ngx_str_t *name, size_t size, void *tag)
|
|||
return NULL;
|
||||
}
|
||||
|
||||
if (shm_zone[i].shm.size == 0) {
|
||||
shm_zone[i].shm.size = size;
|
||||
}
|
||||
|
||||
if (size && size != shm_zone[i].shm.size) {
|
||||
ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
|
||||
"the size %uz of shared memory zone \"%V\" "
|
||||
|
@ -1350,13 +1223,11 @@ ngx_shared_memory_add(ngx_conf_t *cf, ngx_str_t *name, size_t size, void *tag)
|
|||
|
||||
shm_zone->data = NULL;
|
||||
shm_zone->shm.log = cf->cycle->log;
|
||||
shm_zone->shm.addr = NULL;
|
||||
shm_zone->shm.size = size;
|
||||
shm_zone->shm.name = *name;
|
||||
shm_zone->shm.exists = 0;
|
||||
shm_zone->init = NULL;
|
||||
shm_zone->tag = tag;
|
||||
shm_zone->noreuse = 0;
|
||||
|
||||
return shm_zone;
|
||||
}
|
||||
|
@ -1389,7 +1260,7 @@ ngx_clean_old_cycles(ngx_event_t *ev)
|
|||
if (cycle[i]->connections[n].fd != (ngx_socket_t) -1) {
|
||||
found = 1;
|
||||
|
||||
ngx_log_debug1(NGX_LOG_DEBUG_CORE, log, 0, "live fd:%ui", n);
|
||||
ngx_log_debug1(NGX_LOG_DEBUG_CORE, log, 0, "live fd:%d", n);
|
||||
|
||||
break;
|
||||
}
|
||||
|
@ -1400,13 +1271,13 @@ ngx_clean_old_cycles(ngx_event_t *ev)
|
|||
continue;
|
||||
}
|
||||
|
||||
ngx_log_debug1(NGX_LOG_DEBUG_CORE, log, 0, "clean old cycle: %ui", i);
|
||||
ngx_log_debug1(NGX_LOG_DEBUG_CORE, log, 0, "clean old cycle: %d", i);
|
||||
|
||||
ngx_destroy_pool(cycle[i]->pool);
|
||||
cycle[i] = NULL;
|
||||
}
|
||||
|
||||
ngx_log_debug1(NGX_LOG_DEBUG_CORE, log, 0, "old cycles status: %ui", live);
|
||||
ngx_log_debug1(NGX_LOG_DEBUG_CORE, log, 0, "old cycles status: %d", live);
|
||||
|
||||
if (live) {
|
||||
ngx_add_timer(ev, 30000);
|
||||
|
@ -1417,54 +1288,3 @@ ngx_clean_old_cycles(ngx_event_t *ev)
|
|||
ngx_old_cycles.nelts = 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
ngx_set_shutdown_timer(ngx_cycle_t *cycle)
|
||||
{
|
||||
ngx_core_conf_t *ccf;
|
||||
|
||||
ccf = (ngx_core_conf_t *) ngx_get_conf(cycle->conf_ctx, ngx_core_module);
|
||||
|
||||
if (ccf->shutdown_timeout) {
|
||||
ngx_shutdown_event.handler = ngx_shutdown_timer_handler;
|
||||
ngx_shutdown_event.data = cycle;
|
||||
ngx_shutdown_event.log = cycle->log;
|
||||
ngx_shutdown_event.cancelable = 1;
|
||||
|
||||
ngx_add_timer(&ngx_shutdown_event, ccf->shutdown_timeout);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
ngx_shutdown_timer_handler(ngx_event_t *ev)
|
||||
{
|
||||
ngx_uint_t i;
|
||||
ngx_cycle_t *cycle;
|
||||
ngx_connection_t *c;
|
||||
|
||||
cycle = ev->data;
|
||||
|
||||
c = cycle->connections;
|
||||
|
||||
for (i = 0; i < cycle->connection_n; i++) {
|
||||
|
||||
if (c[i].fd == (ngx_socket_t) -1
|
||||
|| c[i].read == NULL
|
||||
|| c[i].read->accept
|
||||
|| c[i].read->channel
|
||||
|| c[i].read->resolver)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
ngx_log_debug1(NGX_LOG_DEBUG_CORE, ev->log, 0,
|
||||
"*%uA shutdown timeout", c[i].number);
|
||||
|
||||
c[i].close = 1;
|
||||
c[i].error = 1;
|
||||
|
||||
c[i].read->handler(c[i].read);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -31,8 +31,6 @@ struct ngx_shm_zone_s {
|
|||
ngx_shm_t shm;
|
||||
ngx_shm_zone_init_pt init;
|
||||
void *tag;
|
||||
void *sync;
|
||||
ngx_uint_t noreuse; /* unsigned noreuse:1; */
|
||||
};
|
||||
|
||||
|
||||
|
@ -49,21 +47,10 @@ struct ngx_cycle_s {
|
|||
ngx_connection_t *free_connections;
|
||||
ngx_uint_t free_connection_n;
|
||||
|
||||
ngx_module_t **modules;
|
||||
ngx_uint_t modules_n;
|
||||
ngx_uint_t modules_used; /* unsigned modules_used:1; */
|
||||
|
||||
ngx_queue_t reusable_connections_queue;
|
||||
ngx_uint_t reusable_connections_n;
|
||||
time_t connections_reuse_time;
|
||||
|
||||
ngx_array_t listening;
|
||||
ngx_array_t paths;
|
||||
|
||||
ngx_array_t config_dump;
|
||||
ngx_rbtree_t config_dump_rbtree;
|
||||
ngx_rbtree_node_t config_dump_sentinel;
|
||||
|
||||
ngx_list_t open_files;
|
||||
ngx_list_t shared_memory;
|
||||
|
||||
|
@ -80,48 +67,55 @@ struct ngx_cycle_s {
|
|||
ngx_str_t conf_param;
|
||||
ngx_str_t conf_prefix;
|
||||
ngx_str_t prefix;
|
||||
ngx_str_t error_log;
|
||||
ngx_str_t lock_file;
|
||||
ngx_str_t hostname;
|
||||
};
|
||||
|
||||
|
||||
typedef struct {
|
||||
ngx_flag_t daemon;
|
||||
ngx_flag_t master;
|
||||
ngx_flag_t daemon;
|
||||
ngx_flag_t master;
|
||||
|
||||
ngx_msec_t timer_resolution;
|
||||
ngx_msec_t shutdown_timeout;
|
||||
ngx_msec_t timer_resolution;
|
||||
|
||||
ngx_int_t worker_processes;
|
||||
ngx_int_t debug_points;
|
||||
ngx_int_t worker_processes;
|
||||
ngx_int_t debug_points;
|
||||
|
||||
ngx_int_t rlimit_nofile;
|
||||
off_t rlimit_core;
|
||||
ngx_int_t rlimit_nofile;
|
||||
ngx_int_t rlimit_sigpending;
|
||||
off_t rlimit_core;
|
||||
|
||||
int priority;
|
||||
int priority;
|
||||
|
||||
ngx_uint_t cpu_affinity_auto;
|
||||
ngx_uint_t cpu_affinity_n;
|
||||
ngx_cpuset_t *cpu_affinity;
|
||||
ngx_uint_t cpu_affinity_n;
|
||||
uint64_t *cpu_affinity;
|
||||
|
||||
char *username;
|
||||
ngx_uid_t user;
|
||||
ngx_gid_t group;
|
||||
char *username;
|
||||
ngx_uid_t user;
|
||||
ngx_gid_t group;
|
||||
|
||||
ngx_str_t working_directory;
|
||||
ngx_str_t lock_file;
|
||||
ngx_str_t working_directory;
|
||||
ngx_str_t lock_file;
|
||||
|
||||
ngx_str_t pid;
|
||||
ngx_str_t oldpid;
|
||||
ngx_str_t pid;
|
||||
ngx_str_t oldpid;
|
||||
|
||||
ngx_array_t env;
|
||||
char **environment;
|
||||
ngx_array_t env;
|
||||
char **environment;
|
||||
|
||||
#if (NGX_THREADS)
|
||||
ngx_int_t worker_threads;
|
||||
size_t thread_stack_size;
|
||||
#endif
|
||||
|
||||
ngx_uint_t transparent; /* unsigned transparent:1; */
|
||||
} ngx_core_conf_t;
|
||||
|
||||
|
||||
typedef struct {
|
||||
ngx_pool_t *pool; /* pcre's malloc() pool */
|
||||
} ngx_core_tls_t;
|
||||
|
||||
|
||||
#define ngx_is_init_cycle(cycle) (cycle->conf_ctx == NULL)
|
||||
|
||||
|
||||
|
@ -132,18 +126,19 @@ ngx_int_t ngx_signal_process(ngx_cycle_t *cycle, char *sig);
|
|||
void ngx_reopen_files(ngx_cycle_t *cycle, ngx_uid_t user);
|
||||
char **ngx_set_environment(ngx_cycle_t *cycle, ngx_uint_t *last);
|
||||
ngx_pid_t ngx_exec_new_binary(ngx_cycle_t *cycle, char *const *argv);
|
||||
ngx_cpuset_t *ngx_get_cpu_affinity(ngx_uint_t n);
|
||||
uint64_t ngx_get_cpu_affinity(ngx_uint_t n);
|
||||
ngx_shm_zone_t *ngx_shared_memory_add(ngx_conf_t *cf, ngx_str_t *name,
|
||||
size_t size, void *tag);
|
||||
void ngx_set_shutdown_timer(ngx_cycle_t *cycle);
|
||||
|
||||
|
||||
extern volatile ngx_cycle_t *ngx_cycle;
|
||||
extern ngx_array_t ngx_old_cycles;
|
||||
extern ngx_module_t ngx_core_module;
|
||||
extern ngx_uint_t ngx_test_config;
|
||||
extern ngx_uint_t ngx_dump_config;
|
||||
extern ngx_uint_t ngx_quiet_mode;
|
||||
#if (NGX_THREADS)
|
||||
extern ngx_tls_key_t ngx_core_tls_key;
|
||||
#endif
|
||||
|
||||
|
||||
#endif /* _NGX_CYCLE_H_INCLUDED_ */
|
||||
|
|
|
@ -114,7 +114,7 @@ ngx_write_chain_to_temp_file(ngx_temp_file_t *tf, ngx_chain_t *chain)
|
|||
rc = ngx_create_temp_file(&tf->file, tf->path, tf->pool,
|
||||
tf->persistent, tf->clean, tf->access);
|
||||
|
||||
if (rc != NGX_OK) {
|
||||
if (rc == NGX_ERROR || rc == NGX_AGAIN) {
|
||||
return rc;
|
||||
}
|
||||
|
||||
|
@ -124,15 +124,6 @@ ngx_write_chain_to_temp_file(ngx_temp_file_t *tf, ngx_chain_t *chain)
|
|||
}
|
||||
}
|
||||
|
||||
#if (NGX_THREADS && NGX_HAVE_PWRITEV)
|
||||
|
||||
if (tf->thread_write) {
|
||||
return ngx_thread_write_chain_to_file(&tf->file, chain, tf->offset,
|
||||
tf->pool);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
return ngx_write_chain_to_file(&tf->file, chain, tf->offset, tf->pool);
|
||||
}
|
||||
|
||||
|
@ -141,27 +132,12 @@ ngx_int_t
|
|||
ngx_create_temp_file(ngx_file_t *file, ngx_path_t *path, ngx_pool_t *pool,
|
||||
ngx_uint_t persistent, ngx_uint_t clean, ngx_uint_t access)
|
||||
{
|
||||
size_t levels;
|
||||
u_char *p;
|
||||
uint32_t n;
|
||||
ngx_err_t err;
|
||||
ngx_str_t name;
|
||||
ngx_uint_t prefix;
|
||||
ngx_pool_cleanup_t *cln;
|
||||
ngx_pool_cleanup_file_t *clnf;
|
||||
|
||||
if (file->name.len) {
|
||||
name = file->name;
|
||||
levels = 0;
|
||||
prefix = 1;
|
||||
|
||||
} else {
|
||||
name = path->name;
|
||||
levels = path->len;
|
||||
prefix = 0;
|
||||
}
|
||||
|
||||
file->name.len = name.len + 1 + levels + 10;
|
||||
file->name.len = path->name.len + 1 + path->len + 10;
|
||||
|
||||
file->name.data = ngx_pnalloc(pool, file->name.len + 1);
|
||||
if (file->name.data == NULL) {
|
||||
|
@ -170,17 +146,11 @@ ngx_create_temp_file(ngx_file_t *file, ngx_path_t *path, ngx_pool_t *pool,
|
|||
|
||||
#if 0
|
||||
for (i = 0; i < file->name.len; i++) {
|
||||
file->name.data[i] = 'X';
|
||||
file->name.data[i] = 'X';
|
||||
}
|
||||
#endif
|
||||
|
||||
p = ngx_cpymem(file->name.data, name.data, name.len);
|
||||
|
||||
if (prefix) {
|
||||
*p = '.';
|
||||
}
|
||||
|
||||
p += 1 + levels;
|
||||
ngx_memcpy(file->name.data, path->name.data, path->name.len);
|
||||
|
||||
n = (uint32_t) ngx_next_temp_number(0);
|
||||
|
||||
|
@ -190,11 +160,10 @@ ngx_create_temp_file(ngx_file_t *file, ngx_path_t *path, ngx_pool_t *pool,
|
|||
}
|
||||
|
||||
for ( ;; ) {
|
||||
(void) ngx_sprintf(p, "%010uD%Z", n);
|
||||
(void) ngx_sprintf(file->name.data + path->name.len + 1 + path->len,
|
||||
"%010uD%Z", n);
|
||||
|
||||
if (!prefix) {
|
||||
ngx_create_hashed_filename(path, file->name.data, file->name.len);
|
||||
}
|
||||
ngx_create_hashed_filename(path, file->name.data, file->name.len);
|
||||
|
||||
ngx_log_debug1(NGX_LOG_DEBUG_CORE, file->log, 0,
|
||||
"hashed path: %s", file->name.data);
|
||||
|
@ -218,7 +187,7 @@ ngx_create_temp_file(ngx_file_t *file, ngx_path_t *path, ngx_pool_t *pool,
|
|||
|
||||
err = ngx_errno;
|
||||
|
||||
if (err == NGX_EEXIST_FILE) {
|
||||
if (err == NGX_EEXIST) {
|
||||
n = (uint32_t) ngx_next_temp_number(1);
|
||||
continue;
|
||||
}
|
||||
|
@ -247,7 +216,7 @@ ngx_create_hashed_filename(ngx_path_t *path, u_char *file, size_t len)
|
|||
|
||||
file[path->name.len + path->len] = '/';
|
||||
|
||||
for (n = 0; n < NGX_MAX_PATH_LEVEL; n++) {
|
||||
for (n = 0; n < 3; n++) {
|
||||
level = path->level[n];
|
||||
|
||||
if (level == 0) {
|
||||
|
@ -271,7 +240,7 @@ ngx_create_path(ngx_file_t *file, ngx_path_t *path)
|
|||
|
||||
pos = path->name.len;
|
||||
|
||||
for (i = 0; i < NGX_MAX_PATH_LEVEL; i++) {
|
||||
for (i = 0; i < 3; i++) {
|
||||
if (path->level[i] == 0) {
|
||||
break;
|
||||
}
|
||||
|
@ -387,7 +356,7 @@ ngx_conf_set_path_slot(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
|
|||
}
|
||||
|
||||
if (ngx_conf_full_name(cf->cycle, &path->name, 0) != NGX_OK) {
|
||||
return NGX_CONF_ERROR;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
path->conf_file = cf->conf_file->file.name.data;
|
||||
|
@ -403,8 +372,8 @@ ngx_conf_set_path_slot(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
|
|||
path->len += level + 1;
|
||||
}
|
||||
|
||||
if (path->len > 10 + i) {
|
||||
return "invalid value";
|
||||
while (i < 3) {
|
||||
path->level[i++] = 0;
|
||||
}
|
||||
|
||||
*slot = path;
|
||||
|
@ -421,8 +390,6 @@ char *
|
|||
ngx_conf_merge_path_value(ngx_conf_t *cf, ngx_path_t **path, ngx_path_t *prev,
|
||||
ngx_path_init_t *init)
|
||||
{
|
||||
ngx_uint_t i;
|
||||
|
||||
if (*path) {
|
||||
return NGX_CONF_OK;
|
||||
}
|
||||
|
@ -443,10 +410,13 @@ ngx_conf_merge_path_value(ngx_conf_t *cf, ngx_path_t **path, ngx_path_t *prev,
|
|||
return NGX_CONF_ERROR;
|
||||
}
|
||||
|
||||
for (i = 0; i < NGX_MAX_PATH_LEVEL; i++) {
|
||||
(*path)->level[i] = init->level[i];
|
||||
(*path)->len += init->level[i] + (init->level[i] ? 1 : 0);
|
||||
}
|
||||
(*path)->level[0] = init->level[0];
|
||||
(*path)->level[1] = init->level[1];
|
||||
(*path)->level[2] = init->level[2];
|
||||
|
||||
(*path)->len = init->level[0] + (init->level[0] ? 1 : 0)
|
||||
+ init->level[1] + (init->level[1] ? 1 : 0)
|
||||
+ init->level[2] + (init->level[2] ? 1 : 0);
|
||||
|
||||
if (ngx_add_path(cf, path) != NGX_OK) {
|
||||
return NGX_CONF_ERROR;
|
||||
|
@ -463,7 +433,7 @@ ngx_conf_set_access_slot(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
|
|||
|
||||
u_char *p;
|
||||
ngx_str_t *value;
|
||||
ngx_uint_t i, right, shift, *access, user;
|
||||
ngx_uint_t i, right, shift, *access;
|
||||
|
||||
access = (ngx_uint_t *) (confp + cmd->offset);
|
||||
|
||||
|
@ -473,8 +443,7 @@ ngx_conf_set_access_slot(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
|
|||
|
||||
value = cf->args->elts;
|
||||
|
||||
*access = 0;
|
||||
user = 0600;
|
||||
*access = 0600;
|
||||
|
||||
for (i = 1; i < cf->args->nelts; i++) {
|
||||
|
||||
|
@ -483,7 +452,6 @@ ngx_conf_set_access_slot(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
|
|||
if (ngx_strncmp(p, "user:", sizeof("user:") - 1) == 0) {
|
||||
shift = 6;
|
||||
p += sizeof("user:") - 1;
|
||||
user = 0;
|
||||
|
||||
} else if (ngx_strncmp(p, "group:", sizeof("group:") - 1) == 0) {
|
||||
shift = 3;
|
||||
|
@ -510,8 +478,6 @@ ngx_conf_set_access_slot(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
|
|||
*access |= right << shift;
|
||||
}
|
||||
|
||||
*access |= user;
|
||||
|
||||
return NGX_CONF_OK;
|
||||
|
||||
invalid:
|
||||
|
@ -543,7 +509,7 @@ ngx_add_path(ngx_conf_t *cf, ngx_path_t **slot)
|
|||
return NGX_ERROR;
|
||||
}
|
||||
|
||||
for (n = 0; n < NGX_MAX_PATH_LEVEL; n++) {
|
||||
for (n = 0; n < 3; n++) {
|
||||
if (p[i]->level[n] != path->level[n]) {
|
||||
if (path->conf_file == NULL) {
|
||||
if (p[i]->conf_file == NULL) {
|
||||
|
@ -622,7 +588,9 @@ ngx_create_paths(ngx_cycle_t *cycle, ngx_uid_t user)
|
|||
{
|
||||
ngx_file_info_t fi;
|
||||
|
||||
if (ngx_file_info(path[i]->name.data, &fi) == NGX_FILE_ERROR) {
|
||||
if (ngx_file_info((const char *) path[i]->name.data, &fi)
|
||||
== NGX_FILE_ERROR)
|
||||
{
|
||||
ngx_log_error(NGX_LOG_EMERG, cycle->log, ngx_errno,
|
||||
ngx_file_info_n " \"%s\" failed", path[i]->name.data);
|
||||
return NGX_ERROR;
|
||||
|
@ -715,7 +683,7 @@ ngx_ext_rename_file(ngx_str_t *src, ngx_str_t *to, ngx_ext_rename_file_t *ext)
|
|||
|
||||
#if (NGX_WIN32)
|
||||
|
||||
if (err == NGX_EEXIST || err == NGX_EEXIST_FILE) {
|
||||
if (err == NGX_EEXIST) {
|
||||
err = ngx_win32_rename_file(src, to, ext->log);
|
||||
|
||||
if (err == 0) {
|
||||
|
@ -796,12 +764,10 @@ ngx_copy_file(u_char *from, u_char *to, ngx_copy_file_t *cf)
|
|||
{
|
||||
char *buf;
|
||||
off_t size;
|
||||
time_t time;
|
||||
size_t len;
|
||||
ssize_t n;
|
||||
ngx_fd_t fd, nfd;
|
||||
ngx_int_t rc;
|
||||
ngx_uint_t access;
|
||||
ngx_file_info_t fi;
|
||||
|
||||
rc = NGX_ERROR;
|
||||
|
@ -816,10 +782,8 @@ ngx_copy_file(u_char *from, u_char *to, ngx_copy_file_t *cf)
|
|||
goto failed;
|
||||
}
|
||||
|
||||
if (cf->size != -1 && cf->access != 0 && cf->time != -1) {
|
||||
if (cf->size != -1) {
|
||||
size = cf->size;
|
||||
access = cf->access;
|
||||
time = cf->time;
|
||||
|
||||
} else {
|
||||
if (ngx_fd_info(fd, &fi) == NGX_FILE_ERROR) {
|
||||
|
@ -829,9 +793,7 @@ ngx_copy_file(u_char *from, u_char *to, ngx_copy_file_t *cf)
|
|||
goto failed;
|
||||
}
|
||||
|
||||
size = (cf->size != -1) ? cf->size : ngx_file_size(&fi);
|
||||
access = cf->access ? cf->access : ngx_file_access(&fi);
|
||||
time = (cf->time != -1) ? cf->time : ngx_file_mtime(&fi);
|
||||
size = ngx_file_size(&fi);
|
||||
}
|
||||
|
||||
len = cf->buf_size ? cf->buf_size : 65536;
|
||||
|
@ -845,7 +807,8 @@ ngx_copy_file(u_char *from, u_char *to, ngx_copy_file_t *cf)
|
|||
goto failed;
|
||||
}
|
||||
|
||||
nfd = ngx_open_file(to, NGX_FILE_WRONLY, NGX_FILE_TRUNCATE, access);
|
||||
nfd = ngx_open_file(to, NGX_FILE_WRONLY, NGX_FILE_CREATE_OR_OPEN,
|
||||
cf->access);
|
||||
|
||||
if (nfd == NGX_INVALID_FILE) {
|
||||
ngx_log_error(NGX_LOG_CRIT, cf->log, ngx_errno,
|
||||
|
@ -869,7 +832,7 @@ ngx_copy_file(u_char *from, u_char *to, ngx_copy_file_t *cf)
|
|||
|
||||
if ((size_t) n != len) {
|
||||
ngx_log_error(NGX_LOG_ALERT, cf->log, 0,
|
||||
ngx_read_fd_n " has read only %z of %O from %s",
|
||||
ngx_read_fd_n " has read only %z of %uz from %s",
|
||||
n, size, from);
|
||||
goto failed;
|
||||
}
|
||||
|
@ -884,7 +847,7 @@ ngx_copy_file(u_char *from, u_char *to, ngx_copy_file_t *cf)
|
|||
|
||||
if ((size_t) n != len) {
|
||||
ngx_log_error(NGX_LOG_ALERT, cf->log, 0,
|
||||
ngx_write_fd_n " has written only %z of %O to %s",
|
||||
ngx_write_fd_n " has written only %z of %uz to %s",
|
||||
n, size, to);
|
||||
goto failed;
|
||||
}
|
||||
|
@ -892,10 +855,12 @@ ngx_copy_file(u_char *from, u_char *to, ngx_copy_file_t *cf)
|
|||
size -= n;
|
||||
}
|
||||
|
||||
if (ngx_set_file_time(to, nfd, time) != NGX_OK) {
|
||||
ngx_log_error(NGX_LOG_ALERT, cf->log, ngx_errno,
|
||||
ngx_set_file_time_n " \"%s\" failed", to);
|
||||
goto failed;
|
||||
if (cf->time != -1) {
|
||||
if (ngx_set_file_time(to, nfd, cf->time) != NGX_OK) {
|
||||
ngx_log_error(NGX_LOG_ALERT, cf->log, ngx_errno,
|
||||
ngx_set_file_time_n " \"%s\" failed", to);
|
||||
goto failed;
|
||||
}
|
||||
}
|
||||
|
||||
rc = NGX_OK;
|
||||
|
@ -1017,13 +982,13 @@ ngx_walk_tree(ngx_tree_ctx_t *ctx, ngx_str_t *tree)
|
|||
|
||||
file.len = tree->len + 1 + len;
|
||||
|
||||
if (file.len > buf.len) {
|
||||
if (file.len + NGX_DIR_MASK_LEN > buf.len) {
|
||||
|
||||
if (buf.len) {
|
||||
ngx_free(buf.data);
|
||||
}
|
||||
|
||||
buf.len = tree->len + 1 + len;
|
||||
buf.len = tree->len + 1 + len + NGX_DIR_MASK_LEN;
|
||||
|
||||
buf.data = ngx_alloc(buf.len + 1, ctx->log);
|
||||
if (buf.data == NULL) {
|
||||
|
@ -1070,18 +1035,10 @@ ngx_walk_tree(ngx_tree_ctx_t *ctx, ngx_str_t *tree)
|
|||
ctx->access = ngx_de_access(&dir);
|
||||
ctx->mtime = ngx_de_mtime(&dir);
|
||||
|
||||
rc = ctx->pre_tree_handler(ctx, &file);
|
||||
|
||||
if (rc == NGX_ABORT) {
|
||||
if (ctx->pre_tree_handler(ctx, &file) == NGX_ABORT) {
|
||||
goto failed;
|
||||
}
|
||||
|
||||
if (rc == NGX_DECLINED) {
|
||||
ngx_log_debug1(NGX_LOG_DEBUG_CORE, ctx->log, 0,
|
||||
"tree skip dir \"%s\"", file.data);
|
||||
continue;
|
||||
}
|
||||
|
||||
if (ngx_walk_tree(ctx, &file) == NGX_ABORT) {
|
||||
goto failed;
|
||||
}
|
||||
|
|
|
@ -23,14 +23,7 @@ struct ngx_file_s {
|
|||
|
||||
ngx_log_t *log;
|
||||
|
||||
#if (NGX_THREADS || NGX_COMPAT)
|
||||
ngx_int_t (*thread_handler)(ngx_thread_task_t *task,
|
||||
ngx_file_t *file);
|
||||
void *thread_ctx;
|
||||
ngx_thread_task_t *thread_task;
|
||||
#endif
|
||||
|
||||
#if (NGX_HAVE_FILE_AIO || NGX_COMPAT)
|
||||
#if (NGX_HAVE_FILE_AIO)
|
||||
ngx_event_aio_t *aio;
|
||||
#endif
|
||||
|
||||
|
@ -42,18 +35,16 @@ struct ngx_file_s {
|
|||
#define NGX_MAX_PATH_LEVEL 3
|
||||
|
||||
|
||||
typedef ngx_msec_t (*ngx_path_manager_pt) (void *data);
|
||||
typedef ngx_msec_t (*ngx_path_purger_pt) (void *data);
|
||||
typedef time_t (*ngx_path_manager_pt) (void *data);
|
||||
typedef void (*ngx_path_loader_pt) (void *data);
|
||||
|
||||
|
||||
typedef struct {
|
||||
ngx_str_t name;
|
||||
size_t len;
|
||||
size_t level[NGX_MAX_PATH_LEVEL];
|
||||
size_t level[3];
|
||||
|
||||
ngx_path_manager_pt manager;
|
||||
ngx_path_purger_pt purger;
|
||||
ngx_path_loader_pt loader;
|
||||
void *data;
|
||||
|
||||
|
@ -64,7 +55,7 @@ typedef struct {
|
|||
|
||||
typedef struct {
|
||||
ngx_str_t name;
|
||||
size_t level[NGX_MAX_PATH_LEVEL];
|
||||
size_t level[3];
|
||||
} ngx_path_init_t;
|
||||
|
||||
|
||||
|
@ -80,7 +71,6 @@ typedef struct {
|
|||
unsigned log_level:8;
|
||||
unsigned persistent:1;
|
||||
unsigned clean:1;
|
||||
unsigned thread_write:1;
|
||||
} ngx_temp_file_t;
|
||||
|
||||
|
||||
|
|
|
@ -257,31 +257,11 @@ ngx_hash_init(ngx_hash_init_t *hinit, ngx_hash_key_t *names, ngx_uint_t nelts)
|
|||
ngx_uint_t i, n, key, size, start, bucket_size;
|
||||
ngx_hash_elt_t *elt, **buckets;
|
||||
|
||||
if (hinit->max_size == 0) {
|
||||
ngx_log_error(NGX_LOG_EMERG, hinit->pool->log, 0,
|
||||
"could not build %s, you should "
|
||||
"increase %s_max_size: %i",
|
||||
hinit->name, hinit->name, hinit->max_size);
|
||||
return NGX_ERROR;
|
||||
}
|
||||
|
||||
if (hinit->bucket_size > 65536 - ngx_cacheline_size) {
|
||||
ngx_log_error(NGX_LOG_EMERG, hinit->pool->log, 0,
|
||||
"could not build %s, too large "
|
||||
"%s_bucket_size: %i",
|
||||
hinit->name, hinit->name, hinit->bucket_size);
|
||||
return NGX_ERROR;
|
||||
}
|
||||
|
||||
for (n = 0; n < nelts; n++) {
|
||||
if (names[n].key.data == NULL) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (hinit->bucket_size < NGX_HASH_ELT_SIZE(&names[n]) + sizeof(void *))
|
||||
{
|
||||
ngx_log_error(NGX_LOG_EMERG, hinit->pool->log, 0,
|
||||
"could not build %s, you should "
|
||||
"could not build the %s, you should "
|
||||
"increase %s_bucket_size: %i",
|
||||
hinit->name, hinit->name, hinit->bucket_size);
|
||||
return NGX_ERROR;
|
||||
|
@ -312,19 +292,17 @@ ngx_hash_init(ngx_hash_init_t *hinit, ngx_hash_key_t *names, ngx_uint_t nelts)
|
|||
}
|
||||
|
||||
key = names[n].key_hash % size;
|
||||
len = test[key] + NGX_HASH_ELT_SIZE(&names[n]);
|
||||
test[key] = (u_short) (test[key] + NGX_HASH_ELT_SIZE(&names[n]));
|
||||
|
||||
#if 0
|
||||
ngx_log_error(NGX_LOG_ALERT, hinit->pool->log, 0,
|
||||
"%ui: %ui %uz \"%V\"",
|
||||
size, key, len, &names[n].key);
|
||||
"%ui: %ui %ui \"%V\"",
|
||||
size, key, test[key], &names[n].key);
|
||||
#endif
|
||||
|
||||
if (len > bucket_size) {
|
||||
if (test[key] > (u_short) bucket_size) {
|
||||
goto next;
|
||||
}
|
||||
|
||||
test[key] = (u_short) len;
|
||||
}
|
||||
|
||||
goto found;
|
||||
|
@ -355,18 +333,7 @@ found:
|
|||
}
|
||||
|
||||
key = names[n].key_hash % size;
|
||||
len = test[key] + NGX_HASH_ELT_SIZE(&names[n]);
|
||||
|
||||
if (len > 65536 - ngx_cacheline_size) {
|
||||
ngx_log_error(NGX_LOG_EMERG, hinit->pool->log, 0,
|
||||
"could not build %s, you should "
|
||||
"increase %s_max_size: %i",
|
||||
hinit->name, hinit->name, hinit->max_size);
|
||||
ngx_free(test);
|
||||
return NGX_ERROR;
|
||||
}
|
||||
|
||||
test[key] = (u_short) len;
|
||||
test[key] = (u_short) (test[key] + NGX_HASH_ELT_SIZE(&names[n]));
|
||||
}
|
||||
|
||||
len = 0;
|
||||
|
@ -415,6 +382,7 @@ found:
|
|||
|
||||
buckets[i] = (ngx_hash_elt_t *) elts;
|
||||
elts += test[i];
|
||||
|
||||
}
|
||||
|
||||
for (i = 0; i < size; i++) {
|
||||
|
@ -767,10 +735,6 @@ ngx_hash_add_key(ngx_hash_keys_arrays_t *ha, ngx_str_t *key, void *value,
|
|||
if (key->data[i] == '.' && key->data[i + 1] == '.') {
|
||||
return NGX_DECLINED;
|
||||
}
|
||||
|
||||
if (key->data[i] == '\0') {
|
||||
return NGX_DECLINED;
|
||||
}
|
||||
}
|
||||
|
||||
if (key->len > 1 && key->data[0] == '.') {
|
||||
|
|
|
@ -89,15 +89,12 @@ typedef struct {
|
|||
} ngx_hash_keys_arrays_t;
|
||||
|
||||
|
||||
typedef struct ngx_table_elt_s ngx_table_elt_t;
|
||||
|
||||
struct ngx_table_elt_s {
|
||||
typedef struct {
|
||||
ngx_uint_t hash;
|
||||
ngx_str_t key;
|
||||
ngx_str_t value;
|
||||
u_char *lowcase_key;
|
||||
ngx_table_elt_t *next;
|
||||
};
|
||||
} ngx_table_elt_t;
|
||||
|
||||
|
||||
void *ngx_hash_find(ngx_hash_t *hash, ngx_uint_t key, u_char *name, size_t len);
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -13,35 +13,31 @@
|
|||
#include <ngx_core.h>
|
||||
|
||||
|
||||
/*
|
||||
* TODO: autoconfigure NGX_SOCKADDRLEN and NGX_SOCKADDR_STRLEN as
|
||||
* sizeof(struct sockaddr_storage)
|
||||
* sizeof(struct sockaddr_un)
|
||||
* sizeof(struct sockaddr_in6)
|
||||
* sizeof(struct sockaddr_in)
|
||||
*/
|
||||
|
||||
#define NGX_INET_ADDRSTRLEN (sizeof("255.255.255.255") - 1)
|
||||
#define NGX_INET6_ADDRSTRLEN \
|
||||
(sizeof("ffff:ffff:ffff:ffff:ffff:ffff:255.255.255.255") - 1)
|
||||
#define NGX_UNIX_ADDRSTRLEN \
|
||||
(sizeof("unix:") - 1 + \
|
||||
sizeof(struct sockaddr_un) - offsetof(struct sockaddr_un, sun_path))
|
||||
(sizeof(struct sockaddr_un) - offsetof(struct sockaddr_un, sun_path))
|
||||
|
||||
#if (NGX_HAVE_UNIX_DOMAIN)
|
||||
#define NGX_SOCKADDR_STRLEN NGX_UNIX_ADDRSTRLEN
|
||||
#elif (NGX_HAVE_INET6)
|
||||
#define NGX_SOCKADDR_STRLEN (NGX_INET6_ADDRSTRLEN + sizeof("[]:65535") - 1)
|
||||
#define NGX_SOCKADDR_STRLEN (sizeof("unix:") - 1 + NGX_UNIX_ADDRSTRLEN)
|
||||
#else
|
||||
#define NGX_SOCKADDR_STRLEN (NGX_INET_ADDRSTRLEN + sizeof(":65535") - 1)
|
||||
#define NGX_SOCKADDR_STRLEN (NGX_INET6_ADDRSTRLEN + sizeof("[]:65535") - 1)
|
||||
#endif
|
||||
|
||||
/* compatibility */
|
||||
#define NGX_SOCKADDRLEN sizeof(ngx_sockaddr_t)
|
||||
|
||||
|
||||
typedef union {
|
||||
struct sockaddr sockaddr;
|
||||
struct sockaddr_in sockaddr_in;
|
||||
#if (NGX_HAVE_INET6)
|
||||
struct sockaddr_in6 sockaddr_in6;
|
||||
#endif
|
||||
#if (NGX_HAVE_UNIX_DOMAIN)
|
||||
struct sockaddr_un sockaddr_un;
|
||||
#define NGX_SOCKADDRLEN sizeof(struct sockaddr_un)
|
||||
#else
|
||||
#define NGX_SOCKADDRLEN 512
|
||||
#endif
|
||||
} ngx_sockaddr_t;
|
||||
|
||||
|
||||
typedef struct {
|
||||
|
@ -86,18 +82,18 @@ typedef struct {
|
|||
|
||||
in_port_t port;
|
||||
in_port_t default_port;
|
||||
in_port_t last_port;
|
||||
int family;
|
||||
|
||||
unsigned listen:1;
|
||||
unsigned uri_part:1;
|
||||
unsigned no_resolve:1;
|
||||
unsigned one_addr:1; /* compatibility */
|
||||
|
||||
unsigned no_port:1;
|
||||
unsigned wildcard:1;
|
||||
|
||||
socklen_t socklen;
|
||||
ngx_sockaddr_t sockaddr;
|
||||
u_char sockaddr[NGX_SOCKADDRLEN];
|
||||
|
||||
ngx_addr_t *addrs;
|
||||
ngx_uint_t naddrs;
|
||||
|
@ -115,18 +111,12 @@ size_t ngx_sock_ntop(struct sockaddr *sa, socklen_t socklen, u_char *text,
|
|||
size_t len, ngx_uint_t port);
|
||||
size_t ngx_inet_ntop(int family, void *addr, u_char *text, size_t len);
|
||||
ngx_int_t ngx_ptocidr(ngx_str_t *text, ngx_cidr_t *cidr);
|
||||
ngx_int_t ngx_cidr_match(struct sockaddr *sa, ngx_array_t *cidrs);
|
||||
ngx_int_t ngx_parse_addr(ngx_pool_t *pool, ngx_addr_t *addr, u_char *text,
|
||||
size_t len);
|
||||
ngx_int_t ngx_parse_addr_port(ngx_pool_t *pool, ngx_addr_t *addr,
|
||||
u_char *text, size_t len);
|
||||
ngx_int_t ngx_parse_url(ngx_pool_t *pool, ngx_url_t *u);
|
||||
ngx_int_t ngx_inet_resolve_host(ngx_pool_t *pool, ngx_url_t *u);
|
||||
ngx_int_t ngx_cmp_sockaddr(struct sockaddr *sa1, socklen_t slen1,
|
||||
struct sockaddr *sa2, socklen_t slen2, ngx_uint_t cmp_port);
|
||||
in_port_t ngx_inet_get_port(struct sockaddr *sa);
|
||||
void ngx_inet_set_port(struct sockaddr *sa, in_port_t port);
|
||||
ngx_uint_t ngx_inet_wildcard(struct sockaddr *sa);
|
||||
|
||||
|
||||
#endif /* _NGX_INET_H_INCLUDED_ */
|
||||
|
|
|
@ -14,33 +14,16 @@ static char *ngx_log_set_levels(ngx_conf_t *cf, ngx_log_t *log);
|
|||
static void ngx_log_insert(ngx_log_t *log, ngx_log_t *new_log);
|
||||
|
||||
|
||||
#if (NGX_DEBUG)
|
||||
|
||||
static void ngx_log_memory_writer(ngx_log_t *log, ngx_uint_t level,
|
||||
u_char *buf, size_t len);
|
||||
static void ngx_log_memory_cleanup(void *data);
|
||||
|
||||
|
||||
typedef struct {
|
||||
u_char *start;
|
||||
u_char *end;
|
||||
u_char *pos;
|
||||
ngx_atomic_t written;
|
||||
} ngx_log_memory_buf_t;
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
static ngx_command_t ngx_errlog_commands[] = {
|
||||
|
||||
{ ngx_string("error_log"),
|
||||
NGX_MAIN_CONF|NGX_CONF_1MORE,
|
||||
ngx_error_log,
|
||||
0,
|
||||
0,
|
||||
NULL },
|
||||
{ngx_string("error_log"),
|
||||
NGX_MAIN_CONF|NGX_CONF_1MORE,
|
||||
ngx_error_log,
|
||||
0,
|
||||
0,
|
||||
NULL},
|
||||
|
||||
ngx_null_command
|
||||
ngx_null_command
|
||||
};
|
||||
|
||||
|
||||
|
@ -86,7 +69,7 @@ static ngx_str_t err_levels[] = {
|
|||
|
||||
static const char *debug_levels[] = {
|
||||
"debug_core", "debug_alloc", "debug_mutex", "debug_event",
|
||||
"debug_http", "debug_mail", "debug_stream"
|
||||
"debug_http", "debug_mail", "debug_mysql"
|
||||
};
|
||||
|
||||
|
||||
|
@ -108,14 +91,15 @@ ngx_log_error_core(ngx_uint_t level, ngx_log_t *log, ngx_err_t err,
|
|||
va_list args;
|
||||
#endif
|
||||
u_char *p, *last, *msg;
|
||||
ssize_t n;
|
||||
ngx_uint_t wrote_stderr, debug_connection;
|
||||
u_char errstr[NGX_MAX_ERROR_STR];
|
||||
ngx_uint_t wrote_stderr, debug_connection;
|
||||
|
||||
last = errstr + NGX_MAX_ERROR_STR;
|
||||
|
||||
p = ngx_cpymem(errstr, ngx_cached_err_log_time.data,
|
||||
ngx_cached_err_log_time.len);
|
||||
ngx_memcpy(errstr, ngx_cached_err_log_time.data,
|
||||
ngx_cached_err_log_time.len);
|
||||
|
||||
p = errstr + ngx_cached_err_log_time.len;
|
||||
|
||||
p = ngx_slprintf(p, last, " [%V] ", &err_levels[level]);
|
||||
|
||||
|
@ -164,34 +148,12 @@ ngx_log_error_core(ngx_uint_t level, ngx_log_t *log, ngx_err_t err,
|
|||
break;
|
||||
}
|
||||
|
||||
if (log->writer) {
|
||||
log->writer(log, level, errstr, p - errstr);
|
||||
goto next;
|
||||
}
|
||||
|
||||
if (ngx_time() == log->disk_full_time) {
|
||||
|
||||
/*
|
||||
* on FreeBSD writing to a full filesystem with enabled softupdates
|
||||
* may block process for much longer time than writing to non-full
|
||||
* filesystem, so we skip writing to a log for one second
|
||||
*/
|
||||
|
||||
goto next;
|
||||
}
|
||||
|
||||
n = ngx_write_fd(log->file->fd, errstr, p - errstr);
|
||||
|
||||
if (n == -1 && ngx_errno == NGX_ENOSPC) {
|
||||
log->disk_full_time = ngx_time();
|
||||
}
|
||||
(void) ngx_write_fd(log->file->fd, errstr, p - errstr);
|
||||
|
||||
if (log->file->fd == ngx_stderr) {
|
||||
wrote_stderr = 1;
|
||||
}
|
||||
|
||||
next:
|
||||
|
||||
log = log->next;
|
||||
}
|
||||
|
||||
|
@ -263,8 +225,9 @@ ngx_log_stderr(ngx_err_t err, const char *fmt, ...)
|
|||
u_char errstr[NGX_MAX_ERROR_STR];
|
||||
|
||||
last = errstr + NGX_MAX_ERROR_STR;
|
||||
p = errstr + 7;
|
||||
|
||||
p = ngx_cpymem(errstr, "nginx: ", 7);
|
||||
ngx_memcpy(errstr, "nginx: ", 7);
|
||||
|
||||
va_start(args, fmt);
|
||||
p = ngx_vslprintf(p, last, fmt, args);
|
||||
|
@ -315,7 +278,7 @@ ngx_log_errno(u_char *buf, u_char *last, ngx_err_t err)
|
|||
|
||||
|
||||
ngx_log_t *
|
||||
ngx_log_init(u_char *prefix, u_char *error_log)
|
||||
ngx_log_init(u_char *prefix)
|
||||
{
|
||||
u_char *p, *name;
|
||||
size_t nlen, plen;
|
||||
|
@ -323,11 +286,13 @@ ngx_log_init(u_char *prefix, u_char *error_log)
|
|||
ngx_log.file = &ngx_log_file;
|
||||
ngx_log.log_level = NGX_LOG_NOTICE;
|
||||
|
||||
if (error_log == NULL) {
|
||||
error_log = (u_char *) NGX_ERROR_LOG_PATH;
|
||||
}
|
||||
name = (u_char *) NGX_ERROR_LOG_PATH;
|
||||
|
||||
/*
|
||||
* we use ngx_strlen() here since BCC warns about
|
||||
* condition is always false and unreachable code
|
||||
*/
|
||||
|
||||
name = error_log;
|
||||
nlen = ngx_strlen(name);
|
||||
|
||||
if (nlen == 0) {
|
||||
|
@ -367,7 +332,7 @@ ngx_log_init(u_char *prefix, u_char *error_log)
|
|||
*p++ = '/';
|
||||
}
|
||||
|
||||
ngx_cpystrn(p, error_log, nlen + 1);
|
||||
ngx_cpystrn(p, (u_char *) NGX_ERROR_LOG_PATH, nlen + 1);
|
||||
|
||||
p = name;
|
||||
}
|
||||
|
@ -401,34 +366,15 @@ ngx_log_init(u_char *prefix, u_char *error_log)
|
|||
ngx_int_t
|
||||
ngx_log_open_default(ngx_cycle_t *cycle)
|
||||
{
|
||||
ngx_log_t *log;
|
||||
static ngx_str_t error_log = ngx_string(NGX_ERROR_LOG_PATH);
|
||||
|
||||
if (ngx_log_get_file_log(&cycle->new_log) != NULL) {
|
||||
return NGX_OK;
|
||||
}
|
||||
|
||||
if (cycle->new_log.log_level != 0) {
|
||||
/* there are some error logs, but no files */
|
||||
|
||||
log = ngx_pcalloc(cycle->pool, sizeof(ngx_log_t));
|
||||
if (log == NULL) {
|
||||
if (cycle->new_log.file == NULL) {
|
||||
cycle->new_log.file = ngx_conf_open_file(cycle, &error_log);
|
||||
if (cycle->new_log.file == NULL) {
|
||||
return NGX_ERROR;
|
||||
}
|
||||
|
||||
} else {
|
||||
/* no error logs at all */
|
||||
log = &cycle->new_log;
|
||||
}
|
||||
|
||||
log->log_level = NGX_LOG_ERR;
|
||||
|
||||
log->file = ngx_conf_open_file(cycle, &cycle->error_log);
|
||||
if (log->file == NULL) {
|
||||
return NGX_ERROR;
|
||||
}
|
||||
|
||||
if (log != &cycle->new_log) {
|
||||
ngx_log_insert(&cycle->new_log, log);
|
||||
cycle->new_log.log_level = NGX_LOG_ERR;
|
||||
}
|
||||
|
||||
return NGX_OK;
|
||||
|
@ -444,8 +390,7 @@ ngx_log_redirect_stderr(ngx_cycle_t *cycle)
|
|||
return NGX_OK;
|
||||
}
|
||||
|
||||
/* file log always exists when we are called */
|
||||
fd = ngx_log_get_file_log(cycle->log)->file->fd;
|
||||
fd = cycle->log->file->fd;
|
||||
|
||||
if (fd != ngx_stderr) {
|
||||
if (ngx_set_stderr(fd) == NGX_FILE_ERROR) {
|
||||
|
@ -460,21 +405,6 @@ ngx_log_redirect_stderr(ngx_cycle_t *cycle)
|
|||
}
|
||||
|
||||
|
||||
ngx_log_t *
|
||||
ngx_log_get_file_log(ngx_log_t *head)
|
||||
{
|
||||
ngx_log_t *log;
|
||||
|
||||
for (log = head; log; log = log->next) {
|
||||
if (log->file != NULL) {
|
||||
return log;
|
||||
}
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
static char *
|
||||
ngx_log_set_levels(ngx_conf_t *cf, ngx_log_t *log)
|
||||
{
|
||||
|
@ -552,9 +482,8 @@ ngx_error_log(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
|
|||
char *
|
||||
ngx_log_set_log(ngx_conf_t *cf, ngx_log_t **head)
|
||||
{
|
||||
ngx_log_t *new_log;
|
||||
ngx_str_t *value, name;
|
||||
ngx_syslog_peer_t *peer;
|
||||
ngx_log_t *new_log;
|
||||
ngx_str_t *value, name;
|
||||
|
||||
if (*head != NULL && (*head)->log_level == 0) {
|
||||
new_log = *head;
|
||||
|
@ -577,88 +506,13 @@ ngx_log_set_log(ngx_conf_t *cf, ngx_log_t **head)
|
|||
ngx_str_null(&name);
|
||||
cf->cycle->log_use_stderr = 1;
|
||||
|
||||
new_log->file = ngx_conf_open_file(cf->cycle, &name);
|
||||
if (new_log->file == NULL) {
|
||||
return NGX_CONF_ERROR;
|
||||
}
|
||||
|
||||
} else if (ngx_strncmp(value[1].data, "memory:", 7) == 0) {
|
||||
|
||||
#if (NGX_DEBUG)
|
||||
size_t size, needed;
|
||||
ngx_pool_cleanup_t *cln;
|
||||
ngx_log_memory_buf_t *buf;
|
||||
|
||||
value[1].len -= 7;
|
||||
value[1].data += 7;
|
||||
|
||||
needed = sizeof("MEMLOG :" NGX_LINEFEED)
|
||||
+ cf->conf_file->file.name.len
|
||||
+ NGX_SIZE_T_LEN
|
||||
+ NGX_INT_T_LEN
|
||||
+ NGX_MAX_ERROR_STR;
|
||||
|
||||
size = ngx_parse_size(&value[1]);
|
||||
|
||||
if (size == (size_t) NGX_ERROR || size < needed) {
|
||||
ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
|
||||
"invalid buffer size \"%V\"", &value[1]);
|
||||
return NGX_CONF_ERROR;
|
||||
}
|
||||
|
||||
buf = ngx_pcalloc(cf->pool, sizeof(ngx_log_memory_buf_t));
|
||||
if (buf == NULL) {
|
||||
return NGX_CONF_ERROR;
|
||||
}
|
||||
|
||||
buf->start = ngx_pnalloc(cf->pool, size);
|
||||
if (buf->start == NULL) {
|
||||
return NGX_CONF_ERROR;
|
||||
}
|
||||
|
||||
buf->end = buf->start + size;
|
||||
|
||||
buf->pos = ngx_slprintf(buf->start, buf->end, "MEMLOG %uz %V:%ui%N",
|
||||
size, &cf->conf_file->file.name,
|
||||
cf->conf_file->line);
|
||||
|
||||
ngx_memset(buf->pos, ' ', buf->end - buf->pos);
|
||||
|
||||
cln = ngx_pool_cleanup_add(cf->pool, 0);
|
||||
if (cln == NULL) {
|
||||
return NGX_CONF_ERROR;
|
||||
}
|
||||
|
||||
cln->data = new_log;
|
||||
cln->handler = ngx_log_memory_cleanup;
|
||||
|
||||
new_log->writer = ngx_log_memory_writer;
|
||||
new_log->wdata = buf;
|
||||
|
||||
#else
|
||||
ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
|
||||
"nginx was built without debug support");
|
||||
return NGX_CONF_ERROR;
|
||||
#endif
|
||||
|
||||
} else if (ngx_strncmp(value[1].data, "syslog:", 7) == 0) {
|
||||
peer = ngx_pcalloc(cf->pool, sizeof(ngx_syslog_peer_t));
|
||||
if (peer == NULL) {
|
||||
return NGX_CONF_ERROR;
|
||||
}
|
||||
|
||||
if (ngx_syslog_process_conf(cf, peer) != NGX_CONF_OK) {
|
||||
return NGX_CONF_ERROR;
|
||||
}
|
||||
|
||||
new_log->writer = ngx_syslog_writer;
|
||||
new_log->wdata = peer;
|
||||
|
||||
} else {
|
||||
new_log->file = ngx_conf_open_file(cf->cycle, &value[1]);
|
||||
if (new_log->file == NULL) {
|
||||
return NGX_CONF_ERROR;
|
||||
}
|
||||
name = value[1];
|
||||
}
|
||||
|
||||
new_log->file = ngx_conf_open_file(cf->cycle, &name);
|
||||
if (new_log->file == NULL) {
|
||||
return NGX_CONF_ERROR;
|
||||
}
|
||||
|
||||
if (ngx_log_set_levels(cf, new_log) != NGX_CONF_OK) {
|
||||
|
@ -705,48 +559,3 @@ ngx_log_insert(ngx_log_t *log, ngx_log_t *new_log)
|
|||
|
||||
log->next = new_log;
|
||||
}
|
||||
|
||||
|
||||
#if (NGX_DEBUG)
|
||||
|
||||
static void
|
||||
ngx_log_memory_writer(ngx_log_t *log, ngx_uint_t level, u_char *buf,
|
||||
size_t len)
|
||||
{
|
||||
u_char *p;
|
||||
size_t avail, written;
|
||||
ngx_log_memory_buf_t *mem;
|
||||
|
||||
mem = log->wdata;
|
||||
|
||||
if (mem == NULL) {
|
||||
return;
|
||||
}
|
||||
|
||||
written = ngx_atomic_fetch_add(&mem->written, len);
|
||||
|
||||
p = mem->pos + written % (mem->end - mem->pos);
|
||||
|
||||
avail = mem->end - p;
|
||||
|
||||
if (avail >= len) {
|
||||
ngx_memcpy(p, buf, len);
|
||||
|
||||
} else {
|
||||
ngx_memcpy(p, buf, avail);
|
||||
ngx_memcpy(mem->pos, buf + avail, len - avail);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
ngx_log_memory_cleanup(void *data)
|
||||
{
|
||||
ngx_log_t *log = data;
|
||||
|
||||
ngx_log_debug0(NGX_LOG_DEBUG_CORE, log, 0, "destroy memory log buffer");
|
||||
|
||||
log->wdata = NULL;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue