mirror of
https://github.com/openresty/openresty.git
synced 2024-10-13 00:29:41 +00:00
Compare commits
10 Commits
Author | SHA1 | Date | |
---|---|---|---|
8e57e2541b | |||
f5f2d672e7 | |||
49d9d9b778 | |||
13efb24106 | |||
3be0b7f0e1 | |||
5fb8647d23 | |||
e7053c9ca9 | |||
042e2fd27b | |||
1d909539a8 | |||
d54e2dcc69 |
@ -454,10 +454,10 @@ index efbc244..8d81aab 100644
|
||||
|
||||
diff --git a/src/dtrace/nginx.stp b/src/dtrace/nginx.stp
|
||||
new file mode 100644
|
||||
index 0000000..8a5a54a
|
||||
index 0000000..4c228bd
|
||||
--- /dev/null
|
||||
+++ b/src/dtrace/nginx.stp
|
||||
@@ -0,0 +1,278 @@
|
||||
@@ -0,0 +1,288 @@
|
||||
+/* tapset for nginx */
|
||||
+
|
||||
+
|
||||
@ -598,6 +598,12 @@ index 0000000..8a5a54a
|
||||
+}
|
||||
+
|
||||
+
|
||||
+function ngx_buf_last_in_chain(b)
|
||||
+{
|
||||
+ return @cast(b, "ngx_buf_t", "/home/agentzh/git/lua-nginx-module/work/nginx/sbin/nginx")->last_in_chain
|
||||
+}
|
||||
+
|
||||
+
|
||||
+function ngx_buf_sync(b)
|
||||
+{
|
||||
+ return @cast(b, "ngx_buf_t", "/home/agentzh/git/lua-nginx-module/work/nginx/sbin/nginx")->sync
|
||||
@ -651,7 +657,11 @@ index 0000000..8a5a54a
|
||||
+ }
|
||||
+
|
||||
+ if (ngx_buf_last_buf(buf)) {
|
||||
+ out .= "<eof>"
|
||||
+ out .= "<last_buf>"
|
||||
+ }
|
||||
+
|
||||
+ if (ngx_buf_last_in_chain(buf)) {
|
||||
+ out .= "<last_in_chain>"
|
||||
+ }
|
||||
+
|
||||
+ if (ngx_buf_sync(buf)) {
|
||||
|
@ -1,63 +0,0 @@
|
||||
--- nginx-1.2.7/src/http/ngx_http_upstream.c 2012-08-06 10:34:08.000000000 -0700
|
||||
+++ nginx-1.2.7-patched/src/http/ngx_http_upstream.c 2012-09-09 21:58:04.727761891 -0700
|
||||
@@ -2383,7 +2383,7 @@
|
||||
|
||||
if (c->read->timedout) {
|
||||
ngx_connection_error(c, NGX_ETIMEDOUT, "upstream timed out");
|
||||
- ngx_http_upstream_finalize_request(r, u, 0);
|
||||
+ ngx_http_upstream_finalize_request(r, u, NGX_HTTP_GATEWAY_TIME_OUT);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -2430,13 +2430,17 @@
|
||||
if (u->busy_bufs == NULL) {
|
||||
|
||||
if (u->length == 0
|
||||
- || upstream->read->eof
|
||||
- || upstream->read->error)
|
||||
+ || (upstream->read->eof && u->headers_in.content_length_n == -1))
|
||||
{
|
||||
ngx_http_upstream_finalize_request(r, u, 0);
|
||||
return;
|
||||
}
|
||||
|
||||
+ if (upstream->read->eof || upstream->read->error) {
|
||||
+ ngx_http_upstream_finalize_request(r, u, NGX_HTTP_BAD_GATEWAY);
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
b->pos = b->start;
|
||||
b->last = b->start;
|
||||
}
|
||||
@@ -2710,7 +2714,16 @@
|
||||
#if 0
|
||||
ngx_http_busy_unlock(u->conf->busy_lock, &u->busy_lock);
|
||||
#endif
|
||||
- ngx_http_upstream_finalize_request(r, u, 0);
|
||||
+
|
||||
+ if (p->upstream_done
|
||||
+ || (p->upstream_eof && u->headers_in.content_length_n == -1))
|
||||
+ {
|
||||
+ ngx_http_upstream_finalize_request(r, u, 0);
|
||||
+
|
||||
+ } else {
|
||||
+ ngx_http_upstream_finalize_request(r, u, NGX_HTTP_BAD_GATEWAY);
|
||||
+ }
|
||||
+
|
||||
return;
|
||||
}
|
||||
}
|
||||
@@ -3073,6 +3086,13 @@
|
||||
&& rc != NGX_HTTP_REQUEST_TIME_OUT
|
||||
&& (rc == NGX_ERROR || rc >= NGX_HTTP_SPECIAL_RESPONSE))
|
||||
{
|
||||
+ if (rc == NGX_ERROR) {
|
||||
+ r->headers_out.status = NGX_HTTP_INTERNAL_SERVER_ERROR;
|
||||
+
|
||||
+ } else {
|
||||
+ r->headers_out.status = rc;
|
||||
+ }
|
||||
+
|
||||
rc = 0;
|
||||
}
|
||||
|
149
patches/nginx-1.2.7-upstream_truncation.patch
Normal file
149
patches/nginx-1.2.7-upstream_truncation.patch
Normal file
@ -0,0 +1,149 @@
|
||||
diff --exclude '*~' --exclude '*.swp' -urp nginx-1.2.7/src/http/modules/ngx_http_scgi_module.c nginx-1.2.7-patched/src/http/modules/ngx_http_scgi_module.c
|
||||
--- nginx-1.2.7/src/http/modules/ngx_http_scgi_module.c 2013-02-09 19:08:42.000000000 -0800
|
||||
+++ nginx-1.2.7-patched/src/http/modules/ngx_http_scgi_module.c 2013-04-07 12:09:55.900492634 -0700
|
||||
@@ -39,6 +39,7 @@ static ngx_int_t ngx_http_scgi_process_s
|
||||
static ngx_int_t ngx_http_scgi_process_header(ngx_http_request_t *r);
|
||||
static void ngx_http_scgi_abort_request(ngx_http_request_t *r);
|
||||
static void ngx_http_scgi_finalize_request(ngx_http_request_t *r, ngx_int_t rc);
|
||||
+static ngx_int_t ngx_http_scgi_input_filter_init(void *data);
|
||||
|
||||
static void *ngx_http_scgi_create_loc_conf(ngx_conf_t *cf);
|
||||
static char *ngx_http_scgi_merge_loc_conf(ngx_conf_t *cf, void *parent,
|
||||
@@ -446,6 +447,8 @@ ngx_http_scgi_handler(ngx_http_request_t
|
||||
u->pipe->input_filter = ngx_event_pipe_copy_input_filter;
|
||||
u->pipe->input_ctx = r;
|
||||
|
||||
+ u->input_filter_init = ngx_http_scgi_input_filter_init;
|
||||
+
|
||||
rc = ngx_http_read_client_request_body(r, ngx_http_upstream_init);
|
||||
|
||||
if (rc >= NGX_HTTP_SPECIAL_RESPONSE) {
|
||||
@@ -1046,6 +1049,17 @@ ngx_http_scgi_finalize_request(ngx_http_
|
||||
}
|
||||
|
||||
|
||||
+static ngx_int_t
|
||||
+ngx_http_scgi_input_filter_init(void *data)
|
||||
+{
|
||||
+ ngx_http_request_t *r = data;
|
||||
+
|
||||
+ r->upstream->length = -1;
|
||||
+
|
||||
+ return NGX_OK;
|
||||
+}
|
||||
+
|
||||
+
|
||||
static void *
|
||||
ngx_http_scgi_create_loc_conf(ngx_conf_t *cf)
|
||||
{
|
||||
diff --exclude '*~' --exclude '*.swp' -urp nginx-1.2.7/src/http/modules/ngx_http_uwsgi_module.c nginx-1.2.7-patched/src/http/modules/ngx_http_uwsgi_module.c
|
||||
--- nginx-1.2.7/src/http/modules/ngx_http_uwsgi_module.c 2013-02-09 19:08:42.000000000 -0800
|
||||
+++ nginx-1.2.7-patched/src/http/modules/ngx_http_uwsgi_module.c 2013-04-07 11:58:24.546915778 -0700
|
||||
@@ -46,6 +46,7 @@ static ngx_int_t ngx_http_uwsgi_process_
|
||||
static void ngx_http_uwsgi_abort_request(ngx_http_request_t *r);
|
||||
static void ngx_http_uwsgi_finalize_request(ngx_http_request_t *r,
|
||||
ngx_int_t rc);
|
||||
+static ngx_int_t ngx_http_uwsgi_input_filter_init(void *data);
|
||||
|
||||
static void *ngx_http_uwsgi_create_loc_conf(ngx_conf_t *cf);
|
||||
static char *ngx_http_uwsgi_merge_loc_conf(ngx_conf_t *cf, void *parent,
|
||||
@@ -479,6 +480,8 @@ ngx_http_uwsgi_handler(ngx_http_request_
|
||||
u->pipe->input_filter = ngx_event_pipe_copy_input_filter;
|
||||
u->pipe->input_ctx = r;
|
||||
|
||||
+ u->input_filter_init = ngx_http_uwsgi_input_filter_init;
|
||||
+
|
||||
rc = ngx_http_read_client_request_body(r, ngx_http_upstream_init);
|
||||
|
||||
if (rc >= NGX_HTTP_SPECIAL_RESPONSE) {
|
||||
@@ -1086,6 +1089,17 @@ ngx_http_uwsgi_finalize_request(ngx_http
|
||||
}
|
||||
|
||||
|
||||
+static ngx_int_t
|
||||
+ngx_http_uwsgi_input_filter_init(void *data)
|
||||
+{
|
||||
+ ngx_http_request_t *r = data;
|
||||
+
|
||||
+ r->upstream->length = -1;
|
||||
+
|
||||
+ return NGX_OK;
|
||||
+}
|
||||
+
|
||||
+
|
||||
static void *
|
||||
ngx_http_uwsgi_create_loc_conf(ngx_conf_t *cf)
|
||||
{
|
||||
diff --exclude '*~' --exclude '*.swp' -urp nginx-1.2.7/src/http/ngx_http_upstream.c nginx-1.2.7-patched/src/http/ngx_http_upstream.c
|
||||
--- nginx-1.2.7/src/http/ngx_http_upstream.c 2013-02-11 06:39:49.000000000 -0800
|
||||
+++ nginx-1.2.7-patched/src/http/ngx_http_upstream.c 2013-04-08 16:37:48.326752696 -0700
|
||||
@@ -2399,7 +2399,7 @@ ngx_http_upstream_process_non_buffered_u
|
||||
|
||||
if (c->read->timedout) {
|
||||
ngx_connection_error(c, NGX_ETIMEDOUT, "upstream timed out");
|
||||
- ngx_http_upstream_finalize_request(r, u, 0);
|
||||
+ ngx_http_upstream_finalize_request(r, u, NGX_HTTP_GATEWAY_TIME_OUT);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -2446,13 +2446,20 @@ ngx_http_upstream_process_non_buffered_r
|
||||
if (u->busy_bufs == NULL) {
|
||||
|
||||
if (u->length == 0
|
||||
- || upstream->read->eof
|
||||
- || upstream->read->error)
|
||||
+ || (upstream->read->eof
|
||||
+ && u->length == -1
|
||||
+ && u->pipe
|
||||
+ && u->pipe->length <= 0))
|
||||
{
|
||||
ngx_http_upstream_finalize_request(r, u, 0);
|
||||
return;
|
||||
}
|
||||
|
||||
+ if (upstream->read->eof || upstream->read->error) {
|
||||
+ ngx_http_upstream_finalize_request(r, u, NGX_HTTP_BAD_GATEWAY);
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
b->pos = b->start;
|
||||
b->last = b->start;
|
||||
}
|
||||
@@ -2720,7 +2727,9 @@ ngx_http_upstream_process_request(ngx_ht
|
||||
|
||||
#endif
|
||||
|
||||
- if (p->upstream_done || p->upstream_eof || p->upstream_error) {
|
||||
+ if (p->upstream_done
|
||||
+ || (p->upstream_eof && u->length == -1 && p->length <= 0))
|
||||
+ {
|
||||
ngx_log_debug1(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
|
||||
"http upstream exit: %p", p->out);
|
||||
#if 0
|
||||
@@ -2729,6 +2738,14 @@ ngx_http_upstream_process_request(ngx_ht
|
||||
ngx_http_upstream_finalize_request(r, u, 0);
|
||||
return;
|
||||
}
|
||||
+
|
||||
+ if (p->upstream_eof || p->upstream_error) {
|
||||
+ ngx_log_debug1(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
|
||||
+ "http upstream exit: %p", p->out);
|
||||
+
|
||||
+ ngx_http_upstream_finalize_request(r, u, NGX_HTTP_BAD_GATEWAY);
|
||||
+ return;
|
||||
+ }
|
||||
}
|
||||
|
||||
if (p->downstream_error) {
|
||||
@@ -3087,9 +3104,9 @@ ngx_http_upstream_finalize_request(ngx_h
|
||||
|
||||
if (u->header_sent
|
||||
&& rc != NGX_HTTP_REQUEST_TIME_OUT
|
||||
- && (rc == NGX_ERROR || rc >= NGX_HTTP_SPECIAL_RESPONSE))
|
||||
+ && rc >= NGX_HTTP_SPECIAL_RESPONSE)
|
||||
{
|
||||
- rc = 0;
|
||||
+ rc = NGX_ERROR;
|
||||
}
|
||||
|
||||
if (rc == NGX_DECLINED) {
|
332
t/sanity.t
332
t/sanity.t
File diff suppressed because it is too large
Load Diff
@ -109,8 +109,8 @@ echo "$info_txt applying the location_if_inherits_proxy patch for nginx"
|
||||
patch -p1 < $root/patches/nginx-$main_ver-location_if_inherits_proxy.patch || exit 1
|
||||
echo
|
||||
|
||||
echo "$info_txt applying the nonbuffered-upstream-truncation patch for nginx"
|
||||
patch -p1 < $root/patches/nginx-$main_ver-nonbuffered-upstream-truncation.patch || exit 1
|
||||
echo "$info_txt applying the upstream_truncation patch for nginx"
|
||||
patch -p1 < $root/patches/nginx-$main_ver-upstream_truncation.patch || exit 1
|
||||
echo
|
||||
|
||||
echo "$info_txt applying the channel-uninit-params patch for nginx"
|
||||
@ -156,7 +156,7 @@ rm -rf no-pool-nginx-$ver
|
||||
|
||||
#################################
|
||||
|
||||
ver=0.44
|
||||
ver=0.45
|
||||
$root/util/get-tarball "http://github.com/agentzh/echo-nginx-module/tarball/v$ver" -O echo-nginx-module-$ver.tar.gz || exit 1
|
||||
tar -xzf echo-nginx-module-$ver.tar.gz || exit 1
|
||||
mv agentzh-echo-nginx-module-* echo-nginx-module-$ver || exit 1
|
||||
@ -205,14 +205,14 @@ mv agentzh-headers-more-nginx-module-* headers-more-nginx-module-$ver || exit 1
|
||||
|
||||
#################################
|
||||
|
||||
ver=0.1.4
|
||||
ver=0.1.5
|
||||
$root/util/get-tarball "http://github.com/chaoslawful/drizzle-nginx-module/tarball/v$ver" -O drizzle-nginx-module-$ver.tar.gz || exit 1
|
||||
tar -xzf drizzle-nginx-module-$ver.tar.gz || exit 1
|
||||
mv chaoslawful-drizzle-nginx-module-* drizzle-nginx-module-$ver || exit 1
|
||||
|
||||
#################################
|
||||
|
||||
ver=0.7.18
|
||||
ver=0.7.20
|
||||
$root/util/get-tarball "http://github.com/chaoslawful/lua-nginx-module/tarball/v$ver" -O lua-nginx-module-$ver.tar.gz || exit 1
|
||||
tar -xzf lua-nginx-module-$ver.tar.gz || exit 1
|
||||
mv chaoslawful-lua-nginx-module-* ngx_lua-$ver || exit 1
|
||||
@ -381,7 +381,7 @@ mv agentzh-lua-resty-dns-* lua-resty-dns-$ver || exit 1
|
||||
|
||||
#################################
|
||||
|
||||
ver=0.10
|
||||
ver=0.11
|
||||
$root/util/get-tarball "http://github.com/agentzh/lua-resty-memcached/tarball/v$ver" -O "lua-resty-memcached-$ver.tar.gz" || exit 1
|
||||
tar -xzf lua-resty-memcached-$ver.tar.gz || exit 1
|
||||
mv agentzh-lua-resty-memcached-* lua-resty-memcached-$ver || exit 1
|
||||
@ -395,7 +395,7 @@ mv agentzh-lua-resty-redis-* lua-resty-redis-$ver || exit 1
|
||||
|
||||
#################################
|
||||
|
||||
ver=0.12
|
||||
ver=0.13
|
||||
$root/util/get-tarball "http://github.com/agentzh/lua-resty-mysql/tarball/v$ver" -O "lua-resty-mysql-$ver.tar.gz" || exit 1
|
||||
tar -xzf lua-resty-mysql-$ver.tar.gz || exit 1
|
||||
mv agentzh-lua-resty-mysql-* lua-resty-mysql-$ver || exit 1
|
||||
|
Reference in New Issue
Block a user