mirror of
https://github.com/nginx/nginx.git
synced 2024-12-28 09:51:04 -06:00
nginx-0.3.31-RELEASE import
*) Change: now nginx passes the malformed proxied backend responses. *) Feature: the "listen" directives support the address in the "*:port" form. *) Feature: the EVFILER_TIMER support in MacOSX 10.4. *) Workaround: for MacOSX 64-bit kernel kqueue millisecond timeout bug. Thanks to Andrei Nigmatulin. *) Bugfix: if there were several "listen" directives listening one various addresses inside one server, then server names like "*.domain.tld" worked for first address only; the bug had appeared in 0.3.18. *) Bugfix: if the HTTPS protocol was used in the "proxy_pass" directive and the request body was in temporarily file then the request was not transferred. *) Bugfix: perl 5.8.8 compatibility.
This commit is contained in:
parent
15465ff78e
commit
13c68741f2
51
auto/feature
51
auto/feature
@ -39,29 +39,46 @@ eval "$ngx_test >> $NGX_AUTOCONF_ERR 2>&1"
|
|||||||
|
|
||||||
if [ -x $NGX_AUTOTEST ]; then
|
if [ -x $NGX_AUTOTEST ]; then
|
||||||
|
|
||||||
if [ $ngx_feature_run = yes ]; then
|
case "$ngx_feature_run" in
|
||||||
|
|
||||||
if $NGX_AUTOTEST 2>&1 > /dev/null; then
|
yes)
|
||||||
echo " found"
|
if $NGX_AUTOTEST 2>&1 > /dev/null; then
|
||||||
ngx_found=yes
|
echo " found"
|
||||||
|
ngx_found=yes
|
||||||
|
|
||||||
if test -n "$ngx_feature_name"; then
|
if test -n "$ngx_feature_name"; then
|
||||||
have=$ngx_have_feature . auto/have
|
have=$ngx_have_feature . auto/have
|
||||||
fi
|
fi
|
||||||
|
|
||||||
else
|
else
|
||||||
echo " found but is not working"
|
echo " found but is not working"
|
||||||
fi
|
fi
|
||||||
|
;;
|
||||||
|
|
||||||
else
|
bug)
|
||||||
echo " found"
|
if $NGX_AUTOTEST 2>&1 > /dev/null; then
|
||||||
ngx_found=yes
|
echo " not found"
|
||||||
|
|
||||||
if test -n "$ngx_feature_name"; then
|
else
|
||||||
have=$ngx_have_feature . auto/have
|
echo " found"
|
||||||
fi
|
ngx_found=yes
|
||||||
|
|
||||||
fi
|
if test -n "$ngx_feature_name"; then
|
||||||
|
have=$ngx_have_feature . auto/have
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
|
||||||
|
*)
|
||||||
|
echo " found"
|
||||||
|
ngx_found=yes
|
||||||
|
|
||||||
|
if test -n "$ngx_feature_name"; then
|
||||||
|
have=$ngx_have_feature . auto/have
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
|
||||||
|
esac
|
||||||
|
|
||||||
else
|
else
|
||||||
echo " not found"
|
echo " not found"
|
||||||
|
@ -87,13 +87,88 @@ if test -z "$NGX_KQUEUE_CHECKED"; then
|
|||||||
ngx_feature_test="struct kevent kev;
|
ngx_feature_test="struct kevent kev;
|
||||||
kev.fflags = NOTE_LOWAT;"
|
kev.fflags = NOTE_LOWAT;"
|
||||||
. auto/feature
|
. auto/feature
|
||||||
|
|
||||||
|
|
||||||
|
ngx_feature="kqueue's EVFILT_TIMER"
|
||||||
|
ngx_feature_name="NGX_HAVE_TIMER_EVENT"
|
||||||
|
ngx_feature_run=yes
|
||||||
|
ngx_feature_incs="#include <sys/event.h>
|
||||||
|
#include <sys/time.h>"
|
||||||
|
ngx_feature_libs=
|
||||||
|
ngx_feature_test="int kq;
|
||||||
|
struct kevent kev;
|
||||||
|
struct timespec ts;
|
||||||
|
|
||||||
|
if ((kq = kqueue()) == -1) return 1;
|
||||||
|
|
||||||
|
kev.ident = 0;
|
||||||
|
kev.filter = EVFILT_TIMER;
|
||||||
|
kev.flags = EV_ADD|EV_ENABLE;
|
||||||
|
kev.fflags = 0;
|
||||||
|
kev.data = 1000;
|
||||||
|
kev.udata = 0;
|
||||||
|
|
||||||
|
ts.tv_sec = 0;
|
||||||
|
ts.tv_nsec = 0;
|
||||||
|
|
||||||
|
if (kevent(kq, &kev, 1, &kev, 1, &ts) == -1) return 1;
|
||||||
|
|
||||||
|
if (kev.flags & EV_ERROR) return 1;"
|
||||||
|
|
||||||
|
. auto/feature
|
||||||
|
|
||||||
|
|
||||||
|
if [ "$NGX_SYSTEM" = "Darwin" ]; then
|
||||||
|
|
||||||
|
ngx_feature="MacOSX 64-bit kqueue millisecond timeout bug"
|
||||||
|
ngx_feature_name=
|
||||||
|
ngx_feature_run=bug
|
||||||
|
ngx_feature_incs="#include <sys/event.h>
|
||||||
|
#include <sys/time.h>"
|
||||||
|
ngx_feature_libs=
|
||||||
|
ngx_feature_test="int kq;
|
||||||
|
struct kevent kev;
|
||||||
|
struct timespec ts;
|
||||||
|
struct timeval tv, tv0;
|
||||||
|
|
||||||
|
kq = kqueue();
|
||||||
|
|
||||||
|
ts.tv_sec = 0;
|
||||||
|
ts.tv_nsec = 999000000;
|
||||||
|
|
||||||
|
gettimeofday(&tv, 0);
|
||||||
|
kevent(kq, NULL, 0, &kev, 1, &ts);
|
||||||
|
gettimeofday(&tv0, 0);
|
||||||
|
timersub(&tv0, &tv, &tv);
|
||||||
|
|
||||||
|
if (tv.tv_sec * 1000000 + tv.tv_usec < 900000) return 1;"
|
||||||
|
|
||||||
|
. auto/feature
|
||||||
|
|
||||||
|
ngx_macosx_kevent_bug=$ngx_found
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ "$NGX_SYSTEM" = "NetBSD" ]; then
|
|
||||||
|
|
||||||
have=NGX_HAVE_TIMER_EVENT . auto/have
|
if [ ".$ngx_macosx_kevent_bug" = .yes ]; then
|
||||||
echo " + kqueue's EVFILT_TIMER found"
|
|
||||||
|
cat << END >> $NGX_AUTO_CONFIG_H
|
||||||
|
|
||||||
|
#define NGX_MACOSX_KEVENT_BUG_SHIFT << 32
|
||||||
|
|
||||||
|
END
|
||||||
|
|
||||||
|
else
|
||||||
|
cat << END >> $NGX_AUTO_CONFIG_H
|
||||||
|
|
||||||
|
#define NGX_MACOSX_KEVENT_BUG_SHIFT
|
||||||
|
|
||||||
|
END
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
if [ "$NGX_SYSTEM" = "NetBSD" ]; then
|
||||||
|
|
||||||
# NetBSD 2.0 incompatibly defines kevent.udata as "intptr_t"
|
# NetBSD 2.0 incompatibly defines kevent.udata as "intptr_t"
|
||||||
|
|
||||||
|
@ -9,6 +9,84 @@
|
|||||||
<title lang="en">nginx changelog</title>
|
<title lang="en">nginx changelog</title>
|
||||||
|
|
||||||
|
|
||||||
|
<changes ver="0.3.31" date="10.03.2006">
|
||||||
|
|
||||||
|
<change type="change">
|
||||||
|
<para lang="ru">
|
||||||
|
ÔÅÐÅÒØ nginx ÐÅÒÅÄÁ£Ô ÎÅ×ÅÒÎÙÅ ÏÔ×ÅÔÙ ÐÒÏËÓÉÒÏ×ÁÎÎÏÇÏ ÂÜËÅÎÄÁ.
|
||||||
|
</para>
|
||||||
|
<para lang="en">
|
||||||
|
now nginx passes the malformed proxied backend responses.
|
||||||
|
</para>
|
||||||
|
</change>
|
||||||
|
|
||||||
|
<change type="feature">
|
||||||
|
<para lang="ru">
|
||||||
|
ÄÉÒÅËÔÉ×Ù listen ÐÏÄÄÅÒÖÉ×ÁÀÔ ÁÄÒÅÓ × ×ÉÄÅ "*:ÐÏÒÔ".
|
||||||
|
</para>
|
||||||
|
<para lang="en">
|
||||||
|
the "listen" directives support the address in the "*:port" form.
|
||||||
|
</para>
|
||||||
|
</change>
|
||||||
|
|
||||||
|
<change type="feature">
|
||||||
|
<para lang="ru">
|
||||||
|
ÐÏÄÄÅÒÖËÁ EVFILER_TIMER × MacOSX 10.4.
|
||||||
|
</para>
|
||||||
|
<para lang="en">
|
||||||
|
the EVFILER_TIMER support in MacOSX 10.4.
|
||||||
|
</para>
|
||||||
|
</change>
|
||||||
|
|
||||||
|
<change type="workaround">
|
||||||
|
<para lang="ru">
|
||||||
|
ÏÂÈÏÄ ÏÛÉÂËÉ ÏÂÒÁÂÏÔËÉ ÍÉÌÌÉÓÅËÕÎÄÎÙÈ ÔÁÊÍÁÕÔÏ× kqueue × 64-ÂÉÔÎÏÍ ÑÄÒÅ MacOSX.
|
||||||
|
óÐÁÓÉÂÏ áÎÄÒÅÀ îÉÇÍÁÔÕÌÉÎÕ.
|
||||||
|
</para>
|
||||||
|
<para lang="en">
|
||||||
|
for MacOSX 64-bit kernel kqueue millisecond timeout bug.
|
||||||
|
Thanks Andrei Nigmatulin.
|
||||||
|
</para>
|
||||||
|
</change>
|
||||||
|
|
||||||
|
<change type="bugfix">
|
||||||
|
<para lang="ru">
|
||||||
|
ÅÓÌÉ ×ÎÕÔÒÉ ÏÄÎÏÇÏ ÓÅÒ×ÅÒÁ ÏÐÉÓÁÎÙ ÎÅÓËÏÌØËÏ ÄÉÒÅËÔÉ× listen, ÓÌÕÛÁÀÝÉÈ ÎÁ
|
||||||
|
ÒÁÚÎÙÈ ÁÄÒÅÓÁÈ, ÔÏ ÉÍÅÎÁ ÓÅÒ×ÅÒÏ× ×ÉÄÁ "*.domain.tld" ÒÁÂÏÔÁÌÉ ÔÏÌØËÏ
|
||||||
|
ÄÌÑ ÐÅÒ×ÏÇÏ ÁÄÒÅÓÁ;
|
||||||
|
ÏÛÉÂËÁ ÐÏÑ×ÉÌÁÓØ × 0.3.18.
|
||||||
|
</para>
|
||||||
|
<para lang="en">
|
||||||
|
if there were several "listen" directives listening one various addresses
|
||||||
|
inside one server, then server names like "*.domain.tld" worked for first
|
||||||
|
address only;
|
||||||
|
bug appeared in 0.3.18.
|
||||||
|
</para>
|
||||||
|
</change>
|
||||||
|
|
||||||
|
<change type="bugfix">
|
||||||
|
<para lang="ru">
|
||||||
|
ÐÒÉ ÉÓÐÏÌØÚÏ×ÁÎÉÉ ÐÒÏÔÏËÏÌÁ HTTPS × ÄÉÒÅËÔÉ×Å proxy_pass ÎÅ ÐÅÒÅÄÁ×ÁÌÉÓØ
|
||||||
|
ÚÁÐÒÏÓÙ Ó ÔÅÌÏÍ, ÚÁÐÉÓÁÎÎÙÍ ×Ï ×ÒÅÍÅÎÎÙÊ ÆÁÊÌ.
|
||||||
|
</para>
|
||||||
|
<para lang="en">
|
||||||
|
if the HTTP protocol was used in the "proxy_pass" directive and
|
||||||
|
the request body was in temporarily file then the request was not transferred.
|
||||||
|
</para>
|
||||||
|
</change>
|
||||||
|
|
||||||
|
<change type="bugfix">
|
||||||
|
<para lang="ru">
|
||||||
|
ÓÏ×ÍÅÓÔÉÍÏÓÔØ Ó perl 5.8.8.
|
||||||
|
</para>
|
||||||
|
<para lang="en">
|
||||||
|
perl 5.8.8 compatibility.
|
||||||
|
</para>
|
||||||
|
</change>
|
||||||
|
|
||||||
|
</changes>
|
||||||
|
|
||||||
|
|
||||||
<changes ver="0.3.30" date="22.02.2006">
|
<changes ver="0.3.30" date="22.02.2006">
|
||||||
|
|
||||||
<change type="change">
|
<change type="change">
|
||||||
@ -32,10 +110,12 @@ the ngx_http_ssi_filter_module.
|
|||||||
|
|
||||||
<change type="bugfix">
|
<change type="bugfix">
|
||||||
<para lang="ru">
|
<para lang="ru">
|
||||||
nginx ÎÅ ÓÏÂÉÒÁÌÓÑ ÎÁ i386 ÐÌÁÔÆÏÒÍÅ, ÅÓÌÉ ÉÓÐÏÌØÚÏ×ÁÌÓÑ PIC.
|
nginx ÎÅ ÓÏÂÉÒÁÌÓÑ ÎÁ i386 ÐÌÁÔÆÏÒÍÅ, ÅÓÌÉ ÉÓÐÏÌØÚÏ×ÁÌÓÑ PIC;
|
||||||
|
ÏÛÉÂËÁ ÐÏÑ×ÉÌÁÓØ × 0.3.27.
|
||||||
</para>
|
</para>
|
||||||
<para lang="en">
|
<para lang="en">
|
||||||
nginx could not be built on i386 platform, if the PIC was used.
|
nginx could not be built on i386 platform, if the PIC was used;
|
||||||
|
bug appeared in 0.3.27.
|
||||||
</para>
|
</para>
|
||||||
</change>
|
</change>
|
||||||
|
|
||||||
@ -225,7 +305,7 @@ directive.
|
|||||||
</para>
|
</para>
|
||||||
<para lang="en">
|
<para lang="en">
|
||||||
if the HTTP protocol was used in the "proxy_pass" directive then
|
if the HTTP protocol was used in the "proxy_pass" directive then
|
||||||
the requests with the body did not transferred.
|
the requests with the body was not transferred.
|
||||||
</para>
|
</para>
|
||||||
</change>
|
</change>
|
||||||
|
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
#define _NGINX_H_INCLUDED_
|
#define _NGINX_H_INCLUDED_
|
||||||
|
|
||||||
|
|
||||||
#define NGINX_VER "nginx/0.3.30"
|
#define NGINX_VER "nginx/0.3.31"
|
||||||
|
|
||||||
#define NGINX_VAR "NGINX"
|
#define NGINX_VAR "NGINX"
|
||||||
#define NGX_OLDPID_EXT ".oldbin"
|
#define NGX_OLDPID_EXT ".oldbin"
|
||||||
|
@ -741,10 +741,10 @@ ngx_hash_add_key(ngx_hash_keys_arrays_t *ha, ngx_str_t *key, void *value,
|
|||||||
ngx_uint_t flags)
|
ngx_uint_t flags)
|
||||||
{
|
{
|
||||||
size_t len;
|
size_t len;
|
||||||
|
u_char *reverse;
|
||||||
ngx_str_t *name;
|
ngx_str_t *name;
|
||||||
ngx_uint_t i, k, n, skip;
|
ngx_uint_t i, k, n, skip;
|
||||||
ngx_hash_key_t *hk;
|
ngx_hash_key_t *hk;
|
||||||
u_char buf[2048];
|
|
||||||
|
|
||||||
if (!(flags & NGX_HASH_WILDCARD_KEY)) {
|
if (!(flags & NGX_HASH_WILDCARD_KEY)) {
|
||||||
|
|
||||||
@ -863,14 +863,19 @@ ngx_hash_add_key(ngx_hash_keys_arrays_t *ha, ngx_str_t *key, void *value,
|
|||||||
* and ".example.com" to "com.example\0"
|
* and ".example.com" to "com.example\0"
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
reverse = ngx_palloc(ha->temp_pool, key->len);
|
||||||
|
if (reverse == NULL) {
|
||||||
|
return NGX_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
len = 0;
|
len = 0;
|
||||||
n = 0;
|
n = 0;
|
||||||
|
|
||||||
for (i = key->len - 1; i; i--) {
|
for (i = key->len - 1; i; i--) {
|
||||||
if (key->data[i] == '.') {
|
if (key->data[i] == '.') {
|
||||||
ngx_memcpy(&buf[n], &key->data[i + 1], len);
|
ngx_memcpy(&reverse[n], &key->data[i + 1], len);
|
||||||
n += len;
|
n += len;
|
||||||
buf[n++] = '.';
|
reverse[n++] = '.';
|
||||||
len = 0;
|
len = 0;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@ -879,11 +884,22 @@ ngx_hash_add_key(ngx_hash_keys_arrays_t *ha, ngx_str_t *key, void *value,
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (len) {
|
if (len) {
|
||||||
ngx_memcpy(&buf[n], &key->data[1], len);
|
ngx_memcpy(&reverse[n], &key->data[1], len);
|
||||||
n += len;
|
n += len;
|
||||||
}
|
}
|
||||||
|
|
||||||
buf[n] = '\0';
|
reverse[n] = '\0';
|
||||||
|
|
||||||
|
|
||||||
|
hk = ngx_array_push(&ha->dns_wildcards);
|
||||||
|
if (hk == NULL) {
|
||||||
|
return NGX_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
hk->key.len = key->len - 1;
|
||||||
|
hk->key.data = reverse;
|
||||||
|
hk->key_hash = 0;
|
||||||
|
hk->value = value;
|
||||||
|
|
||||||
|
|
||||||
/* check conflicts in wildcard hash */
|
/* check conflicts in wildcard hash */
|
||||||
@ -922,20 +938,8 @@ ngx_hash_add_key(ngx_hash_keys_arrays_t *ha, ngx_str_t *key, void *value,
|
|||||||
if (name->data == NULL) {
|
if (name->data == NULL) {
|
||||||
return NGX_ERROR;
|
return NGX_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
ngx_memcpy(name->data, key->data + skip, name->len);
|
ngx_memcpy(name->data, key->data + skip, name->len);
|
||||||
|
|
||||||
|
|
||||||
ngx_memcpy(key->data, buf, key->len);
|
|
||||||
key->len--;
|
|
||||||
|
|
||||||
hk = ngx_array_push(&ha->dns_wildcards);
|
|
||||||
if (hk == NULL) {
|
|
||||||
return NGX_ERROR;
|
|
||||||
}
|
|
||||||
|
|
||||||
hk->key = *key;
|
|
||||||
hk->key_hash = 0;
|
|
||||||
hk->value = value;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return NGX_OK;
|
return NGX_OK;
|
||||||
|
@ -490,8 +490,17 @@ ngx_kqueue_process_events(ngx_cycle_t *cycle, ngx_msec_t timer,
|
|||||||
tp = NULL;
|
tp = NULL;
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
|
/*
|
||||||
|
* 64-bit MacOSX kernel has the bug: kernel level ts.tv_nsec is
|
||||||
|
* the int32_t while user level ts.tv_nsec is the long (64-bit),
|
||||||
|
* so on the big endian PowerPC all nanoseconds are lost.
|
||||||
|
* NGX_MACOSX_KEVENT_BUG_SHIFT on these machines is "<< 32".
|
||||||
|
*/
|
||||||
|
|
||||||
ts.tv_sec = timer / 1000;
|
ts.tv_sec = timer / 1000;
|
||||||
ts.tv_nsec = (timer % 1000) * 1000000;
|
ts.tv_nsec = (long) ((timer % 1000) * 1000000)
|
||||||
|
NGX_MACOSX_KEVENT_BUG_SHIFT;
|
||||||
tp = &ts;
|
tp = &ts;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1043,8 +1043,7 @@ ngx_http_fastcgi_process_header(ngx_http_request_t *r)
|
|||||||
/* there was error while a header line parsing */
|
/* there was error while a header line parsing */
|
||||||
|
|
||||||
ngx_log_error(NGX_LOG_ERR, r->connection->log, 0,
|
ngx_log_error(NGX_LOG_ERR, r->connection->log, 0,
|
||||||
ngx_http_upstream_header_errors[rc
|
"upstream sent invalid header");
|
||||||
- NGX_HTTP_PARSE_HEADER_ERROR]);
|
|
||||||
|
|
||||||
return NGX_HTTP_UPSTREAM_INVALID_HEADER;
|
return NGX_HTTP_UPSTREAM_INVALID_HEADER;
|
||||||
|
|
||||||
|
@ -800,9 +800,11 @@ ngx_http_proxy_process_status_line(ngx_http_request_t *r)
|
|||||||
ngx_log_error(NGX_LOG_ERR, r->connection->log, 0,
|
ngx_log_error(NGX_LOG_ERR, r->connection->log, 0,
|
||||||
"upstream sent no valid HTTP/1.0 header");
|
"upstream sent no valid HTTP/1.0 header");
|
||||||
|
|
||||||
|
#if 0
|
||||||
if (u->accel) {
|
if (u->accel) {
|
||||||
return NGX_HTTP_UPSTREAM_INVALID_HEADER;
|
return NGX_HTTP_UPSTREAM_INVALID_HEADER;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
r->http_version = NGX_HTTP_VERSION_9;
|
r->http_version = NGX_HTTP_VERSION_9;
|
||||||
p->status = NGX_HTTP_OK;
|
p->status = NGX_HTTP_OK;
|
||||||
@ -961,6 +963,10 @@ ngx_http_proxy_parse_status_line(ngx_http_request_t *r, ngx_http_proxy_ctx_t *p)
|
|||||||
|
|
||||||
/* HTTP status code */
|
/* HTTP status code */
|
||||||
case sw_status:
|
case sw_status:
|
||||||
|
if (ch == ' ') {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
if (ch < '0' || ch > '9') {
|
if (ch < '0' || ch > '9') {
|
||||||
return NGX_HTTP_PROXY_PARSE_NO_HEADER;
|
return NGX_HTTP_PROXY_PARSE_NO_HEADER;
|
||||||
}
|
}
|
||||||
@ -1111,8 +1117,7 @@ ngx_http_proxy_process_header(ngx_http_request_t *r)
|
|||||||
/* there was error while a header line parsing */
|
/* there was error while a header line parsing */
|
||||||
|
|
||||||
ngx_log_error(NGX_LOG_ERR, r->connection->log, 0,
|
ngx_log_error(NGX_LOG_ERR, r->connection->log, 0,
|
||||||
ngx_http_upstream_header_errors[rc
|
"upstream sent invalid header");
|
||||||
- NGX_HTTP_PARSE_HEADER_ERROR]);
|
|
||||||
|
|
||||||
return NGX_HTTP_UPSTREAM_INVALID_HEADER;
|
return NGX_HTTP_UPSTREAM_INVALID_HEADER;
|
||||||
}
|
}
|
||||||
|
@ -13,6 +13,7 @@ WriteMakefile(
|
|||||||
AUTHOR => 'Igor Sysoev',
|
AUTHOR => 'Igor Sysoev',
|
||||||
|
|
||||||
CCFLAGS => "$ENV{NGX_PERL_CFLAGS}",
|
CCFLAGS => "$ENV{NGX_PERL_CFLAGS}",
|
||||||
|
OPTIMIZE => '-O',
|
||||||
|
|
||||||
INC => "-I ../../../../../src/core " .
|
INC => "-I ../../../../../src/core " .
|
||||||
"-I ../../../../../src/event " .
|
"-I ../../../../../src/event " .
|
||||||
|
@ -632,7 +632,7 @@ ngx_http_perl_call_handler(pTHX_ ngx_http_request_t *r, SV *sub,
|
|||||||
"call_sv: %d", status);
|
"call_sv: %d", status);
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
line = POPpx;
|
line = SvPVx(POPs, n_a);
|
||||||
rv->len = n_a;
|
rv->len = n_a;
|
||||||
|
|
||||||
rv->data = ngx_palloc(r->pool, n_a);
|
rv->data = ngx_palloc(r->pool, n_a);
|
||||||
|
@ -563,6 +563,8 @@ ngx_http_block(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
|
|||||||
|
|
||||||
virtual_names:
|
virtual_names:
|
||||||
|
|
||||||
|
ngx_memzero(&ha, sizeof(ngx_hash_keys_arrays_t));
|
||||||
|
|
||||||
ha.temp_pool = ngx_create_pool(16384, cf->log);
|
ha.temp_pool = ngx_create_pool(16384, cf->log);
|
||||||
if (ha.temp_pool == NULL) {
|
if (ha.temp_pool == NULL) {
|
||||||
return NGX_CONF_ERROR;
|
return NGX_CONF_ERROR;
|
||||||
@ -578,6 +580,9 @@ ngx_http_block(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
|
|||||||
name = in_addr[a].names.elts;
|
name = in_addr[a].names.elts;
|
||||||
for (s = 0; s < in_addr[a].names.nelts; s++) {
|
for (s = 0; s < in_addr[a].names.nelts; s++) {
|
||||||
|
|
||||||
|
ngx_log_error(NGX_LOG_ALERT, cf->log, 0,
|
||||||
|
"server name \"%V\"", &name[s].name);
|
||||||
|
|
||||||
ch = name[s].name.data[0];
|
ch = name[s].name.data[0];
|
||||||
|
|
||||||
if (ch == '*' || ch == '.') {
|
if (ch == '*' || ch == '.') {
|
||||||
@ -600,6 +605,9 @@ ngx_http_block(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
|
|||||||
|
|
||||||
for (s = 0; s < in_addr[a].names.nelts; s++) {
|
for (s = 0; s < in_addr[a].names.nelts; s++) {
|
||||||
|
|
||||||
|
ngx_log_error(NGX_LOG_ALERT, cf->log, 0,
|
||||||
|
"wildcard server name \"%V\"", &name[s].name);
|
||||||
|
|
||||||
ch = name[s].name.data[0];
|
ch = name[s].name.data[0];
|
||||||
|
|
||||||
if (ch != '*' && ch != '.') {
|
if (ch != '*' && ch != '.') {
|
||||||
|
@ -2243,6 +2243,10 @@ ngx_http_core_listen(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
|
|||||||
ls->conf.rcvbuf = -1;
|
ls->conf.rcvbuf = -1;
|
||||||
ls->conf.sndbuf = -1;
|
ls->conf.sndbuf = -1;
|
||||||
|
|
||||||
|
if (inet_upstream.host.len == 1 && inet_upstream.host.data[0] == '*') {
|
||||||
|
inet_upstream.host.len = 0;
|
||||||
|
}
|
||||||
|
|
||||||
if (inet_upstream.host.len) {
|
if (inet_upstream.host.len) {
|
||||||
inet_upstream.host.data[inet_upstream.host.len] = '\0';
|
inet_upstream.host.data[inet_upstream.host.len] = '\0';
|
||||||
|
|
||||||
|
@ -37,7 +37,6 @@
|
|||||||
#define NGX_HTTP_PARSE_INVALID_REQUEST 11
|
#define NGX_HTTP_PARSE_INVALID_REQUEST 11
|
||||||
#define NGX_HTTP_PARSE_INVALID_09_METHOD 12
|
#define NGX_HTTP_PARSE_INVALID_09_METHOD 12
|
||||||
|
|
||||||
#define NGX_HTTP_PARSE_HEADER_ERROR 13
|
|
||||||
#define NGX_HTTP_PARSE_INVALID_HEADER 13
|
#define NGX_HTTP_PARSE_INVALID_HEADER 13
|
||||||
|
|
||||||
#define NGX_HTTP_ZERO_IN_URI 1
|
#define NGX_HTTP_ZERO_IN_URI 1
|
||||||
|
@ -259,12 +259,6 @@ static ngx_http_variable_t ngx_http_upstream_vars[] = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
char *ngx_http_upstream_header_errors[] = {
|
|
||||||
"upstream sent invalid header",
|
|
||||||
"upstream sent too long header line"
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
ngx_http_upstream_init(ngx_http_request_t *r)
|
ngx_http_upstream_init(ngx_http_request_t *r)
|
||||||
{
|
{
|
||||||
@ -624,6 +618,7 @@ ngx_http_upstream_ssl_init_connection(ngx_http_request_t *r,
|
|||||||
}
|
}
|
||||||
|
|
||||||
c->sendfile = 0;
|
c->sendfile = 0;
|
||||||
|
u->output.sendfile = 0;
|
||||||
|
|
||||||
peer = &u->peer.peers->peer[u->peer.cur_peer];
|
peer = &u->peer.peers->peer[u->peer.cur_peer];
|
||||||
|
|
||||||
|
@ -199,7 +199,5 @@ void ngx_http_upstream_init(ngx_http_request_t *r);
|
|||||||
|
|
||||||
extern ngx_module_t ngx_http_upstream_module;
|
extern ngx_module_t ngx_http_upstream_module;
|
||||||
|
|
||||||
extern char *ngx_http_upstream_header_errors[];
|
|
||||||
|
|
||||||
|
|
||||||
#endif /* _NGX_HTTP_UPSTREAM_H_INCLUDED_ */
|
#endif /* _NGX_HTTP_UPSTREAM_H_INCLUDED_ */
|
||||||
|
@ -442,6 +442,10 @@ ngx_imap_core_listen(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
|
|||||||
return NGX_CONF_ERROR;
|
return NGX_CONF_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (inet_upstream.host.len == 1 && inet_upstream.host.data[0] == '*') {
|
||||||
|
inet_upstream.host.len = 0;
|
||||||
|
}
|
||||||
|
|
||||||
if (inet_upstream.host.len) {
|
if (inet_upstream.host.len) {
|
||||||
inet_upstream.host.data[inet_upstream.host.len] = '\0';
|
inet_upstream.host.data[inet_upstream.host.len] = '\0';
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user