Update nginx image (#5010)
This commit is contained in:
parent
08e19a2788
commit
6ab10fa68d
17 changed files with 269 additions and 13 deletions
|
|
@ -0,0 +1,19 @@
|
|||
# HG changeset patch
|
||||
# User Yichun Zhang <agentzh@gmail.com>
|
||||
# Date 1383598130 28800
|
||||
# Node ID f64218e1ac963337d84092536f588b8e0d99bbaa
|
||||
# Parent dea321e5c0216efccbb23e84bbce7cf3e28f130c
|
||||
Cache: gracefully exit the cache manager process.
|
||||
|
||||
diff -r dea321e5c021 -r f64218e1ac96 src/os/unix/ngx_process_cycle.c
|
||||
--- a/src/os/unix/ngx_process_cycle.c Thu Oct 31 18:23:49 2013 +0400
|
||||
+++ b/src/os/unix/ngx_process_cycle.c Mon Nov 04 12:48:50 2013 -0800
|
||||
@@ -1335,7 +1335,7 @@
|
||||
|
||||
if (ngx_terminate || ngx_quit) {
|
||||
ngx_log_error(NGX_LOG_NOTICE, cycle->log, 0, "exiting");
|
||||
- exit(0);
|
||||
+ ngx_worker_process_exit(cycle);
|
||||
}
|
||||
|
||||
if (ngx_reopen) {
|
||||
20
images/nginx/rootfs/patches/nginx-1.17.8-hash_overflow.patch
Normal file
20
images/nginx/rootfs/patches/nginx-1.17.8-hash_overflow.patch
Normal file
|
|
@ -0,0 +1,20 @@
|
|||
# HG changeset patch
|
||||
# User Yichun Zhang <agentzh@gmail.com>
|
||||
# Date 1412276417 25200
|
||||
# Thu Oct 02 12:00:17 2014 -0700
|
||||
# Node ID 4032b992f23b054c1a2cfb0be879330d2c6708e5
|
||||
# Parent 1ff0f68d9376e3d184d65814a6372856bf65cfcd
|
||||
Hash: buffer overflow might happen when exceeding the pre-configured limits.
|
||||
|
||||
diff -r 1ff0f68d9376 -r 4032b992f23b src/core/ngx_hash.c
|
||||
--- a/src/core/ngx_hash.c Tue Sep 30 15:50:28 2014 -0700
|
||||
+++ b/src/core/ngx_hash.c Thu Oct 02 12:00:17 2014 -0700
|
||||
@@ -312,6 +312,8 @@ ngx_hash_init(ngx_hash_init_t *hinit, ng
|
||||
continue;
|
||||
}
|
||||
|
||||
+ size--;
|
||||
+
|
||||
ngx_log_error(NGX_LOG_WARN, hinit->pool->log, 0,
|
||||
"could not build optimal %s, you should increase "
|
||||
"either %s_max_size: %i or %s_bucket_size: %i; "
|
||||
|
|
@ -1,5 +1,5 @@
|
|||
--- nginx-1.17.4/src/core/ngx_log.h 2013-10-08 05:07:14.000000000 -0700
|
||||
+++ nginx-1.17.4-patched/src/core/ngx_log.h 2013-12-05 20:35:35.996236720 -0800
|
||||
--- nginx-1.17.8/src/core/ngx_log.h 2013-10-08 05:07:14.000000000 -0700
|
||||
+++ nginx-1.17.8-patched/src/core/ngx_log.h 2013-12-05 20:35:35.996236720 -0800
|
||||
@@ -64,7 +64,9 @@ struct ngx_log_s {
|
||||
};
|
||||
|
||||
185
images/nginx/rootfs/patches/nginx-1.17.8-socket_cloexec.patch
Normal file
185
images/nginx/rootfs/patches/nginx-1.17.8-socket_cloexec.patch
Normal file
|
|
@ -0,0 +1,185 @@
|
|||
diff --git a/auto/unix b/auto/unix
|
||||
index 10835f6c..b5b33bb3 100644
|
||||
--- a/auto/unix
|
||||
+++ b/auto/unix
|
||||
@@ -990,3 +990,27 @@ ngx_feature_test='struct addrinfo *res;
|
||||
if (getaddrinfo("localhost", NULL, NULL, &res) != 0) return 1;
|
||||
freeaddrinfo(res)'
|
||||
. auto/feature
|
||||
+
|
||||
+ngx_feature="SOCK_CLOEXEC support"
|
||||
+ngx_feature_name="NGX_HAVE_SOCKET_CLOEXEC"
|
||||
+ngx_feature_run=no
|
||||
+ngx_feature_incs="#include <sys/types.h>
|
||||
+ #include <sys/socket.h>"
|
||||
+ngx_feature_path=
|
||||
+ngx_feature_libs=
|
||||
+ngx_feature_test="int fd;
|
||||
+ fd = socket(AF_INET, SOCK_STREAM | SOCK_CLOEXEC, 0);"
|
||||
+. auto/feature
|
||||
+
|
||||
+ngx_feature="FD_CLOEXEC support"
|
||||
+ngx_feature_name="NGX_HAVE_FD_CLOEXEC"
|
||||
+ngx_feature_run=no
|
||||
+ngx_feature_incs="#include <sys/types.h>
|
||||
+ #include <sys/socket.h>
|
||||
+ #include <fcntl.h>"
|
||||
+ngx_feature_path=
|
||||
+ngx_feature_libs=
|
||||
+ngx_feature_test="int fd;
|
||||
+ fd = socket(AF_INET, SOCK_STREAM, 0);
|
||||
+ fcntl(fd, F_SETFD, FD_CLOEXEC);"
|
||||
+. auto/feature
|
||||
diff --git a/src/core/ngx_resolver.c b/src/core/ngx_resolver.c
|
||||
index cd55520c..438e0806 100644
|
||||
--- a/src/core/ngx_resolver.c
|
||||
+++ b/src/core/ngx_resolver.c
|
||||
@@ -4466,8 +4466,14 @@ ngx_tcp_connect(ngx_resolver_connection_t *rec)
|
||||
ngx_event_t *rev, *wev;
|
||||
ngx_connection_t *c;
|
||||
|
||||
+#if (NGX_HAVE_SOCKET_CLOEXEC)
|
||||
+ s = ngx_socket(rec->sockaddr->sa_family, SOCK_STREAM | SOCK_CLOEXEC, 0);
|
||||
+
|
||||
+#else
|
||||
s = ngx_socket(rec->sockaddr->sa_family, SOCK_STREAM, 0);
|
||||
|
||||
+#endif
|
||||
+
|
||||
ngx_log_debug1(NGX_LOG_DEBUG_EVENT, &rec->log, 0, "TCP socket %d", s);
|
||||
|
||||
if (s == (ngx_socket_t) -1) {
|
||||
@@ -4494,6 +4500,15 @@ ngx_tcp_connect(ngx_resolver_connection_t *rec)
|
||||
goto failed;
|
||||
}
|
||||
|
||||
+#if (NGX_HAVE_FD_CLOEXEC)
|
||||
+ if (ngx_cloexec(s) == -1) {
|
||||
+ ngx_log_error(NGX_LOG_ALERT, &rec->log, ngx_socket_errno,
|
||||
+ ngx_cloexec_n " failed");
|
||||
+
|
||||
+ goto failed;
|
||||
+ }
|
||||
+#endif
|
||||
+
|
||||
rev = c->read;
|
||||
wev = c->write;
|
||||
|
||||
diff --git a/src/event/ngx_event.h b/src/event/ngx_event.h
|
||||
index 19fec68..8c2f01a 100644
|
||||
--- a/src/event/ngx_event.h
|
||||
+++ b/src/event/ngx_event.h
|
||||
@@ -73,6 +73,9 @@ struct ngx_event_s {
|
||||
/* to test on worker exit */
|
||||
unsigned channel:1;
|
||||
unsigned resolver:1;
|
||||
+#if (HAVE_SOCKET_CLOEXEC_PATCH)
|
||||
+ unsigned skip_socket_leak_check:1;
|
||||
+#endif
|
||||
|
||||
unsigned cancelable:1;
|
||||
|
||||
diff --git a/src/event/ngx_event_accept.c b/src/event/ngx_event_accept.c
|
||||
index 77563709..5827b9d0 100644
|
||||
--- a/src/event/ngx_event_accept.c
|
||||
+++ b/src/event/ngx_event_accept.c
|
||||
@@ -62,7 +62,9 @@ ngx_event_accept(ngx_event_t *ev)
|
||||
|
||||
#if (NGX_HAVE_ACCEPT4)
|
||||
if (use_accept4) {
|
||||
- s = accept4(lc->fd, &sa.sockaddr, &socklen, SOCK_NONBLOCK);
|
||||
+ s = accept4(lc->fd, &sa.sockaddr, &socklen,
|
||||
+ SOCK_NONBLOCK | SOCK_CLOEXEC);
|
||||
+
|
||||
} else {
|
||||
s = accept(lc->fd, &sa.sockaddr, &socklen);
|
||||
}
|
||||
@@ -202,6 +204,16 @@ ngx_event_accept(ngx_event_t *ev)
|
||||
ngx_close_accepted_connection(c);
|
||||
return;
|
||||
}
|
||||
+
|
||||
+#if (NGX_HAVE_FD_CLOEXEC)
|
||||
+ if (ngx_cloexec(s) == -1) {
|
||||
+ ngx_log_error(NGX_LOG_ALERT, ev->log, ngx_socket_errno,
|
||||
+ ngx_cloexec_n " failed");
|
||||
+ ngx_close_accepted_connection(c);
|
||||
+ return;
|
||||
+ }
|
||||
+#endif
|
||||
+
|
||||
}
|
||||
}
|
||||
|
||||
diff --git a/src/event/ngx_event_connect.c b/src/event/ngx_event_connect.c
|
||||
index c5bb8068..cf33b1d2 100644
|
||||
--- a/src/event/ngx_event_connect.c
|
||||
+++ b/src/event/ngx_event_connect.c
|
||||
@@ -38,8 +38,15 @@ ngx_event_connect_peer(ngx_peer_connection_t *pc)
|
||||
|
||||
type = (pc->type ? pc->type : SOCK_STREAM);
|
||||
|
||||
+#if (NGX_HAVE_SOCKET_CLOEXEC)
|
||||
+ s = ngx_socket(pc->sockaddr->sa_family, type | SOCK_CLOEXEC, 0);
|
||||
+
|
||||
+#else
|
||||
s = ngx_socket(pc->sockaddr->sa_family, type, 0);
|
||||
|
||||
+#endif
|
||||
+
|
||||
+
|
||||
ngx_log_debug2(NGX_LOG_DEBUG_EVENT, pc->log, 0, "%s socket %d",
|
||||
(type == SOCK_STREAM) ? "stream" : "dgram", s);
|
||||
|
||||
@@ -80,6 +87,15 @@ ngx_event_connect_peer(ngx_peer_connection_t *pc)
|
||||
goto failed;
|
||||
}
|
||||
|
||||
+#if (NGX_HAVE_FD_CLOEXEC)
|
||||
+ if (ngx_cloexec(s) == -1) {
|
||||
+ ngx_log_error(NGX_LOG_ALERT, pc->log, ngx_socket_errno,
|
||||
+ ngx_cloexec_n " failed");
|
||||
+
|
||||
+ goto failed;
|
||||
+ }
|
||||
+#endif
|
||||
+
|
||||
if (pc->local) {
|
||||
|
||||
#if (NGX_HAVE_TRANSPARENT_PROXY)
|
||||
diff --git a/src/os/unix/ngx_process_cycle.c b/src/os/unix/ngx_process_cycle.c
|
||||
index c4376a5..48e8fa8 100644
|
||||
--- a/src/os/unix/ngx_process_cycle.c
|
||||
+++ b/src/os/unix/ngx_process_cycle.c
|
||||
@@ -1032,6 +1032,9 @@ ngx_worker_process_exit(ngx_cycle_t *cycle)
|
||||
for (i = 0; i < cycle->connection_n; i++) {
|
||||
if (c[i].fd != -1
|
||||
&& c[i].read
|
||||
+#if (HAVE_SOCKET_CLOEXEC_PATCH)
|
||||
+ && !c[i].read->skip_socket_leak_check
|
||||
+#endif
|
||||
&& !c[i].read->accept
|
||||
&& !c[i].read->channel
|
||||
&& !c[i].read->resolver)
|
||||
diff --git a/src/os/unix/ngx_socket.h b/src/os/unix/ngx_socket.h
|
||||
index fcc51533..d1eebf47 100644
|
||||
--- a/src/os/unix/ngx_socket.h
|
||||
+++ b/src/os/unix/ngx_socket.h
|
||||
@@ -38,6 +38,17 @@ int ngx_blocking(ngx_socket_t s);
|
||||
|
||||
#endif
|
||||
|
||||
+#if (NGX_HAVE_FD_CLOEXEC)
|
||||
+
|
||||
+#define ngx_cloexec(s) fcntl(s, F_SETFD, FD_CLOEXEC)
|
||||
+#define ngx_cloexec_n "fcntl(FD_CLOEXEC)"
|
||||
+
|
||||
+/* at least FD_CLOEXEC is required to ensure connection fd is closed
|
||||
+ * after execve */
|
||||
+#define HAVE_SOCKET_CLOEXEC_PATCH 1
|
||||
+
|
||||
+#endif
|
||||
+
|
||||
int ngx_tcp_nopush(ngx_socket_t s);
|
||||
int ngx_tcp_push(ngx_socket_t s);
|
||||
|
||||
|
|
@ -0,0 +1,23 @@
|
|||
commit f9907b72a76a21ac5413187b83177a919475c75f
|
||||
Author: Yichun Zhang (agentzh) <agentzh@gmail.com>
|
||||
Date: Wed Feb 10 16:05:08 2016 -0800
|
||||
|
||||
bugfix: upstream: keep sending request data after the first write attempt.
|
||||
|
||||
See
|
||||
http://mailman.nginx.org/pipermail/nginx-devel/2012-March/002040.html
|
||||
for more details on the issue.
|
||||
|
||||
diff --git a/src/http/ngx_http_upstream.c b/src/http/ngx_http_upstream.c
|
||||
index 69019417..92b7c97f 100644
|
||||
--- a/src/http/ngx_http_upstream.c
|
||||
+++ b/src/http/ngx_http_upstream.c
|
||||
@@ -2239,7 +2239,7 @@ ngx_http_upstream_send_request_handler(ngx_http_request_t *r,
|
||||
|
||||
#endif
|
||||
|
||||
- if (u->header_sent && !u->conf->preserve_output) {
|
||||
+ if (u->request_body_sent && !u->conf->preserve_output) {
|
||||
u->write_event_handler = ngx_http_upstream_dummy_handler;
|
||||
|
||||
(void) ngx_handle_write_event(c->write, 0);
|
||||
Loading…
Add table
Add a link
Reference in a new issue