mirror of
https://github.com/nginx/nginx.git
synced 2025-06-07 17:52:38 +08:00
nginx-0.3.33-RELEASE import
*) Feature: the "http_503" parameter of the "proxy_next_upstream" or "fastcgi_next_upstream" directives. *) Bugfix: ngx_http_perl_module did not work with inlined in the configuration code, if it was not started with the "sub" word. *) Bugfix: in the "post_action" directive.
This commit is contained in:
parent
5e40d785cb
commit
8fea885cbf
@ -120,8 +120,8 @@ if test -z "$NGX_KQUEUE_CHECKED"; then
|
|||||||
|
|
||||||
if [ "$NGX_SYSTEM" = "Darwin" ]; then
|
if [ "$NGX_SYSTEM" = "Darwin" ]; then
|
||||||
|
|
||||||
ngx_feature="MacOSX 64-bit kqueue millisecond timeout bug"
|
ngx_feature="Darwin 64-bit kqueue millisecond timeout bug"
|
||||||
ngx_feature_name=
|
ngx_feature_name=NGX_DARWIN_KEVENT_BUG
|
||||||
ngx_feature_run=bug
|
ngx_feature_run=bug
|
||||||
ngx_feature_incs="#include <sys/event.h>
|
ngx_feature_incs="#include <sys/event.h>
|
||||||
#include <sys/time.h>"
|
#include <sys/time.h>"
|
||||||
@ -144,30 +144,11 @@ if test -z "$NGX_KQUEUE_CHECKED"; then
|
|||||||
if (tv.tv_sec * 1000000 + tv.tv_usec < 900000) return 1;"
|
if (tv.tv_sec * 1000000 + tv.tv_usec < 900000) return 1;"
|
||||||
|
|
||||||
. auto/feature
|
. auto/feature
|
||||||
|
|
||||||
ngx_macosx_kevent_bug=$ngx_found
|
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
||||||
if [ ".$ngx_macosx_kevent_bug" = .yes ]; then
|
|
||||||
|
|
||||||
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
|
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,41 @@
|
|||||||
<title lang="en">nginx changelog</title>
|
<title lang="en">nginx changelog</title>
|
||||||
|
|
||||||
|
|
||||||
|
<changes ver="0.3.33" date="15.03.2006">
|
||||||
|
|
||||||
|
<change type="feature">
|
||||||
|
<para lang="ru">
|
||||||
|
ÐÁÒÁÍÅÔÒ http_503 × ÄÉÒÅËÔÉ×ÁÈ proxy_next_upstream ÉÌÉ fastcgi_next_upstream.
|
||||||
|
</para>
|
||||||
|
<para lang="en">
|
||||||
|
the "http_503" parameter of the "proxy_next_upstream" or
|
||||||
|
"fastcgi_next_upstream" directives.
|
||||||
|
</para>
|
||||||
|
</change>
|
||||||
|
|
||||||
|
<change type="bugfix">
|
||||||
|
<para lang="ru">
|
||||||
|
ngx_http_perl_module ÎÅ ÒÁÂÏÔÁÌ ÓÏ ×ÓÔÒÏÅÎÎÙÍ × ËÏÎÆÉÇÕÒÁÃÉÎÎÙÊ ÆÁÊÌ ËÏÄÏÍ,
|
||||||
|
ÅÓÌÉ ÏÎ ÎÅ ÎÁÞÉÎÁÌÓÑ ÓÒÁÚÕ ÖÅ Ó "sub".
|
||||||
|
</para>
|
||||||
|
<para lang="en">
|
||||||
|
ngx_http_perl_module did not work with inlined in the configuration code,
|
||||||
|
if it was not started with the "sub" word.
|
||||||
|
</para>
|
||||||
|
</change>
|
||||||
|
|
||||||
|
<change type="bugfix">
|
||||||
|
<para lang="ru">
|
||||||
|
× ÄÉÒÅËÔÉ×Å post_action.
|
||||||
|
</para>
|
||||||
|
<para lang="en">
|
||||||
|
in the "post_action" directive.
|
||||||
|
</para>
|
||||||
|
</change>
|
||||||
|
|
||||||
|
</changes>
|
||||||
|
|
||||||
|
|
||||||
<changes ver="0.3.32" date="11.03.2006">
|
<changes ver="0.3.32" date="11.03.2006">
|
||||||
|
|
||||||
<change type="bugfix">
|
<change type="bugfix">
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
#define _NGINX_H_INCLUDED_
|
#define _NGINX_H_INCLUDED_
|
||||||
|
|
||||||
|
|
||||||
#define NGINX_VER "nginx/0.3.32"
|
#define NGINX_VER "nginx/0.3.33"
|
||||||
|
|
||||||
#define NGINX_VAR "NGINX"
|
#define NGINX_VAR "NGINX"
|
||||||
#define NGX_OLDPID_EXT ".oldbin"
|
#define NGX_OLDPID_EXT ".oldbin"
|
||||||
|
@ -491,16 +491,19 @@ ngx_kqueue_process_events(ngx_cycle_t *cycle, ngx_msec_t timer,
|
|||||||
|
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
|
ts.tv_sec = timer / 1000;
|
||||||
|
ts.tv_nsec = (timer % 1000) * 1000000;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* 64-bit MacOSX kernel has the bug: kernel level ts.tv_nsec is
|
* 64-bit Darwin kernel has the bug: kernel level ts.tv_nsec is
|
||||||
* the int32_t while user level ts.tv_nsec is the long (64-bit),
|
* the int32_t while user level ts.tv_nsec is the long (64-bit),
|
||||||
* so on the big endian PowerPC all nanoseconds are lost.
|
* 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;
|
#if (NGX_DARWIN_KEVENT_BUG)
|
||||||
ts.tv_nsec = (long) ((timer % 1000) * 1000000)
|
ts.tv_nsec <<= 32;
|
||||||
NGX_MACOSX_KEVENT_BUG_SHIFT;
|
#endif
|
||||||
|
|
||||||
tp = &ts;
|
tp = &ts;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -161,6 +161,7 @@ static ngx_conf_bitmask_t ngx_http_fastcgi_next_upstream_masks[] = {
|
|||||||
{ ngx_string("timeout"), NGX_HTTP_UPSTREAM_FT_TIMEOUT },
|
{ ngx_string("timeout"), NGX_HTTP_UPSTREAM_FT_TIMEOUT },
|
||||||
{ ngx_string("invalid_header"), NGX_HTTP_UPSTREAM_FT_INVALID_HEADER },
|
{ ngx_string("invalid_header"), NGX_HTTP_UPSTREAM_FT_INVALID_HEADER },
|
||||||
{ ngx_string("http_500"), NGX_HTTP_UPSTREAM_FT_HTTP_500 },
|
{ ngx_string("http_500"), NGX_HTTP_UPSTREAM_FT_HTTP_500 },
|
||||||
|
{ ngx_string("http_503"), NGX_HTTP_UPSTREAM_FT_HTTP_503 },
|
||||||
{ ngx_string("http_404"), NGX_HTTP_UPSTREAM_FT_HTTP_404 },
|
{ ngx_string("http_404"), NGX_HTTP_UPSTREAM_FT_HTTP_404 },
|
||||||
{ ngx_null_string, 0 }
|
{ ngx_null_string, 0 }
|
||||||
};
|
};
|
||||||
|
@ -121,6 +121,7 @@ static ngx_conf_bitmask_t ngx_http_proxy_next_upstream_masks[] = {
|
|||||||
{ ngx_string("timeout"), NGX_HTTP_UPSTREAM_FT_TIMEOUT },
|
{ ngx_string("timeout"), NGX_HTTP_UPSTREAM_FT_TIMEOUT },
|
||||||
{ ngx_string("invalid_header"), NGX_HTTP_UPSTREAM_FT_INVALID_HEADER },
|
{ ngx_string("invalid_header"), NGX_HTTP_UPSTREAM_FT_INVALID_HEADER },
|
||||||
{ ngx_string("http_500"), NGX_HTTP_UPSTREAM_FT_HTTP_500 },
|
{ ngx_string("http_500"), NGX_HTTP_UPSTREAM_FT_HTTP_500 },
|
||||||
|
{ ngx_string("http_503"), NGX_HTTP_UPSTREAM_FT_HTTP_503 },
|
||||||
{ ngx_string("http_404"), NGX_HTTP_UPSTREAM_FT_HTTP_404 },
|
{ ngx_string("http_404"), NGX_HTTP_UPSTREAM_FT_HTTP_404 },
|
||||||
{ ngx_null_string, 0 }
|
{ ngx_null_string, 0 }
|
||||||
};
|
};
|
||||||
|
@ -692,10 +692,18 @@ ngx_http_perl_call_handler(pTHX_ ngx_http_request_t *r, SV *sub,
|
|||||||
static void
|
static void
|
||||||
ngx_http_perl_eval_anon_sub(pTHX_ ngx_str_t *handler, SV **sv)
|
ngx_http_perl_eval_anon_sub(pTHX_ ngx_str_t *handler, SV **sv)
|
||||||
{
|
{
|
||||||
if (ngx_strncmp(handler->data, "sub ", 4) == 0
|
u_char *p;
|
||||||
|| ngx_strncmp(handler->data, "use ", 4) == 0)
|
|
||||||
|
for (p = handler->data; *p; p++) {
|
||||||
|
if (*p != ' ' && *p != '\t' && *p != CR && *p != LF) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ngx_strncmp(p, "sub ", 4) == 0
|
||||||
|
|| ngx_strncmp(p, "use ", 4) == 0)
|
||||||
{
|
{
|
||||||
*sv = eval_pv((char *) handler->data, FALSE);
|
*sv = eval_pv((char *) p, FALSE);
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -1004,11 +1004,8 @@ ngx_http_map_uri_to_path(ngx_http_request_t *r, ngx_str_t *path,
|
|||||||
size_t reserved)
|
size_t reserved)
|
||||||
{
|
{
|
||||||
u_char *last;
|
u_char *last;
|
||||||
size_t alias, len;
|
size_t alias;
|
||||||
ngx_http_script_code_pt code;
|
|
||||||
ngx_http_script_engine_t e;
|
|
||||||
ngx_http_core_loc_conf_t *clcf;
|
ngx_http_core_loc_conf_t *clcf;
|
||||||
ngx_http_script_len_code_pt lcode;
|
|
||||||
|
|
||||||
clcf = ngx_http_get_module_loc_conf(r, ngx_http_core_module);
|
clcf = ngx_http_get_module_loc_conf(r, ngx_http_core_module);
|
||||||
|
|
||||||
@ -1021,11 +1018,13 @@ ngx_http_map_uri_to_path(ngx_http_request_t *r, ngx_str_t *path,
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
reserved += r->uri.len - alias + 1;
|
||||||
|
|
||||||
if (clcf->root_lengths == NULL) {
|
if (clcf->root_lengths == NULL) {
|
||||||
|
|
||||||
r->root_length = clcf->root.len;
|
r->root_length = clcf->root.len;
|
||||||
|
|
||||||
path->len = clcf->root.len + r->uri.len - alias + 1 + reserved;
|
path->len = clcf->root.len + reserved;
|
||||||
|
|
||||||
path->data = ngx_palloc(r->pool, path->len);
|
path->data = ngx_palloc(r->pool, path->len);
|
||||||
if (path->data == NULL) {
|
if (path->data == NULL) {
|
||||||
@ -1033,43 +1032,18 @@ ngx_http_map_uri_to_path(ngx_http_request_t *r, ngx_str_t *path,
|
|||||||
}
|
}
|
||||||
|
|
||||||
last = ngx_copy(path->data, clcf->root.data, clcf->root.len);
|
last = ngx_copy(path->data, clcf->root.data, clcf->root.len);
|
||||||
last = ngx_cpystrn(last, r->uri.data + alias, r->uri.len - alias + 1);
|
|
||||||
|
|
||||||
return last;
|
} else {
|
||||||
}
|
last = ngx_http_script_run(r, path, clcf->root_lengths->elts, reserved,
|
||||||
|
clcf->root_values->elts);
|
||||||
ngx_memzero(&e, sizeof(ngx_http_script_engine_t));
|
if (last == NULL) {
|
||||||
|
|
||||||
e.ip = clcf->root_lengths->elts;
|
|
||||||
e.request = r;
|
|
||||||
e.flushed = 1;
|
|
||||||
|
|
||||||
len = 0;
|
|
||||||
|
|
||||||
while (*(uintptr_t *) e.ip) {
|
|
||||||
lcode = *(ngx_http_script_len_code_pt *) e.ip;
|
|
||||||
len += lcode(&e);
|
|
||||||
}
|
|
||||||
|
|
||||||
r->root_length = len;
|
|
||||||
|
|
||||||
len += r->uri.len - alias + 1 + reserved;
|
|
||||||
|
|
||||||
path->len = len;
|
|
||||||
path->data = ngx_palloc(r->pool, len);
|
|
||||||
if (path->data == NULL) {
|
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
e.ip = clcf->root_values->elts;
|
r->root_length = path->len - reserved;
|
||||||
e.pos = path->data;
|
|
||||||
|
|
||||||
while (*(uintptr_t *) e.ip) {
|
|
||||||
code = *(ngx_http_script_code_pt *) e.ip;
|
|
||||||
code((ngx_http_script_engine_t *) &e);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
last = ngx_cpystrn(e.pos, r->uri.data + alias, r->uri.len - alias + 1);
|
last = ngx_cpystrn(last, r->uri.data + alias, r->uri.len - alias + 1);
|
||||||
|
|
||||||
return last;
|
return last;
|
||||||
}
|
}
|
||||||
|
@ -682,6 +682,8 @@ ngx_http_parse_header_line(ngx_http_request_t *r, ngx_buf_t *b)
|
|||||||
/* end of header line */
|
/* end of header line */
|
||||||
case sw_almost_done:
|
case sw_almost_done:
|
||||||
switch (ch) {
|
switch (ch) {
|
||||||
|
case CR:
|
||||||
|
break;
|
||||||
case LF:
|
case LF:
|
||||||
goto done;
|
goto done;
|
||||||
default:
|
default:
|
||||||
|
@ -2249,6 +2249,9 @@ ngx_http_post_action(ngx_http_request_t *r)
|
|||||||
return NGX_DECLINED;
|
return NGX_DECLINED;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ngx_log_debug1(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
|
||||||
|
"post action: \"%V\"", &clcf->post_action);
|
||||||
|
|
||||||
r->http_version = NGX_HTTP_VERSION_9;
|
r->http_version = NGX_HTTP_VERSION_9;
|
||||||
r->header_only = 1;
|
r->header_only = 1;
|
||||||
|
|
||||||
|
@ -294,6 +294,44 @@ invalid_variable:
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
u_char *
|
||||||
|
ngx_http_script_run(ngx_http_request_t *r, ngx_str_t *value,
|
||||||
|
void *code_lengths, size_t len, void *code_values)
|
||||||
|
{
|
||||||
|
ngx_http_script_code_pt code;
|
||||||
|
ngx_http_script_len_code_pt lcode;
|
||||||
|
ngx_http_script_engine_t e;
|
||||||
|
|
||||||
|
ngx_memzero(&e, sizeof(ngx_http_script_engine_t));
|
||||||
|
|
||||||
|
e.ip = code_lengths;
|
||||||
|
e.request = r;
|
||||||
|
e.flushed = 1;
|
||||||
|
|
||||||
|
while (*(uintptr_t *) e.ip) {
|
||||||
|
lcode = *(ngx_http_script_len_code_pt *) e.ip;
|
||||||
|
len += lcode(&e);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
value->len = len;
|
||||||
|
value->data = ngx_palloc(r->pool, len);
|
||||||
|
if (value->data == NULL) {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
e.ip = code_values;
|
||||||
|
e.pos = value->data;
|
||||||
|
|
||||||
|
while (*(uintptr_t *) e.ip) {
|
||||||
|
code = *(ngx_http_script_code_pt *) e.ip;
|
||||||
|
code((ngx_http_script_engine_t *) &e);
|
||||||
|
}
|
||||||
|
|
||||||
|
return e.pos;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
ngx_http_script_flush_no_cachable_variables(ngx_http_request_t *r,
|
ngx_http_script_flush_no_cachable_variables(ngx_http_request_t *r,
|
||||||
ngx_array_t *indices)
|
ngx_array_t *indices)
|
||||||
|
@ -152,6 +152,8 @@ typedef struct {
|
|||||||
|
|
||||||
ngx_uint_t ngx_http_script_variables_count(ngx_str_t *value);
|
ngx_uint_t ngx_http_script_variables_count(ngx_str_t *value);
|
||||||
ngx_int_t ngx_http_script_compile(ngx_http_script_compile_t *sc);
|
ngx_int_t ngx_http_script_compile(ngx_http_script_compile_t *sc);
|
||||||
|
u_char *ngx_http_script_run(ngx_http_request_t *r, ngx_str_t *value,
|
||||||
|
void *code_lengths, size_t reserved, void *code_values);
|
||||||
void ngx_http_script_flush_no_cachable_variables(ngx_http_request_t *r,
|
void ngx_http_script_flush_no_cachable_variables(ngx_http_request_t *r,
|
||||||
ngx_array_t *indices);
|
ngx_array_t *indices);
|
||||||
|
|
||||||
|
@ -1947,7 +1947,11 @@ ngx_http_upstream_finalize_request(ngx_http_request_t *r,
|
|||||||
|
|
||||||
r->connection->log->action = "sending to client";
|
r->connection->log->action = "sending to client";
|
||||||
|
|
||||||
if (rc == 0 && r == r->main) {
|
if (rc == 0
|
||||||
|
&& r == r->main
|
||||||
|
/* not a post_action */
|
||||||
|
&& !(r->http_version == NGX_HTTP_VERSION_9 && r->header_only))
|
||||||
|
{
|
||||||
rc = ngx_http_send_special(r, NGX_HTTP_LAST);
|
rc = ngx_http_send_special(r, NGX_HTTP_LAST);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -16,13 +16,14 @@
|
|||||||
#include <ngx_http.h>
|
#include <ngx_http.h>
|
||||||
|
|
||||||
|
|
||||||
#define NGX_HTTP_UPSTREAM_FT_ERROR 0x02
|
#define NGX_HTTP_UPSTREAM_FT_ERROR 0x002
|
||||||
#define NGX_HTTP_UPSTREAM_FT_TIMEOUT 0x04
|
#define NGX_HTTP_UPSTREAM_FT_TIMEOUT 0x004
|
||||||
#define NGX_HTTP_UPSTREAM_FT_INVALID_HEADER 0x08
|
#define NGX_HTTP_UPSTREAM_FT_INVALID_HEADER 0x008
|
||||||
#define NGX_HTTP_UPSTREAM_FT_HTTP_500 0x10
|
#define NGX_HTTP_UPSTREAM_FT_HTTP_500 0x010
|
||||||
#define NGX_HTTP_UPSTREAM_FT_HTTP_404 0x20
|
#define NGX_HTTP_UPSTREAM_FT_HTTP_503 0x020
|
||||||
#define NGX_HTTP_UPSTREAM_FT_BUSY_LOCK 0x40
|
#define NGX_HTTP_UPSTREAM_FT_HTTP_404 0x040
|
||||||
#define NGX_HTTP_UPSTREAM_FT_MAX_WAITING 0x80
|
#define NGX_HTTP_UPSTREAM_FT_BUSY_LOCK 0x080
|
||||||
|
#define NGX_HTTP_UPSTREAM_FT_MAX_WAITING 0x100
|
||||||
|
|
||||||
|
|
||||||
#define NGX_HTTP_UPSTREAM_INVALID_HEADER 40
|
#define NGX_HTTP_UPSTREAM_INVALID_HEADER 40
|
||||||
|
Loading…
Reference in New Issue
Block a user