mirror of
https://github.com/openresty/openresty.git
synced 2024-10-13 00:29:41 +00:00
Compare commits
10 Commits
Author | SHA1 | Date | |
---|---|---|---|
da90bd7671 | |||
4a80309873 | |||
383901b193 | |||
9bd838251f | |||
e5fd373848 | |||
db38504310 | |||
2351c7c7aa | |||
f3d36df365 | |||
220b940e66 | |||
c0c2f883e9 |
@ -451,21 +451,6 @@ index ef4a647..49bb30b 100644
|
||||
return p;
|
||||
}
|
||||
|
||||
diff --git a/src/core/ngx_thread_pool.h b/src/core/ngx_thread_pool.h
|
||||
index 5e5adf6..5999525 100644
|
||||
--- a/src/core/ngx_thread_pool.h
|
||||
+++ b/src/core/ngx_thread_pool.h
|
||||
@@ -23,7 +23,10 @@ struct ngx_thread_task_s {
|
||||
};
|
||||
|
||||
|
||||
+#ifndef NGX_DEFINE_THREAD_POOL_T
|
||||
+#define NGX_DEFINE_THREAD_POOL_T 1
|
||||
typedef struct ngx_thread_pool_s ngx_thread_pool_t;
|
||||
+#endif
|
||||
|
||||
|
||||
ngx_thread_pool_t *ngx_thread_pool_add(ngx_conf_t *cf, ngx_str_t *name);
|
||||
diff --git a/src/dtrace/nginx.stp b/src/dtrace/nginx.stp
|
||||
new file mode 100644
|
||||
index 0000000..e824daf
|
||||
@ -831,10 +816,10 @@ index 0000000..1bca4cf
|
||||
+
|
||||
diff --git a/src/event/ngx_event_probe.h b/src/event/ngx_event_probe.h
|
||||
new file mode 100644
|
||||
index 0000000..9fa2a82
|
||||
index 0000000..5aa0397
|
||||
--- /dev/null
|
||||
+++ b/src/event/ngx_event_probe.h
|
||||
@@ -0,0 +1,40 @@
|
||||
@@ -0,0 +1,33 @@
|
||||
+#ifndef _NGX_EVENT_PROBE_H_INCLUDED_
|
||||
+#define _NGX_EVENT_PROBE_H_INCLUDED_
|
||||
+
|
||||
@ -846,13 +831,6 @@ index 0000000..9fa2a82
|
||||
+
|
||||
+#if (NGX_DTRACE)
|
||||
+
|
||||
+#if (NGX_THREADS)
|
||||
+# ifndef NGX_DEFINE_THREAD_POOL_T
|
||||
+# define NGX_DEFINE_THREAD_POOL_T 1
|
||||
+typedef struct ngx_thread_pool_s ngx_thread_pool_t;
|
||||
+# endif
|
||||
+#endif
|
||||
+
|
||||
+#include <ngx_http.h>
|
||||
+#include <ngx_dtrace_provider.h>
|
||||
+
|
||||
@ -876,10 +854,18 @@ index 0000000..9fa2a82
|
||||
+
|
||||
+#endif /* _NGX_EVENT_PROBE_H_INCLUDED_ */
|
||||
diff --git a/src/event/ngx_event_timer.c b/src/event/ngx_event_timer.c
|
||||
index 8f547b2..e12a51e 100644
|
||||
index 8f547b2..6e77465 100644
|
||||
--- a/src/event/ngx_event_timer.c
|
||||
+++ b/src/event/ngx_event_timer.c
|
||||
@@ -91,6 +91,8 @@ ngx_event_expire_timers(void)
|
||||
@@ -8,6 +8,7 @@
|
||||
#include <ngx_config.h>
|
||||
#include <ngx_core.h>
|
||||
#include <ngx_event.h>
|
||||
+#include <ngx_event_probe.h>
|
||||
|
||||
|
||||
ngx_rbtree_t ngx_event_timer_rbtree;
|
||||
@@ -91,6 +92,8 @@ ngx_event_expire_timers(void)
|
||||
|
||||
ev->timedout = 1;
|
||||
|
||||
@ -888,32 +874,61 @@ index 8f547b2..e12a51e 100644
|
||||
ev->handler(ev);
|
||||
}
|
||||
}
|
||||
@@ -136,3 +139,19 @@ ngx_event_cancel_timers(void)
|
||||
ev->handler(ev);
|
||||
}
|
||||
}
|
||||
+
|
||||
+
|
||||
+#if (NGX_DTRACE)
|
||||
+void
|
||||
+ngx_event_probe_timer_add_helper(ngx_event_t *ev, ngx_msec_t timer)
|
||||
+{
|
||||
+ ngx_event_probe_timer_add(ev, timer);
|
||||
+}
|
||||
+
|
||||
+
|
||||
+void
|
||||
+ngx_event_probe_timer_del_helper(ngx_event_t *ev)
|
||||
+{
|
||||
+ ngx_event_probe_timer_del(ev);
|
||||
+}
|
||||
+#endif
|
||||
diff --git a/src/event/ngx_event_timer.h b/src/event/ngx_event_timer.h
|
||||
index 99f8a48..79c3fa0 100644
|
||||
index 99f8a48..8bc619a 100644
|
||||
--- a/src/event/ngx_event_timer.h
|
||||
+++ b/src/event/ngx_event_timer.h
|
||||
@@ -12,6 +12,7 @@
|
||||
#include <ngx_config.h>
|
||||
#include <ngx_core.h>
|
||||
#include <ngx_event.h>
|
||||
+#include <ngx_event_probe.h>
|
||||
@@ -25,12 +25,23 @@ void ngx_event_expire_timers(void);
|
||||
void ngx_event_cancel_timers(void);
|
||||
|
||||
|
||||
+#if (NGX_DTRACE)
|
||||
+void ngx_event_probe_timer_add_helper(ngx_event_t *ev,
|
||||
+ ngx_msec_t timer);
|
||||
+void ngx_event_probe_timer_del_helper(ngx_event_t *ev);
|
||||
+#endif
|
||||
+
|
||||
+
|
||||
extern ngx_rbtree_t ngx_event_timer_rbtree;
|
||||
|
||||
|
||||
#define NGX_TIMER_INFINITE (ngx_msec_t) -1
|
||||
@@ -31,6 +32,8 @@ extern ngx_rbtree_t ngx_event_timer_rbtree;
|
||||
static ngx_inline void
|
||||
ngx_event_del_timer(ngx_event_t *ev)
|
||||
{
|
||||
+ ngx_event_probe_timer_del(ev);
|
||||
+#if (NGX_DTRACE)
|
||||
+ ngx_event_probe_timer_del_helper(ev);
|
||||
+#endif
|
||||
+
|
||||
ngx_log_debug2(NGX_LOG_DEBUG_EVENT, ev->log, 0,
|
||||
"event timer del: %d: %M",
|
||||
ngx_event_ident(ev->data), ev->timer.key);
|
||||
@@ -77,6 +80,8 @@ ngx_event_add_timer(ngx_event_t *ev, ngx_msec_t timer)
|
||||
@@ -77,6 +88,10 @@ ngx_event_add_timer(ngx_event_t *ev, ngx_msec_t timer)
|
||||
|
||||
ev->timer.key = key;
|
||||
|
||||
+ ngx_event_probe_timer_add(ev, timer);
|
||||
+#if (NGX_DTRACE)
|
||||
+ ngx_event_probe_timer_add_helper(ev, timer);
|
||||
+#endif
|
||||
+
|
||||
ngx_log_debug3(NGX_LOG_DEBUG_EVENT, ev->log, 0,
|
||||
"event timer add: %d: %M:%M",
|
||||
|
42
patches/nginx-1.9.7-ssl_cert_cb_yield.patch
Normal file
42
patches/nginx-1.9.7-ssl_cert_cb_yield.patch
Normal file
@ -0,0 +1,42 @@
|
||||
# HG changeset patch
|
||||
# User Yichun Zhang <agentzh@openresty.org>
|
||||
# Date 1451762084 28800
|
||||
# Sat Jan 02 11:14:44 2016 -0800
|
||||
# Node ID 449f0461859c16e95bdb18e8be6b94401545d3dd
|
||||
# Parent 78b4e10b4367b31367aad3c83c9c3acdd42397c4
|
||||
SSL: handled SSL_CTX_set_cert_cb() callback yielding.
|
||||
|
||||
OpenSSL 1.0.2+ introduces SSL_CTX_set_cert_cb() to allow custom
|
||||
callbacks to serve the SSL certificiates and private keys dynamically
|
||||
and lazily. The callbacks may yield for nonblocking I/O or sleeping.
|
||||
Here we added support for such usage in NGINX 3rd-party modules
|
||||
(like ngx_lua) in NGINX's event handlers for downstream SSL
|
||||
connections.
|
||||
|
||||
diff -r 78b4e10b4367 -r 449f0461859c src/event/ngx_event_openssl.c
|
||||
--- a/src/event/ngx_event_openssl.c Thu Dec 17 16:39:15 2015 +0300
|
||||
+++ b/src/event/ngx_event_openssl.c Sat Jan 02 11:14:44 2016 -0800
|
||||
@@ -1210,6 +1210,23 @@
|
||||
return NGX_AGAIN;
|
||||
}
|
||||
|
||||
+#if OPENSSL_VERSION_NUMBER >= 0x10002000L
|
||||
+ if (sslerr == SSL_ERROR_WANT_X509_LOOKUP) {
|
||||
+ c->read->handler = ngx_ssl_handshake_handler;
|
||||
+ c->write->handler = ngx_ssl_handshake_handler;
|
||||
+
|
||||
+ if (ngx_handle_read_event(c->read, 0) != NGX_OK) {
|
||||
+ return NGX_ERROR;
|
||||
+ }
|
||||
+
|
||||
+ if (ngx_handle_write_event(c->write, 0) != NGX_OK) {
|
||||
+ return NGX_ERROR;
|
||||
+ }
|
||||
+
|
||||
+ return NGX_AGAIN;
|
||||
+ }
|
||||
+#endif
|
||||
+
|
||||
err = (sslerr == SSL_ERROR_SYSCALL) ? ngx_errno : 0;
|
||||
|
||||
c->ssl->no_wait_shutdown = 1;
|
312
t/sanity.t
312
t/sanity.t
File diff suppressed because it is too large
Load Diff
@ -46,8 +46,10 @@ if ($^O eq 'solaris') {
|
||||
}
|
||||
|
||||
if ($^O eq 'darwin') {
|
||||
$cfg_opts .= " --with-cc-opt='-I/usr/local/include'"
|
||||
. " --with-ld-opt='-L/usr/local/lib'";
|
||||
$cfg_opts .= " --with-cc-opt='-I/usr/local/opt/openssl/include/ "
|
||||
. "-I/usr/local/opt/pcre/include/'"
|
||||
. " --with-ld-opt='-L/usr/local/opt/openssl/lib/ "
|
||||
. "-L/usr/local/opt/pcre/lib/'";
|
||||
}
|
||||
|
||||
my $prefix;
|
||||
@ -65,6 +67,45 @@ sub write_config_file ($) {
|
||||
|
||||
write_config_file "/tmp/nginx.conf";
|
||||
|
||||
warn "=== --with-stream ===\n";
|
||||
$prefix = "/usr/local/openresty-nogzip";
|
||||
sh "sudo rm -rf $prefix/lualib $prefix/luajit $prefix/bin $prefix/lua $prefix/nginx/sbin $prefix/nginx/html";
|
||||
unless ($opts{f}) {
|
||||
sh "./configure $cfg_opts --with-stream --prefix=$prefix -j$jobs > /dev/null";
|
||||
}
|
||||
sh "$make -j$jobs > /dev/null";
|
||||
sh "sudo $make install > /dev/null";
|
||||
sh "sudo cp /tmp/nginx.conf $prefix/nginx/conf/nginx.conf";
|
||||
sh "$prefix/nginx/sbin/nginx -V 2>&1 |grep $ver";
|
||||
sh "$prefix/nginx/sbin/nginx -V 2>&1 |grep '\\--with-stream'";
|
||||
system "sudo killall nginx > /dev/null 2>&1";
|
||||
sh "sudo $prefix/nginx/sbin/nginx";
|
||||
sh "curl -si localhost/lua|grep $lua";
|
||||
sh "curl -si localhost/lua|grep $ver";
|
||||
sh "curl -si localhost/cjson|grep 'json.safe: '";
|
||||
sh qq{$prefix/bin/resty -e 'ngx.say("Hello World!")'|grep 'Hello World'};
|
||||
sh "sudo $prefix/nginx/sbin/nginx -sstop";
|
||||
|
||||
warn "=== --with-stream + dtrace static probes ===\n";
|
||||
$prefix = "/usr/local/openresty-nogzip";
|
||||
sh "sudo rm -rf $prefix/lualib $prefix/luajit $prefix/bin $prefix/lua $prefix/nginx/sbin $prefix/nginx/html";
|
||||
unless ($opts{f}) {
|
||||
sh "./configure $cfg_opts --with-dtrace-probes --with-stream --prefix=$prefix -j$jobs > /dev/null";
|
||||
}
|
||||
sh "$make -j$jobs > /dev/null";
|
||||
sh "sudo $make install > /dev/null";
|
||||
sh "sudo cp /tmp/nginx.conf $prefix/nginx/conf/nginx.conf";
|
||||
sh "$prefix/nginx/sbin/nginx -V 2>&1 |grep $ver";
|
||||
sh "$prefix/nginx/sbin/nginx -V 2>&1 |grep '\\--with-stream'";
|
||||
sh "$prefix/nginx/sbin/nginx -V 2>&1 |grep '\\--with-dtrace-probes'";
|
||||
system "sudo killall nginx > /dev/null 2>&1";
|
||||
sh "sudo $prefix/nginx/sbin/nginx";
|
||||
sh "curl -si localhost/lua|grep $lua";
|
||||
sh "curl -si localhost/lua|grep $ver";
|
||||
sh "curl -si localhost/cjson|grep 'json.safe: '";
|
||||
sh qq{$prefix/bin/resty -e 'ngx.say("Hello World!")'|grep 'Hello World'};
|
||||
sh "sudo $prefix/nginx/sbin/nginx -sstop";
|
||||
|
||||
warn "=== Without Gzip/SSL/PCRE ===\n";
|
||||
$prefix = "/usr/local/openresty-nogzip";
|
||||
sh "sudo rm -rf $prefix/lualib $prefix/luajit $prefix/bin $prefix/lua $prefix/nginx/sbin $prefix/nginx/html";
|
||||
@ -221,6 +262,13 @@ http {
|
||||
end
|
||||
';
|
||||
|
||||
upstream backend {
|
||||
server 0.0.0.1;
|
||||
balancer_by_lua_block {
|
||||
print("balancer!")
|
||||
}
|
||||
}
|
||||
|
||||
server {
|
||||
listen *:80;
|
||||
server_name localhost;
|
||||
|
@ -299,6 +299,10 @@ echo "$info_txt applying the always_enable_cc_feature_tests patch to nginx"
|
||||
patch -p1 < $root/patches/nginx-$main_ver-always_enable_cc_feature_tests.patch
|
||||
echo
|
||||
|
||||
echo "$info_txt applying the ssl_cert_cb_yield.patch patch to nginx"
|
||||
patch -p1 < $root/patches/nginx-$main_ver-ssl_cert_cb_yield.patch
|
||||
echo
|
||||
|
||||
cd .. || exit 1
|
||||
|
||||
cp $root/patches/nginx-$main_ver-no_pool.patch ./nginx-no_pool.patch || exit 1
|
||||
@ -366,7 +370,7 @@ mv openresty-drizzle-nginx-module-* drizzle-nginx-module-$ver || exit 1
|
||||
|
||||
#################################
|
||||
|
||||
ver=0.9.20
|
||||
ver=0.10.0
|
||||
$root/util/get-tarball "https://github.com/openresty/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 openresty-lua-nginx-module-* ngx_lua-$ver || exit 1
|
||||
@ -501,7 +505,7 @@ echo
|
||||
|
||||
#################################
|
||||
|
||||
ver=2.1-20151219
|
||||
ver=2.1-20160108
|
||||
$root/util/get-tarball "https://github.com/openresty/luajit2/archive/v$ver.tar.gz" -O "LuaJIT-$ver.tar.gz" || exit 1
|
||||
tar -xzf LuaJIT-$ver.tar.gz || exit 1
|
||||
mv luajit2-* LuaJIT-$ver || exit 1
|
||||
@ -665,7 +669,7 @@ cd ..
|
||||
|
||||
#################################
|
||||
|
||||
ver=0.1.3
|
||||
ver=0.1.4
|
||||
$root/util/get-tarball "https://github.com/openresty/lua-resty-core/tarball/v$ver" -O "lua-resty-core-$ver.tar.gz" || exit 1
|
||||
tar -xzf lua-resty-core-$ver.tar.gz || exit 1
|
||||
mv openresty-lua-resty-core-* lua-resty-core-$ver || exit 1
|
||||
|
Reference in New Issue
Block a user