nginxtra 1.2.1.3 → 1.2.2.3
Sign up to get free protection for your applications and to get access to all the features.
- data/VERSION +1 -1
- data/bin/nginxtra +1 -1
- data/src/nginx/CHANGES +60 -0
- data/src/nginx/CHANGES.ru +57 -0
- data/src/nginx/auto/{endianess → endianness} +5 -5
- data/src/nginx/auto/lib/google-perftools/conf +16 -0
- data/src/nginx/auto/modules +10 -0
- data/src/nginx/auto/options +3 -0
- data/src/nginx/auto/os/conf +2 -0
- data/src/nginx/auto/sources +5 -0
- data/src/nginx/auto/unix +1 -1
- data/src/nginx/src/core/nginx.h +2 -2
- data/src/nginx/src/core/ngx_hash.c +13 -11
- data/src/nginx/src/core/ngx_inet.c +32 -31
- data/src/nginx/src/core/ngx_regex.c +3 -3
- data/src/nginx/src/core/ngx_regex.h +2 -2
- data/src/nginx/src/core/ngx_resolver.c +22 -16
- data/src/nginx/src/event/ngx_event_openssl.c +18 -1
- data/src/nginx/src/http/modules/ngx_http_geo_module.c +1 -1
- data/src/nginx/src/http/modules/ngx_http_geoip_module.c +15 -4
- data/src/nginx/src/http/modules/ngx_http_log_module.c +3 -6
- data/src/nginx/src/http/modules/ngx_http_mp4_module.c +18 -1
- data/src/nginx/src/http/modules/ngx_http_rewrite_module.c +6 -0
- data/src/nginx/src/http/modules/ngx_http_split_clients_module.c +7 -0
- data/src/nginx/src/http/modules/ngx_http_upstream_ip_hash_module.c +44 -17
- data/src/nginx/src/http/modules/ngx_http_upstream_keepalive_module.c +4 -29
- data/src/nginx/src/http/modules/ngx_http_upstream_least_conn_module.c +402 -0
- data/src/nginx/src/http/modules/ngx_http_xslt_filter_module.c +2 -2
- data/src/nginx/src/http/modules/perl/nginx.pm +1 -1
- data/src/nginx/src/http/modules/perl/nginx.xs +1 -1
- data/src/nginx/src/http/ngx_http_core_module.c +1 -1
- data/src/nginx/src/http/ngx_http_header_filter_module.c +2 -2
- data/src/nginx/src/http/ngx_http_request.c +1 -1
- data/src/nginx/src/http/ngx_http_request.h +8 -1
- data/src/nginx/src/http/ngx_http_upstream.c +15 -1
- data/src/nginx/src/http/ngx_http_upstream_round_robin.c +11 -1
- data/src/nginx/src/http/ngx_http_upstream_round_robin.h +5 -1
- data/src/nginx/src/http/ngx_http_variables.c +49 -3
- data/src/nginx/src/os/unix/ngx_errno.c +1 -1
- data/src/nginx/src/os/unix/ngx_errno.h +1 -1
- data/src/nginx/src/os/unix/ngx_freebsd_init.c +2 -2
- data/src/nginx/src/os/unix/ngx_posix_config.h +1 -0
- data/src/nginx/src/os/unix/ngx_process_cycle.c +4 -0
- metadata +5 -4
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.2.
|
1
|
+
1.2.2.3
|
data/bin/nginxtra
CHANGED
data/src/nginx/CHANGES
CHANGED
@@ -1,4 +1,64 @@
|
|
1
1
|
|
2
|
+
Changes with nginx 1.2.2 03 Jul 2012
|
3
|
+
|
4
|
+
*) Change: the "single" parameter of the "keepalive" directive is now
|
5
|
+
ignored.
|
6
|
+
|
7
|
+
*) Change: SSL compression is now disabled when using all versions of
|
8
|
+
OpenSSL, including ones prior to 1.0.0.
|
9
|
+
|
10
|
+
*) Feature: the "proxy_pass", "fastcgi_pass", "scgi_pass", "uwsgi_pass"
|
11
|
+
directives, and the "server" directive inside the "upstream" block,
|
12
|
+
now support IPv6 addresses.
|
13
|
+
|
14
|
+
*) Feature: the "resolver" directive now support IPv6 addresses and an
|
15
|
+
optional port specification.
|
16
|
+
|
17
|
+
*) Feature: the "least_conn" directive inside the "upstream" block.
|
18
|
+
|
19
|
+
*) Feature: it is now possible to specify a weight for servers while
|
20
|
+
using the "ip_hash" directive.
|
21
|
+
|
22
|
+
*) Feature: it is now possible to use the "ip_hash" directive to balance
|
23
|
+
IPv6 clients.
|
24
|
+
|
25
|
+
*) Feature: the $status variable can now be used not only in the
|
26
|
+
"log_format" directive.
|
27
|
+
|
28
|
+
*) Bugfix: nginx could not be built with ngx_cpp_test_module; the bug
|
29
|
+
had appeared in 1.1.12.
|
30
|
+
|
31
|
+
*) Bugfix: access to variables from SSI and embedded perl module might
|
32
|
+
not work after reconfiguration.
|
33
|
+
Thanks to Yichun Zhang.
|
34
|
+
|
35
|
+
*) Bugfix: in the ngx_http_xslt_filter_module.
|
36
|
+
Thanks to Kuramoto Eiji.
|
37
|
+
|
38
|
+
*) Bugfix: memory leak if $geoip_org variable was used.
|
39
|
+
Thanks to Denis F. Latypoff.
|
40
|
+
|
41
|
+
*) Bugfix: in the "proxy_cookie_domain" and "proxy_cookie_path"
|
42
|
+
directives.
|
43
|
+
|
44
|
+
*) Bugfix: a segmentation fault might occur in a worker process on
|
45
|
+
shutdown if the "resolver" directive was used.
|
46
|
+
|
47
|
+
*) Bugfix: a segmentation fault might occur in a worker process if the
|
48
|
+
ngx_http_mp4_module was used.
|
49
|
+
|
50
|
+
*) Bugfix: in the ngx_http_mp4_module.
|
51
|
+
|
52
|
+
*) Bugfix: a segmentation fault might occur in a worker process if
|
53
|
+
conflicting wildcard server names were used.
|
54
|
+
|
55
|
+
*) Bugfix: nginx might be terminated abnormally on a SIGBUS signal on
|
56
|
+
ARM platform.
|
57
|
+
|
58
|
+
*) Bugfix: an alert "sendmsg() failed (9: Bad file number)" on HP-UX
|
59
|
+
while reconfiguration.
|
60
|
+
|
61
|
+
|
2
62
|
Changes with nginx 1.2.1 05 Jun 2012
|
3
63
|
|
4
64
|
*) Security: now nginx/Windows ignores trailing dot in URI path
|
data/src/nginx/CHANGES.ru
CHANGED
@@ -1,4 +1,61 @@
|
|
1
1
|
|
2
|
+
Изменения в nginx 1.2.2 03.07.2012
|
3
|
+
|
4
|
+
*) Изменение: параметр single директивы keepalive теперь игнорируется.
|
5
|
+
|
6
|
+
*) Изменение: сжатие SSL теперь отключено в том числе при использовании
|
7
|
+
OpenSSL cтарее 1.0.0.
|
8
|
+
|
9
|
+
*) Добавление: директивы proxy_pass, fastcgi_pass, scgi_pass, uwsgi_pass
|
10
|
+
и директива server в блоке upstream теперь поддерживают IPv6-адреса.
|
11
|
+
|
12
|
+
*) Добавление: в директиве resolver теперь можно указывать порт и
|
13
|
+
задавать IPv6-адреса DNS-серверов.
|
14
|
+
|
15
|
+
*) Добавление: директива least_conn в блоке upstream.
|
16
|
+
|
17
|
+
*) Добавление: при использовании директивы ip_hash теперь можно задавать
|
18
|
+
веса серверов.
|
19
|
+
|
20
|
+
*) Добавление: директиву "ip_hash" теперь можно использовать для
|
21
|
+
балансировки IPv6 клиентов.
|
22
|
+
|
23
|
+
*) Добавление: переменную $status теперь можно использовать не только в
|
24
|
+
директиве log_format.
|
25
|
+
|
26
|
+
*) Исправление: nginx не собирался с модулем ngx_cpp_test_module; ошибка
|
27
|
+
появилась в 1.1.12.
|
28
|
+
|
29
|
+
*) Исправление: доступ к переменным из SSI и встроенного перла мог не
|
30
|
+
работать после переконфигурации.
|
31
|
+
Спасибо Yichun Zhang.
|
32
|
+
|
33
|
+
*) Исправление: в модуле ngx_http_xslt_filter_module.
|
34
|
+
Спасибо Kuramoto Eiji.
|
35
|
+
|
36
|
+
*) Исправление: утечки памяти при использовании переменной $geoip_org.
|
37
|
+
Спасибо Денису Латыпову.
|
38
|
+
|
39
|
+
*) Исправление: в директивах proxy_cookie_domain и proxy_cookie_path.
|
40
|
+
|
41
|
+
*) Исправление: при завершении рабочего процесса мог произойти
|
42
|
+
segmentation fault, если использовалась директива resolver.
|
43
|
+
|
44
|
+
*) Исправление: в рабочем процессе мог произойти segmentation fault,
|
45
|
+
если использовался модуль ngx_http_mp4_module.
|
46
|
+
|
47
|
+
*) Исправление: в модуле ngx_http_mp4_module.
|
48
|
+
|
49
|
+
*) Исправление: в рабочем процессе мог произойти segmentation fault,
|
50
|
+
если использовались конфликтующие имена серверов с масками.
|
51
|
+
|
52
|
+
*) Исправление: на платформе ARM nginx мог аварийно завершаться по
|
53
|
+
сигналу SIGBUS.
|
54
|
+
|
55
|
+
*) Исправление: во время переконфигурации на HP-UX в лог записывался
|
56
|
+
alert "sendmsg() failed (9: Bad file number)".
|
57
|
+
|
58
|
+
|
2
59
|
Изменения в nginx 1.2.1 05.06.2012
|
3
60
|
|
4
61
|
*) Безопасность: теперь nginx/Windows игнорирует точку в конце
|
@@ -3,9 +3,9 @@
|
|
3
3
|
# Copyright (C) Nginx, Inc.
|
4
4
|
|
5
5
|
|
6
|
-
echo $ngx_n "checking for system
|
6
|
+
echo $ngx_n "checking for system byte ordering ...$ngx_c"
|
7
7
|
echo >> $NGX_ERR
|
8
|
-
echo "checking for system
|
8
|
+
echo "checking for system byte ordering" >> $NGX_ERR
|
9
9
|
|
10
10
|
|
11
11
|
cat << END > $NGX_AUTOTEST.c
|
@@ -28,10 +28,10 @@ eval "$ngx_test >> $NGX_AUTOCONF_ERR 2>&1"
|
|
28
28
|
|
29
29
|
if [ -x $NGX_AUTOTEST ]; then
|
30
30
|
if $NGX_AUTOTEST >/dev/null 2>&1; then
|
31
|
-
echo " little
|
31
|
+
echo " little endian"
|
32
32
|
have=NGX_HAVE_LITTLE_ENDIAN . auto/have
|
33
33
|
else
|
34
|
-
echo " big
|
34
|
+
echo " big endian"
|
35
35
|
fi
|
36
36
|
|
37
37
|
rm $NGX_AUTOTEST*
|
@@ -40,6 +40,6 @@ else
|
|
40
40
|
rm $NGX_AUTOTEST*
|
41
41
|
|
42
42
|
echo
|
43
|
-
echo "$0: error:
|
43
|
+
echo "$0: error: cannot detect system byte ordering"
|
44
44
|
exit 1
|
45
45
|
fi
|
@@ -29,6 +29,22 @@ if [ $ngx_found = no ]; then
|
|
29
29
|
fi
|
30
30
|
|
31
31
|
|
32
|
+
if [ $ngx_found = no ]; then
|
33
|
+
|
34
|
+
# MacPorts
|
35
|
+
|
36
|
+
ngx_feature="Google perftools in /opt/local/"
|
37
|
+
|
38
|
+
if [ $NGX_RPATH = YES ]; then
|
39
|
+
ngx_feature_libs="-R/opt/local/lib -L/opt/local/lib -lprofiler"
|
40
|
+
else
|
41
|
+
ngx_feature_libs="-L/opt/local/lib -lprofiler"
|
42
|
+
fi
|
43
|
+
|
44
|
+
. auto/feature
|
45
|
+
fi
|
46
|
+
|
47
|
+
|
32
48
|
if [ $ngx_found = yes ]; then
|
33
49
|
CORE_LIBS="$CORE_LIBS $ngx_feature_libs"
|
34
50
|
|
data/src/nginx/auto/modules
CHANGED
@@ -223,6 +223,7 @@ fi
|
|
223
223
|
|
224
224
|
if [ $HTTP_REALIP = YES ]; then
|
225
225
|
have=NGX_HTTP_REALIP . auto/have
|
226
|
+
have=NGX_HTTP_X_FORWARDED_FOR . auto/have
|
226
227
|
HTTP_MODULES="$HTTP_MODULES $HTTP_REALIP_MODULE"
|
227
228
|
HTTP_SRCS="$HTTP_SRCS $HTTP_REALIP_SRCS"
|
228
229
|
fi
|
@@ -234,11 +235,13 @@ fi
|
|
234
235
|
|
235
236
|
if [ $HTTP_GEO = YES ]; then
|
236
237
|
have=NGX_HTTP_GEO . auto/have
|
238
|
+
have=NGX_HTTP_X_FORWARDED_FOR . auto/have
|
237
239
|
HTTP_MODULES="$HTTP_MODULES $HTTP_GEO_MODULE"
|
238
240
|
HTTP_SRCS="$HTTP_SRCS $HTTP_GEO_SRCS"
|
239
241
|
fi
|
240
242
|
|
241
243
|
if [ $HTTP_GEOIP = YES ]; then
|
244
|
+
have=NGX_HTTP_X_FORWARDED_FOR . auto/have
|
242
245
|
HTTP_MODULES="$HTTP_MODULES $HTTP_GEOIP_MODULE"
|
243
246
|
HTTP_SRCS="$HTTP_SRCS $HTTP_GEOIP_SRCS"
|
244
247
|
fi
|
@@ -274,6 +277,7 @@ fi
|
|
274
277
|
|
275
278
|
if [ $HTTP_PROXY = YES ]; then
|
276
279
|
have=NGX_HTTP_PROXY . auto/have
|
280
|
+
have=NGX_HTTP_X_FORWARDED_FOR . auto/have
|
277
281
|
#USE_MD5=YES
|
278
282
|
HTTP_MODULES="$HTTP_MODULES $HTTP_PROXY_MODULE"
|
279
283
|
HTTP_DEPS="$HTTP_DEPS $HTTP_PROXY_DEPS"
|
@@ -345,6 +349,11 @@ if [ $HTTP_UPSTREAM_IP_HASH = YES ]; then
|
|
345
349
|
HTTP_SRCS="$HTTP_SRCS $HTTP_UPSTREAM_IP_HASH_SRCS"
|
346
350
|
fi
|
347
351
|
|
352
|
+
if [ $HTTP_UPSTREAM_LEAST_CONN = YES ]; then
|
353
|
+
HTTP_MODULES="$HTTP_MODULES $HTTP_UPSTREAM_LEAST_CONN_MODULE"
|
354
|
+
HTTP_SRCS="$HTTP_SRCS $HTTP_UPSTREAM_LEAST_CONN_SRCS"
|
355
|
+
fi
|
356
|
+
|
348
357
|
if [ $HTTP_UPSTREAM_KEEPALIVE = YES ]; then
|
349
358
|
HTTP_MODULES="$HTTP_MODULES $HTTP_UPSTREAM_KEEPALIVE_MODULE"
|
350
359
|
HTTP_SRCS="$HTTP_SRCS $HTTP_UPSTREAM_KEEPALIVE_SRCS"
|
@@ -458,6 +467,7 @@ fi
|
|
458
467
|
|
459
468
|
if [ $NGX_CPP_TEST = YES ]; then
|
460
469
|
NGX_MISC_SRCS="$NGX_MISC_SRCS $NGX_CPP_TEST_SRCS"
|
470
|
+
CORE_LIBS="$CORE_LIBS -lstdc++"
|
461
471
|
fi
|
462
472
|
|
463
473
|
|
data/src/nginx/auto/options
CHANGED
@@ -96,6 +96,7 @@ HTTP_FLV=NO
|
|
96
96
|
HTTP_MP4=NO
|
97
97
|
HTTP_GZIP_STATIC=NO
|
98
98
|
HTTP_UPSTREAM_IP_HASH=YES
|
99
|
+
HTTP_UPSTREAM_LEAST_CONN=YES
|
99
100
|
HTTP_UPSTREAM_KEEPALIVE=YES
|
100
101
|
|
101
102
|
# STUB
|
@@ -243,6 +244,8 @@ use the \"--without-http_limit_conn_module\" option instead"
|
|
243
244
|
--without-http_empty_gif_module) HTTP_EMPTY_GIF=NO ;;
|
244
245
|
--without-http_browser_module) HTTP_BROWSER=NO ;;
|
245
246
|
--without-http_upstream_ip_hash_module) HTTP_UPSTREAM_IP_HASH=NO ;;
|
247
|
+
--without-http_upstream_least_conn_module)
|
248
|
+
HTTP_UPSTREAM_LEAST_CONN=NO ;;
|
246
249
|
--without-http_upstream_keepalive_module) HTTP_UPSTREAM_KEEPALIVE=NO ;;
|
247
250
|
|
248
251
|
--with-http_perl_module) HTTP_PERL=YES ;;
|
data/src/nginx/auto/os/conf
CHANGED
@@ -48,6 +48,7 @@ case "$NGX_PLATFORM" in
|
|
48
48
|
CORE_DEPS="$UNIX_DEPS $POSIX_DEPS"
|
49
49
|
CORE_SRCS="$UNIX_SRCS"
|
50
50
|
CC_AUX_FLAGS="$CC_AUX_FLAGS -D_XOPEN_SOURCE -D_XOPEN_SOURCE_EXTENDED=1"
|
51
|
+
CC_AUX_FLAGS="$CC_AUX_FLAGS -D_HPUX_ALT_XOPEN_SOCKET_API"
|
51
52
|
;;
|
52
53
|
|
53
54
|
OSF1:*)
|
@@ -93,6 +94,7 @@ case "$NGX_MACHINE" in
|
|
93
94
|
;;
|
94
95
|
|
95
96
|
*)
|
97
|
+
have=NGX_ALIGNMENT value=16 . auto/define
|
96
98
|
NGX_MACH_CACHE_LINE=32
|
97
99
|
;;
|
98
100
|
|
data/src/nginx/auto/sources
CHANGED
@@ -479,6 +479,11 @@ HTTP_UPSTREAM_IP_HASH_MODULE=ngx_http_upstream_ip_hash_module
|
|
479
479
|
HTTP_UPSTREAM_IP_HASH_SRCS=src/http/modules/ngx_http_upstream_ip_hash_module.c
|
480
480
|
|
481
481
|
|
482
|
+
HTTP_UPSTREAM_LEAST_CONN_MODULE=ngx_http_upstream_least_conn_module
|
483
|
+
HTTP_UPSTREAM_LEAST_CONN_SRCS=" \
|
484
|
+
src/http/modules/ngx_http_upstream_least_conn_module.c"
|
485
|
+
|
486
|
+
|
482
487
|
HTTP_UPSTREAM_KEEPALIVE_MODULE=ngx_http_upstream_keepalive_module
|
483
488
|
HTTP_UPSTREAM_KEEPALIVE_SRCS=" \
|
484
489
|
src/http/modules/ngx_http_upstream_keepalive_module.c"
|
data/src/nginx/auto/unix
CHANGED
@@ -464,7 +464,7 @@ ngx_type="rlim_t"; ngx_types="int"; . auto/types/typedef
|
|
464
464
|
|
465
465
|
. auto/types/uintptr_t
|
466
466
|
|
467
|
-
. auto/
|
467
|
+
. auto/endianness
|
468
468
|
|
469
469
|
ngx_type="size_t"; . auto/types/sizeof
|
470
470
|
ngx_param=NGX_MAX_SIZE_T_VALUE; ngx_value=$ngx_max_value; . auto/types/value
|
data/src/nginx/src/core/nginx.h
CHANGED
@@ -924,17 +924,6 @@ wildcard:
|
|
924
924
|
}
|
925
925
|
|
926
926
|
|
927
|
-
hk = ngx_array_push(hwc);
|
928
|
-
if (hk == NULL) {
|
929
|
-
return NGX_ERROR;
|
930
|
-
}
|
931
|
-
|
932
|
-
hk->key.len = last - 1;
|
933
|
-
hk->key.data = p;
|
934
|
-
hk->key_hash = 0;
|
935
|
-
hk->value = value;
|
936
|
-
|
937
|
-
|
938
927
|
/* check conflicts in wildcard hash */
|
939
928
|
|
940
929
|
name = keys->elts;
|
@@ -972,5 +961,18 @@ wildcard:
|
|
972
961
|
|
973
962
|
ngx_memcpy(name->data, key->data + skip, name->len);
|
974
963
|
|
964
|
+
|
965
|
+
/* add to wildcard hash */
|
966
|
+
|
967
|
+
hk = ngx_array_push(hwc);
|
968
|
+
if (hk == NULL) {
|
969
|
+
return NGX_ERROR;
|
970
|
+
}
|
971
|
+
|
972
|
+
hk->key.len = last - 1;
|
973
|
+
hk->key.data = p;
|
974
|
+
hk->key_hash = 0;
|
975
|
+
hk->value = value;
|
976
|
+
|
975
977
|
return NGX_OK;
|
976
978
|
}
|
@@ -522,11 +522,6 @@ ngx_parse_url(ngx_pool_t *pool, ngx_url_t *u)
|
|
522
522
|
return ngx_parse_unix_domain_url(pool, u);
|
523
523
|
}
|
524
524
|
|
525
|
-
if ((p[0] == ':' || p[0] == '/') && !u->listen) {
|
526
|
-
u->err = "invalid host";
|
527
|
-
return NGX_ERROR;
|
528
|
-
}
|
529
|
-
|
530
525
|
if (p[0] == '[') {
|
531
526
|
return ngx_parse_inet6_url(pool, u);
|
532
527
|
}
|
@@ -639,10 +634,7 @@ ngx_parse_inet_url(ngx_pool_t *pool, ngx_url_t *u)
|
|
639
634
|
args = ngx_strlchr(host, last, '?');
|
640
635
|
|
641
636
|
if (args) {
|
642
|
-
if (uri == NULL) {
|
643
|
-
uri = args;
|
644
|
-
|
645
|
-
} else if (args < uri) {
|
637
|
+
if (uri == NULL || args < uri) {
|
646
638
|
uri = args;
|
647
639
|
}
|
648
640
|
}
|
@@ -668,11 +660,6 @@ ngx_parse_inet_url(ngx_pool_t *pool, ngx_url_t *u)
|
|
668
660
|
|
669
661
|
len = last - port;
|
670
662
|
|
671
|
-
if (len == 0) {
|
672
|
-
u->err = "invalid port";
|
673
|
-
return NGX_ERROR;
|
674
|
-
}
|
675
|
-
|
676
663
|
n = ngx_atoi(port, len);
|
677
664
|
|
678
665
|
if (n < 1 || n > 65535) {
|
@@ -779,11 +766,7 @@ ngx_parse_inet_url(ngx_pool_t *pool, ngx_url_t *u)
|
|
779
766
|
return NGX_OK;
|
780
767
|
}
|
781
768
|
|
782
|
-
|
783
|
-
return NGX_ERROR;
|
784
|
-
}
|
785
|
-
|
786
|
-
return NGX_OK;
|
769
|
+
return ngx_inet_resolve_host(pool, u);
|
787
770
|
}
|
788
771
|
|
789
772
|
|
@@ -825,6 +808,8 @@ ngx_parse_inet6_url(ngx_pool_t *pool, ngx_url_t *u)
|
|
825
808
|
|
826
809
|
u->uri.len = last - uri;
|
827
810
|
u->uri.data = uri;
|
811
|
+
|
812
|
+
last = uri;
|
828
813
|
}
|
829
814
|
|
830
815
|
if (*port == ':') {
|
@@ -832,11 +817,6 @@ ngx_parse_inet6_url(ngx_pool_t *pool, ngx_url_t *u)
|
|
832
817
|
|
833
818
|
len = last - port;
|
834
819
|
|
835
|
-
if (len == 0) {
|
836
|
-
u->err = "invalid port";
|
837
|
-
return NGX_ERROR;
|
838
|
-
}
|
839
|
-
|
840
820
|
n = ngx_atoi(port, len);
|
841
821
|
|
842
822
|
if (n < 1 || n > 65535) {
|
@@ -862,8 +842,8 @@ ngx_parse_inet6_url(ngx_pool_t *pool, ngx_url_t *u)
|
|
862
842
|
return NGX_ERROR;
|
863
843
|
}
|
864
844
|
|
865
|
-
u->host.len = len;
|
866
|
-
u->host.data = host;
|
845
|
+
u->host.len = len + 2;
|
846
|
+
u->host.data = host - 1;
|
867
847
|
|
868
848
|
if (ngx_inet6_addr(host, len, sin6->sin6_addr.s6_addr) != NGX_OK) {
|
869
849
|
u->err = "invalid IPv6 address";
|
@@ -874,17 +854,38 @@ ngx_parse_inet6_url(ngx_pool_t *pool, ngx_url_t *u)
|
|
874
854
|
u->wildcard = 1;
|
875
855
|
}
|
876
856
|
|
857
|
+
if (u->no_port) {
|
858
|
+
u->port = u->default_port;
|
859
|
+
sin6->sin6_port = htons(u->default_port);
|
860
|
+
}
|
861
|
+
|
877
862
|
u->family = AF_INET6;
|
863
|
+
u->naddrs = 1;
|
878
864
|
|
879
|
-
|
880
|
-
|
865
|
+
u->addrs = ngx_pcalloc(pool, sizeof(ngx_addr_t));
|
866
|
+
if (u->addrs == NULL) {
|
867
|
+
return NGX_ERROR;
|
881
868
|
}
|
882
869
|
|
883
|
-
|
884
|
-
|
885
|
-
|
870
|
+
sin6 = ngx_pcalloc(pool, sizeof(struct sockaddr_in6));
|
871
|
+
if (sin6 == NULL) {
|
872
|
+
return NGX_ERROR;
|
886
873
|
}
|
887
874
|
|
875
|
+
ngx_memcpy(sin6, u->sockaddr, sizeof(struct sockaddr_in6));
|
876
|
+
|
877
|
+
u->addrs[0].sockaddr = (struct sockaddr *) sin6;
|
878
|
+
u->addrs[0].socklen = sizeof(struct sockaddr_in6);
|
879
|
+
|
880
|
+
p = ngx_pnalloc(pool, u->host.len + sizeof(":65535") - 1);
|
881
|
+
if (p == NULL) {
|
882
|
+
return NGX_ERROR;
|
883
|
+
}
|
884
|
+
|
885
|
+
u->addrs[0].name.len = ngx_sprintf(p, "%V:%d",
|
886
|
+
&u->host, u->port) - p;
|
887
|
+
u->addrs[0].name.data = p;
|
888
|
+
|
888
889
|
return NGX_OK;
|
889
890
|
|
890
891
|
#else
|
@@ -152,7 +152,7 @@ ngx_regex_compile(ngx_regex_compile_t *rc)
|
|
152
152
|
return NGX_ERROR;
|
153
153
|
}
|
154
154
|
|
155
|
-
rc->regex->
|
155
|
+
rc->regex->code = re;
|
156
156
|
|
157
157
|
/* do not study at runtime */
|
158
158
|
|
@@ -367,7 +367,7 @@ ngx_regex_module_init(ngx_cycle_t *cycle)
|
|
367
367
|
i = 0;
|
368
368
|
}
|
369
369
|
|
370
|
-
elts[i].regex->extra = pcre_study(elts[i].regex->
|
370
|
+
elts[i].regex->extra = pcre_study(elts[i].regex->code, opt, &errstr);
|
371
371
|
|
372
372
|
if (errstr != NULL) {
|
373
373
|
ngx_log_error(NGX_LOG_ALERT, cycle->log, 0,
|
@@ -380,7 +380,7 @@ ngx_regex_module_init(ngx_cycle_t *cycle)
|
|
380
380
|
int jit, n;
|
381
381
|
|
382
382
|
jit = 0;
|
383
|
-
n = pcre_fullinfo(elts[i].regex->
|
383
|
+
n = pcre_fullinfo(elts[i].regex->code, elts[i].regex->extra,
|
384
384
|
PCRE_INFO_JIT, &jit);
|
385
385
|
|
386
386
|
if (n != 0 || jit != 1) {
|
@@ -21,7 +21,7 @@
|
|
21
21
|
|
22
22
|
|
23
23
|
typedef struct {
|
24
|
-
pcre *
|
24
|
+
pcre *code;
|
25
25
|
pcre_extra *extra;
|
26
26
|
} ngx_regex_t;
|
27
27
|
|
@@ -50,7 +50,7 @@ void ngx_regex_init(void);
|
|
50
50
|
ngx_int_t ngx_regex_compile(ngx_regex_compile_t *rc);
|
51
51
|
|
52
52
|
#define ngx_regex_exec(re, s, captures, size) \
|
53
|
-
pcre_exec(re->
|
53
|
+
pcre_exec(re->code, re->extra, (const char *) (s)->data, (s)->len, 0, 0, \
|
54
54
|
captures, size)
|
55
55
|
#define ngx_regex_exec_n "pcre_exec()"
|
56
56
|
|
@@ -96,7 +96,7 @@ ngx_resolver_create(ngx_conf_t *cf, ngx_str_t *names, ngx_uint_t n)
|
|
96
96
|
{
|
97
97
|
ngx_str_t s;
|
98
98
|
ngx_url_t u;
|
99
|
-
ngx_uint_t i;
|
99
|
+
ngx_uint_t i, j;
|
100
100
|
ngx_resolver_t *r;
|
101
101
|
ngx_pool_cleanup_t *cln;
|
102
102
|
ngx_udp_connection_t *uc;
|
@@ -171,24 +171,31 @@ ngx_resolver_create(ngx_conf_t *cf, ngx_str_t *names, ngx_uint_t n)
|
|
171
171
|
|
172
172
|
ngx_memzero(&u, sizeof(ngx_url_t));
|
173
173
|
|
174
|
-
u.
|
175
|
-
u.
|
174
|
+
u.url = names[i];
|
175
|
+
u.default_port = 53;
|
176
|
+
|
177
|
+
if (ngx_parse_url(cf->pool, &u) != NGX_OK) {
|
178
|
+
if (u.err) {
|
179
|
+
ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
|
180
|
+
"%s in resolver \"%V\"",
|
181
|
+
u.err, &u.url);
|
182
|
+
}
|
176
183
|
|
177
|
-
if (ngx_inet_resolve_host(cf->pool, &u) != NGX_OK) {
|
178
|
-
ngx_conf_log_error(NGX_LOG_EMERG, cf, 0, "%V: %s", &u.host, u.err);
|
179
184
|
return NULL;
|
180
185
|
}
|
181
186
|
|
182
|
-
uc =
|
187
|
+
uc = ngx_array_push_n(&r->udp_connections, u.naddrs);
|
183
188
|
if (uc == NULL) {
|
184
189
|
return NULL;
|
185
190
|
}
|
186
191
|
|
187
|
-
ngx_memzero(uc, sizeof(ngx_udp_connection_t));
|
192
|
+
ngx_memzero(uc, u.naddrs * sizeof(ngx_udp_connection_t));
|
188
193
|
|
189
|
-
|
190
|
-
|
191
|
-
|
194
|
+
for (j = 0; j < u.naddrs; j++) {
|
195
|
+
uc[j].sockaddr = u.addrs[j].sockaddr;
|
196
|
+
uc[j].socklen = u.addrs[j].socklen;
|
197
|
+
uc[j].server = u.addrs[j].name;
|
198
|
+
}
|
192
199
|
}
|
193
200
|
|
194
201
|
return r;
|
@@ -972,12 +979,11 @@ ngx_resolver_resend(ngx_resolver_t *r, ngx_rbtree_t *tree, ngx_queue_t *queue)
|
|
972
979
|
|
973
980
|
if (rn->waiting) {
|
974
981
|
|
975
|
-
|
982
|
+
(void) ngx_resolver_send_query(r, rn);
|
976
983
|
|
977
|
-
|
984
|
+
rn->expire = now + r->resend_timeout;
|
978
985
|
|
979
|
-
|
980
|
-
}
|
986
|
+
ngx_queue_insert_head(queue, q);
|
981
987
|
|
982
988
|
continue;
|
983
989
|
}
|
@@ -1035,7 +1041,7 @@ ngx_resolver_process_response(ngx_resolver_t *r, u_char *buf, size_t n)
|
|
1035
1041
|
nan = (query->nan_hi << 8) + query->nan_lo;
|
1036
1042
|
|
1037
1043
|
ngx_log_debug6(NGX_LOG_DEBUG_CORE, r->log, 0,
|
1038
|
-
"resolver DNS response %ui fl:%04Xui %ui/%ui/%
|
1044
|
+
"resolver DNS response %ui fl:%04Xui %ui/%ui/%ud/%ud",
|
1039
1045
|
ident, flags, nqs, nan,
|
1040
1046
|
(query->nns_hi << 8) + query->nns_lo,
|
1041
1047
|
(query->nar_hi << 8) + query->nar_lo);
|
@@ -2184,7 +2190,7 @@ ngx_udp_connect(ngx_udp_connection_t *uc)
|
|
2184
2190
|
ngx_socket_t s;
|
2185
2191
|
ngx_connection_t *c;
|
2186
2192
|
|
2187
|
-
s = ngx_socket(
|
2193
|
+
s = ngx_socket(uc->sockaddr->sa_family, SOCK_DGRAM, 0);
|
2188
2194
|
|
2189
2195
|
ngx_log_debug1(NGX_LOG_DEBUG_EVENT, &uc->log, 0, "UDP socket %d", s);
|
2190
2196
|
|
@@ -94,6 +94,24 @@ ngx_ssl_init(ngx_log_t *log)
|
|
94
94
|
|
95
95
|
OpenSSL_add_all_algorithms();
|
96
96
|
|
97
|
+
#ifndef SSL_OP_NO_COMPRESSION
|
98
|
+
{
|
99
|
+
/*
|
100
|
+
* Disable gzip compression in OpenSSL prior to 1.0.0 version,
|
101
|
+
* this saves about 522K per connection.
|
102
|
+
*/
|
103
|
+
int i, n;
|
104
|
+
STACK_OF(SSL_COMP) *ssl_comp_methods;
|
105
|
+
|
106
|
+
ssl_comp_methods = SSL_COMP_get_compression_methods();
|
107
|
+
n = sk_SSL_COMP_num(ssl_comp_methods);
|
108
|
+
|
109
|
+
for (i = 0; i < n; i++) {
|
110
|
+
(void) sk_SSL_COMP_delete(ssl_comp_methods, i);
|
111
|
+
}
|
112
|
+
}
|
113
|
+
#endif
|
114
|
+
|
97
115
|
ngx_ssl_connection_index = SSL_get_ex_new_index(0, NULL, NULL, NULL, NULL);
|
98
116
|
|
99
117
|
if (ngx_ssl_connection_index == -1) {
|
@@ -990,7 +1008,6 @@ ngx_ssl_send_chain(ngx_connection_t *c, ngx_chain_t *in, off_t limit)
|
|
990
1008
|
}
|
991
1009
|
|
992
1010
|
if (n == NGX_AGAIN) {
|
993
|
-
c->buffered |= NGX_SSL_BUFFERED;
|
994
1011
|
return in;
|
995
1012
|
}
|
996
1013
|
|