From ranier.vf at gmail.com Fri Dec 1 23:42:37 2017 From: ranier.vf at gmail.com (Ranier Vf) Date: Fri, 1 Dec 2017 21:42:37 -0200 Subject: Coverity report dereference after null check in /src/http/ngx_http_upstream.c Message-ID: Hi, Coverity report dereference after null check in /src/http/ngx_http_upstream.c CID 400852 (#1 of 1): Dereference after null check (FORWARD_NULL)22. var_deref_op: Dereferencing null pointer u->pipe. line 4356: ngx_http_file_cache_free(r->cache, u->pipe->temp_file); Required add check u->pipe? Best regards, Ranier Vilela Livre de v?rus. www.avast.com . <#DAB4FAD8-2DD7-40BB-A1B8-4E2AA1F9FDF2> -------------- next part -------------- An HTML attachment was scrubbed... URL: From rpaprocki at fearnothingproductions.net Sat Dec 2 00:26:55 2017 From: rpaprocki at fearnothingproductions.net (Robert Paprocki) Date: Fri, 1 Dec 2017 16:26:55 -0800 Subject: [PATCH] Validate presence of upstream pipe in ngx_http_upstream_finalize_request Message-ID: # HG changeset patch # User Robert Paprocki # Date 1512174351 28800 # Fri Dec 01 16:25:51 2017 -0800 # Node ID a200e7c746dc7853b051f9b357a5b9c24d6b0dd0 # Parent fc0d06224edac2c7cfbfd9a4def478f285d9957b Validate presence of upstream pipe in ngx_http_upstream_finalize_request diff -r fc0d06224eda -r a200e7c746dc src/http/ngx_http_upstream.c --- a/src/http/ngx_http_upstream.c Tue Nov 28 13:09:54 2017 +0300 +++ b/src/http/ngx_http_upstream.c Fri Dec 01 16:25:51 2017 -0800 @@ -4353,7 +4353,9 @@ } } - ngx_http_file_cache_free(r->cache, u->pipe->temp_file); + if (u->pipe) { + ngx_http_file_cache_free(r->cache, u->pipe->temp_file); + } } #endif -------------- next part -------------- An HTML attachment was scrubbed... URL: From piotrsikora at google.com Sat Dec 2 00:49:29 2017 From: piotrsikora at google.com (Piotr Sikora) Date: Fri, 01 Dec 2017 16:49:29 -0800 Subject: [PATCH] Upstream: flush low-level buffers on write retry Message-ID: <0e2e2da798261fe51050.1512175769@piotrsikora.sfo.corp.google.com> # HG changeset patch # User Patryk Lesiewicz # Date 1512172754 28800 # Fri Dec 01 15:59:14 2017 -0800 # Node ID 0e2e2da798261fe5105017d9678566267b07e2b9 # Parent fc0d06224edac2c7cfbfd9a4def478f285d9957b Upstream: flush low-level buffers on write retry. If the data to write is bigger than what the socket can send, and the reminder is smaller than NGX_SSL_BUFSIZE, then SSL_write() fails with SSL_ERROR_WANT_WRITE. The reminder of payload however is successfully copied to the low-level buffer and all the output chain buffers are flushed. This means that retry logic doesn't work because ngx_http_upstream_process_non_buffered_request() checks only if there's anything in the output chain buffers and ignores the fact that something may be buffered in low-level parts of the stack. Signed-off-by: Patryk Lesiewicz diff -r fc0d06224eda -r 0e2e2da79826 src/http/ngx_http_upstream.c --- a/src/http/ngx_http_upstream.c +++ b/src/http/ngx_http_upstream.c @@ -3533,7 +3533,7 @@ ngx_http_upstream_process_non_buffered_r if (do_write) { - if (u->out_bufs || u->busy_bufs) { + if (u->out_bufs || u->busy_bufs || downstream->buffered) { rc = ngx_http_output_filter(r, u->out_bufs); if (rc == NGX_ERROR) { From debayang.qdt at qualcommdatacenter.com Sun Dec 3 15:41:52 2017 From: debayang.qdt at qualcommdatacenter.com (Debayan Ghosh) Date: Sun, 03 Dec 2017 21:11:52 +0530 Subject: [PATCH] Configure: Prefer gcc __atomic builtins instead of older __sync builtins Message-ID: <4576e7c90ed42da3af67.1512315712@blr-ubuntu-149.qualcomm.com> # HG changeset patch # User Debayan Ghosh # Date 1511884462 -19800 # Tue Nov 28 21:24:22 2017 +0530 # Node ID 4576e7c90ed42da3af67d90f624b34dd9285a658 # Parent fc0d06224edac2c7cfbfd9a4def478f285d9957b Configure: Prefer gcc __atomic builtins instead of older __sync builtins It is desirable to use the newer GCC __atomic builtins when using later versions of GCC , compared to the legacy __sync atomic builtins. Ref: https://gcc.gnu.org/onlinedocs/gcc/_005f_005fatomic-Builtins.html diff -r fc0d06224eda -r 4576e7c90ed4 auto/cc/conf --- a/auto/cc/conf Tue Nov 28 13:09:54 2017 +0300 +++ b/auto/cc/conf Tue Nov 28 21:24:22 2017 +0530 @@ -181,12 +181,28 @@ if [ "$NGX_CC_NAME" = "sunc" ]; then echo "checking for gcc builtin atomic operations ... disabled" else - ngx_feature="gcc builtin atomic operations" + ngx_feature="gcc builtin new atomic operations" ngx_feature_name=NGX_HAVE_GCC_ATOMIC ngx_feature_run=yes ngx_feature_incs= ngx_feature_path= ngx_feature_libs= + ngx_feature_test="long n = 0, m = 0; + if (!__atomic_compare_exchange_n(&n, &m, 1, 0, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST)) + return 1; + if (__atomic_fetch_add(&n, 1, __ATOMIC_SEQ_CST) != 1) + return 1; + if (n != 2) + return 1; + __atomic_thread_fence(__ATOMIC_ACQUIRE);" + . auto/feature + + ngx_feature="gcc builtin sync atomic operations" + ngx_feature_name=NGX_HAVE_GCC_SYNC_ATOMIC + ngx_feature_run=yes + ngx_feature_incs= + ngx_feature_path= + ngx_feature_libs= ngx_feature_test="long n = 0; if (!__sync_bool_compare_and_swap(&n, 0, 1)) return 1; diff -r fc0d06224eda -r 4576e7c90ed4 src/os/unix/ngx_atomic.h --- a/src/os/unix/ngx_atomic.h Tue Nov 28 13:09:54 2017 +0300 +++ b/src/os/unix/ngx_atomic.h Tue Nov 28 21:24:22 2017 +0530 @@ -88,9 +88,8 @@ typedef volatile ngx_atomic_uint_t ngx_atomic_t; -#elif (NGX_HAVE_GCC_ATOMIC) +#elif (NGX_HAVE_GCC_ATOMIC || NGX_HAVE_GCC_SYNC_ATOMIC) -/* GCC 4.1 builtin atomic operations */ #define NGX_HAVE_ATOMIC_OPS 1 @@ -105,7 +104,24 @@ typedef volatile ngx_atomic_uint_t ngx_atomic_t; +#if (NGX_HAVE_GCC_ATOMIC) +/* Use GCC 5.4 builtin atomic operations */ +static inline ngx_atomic_uint_t +ngx_atomic_cmp_set(ngx_atomic_t *lock, ngx_atomic_uint_t old, + ngx_atomic_uint_t set) { + return __atomic_compare_exchange_n(lock, &old, set, 0, + __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST); +} +static inline ngx_atomic_int_t +ngx_atomic_fetch_add(ngx_atomic_t *value, ngx_atomic_int_t add) { + return __atomic_fetch_add(value, add, __ATOMIC_SEQ_CST); +} + +#define ngx_memory_barrier() __atomic_thread_fence(__ATOMIC_ACQUIRE) + +#else +/* Use older gcc sync atomic builtin operations */ #define ngx_atomic_cmp_set(lock, old, set) \ __sync_bool_compare_and_swap(lock, old, set) @@ -113,6 +129,8 @@ __sync_fetch_and_add(value, add) #define ngx_memory_barrier() __sync_synchronize() +#endif + #if ( __i386__ || __i386 || __amd64__ || __amd64 ) #define ngx_cpu_pause() __asm__ ("pause") From mdounin at mdounin.ru Mon Dec 4 14:22:30 2017 From: mdounin at mdounin.ru (Maxim Dounin) Date: Mon, 4 Dec 2017 17:22:30 +0300 Subject: Coverity report dereference after null check in /src/http/ngx_http_upstream.c In-Reply-To: References: Message-ID: <20171204142229.GX78325@mdounin.ru> Hello! On Fri, Dec 01, 2017 at 09:42:37PM -0200, Ranier Vf wrote: > Coverity report dereference after null check in > /src/http/ngx_http_upstream.c > > CID 400852 (#1 of 1): Dereference after null check (FORWARD_NULL)22. > var_deref_op: Dereferencing null pointer u->pipe. > > line 4356: ngx_http_file_cache_free(r->cache, u->pipe->temp_file); > > Required add check u->pipe? It's complicated. Simply adding a check in a particular place is certainly wrong, as r->cache is only expected to exist only if u->pipe exists as well. On the other hand, in theory it is possible for r->cache to be not in sync with "u" in a very specific case of filter finalization (combined with caching, and also combined with error_page redirection to a different location with upstream), when "u" comes from an old upstream connection, and r->cache was already updated to work with a new one. Additional u->pipe checks won't help here though, as almost every thing done with r->cache in such a case is likely wrong. One of the possible fixes I've suggested several years ago is to move r->cache to upstream structure, so the old "u" will be self-consistent, though Igor disagree with such approach. Not sure there are other good solutions though. The problem is mostly theoretical though, as all practical cases work fine. -- Maxim Dounin http://mdounin.ru/ From mdounin at mdounin.ru Mon Dec 4 14:23:26 2017 From: mdounin at mdounin.ru (Maxim Dounin) Date: Mon, 4 Dec 2017 17:23:26 +0300 Subject: [PATCH] Validate presence of upstream pipe in ngx_http_upstream_finalize_request In-Reply-To: References: Message-ID: <20171204142326.GY78325@mdounin.ru> Hello! On Fri, Dec 01, 2017 at 04:26:55PM -0800, Robert Paprocki wrote: > # HG changeset patch > # User Robert Paprocki > # Date 1512174351 28800 > # Fri Dec 01 16:25:51 2017 -0800 > # Node ID a200e7c746dc7853b051f9b357a5b9c24d6b0dd0 > # Parent fc0d06224edac2c7cfbfd9a4def478f285d9957b > Validate presence of upstream pipe in ngx_http_upstream_finalize_request > > diff -r fc0d06224eda -r a200e7c746dc src/http/ngx_http_upstream.c > --- a/src/http/ngx_http_upstream.c Tue Nov 28 13:09:54 2017 +0300 > +++ b/src/http/ngx_http_upstream.c Fri Dec 01 16:25:51 2017 -0800 > @@ -4353,7 +4353,9 @@ > } > } > > - ngx_http_file_cache_free(r->cache, u->pipe->temp_file); > + if (u->pipe) { > + ngx_http_file_cache_free(r->cache, u->pipe->temp_file); > + } > } > > #endif No, thanks. See detailed explanation here: http://mailman.nginx.org/pipermail/nginx-devel/2017-December/010665.html -- Maxim Dounin http://mdounin.ru/ From mdounin at mdounin.ru Mon Dec 4 15:05:12 2017 From: mdounin at mdounin.ru (Maxim Dounin) Date: Mon, 4 Dec 2017 18:05:12 +0300 Subject: [PATCH] Configure: Prefer gcc __atomic builtins instead of older __sync builtins In-Reply-To: <4576e7c90ed42da3af67.1512315712@blr-ubuntu-149.qualcomm.com> References: <4576e7c90ed42da3af67.1512315712@blr-ubuntu-149.qualcomm.com> Message-ID: <20171204150512.GZ78325@mdounin.ru> Hello! On Sun, Dec 03, 2017 at 09:11:52PM +0530, Debayan Ghosh wrote: > # HG changeset patch > # User Debayan Ghosh > # Date 1511884462 -19800 > # Tue Nov 28 21:24:22 2017 +0530 > # Node ID 4576e7c90ed42da3af67d90f624b34dd9285a658 > # Parent fc0d06224edac2c7cfbfd9a4def478f285d9957b > Configure: Prefer gcc __atomic builtins instead of older __sync builtins > > It is desirable to use the newer GCC __atomic builtins when using later > versions of GCC , compared to the legacy __sync atomic builtins. > Ref: https://gcc.gnu.org/onlinedocs/gcc/_005f_005fatomic-Builtins.html Any practical reasons for the change? Either way, I would rather suggest looking at C11 atomic ops instead, see here: http://mailman.nginx.org/pipermail/nginx-devel/2016-September/008805.html Though I don't think it's practical either. [...] -- Maxim Dounin http://mdounin.ru/ From mdounin at mdounin.ru Mon Dec 4 15:15:40 2017 From: mdounin at mdounin.ru (Maxim Dounin) Date: Mon, 04 Dec 2017 15:15:40 +0000 Subject: [nginx] Autoindex: discard request body (ticket #1439). Message-ID: details: http://hg.nginx.org/nginx/rev/044cb349fd3c branches: changeset: 7164:044cb349fd3c user: Maxim Dounin date: Mon Dec 04 17:30:02 2017 +0300 description: Autoindex: discard request body (ticket #1439). diffstat: src/http/modules/ngx_http_autoindex_module.c | 6 ++++++ 1 files changed, 6 insertions(+), 0 deletions(-) diffs (16 lines): diff --git a/src/http/modules/ngx_http_autoindex_module.c b/src/http/modules/ngx_http_autoindex_module.c --- a/src/http/modules/ngx_http_autoindex_module.c +++ b/src/http/modules/ngx_http_autoindex_module.c @@ -180,6 +180,12 @@ ngx_http_autoindex_handler(ngx_http_requ return NGX_DECLINED; } + rc = ngx_http_discard_request_body(r); + + if (rc != NGX_OK) { + return rc; + } + /* NGX_DIR_MASK_LEN is lesser than NGX_HTTP_AUTOINDEX_PREALLOCATE */ last = ngx_http_map_uri_to_path(r, &path, &root, From debayang.qdt at qualcommdatacenter.com Mon Dec 4 16:37:50 2017 From: debayang.qdt at qualcommdatacenter.com (debayang.qdt) Date: Mon, 4 Dec 2017 16:37:50 +0000 Subject: [PATCH] Configure: Prefer gcc __atomic builtins instead of older __sync builtins In-Reply-To: <20171204150512.GZ78325@mdounin.ru> References: <4576e7c90ed42da3af67.1512315712@blr-ubuntu-149.qualcomm.com> <20171204150512.GZ78325@mdounin.ru> Message-ID: <879ec3261fcd4b2d985aeb6a981ea541@aptaiexm02a.ap.qualcomm.com> Hello, For some architectures like armv8a - newer GCC generates a full barrier for the __sync operations compared to the __atomics . This is seen to give some performance lag on these architectures when using __sync compared to the atomics apis under high contention. The C++ atomic ops looks good as well (http://mailman.nginx.org/pipermail/nginx-devel/2016-September/008805.html), However I would like to test it out and confirm. e.g sync_fetch_add with newer GCC: 58: f94007e0 ldr x0, [sp,#8] 5c: c85f7c01 ldxr x1, [x0] 60: 91000821 add x1, x1, #0x2 64: c802fc01 stlxr w2, x1, [x0] 68: 35ffffa2 cbnz w2, 5c 6c: d5033bbf dmb ish With atomics_fetch_add with SEQ_CST: 58: f94007e0 ldr x0, [sp,#8] 5c: c85ffc01 ldaxr x1, [x0] 60: 91000821 add x1, x1, #0x2 64: c802fc01 stlxr w2, x1, [x0] 68: 35ffffa2 cbnz w2, 5c Thanks Debayan -----Original Message----- From: Maxim Dounin [mailto:mdounin at mdounin.ru] Sent: Monday, December 4, 2017 8:35 PM To: nginx-devel at nginx.org Cc: debayang.qdt Subject: Re: [PATCH] Configure: Prefer gcc __atomic builtins instead of older __sync builtins Hello! On Sun, Dec 03, 2017 at 09:11:52PM +0530, Debayan Ghosh wrote: > # HG changeset patch > # User Debayan Ghosh > # Date 1511884462 -19800 > # Tue Nov 28 21:24:22 2017 +0530 > # Node ID 4576e7c90ed42da3af67d90f624b34dd9285a658 > # Parent fc0d06224edac2c7cfbfd9a4def478f285d9957b > Configure: Prefer gcc __atomic builtins instead of older __sync > builtins > > It is desirable to use the newer GCC __atomic builtins when using > later versions of GCC , compared to the legacy __sync atomic builtins. > Ref: https://gcc.gnu.org/onlinedocs/gcc/_005f_005fatomic-Builtins.html Any practical reasons for the change? Either way, I would rather suggest looking at C11 atomic ops instead, see here: http://mailman.nginx.org/pipermail/nginx-devel/2016-September/008805.html Though I don't think it's practical either. [...] -- Maxim Dounin http://mdounin.ru/ From arut at nginx.com Mon Dec 4 17:34:55 2017 From: arut at nginx.com (Roman Arutyunyan) Date: Mon, 04 Dec 2017 17:34:55 +0000 Subject: [nginx] Upstream keepalive: clean read delayed flag in stored connections. Message-ID: details: http://hg.nginx.org/nginx/rev/1cb92a2d672e branches: changeset: 7165:1cb92a2d672e user: Roman Arutyunyan date: Tue Nov 28 14:00:00 2017 +0300 description: Upstream keepalive: clean read delayed flag in stored connections. If a connection with the read delayed flag set was stored in the keepalive cache, and after picking it from the cache a read timer was set on that connection, this timer was considered a delay timer rather than a socket read event timer as expected. The latter timeout is usually much longer than the former, which caused a significant delay in request processing. The issue manifested itself with proxy_limit_rate and upstream keepalive enabled and exists since 973ee2276300 (1.7.7) when proxy_limit_rate was introduced. diffstat: src/http/modules/ngx_http_upstream_keepalive_module.c | 1 + 1 files changed, 1 insertions(+), 0 deletions(-) diffs (11 lines): diff -r 044cb349fd3c -r 1cb92a2d672e src/http/modules/ngx_http_upstream_keepalive_module.c --- a/src/http/modules/ngx_http_upstream_keepalive_module.c Mon Dec 04 17:30:02 2017 +0300 +++ b/src/http/modules/ngx_http_upstream_keepalive_module.c Tue Nov 28 14:00:00 2017 +0300 @@ -340,6 +340,7 @@ ngx_http_upstream_free_keepalive_peer(ng pc->connection = NULL; if (c->read->timer_set) { + c->read->delayed = 0; ngx_del_timer(c->read); } if (c->write->timer_set) { From ranier.vf at gmail.com Mon Dec 4 17:42:28 2017 From: ranier.vf at gmail.com (Ranier Vf) Date: Mon, 4 Dec 2017 15:42:28 -0200 Subject: Coverity report dereference after null check in /src/http/ngx_http_upstream.c In-Reply-To: <20171204142229.GX78325@mdounin.ru> References: <20171204142229.GX78325@mdounin.ru> Message-ID: Hi Maxim, Thank you for the detailed explanation. I expected the solution woun?t be easy. Thanks. Ranier Livre de v?rus. www.avast.com . <#DAB4FAD8-2DD7-40BB-A1B8-4E2AA1F9FDF2> 2017-12-04 12:22 GMT-02:00 Maxim Dounin : > Hello! > > On Fri, Dec 01, 2017 at 09:42:37PM -0200, Ranier Vf wrote: > > > Coverity report dereference after null check in > > /src/http/ngx_http_upstream.c > > > > CID 400852 (#1 of 1): Dereference after null check (FORWARD_NULL)22. > > var_deref_op: Dereferencing null pointer u->pipe. > > > > line 4356: ngx_http_file_cache_free(r->cache, u->pipe->temp_file); > > > > Required add check u->pipe? > > It's complicated. > > Simply adding a check in a particular place is certainly wrong, as > r->cache is only expected to exist only if u->pipe exists as well. > > On the other hand, in theory it is possible for r->cache to be not > in sync with "u" in a very specific case of filter finalization > (combined with caching, and also combined with error_page > redirection to a different location with upstream), when "u" comes > from an old upstream connection, and r->cache was already updated > to work with a new one. Additional u->pipe checks won't help here > though, as almost every thing done with r->cache in such a case is > likely wrong. > > One of the possible fixes I've suggested several years ago is to > move r->cache to upstream structure, so the old "u" will be > self-consistent, though Igor disagree with such approach. Not > sure there are other good solutions though. > > The problem is mostly theoretical though, as all practical cases > work fine. > > -- > Maxim Dounin > http://mdounin.ru/ > _______________________________________________ > nginx-devel mailing list > nginx-devel at nginx.org > http://mailman.nginx.org/mailman/listinfo/nginx-devel > -------------- next part -------------- An HTML attachment was scrubbed... URL: From mdounin at mdounin.ru Mon Dec 4 21:07:57 2017 From: mdounin at mdounin.ru (Maxim Dounin) Date: Tue, 5 Dec 2017 00:07:57 +0300 Subject: [PATCH] Configure: Prefer gcc __atomic builtins instead of older __sync builtins In-Reply-To: <879ec3261fcd4b2d985aeb6a981ea541@aptaiexm02a.ap.qualcomm.com> References: <4576e7c90ed42da3af67.1512315712@blr-ubuntu-149.qualcomm.com> <20171204150512.GZ78325@mdounin.ru> <879ec3261fcd4b2d985aeb6a981ea541@aptaiexm02a.ap.qualcomm.com> Message-ID: <20171204210757.GE78325@mdounin.ru> Hello! On Mon, Dec 04, 2017 at 04:37:50PM +0000, debayang.qdt wrote: > For some architectures like armv8a - newer GCC generates a full > barrier for the __sync operations compared to the __atomics . > > This is seen to give some performance lag on these architectures > when using __sync compared to the atomics apis under high > contention. > > The C++ atomic ops looks good as well > (http://mailman.nginx.org/pipermail/nginx-devel/2016-September/008805.html), > However I would like to test it out and confirm. > > e.g sync_fetch_add with newer GCC: > > 58: f94007e0 ldr x0, [sp,#8] > 5c: c85f7c01 ldxr x1, [x0] > 60: 91000821 add x1, x1, #0x2 > 64: c802fc01 stlxr w2, x1, [x0] > 68: 35ffffa2 cbnz w2, 5c > 6c: d5033bbf dmb ish > > With atomics_fetch_add with SEQ_CST: > > 58: f94007e0 ldr x0, [sp,#8] > 5c: c85ffc01 ldaxr x1, [x0] > 60: 91000821 add x1, x1, #0x2 > 64: c802fc01 stlxr w2, x1, [x0] > 68: 35ffffa2 cbnz w2, 5c Well, this may actualy mean that the __atomic and stdatomic variants won't work for us, as it does not seem to imply a barrier protecting other variables. While it may not be important for many uses of ngx_atomic_fetch_add(), it is certainly important for ngx_atomic_cmp_set() we use for shared memory mutexes, where it is assumed to be a full barrier at least for the memory area the mutex protects. (Just for the record, the GCC change in question seems to be documented at https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65697.) -- Maxim Dounin http://mdounin.ru/ From mdounin at mdounin.ru Tue Dec 5 15:14:12 2017 From: mdounin at mdounin.ru (Maxim Dounin) Date: Tue, 05 Dec 2017 15:14:12 +0000 Subject: [nginx] Upstream: flush low-level buffers on write retry. Message-ID: details: http://hg.nginx.org/nginx/rev/a762ddf22dbb branches: changeset: 7166:a762ddf22dbb user: Patryk Lesiewicz date: Fri Dec 01 15:59:14 2017 -0800 description: Upstream: flush low-level buffers on write retry. If the data to write is bigger than what the socket can send, and the reminder is smaller than NGX_SSL_BUFSIZE, then SSL_write() fails with SSL_ERROR_WANT_WRITE. The reminder of payload however is successfully copied to the low-level buffer and all the output chain buffers are flushed. This means that retry logic doesn't work because ngx_http_upstream_process_non_buffered_request() checks only if there's anything in the output chain buffers and ignores the fact that something may be buffered in low-level parts of the stack. Signed-off-by: Patryk Lesiewicz diffstat: src/http/ngx_http_upstream.c | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diffs (12 lines): diff --git a/src/http/ngx_http_upstream.c b/src/http/ngx_http_upstream.c --- a/src/http/ngx_http_upstream.c +++ b/src/http/ngx_http_upstream.c @@ -3533,7 +3533,7 @@ ngx_http_upstream_process_non_buffered_r if (do_write) { - if (u->out_bufs || u->busy_bufs) { + if (u->out_bufs || u->busy_bufs || downstream->buffered) { rc = ngx_http_output_filter(r, u->out_bufs); if (rc == NGX_ERROR) { From mdounin at mdounin.ru Tue Dec 5 15:16:14 2017 From: mdounin at mdounin.ru (Maxim Dounin) Date: Tue, 5 Dec 2017 18:16:14 +0300 Subject: [PATCH] Upstream: flush low-level buffers on write retry In-Reply-To: <0e2e2da798261fe51050.1512175769@piotrsikora.sfo.corp.google.com> References: <0e2e2da798261fe51050.1512175769@piotrsikora.sfo.corp.google.com> Message-ID: <20171205151613.GI78325@mdounin.ru> Hello! On Fri, Dec 01, 2017 at 04:49:29PM -0800, Piotr Sikora via nginx-devel wrote: > # HG changeset patch > # User Patryk Lesiewicz > # Date 1512172754 28800 > # Fri Dec 01 15:59:14 2017 -0800 > # Node ID 0e2e2da798261fe5105017d9678566267b07e2b9 > # Parent fc0d06224edac2c7cfbfd9a4def478f285d9957b > Upstream: flush low-level buffers on write retry. > > If the data to write is bigger than what the socket can send, and the > reminder is smaller than NGX_SSL_BUFSIZE, then SSL_write() fails with > SSL_ERROR_WANT_WRITE. The reminder of payload however is successfully > copied to the low-level buffer and all the output chain buffers are > flushed. This means that retry logic doesn't work because > ngx_http_upstream_process_non_buffered_request() checks only if there's > anything in the output chain buffers and ignores the fact that something > may be buffered in low-level parts of the stack. > > Signed-off-by: Patryk Lesiewicz > > diff -r fc0d06224eda -r 0e2e2da79826 src/http/ngx_http_upstream.c > --- a/src/http/ngx_http_upstream.c > +++ b/src/http/ngx_http_upstream.c > @@ -3533,7 +3533,7 @@ ngx_http_upstream_process_non_buffered_r > > if (do_write) { > > - if (u->out_bufs || u->busy_bufs) { > + if (u->out_bufs || u->busy_bufs || downstream->buffered) { > rc = ngx_http_output_filter(r, u->out_bufs); > > if (rc == NGX_ERROR) { Committed, thanks for catching this. http://hg.nginx.org/nginx/rev/a762ddf22dbb -- Maxim Dounin http://mdounin.ru/ From maxim at nginx.com Tue Dec 5 15:45:22 2017 From: maxim at nginx.com (Maxim Konovalov) Date: Tue, 5 Dec 2017 18:45:22 +0300 Subject: [PATCH] Upstream: flush low-level buffers on write retry In-Reply-To: <20171205151613.GI78325@mdounin.ru> References: <0e2e2da798261fe51050.1512175769@piotrsikora.sfo.corp.google.com> <20171205151613.GI78325@mdounin.ru> Message-ID: <40ecfbb9-af5e-580d-c54b-0a141a0fd81a@nginx.com> On 05/12/2017 18:16, Maxim Dounin wrote: > Hello! > > On Fri, Dec 01, 2017 at 04:49:29PM -0800, Piotr Sikora via nginx-devel wrote: > >> # HG changeset patch >> # User Patryk Lesiewicz >> # Date 1512172754 28800 >> # Fri Dec 01 15:59:14 2017 -0800 >> # Node ID 0e2e2da798261fe5105017d9678566267b07e2b9 >> # Parent fc0d06224edac2c7cfbfd9a4def478f285d9957b >> Upstream: flush low-level buffers on write retry. >> >> If the data to write is bigger than what the socket can send, and the >> reminder is smaller than NGX_SSL_BUFSIZE, then SSL_write() fails with >> SSL_ERROR_WANT_WRITE. The reminder of payload however is successfully >> copied to the low-level buffer and all the output chain buffers are >> flushed. This means that retry logic doesn't work because >> ngx_http_upstream_process_non_buffered_request() checks only if there's >> anything in the output chain buffers and ignores the fact that something >> may be buffered in low-level parts of the stack. >> >> Signed-off-by: Patryk Lesiewicz >> >> diff -r fc0d06224eda -r 0e2e2da79826 src/http/ngx_http_upstream.c >> --- a/src/http/ngx_http_upstream.c >> +++ b/src/http/ngx_http_upstream.c >> @@ -3533,7 +3533,7 @@ ngx_http_upstream_process_non_buffered_r >> >> if (do_write) { >> >> - if (u->out_bufs || u->busy_bufs) { >> + if (u->out_bufs || u->busy_bufs || downstream->buffered) { >> rc = ngx_http_output_filter(r, u->out_bufs); >> >> if (rc == NGX_ERROR) { > > Committed, thanks for catching this. > http://hg.nginx.org/nginx/rev/a762ddf22dbb > Do we need tests for this scenario? -- Maxim Konovalov "I'm not a software developer, but it doesn't seem as rocket science" From arut at nginx.com Tue Dec 5 18:15:10 2017 From: arut at nginx.com (Roman Arutyunyan) Date: Tue, 05 Dec 2017 18:15:10 +0000 Subject: [nginx] Proxy: simplified conditions of using unparsed uri. Message-ID: details: http://hg.nginx.org/nginx/rev/8530aea9aa50 branches: changeset: 7167:8530aea9aa50 user: Roman Arutyunyan date: Mon Nov 20 13:47:17 2017 +0300 description: Proxy: simplified conditions of using unparsed uri. Previously, the unparsed uri was explicitly allowed to be used only by the main request. However the valid_unparsed_uri flag is nonzero only in the main request, which makes the main request check pointless. diffstat: src/http/modules/ngx_http_proxy_module.c | 6 ++---- 1 files changed, 2 insertions(+), 4 deletions(-) diffs (23 lines): diff -r a762ddf22dbb -r 8530aea9aa50 src/http/modules/ngx_http_proxy_module.c --- a/src/http/modules/ngx_http_proxy_module.c Fri Dec 01 15:59:14 2017 -0800 +++ b/src/http/modules/ngx_http_proxy_module.c Mon Nov 20 13:47:17 2017 +0300 @@ -1086,8 +1086,7 @@ ngx_http_proxy_create_key(ngx_http_reque return NGX_OK; - } else if (ctx->vars.uri.len == 0 && r->valid_unparsed_uri && r == r->main) - { + } else if (ctx->vars.uri.len == 0 && r->valid_unparsed_uri) { *key = r->unparsed_uri; u->uri = r->unparsed_uri; @@ -1201,8 +1200,7 @@ ngx_http_proxy_create_request(ngx_http_r if (plcf->proxy_lengths && ctx->vars.uri.len) { uri_len = ctx->vars.uri.len; - } else if (ctx->vars.uri.len == 0 && r->valid_unparsed_uri && r == r->main) - { + } else if (ctx->vars.uri.len == 0 && r->valid_unparsed_uri) { unparsed_uri = 1; uri_len = r->unparsed_uri.len; From arut at nginx.com Tue Dec 5 18:15:12 2017 From: arut at nginx.com (Roman Arutyunyan) Date: Tue, 05 Dec 2017 18:15:12 +0000 Subject: [nginx] Inherit valid_unparsed_uri in cloned subrequests (ticket #1430). Message-ID: details: http://hg.nginx.org/nginx/rev/46ebff8c6396 branches: changeset: 7168:46ebff8c6396 user: Roman Arutyunyan date: Mon Nov 20 21:11:19 2017 +0300 description: Inherit valid_unparsed_uri in cloned subrequests (ticket #1430). Inheriting this flag will make the cloned subrequest behave consistently with the parent. Specifically, the upstream HTTP request and cache key created by the proxy module may depend directly on unparsed_uri if valid_unparsed_uri flag is set. Previously, the flag was zero for cloned requests, which could make background update proxy a request different than its parent and cache the result with a different key. For example, if client URI contained the escaped slash character %2F, it was used as is by the proxy module in the main request, but was unescaped in the subrequests. Similar problems exist in the slice module. diffstat: src/http/ngx_http_core_module.c | 1 + 1 files changed, 1 insertions(+), 0 deletions(-) diffs (11 lines): diff -r 8530aea9aa50 -r 46ebff8c6396 src/http/ngx_http_core_module.c --- a/src/http/ngx_http_core_module.c Mon Nov 20 13:47:17 2017 +0300 +++ b/src/http/ngx_http_core_module.c Mon Nov 20 21:11:19 2017 +0300 @@ -2363,6 +2363,7 @@ ngx_http_subrequest(ngx_http_request_t * sr->method_name = r->method_name; sr->loc_conf = r->loc_conf; sr->valid_location = r->valid_location; + sr->valid_unparsed_uri = r->valid_unparsed_uri; sr->content_handler = r->content_handler; sr->phase_handler = r->phase_handler; sr->write_event_handler = ngx_http_core_run_phases; From arut at nginx.com Tue Dec 5 18:15:13 2017 From: arut at nginx.com (Roman Arutyunyan) Date: Tue, 05 Dec 2017 18:15:13 +0000 Subject: [nginx] Proxy: escape explicit space in URI in default cache key. Message-ID: details: http://hg.nginx.org/nginx/rev/e8e19f5e0b8b branches: changeset: 7169:e8e19f5e0b8b user: Roman Arutyunyan date: Mon Nov 20 20:50:35 2017 +0300 description: Proxy: escape explicit space in URI in default cache key. If the flag space_in_uri is set, the URI in HTTP upstream request is escaped to convert space to %20. However this flag is not checked while creating the default cache key. This leads to different cache keys for requests '/foo bar' and '/foo%20bar', while the upstream requests are identical. Additionally, the change fixes background cache updates when the client URI contains unescaped space. Default cache key in a subrequest is always based on escaped URI, while the main request may not escape it. As a result, background cache update subrequest may update a different cache entry. diffstat: src/http/modules/ngx_http_proxy_module.c | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diffs (12 lines): diff -r 46ebff8c6396 -r e8e19f5e0b8b src/http/modules/ngx_http_proxy_module.c --- a/src/http/modules/ngx_http_proxy_module.c Mon Nov 20 21:11:19 2017 +0300 +++ b/src/http/modules/ngx_http_proxy_module.c Mon Nov 20 20:50:35 2017 +0300 @@ -1095,7 +1095,7 @@ ngx_http_proxy_create_key(ngx_http_reque loc_len = (r->valid_location && ctx->vars.uri.len) ? plcf->location.len : 0; - if (r->quoted_uri || r->internal) { + if (r->quoted_uri || r->space_in_uri || r->internal) { escape = 2 * ngx_escape_uri(NULL, r->uri.data + loc_len, r->uri.len - loc_len, NGX_ESCAPE_URI); } else { From patryk at google.com Tue Dec 5 23:44:10 2017 From: patryk at google.com (Patryk Lesiewicz) Date: Tue, 05 Dec 2017 23:44:10 +0000 Subject: [PATCH] Upstream: flush low-level buffers on write retry In-Reply-To: <40ecfbb9-af5e-580d-c54b-0a141a0fd81a@nginx.com> References: <0e2e2da798261fe51050.1512175769@piotrsikora.sfo.corp.google.com> <20171205151613.GI78325@mdounin.ru> <40ecfbb9-af5e-580d-c54b-0a141a0fd81a@nginx.com> Message-ID: Hi Maxim, it is pretty hard to reproduce reliably full socket buffer in a test. I'll play with UNIX domain sockets, maybe I'll manage to reproduce it there since you have somewhat better control over it. Thanks, Patryk On Tue, Dec 5, 2017 at 7:45 AM Maxim Konovalov wrote: > On 05/12/2017 18:16, Maxim Dounin wrote: > > Hello! > > > > On Fri, Dec 01, 2017 at 04:49:29PM -0800, Piotr Sikora via nginx-devel > wrote: > > > >> # HG changeset patch > >> # User Patryk Lesiewicz > >> # Date 1512172754 28800 > >> # Fri Dec 01 15:59:14 2017 -0800 > >> # Node ID 0e2e2da798261fe5105017d9678566267b07e2b9 > >> # Parent fc0d06224edac2c7cfbfd9a4def478f285d9957b > >> Upstream: flush low-level buffers on write retry. > >> > >> If the data to write is bigger than what the socket can send, and the > >> reminder is smaller than NGX_SSL_BUFSIZE, then SSL_write() fails with > >> SSL_ERROR_WANT_WRITE. The reminder of payload however is successfully > >> copied to the low-level buffer and all the output chain buffers are > >> flushed. This means that retry logic doesn't work because > >> ngx_http_upstream_process_non_buffered_request() checks only if there's > >> anything in the output chain buffers and ignores the fact that something > >> may be buffered in low-level parts of the stack. > >> > >> Signed-off-by: Patryk Lesiewicz > >> > >> diff -r fc0d06224eda -r 0e2e2da79826 src/http/ngx_http_upstream.c > >> --- a/src/http/ngx_http_upstream.c > >> +++ b/src/http/ngx_http_upstream.c > >> @@ -3533,7 +3533,7 @@ ngx_http_upstream_process_non_buffered_r > >> > >> if (do_write) { > >> > >> - if (u->out_bufs || u->busy_bufs) { > >> + if (u->out_bufs || u->busy_bufs || downstream->buffered) { > >> rc = ngx_http_output_filter(r, u->out_bufs); > >> > >> if (rc == NGX_ERROR) { > > > > Committed, thanks for catching this. > > http://hg.nginx.org/nginx/rev/a762ddf22dbb > > > Do we need tests for this scenario? > > -- > Maxim Konovalov > > "I'm not a software developer, but it doesn't seem as rocket > science" > -------------- next part -------------- An HTML attachment was scrubbed... URL: From mdounin at mdounin.ru Thu Dec 7 14:12:16 2017 From: mdounin at mdounin.ru (Maxim Dounin) Date: Thu, 07 Dec 2017 14:12:16 +0000 Subject: [nginx] Configure: moved IP_BIND_ADDRESS_NO_PORT test. Message-ID: details: http://hg.nginx.org/nginx/rev/d747065c6a98 branches: changeset: 7170:d747065c6a98 user: Maxim Dounin date: Thu Dec 07 17:09:33 2017 +0300 description: Configure: moved IP_BIND_ADDRESS_NO_PORT test. In 2c7b488a61fb, IP_BIND_ADDRESS_NO_PORT test was accidentally placed between SO_BINDANY, IP_TRANSPARENT, and IP_BINDANY tests. Moved it after these tests. diffstat: auto/unix | 26 +++++++++++++------------- 1 files changed, 13 insertions(+), 13 deletions(-) diffs (43 lines): diff --git a/auto/unix b/auto/unix --- a/auto/unix +++ b/auto/unix @@ -354,19 +354,6 @@ ngx_feature_test="setsockopt(0, SOL_SOCK . auto/feature -# Linux IP_BIND_ADDRESS_NO_PORT - -ngx_feature="IP_BIND_ADDRESS_NO_PORT" -ngx_feature_name="NGX_HAVE_IP_BIND_ADDRESS_NO_PORT" -ngx_feature_run=no -ngx_feature_incs="#include - #include " -ngx_feature_path= -ngx_feature_libs= -ngx_feature_test="setsockopt(0, IPPROTO_IP, IP_BIND_ADDRESS_NO_PORT, NULL, 0)" -. auto/feature - - # Linux transparent proxying ngx_feature="IP_TRANSPARENT" @@ -393,6 +380,19 @@ ngx_feature_test="setsockopt(0, IPPROTO_ . auto/feature +# Linux IP_BIND_ADDRESS_NO_PORT + +ngx_feature="IP_BIND_ADDRESS_NO_PORT" +ngx_feature_name="NGX_HAVE_IP_BIND_ADDRESS_NO_PORT" +ngx_feature_run=no +ngx_feature_incs="#include + #include " +ngx_feature_path= +ngx_feature_libs= +ngx_feature_test="setsockopt(0, IPPROTO_IP, IP_BIND_ADDRESS_NO_PORT, NULL, 0)" +. auto/feature + + # BSD way to get IPv4 datagram destination address ngx_feature="IP_RECVDSTADDR" From mdounin at mdounin.ru Thu Dec 7 14:12:17 2017 From: mdounin at mdounin.ru (Maxim Dounin) Date: Thu, 07 Dec 2017 14:12:17 +0000 Subject: [nginx] Configure: fixed SO_BINDANY comment. Message-ID: details: http://hg.nginx.org/nginx/rev/d3235149d17f branches: changeset: 7171:d3235149d17f user: Maxim Dounin date: Thu Dec 07 17:09:36 2017 +0300 description: Configure: fixed SO_BINDANY comment. diffstat: auto/unix | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diffs (12 lines): diff --git a/auto/unix b/auto/unix --- a/auto/unix +++ b/auto/unix @@ -342,7 +342,7 @@ ngx_feature_test="setsockopt(0, SOL_SOCK . auto/feature -# NetBSD bind to any address for transparent proxying +# OpenBSD bind to any address for transparent proxying ngx_feature="SO_BINDANY" ngx_feature_name="NGX_HAVE_TRANSPARENT_PROXY" From debayang.qdt at qualcommdatacenter.com Fri Dec 8 09:04:01 2017 From: debayang.qdt at qualcommdatacenter.com (Debayan Ghosh) Date: Fri, 08 Dec 2017 14:34:01 +0530 Subject: [PATCH] Configure: Fix cacheline size for aarch64 platforms Message-ID: <51870787e3f3bd8dcffa.1512723841@blr-ubuntu-149.qualcomm.com> # HG changeset patch # User Debayan Ghosh # Date 1512723685 -19800 # Fri Dec 08 14:31:25 2017 +0530 # Node ID 51870787e3f3bd8dcffab3b5d43f59ca3660e875 # Parent 8b84d60ef13db20bae9141849e0e12ff23bc3bbc Configure: Fix cacheline size for aarch64 platforms Currently the default cpu cacheline is set to 32 which is not appropriate for aarch64 platforms diff -r 8b84d60ef13d -r 51870787e3f3 auto/os/conf --- a/auto/os/conf Tue Nov 28 12:00:24 2017 +0300 +++ b/auto/os/conf Fri Dec 08 14:31:25 2017 +0530 @@ -110,6 +110,11 @@ NGX_MACH_CACHE_LINE=64 ;; + aarch64 ) + have=NGX_ALIGNMENT value=16 . auto/define + NGX_MACH_CACHE_LINE=128 + ;; + *) have=NGX_ALIGNMENT value=16 . auto/define NGX_MACH_CACHE_LINE=32 From mdounin at mdounin.ru Fri Dec 8 15:17:04 2017 From: mdounin at mdounin.ru (Maxim Dounin) Date: Fri, 8 Dec 2017 18:17:04 +0300 Subject: [PATCH] Configure: Fix cacheline size for aarch64 platforms In-Reply-To: <51870787e3f3bd8dcffa.1512723841@blr-ubuntu-149.qualcomm.com> References: <51870787e3f3bd8dcffa.1512723841@blr-ubuntu-149.qualcomm.com> Message-ID: <20171208151704.GT78325@mdounin.ru> Hello! On Fri, Dec 08, 2017 at 02:34:01PM +0530, Debayan Ghosh wrote: > # HG changeset patch > # User Debayan Ghosh > # Date 1512723685 -19800 > # Fri Dec 08 14:31:25 2017 +0530 > # Node ID 51870787e3f3bd8dcffab3b5d43f59ca3660e875 > # Parent 8b84d60ef13db20bae9141849e0e12ff23bc3bbc > Configure: Fix cacheline size for aarch64 platforms > > Currently the default cpu cacheline is set to 32 which is not > appropriate for aarch64 platforms > > diff -r 8b84d60ef13d -r 51870787e3f3 auto/os/conf > --- a/auto/os/conf Tue Nov 28 12:00:24 2017 +0300 > +++ b/auto/os/conf Fri Dec 08 14:31:25 2017 +0530 > @@ -110,6 +110,11 @@ > NGX_MACH_CACHE_LINE=64 > ;; > > + aarch64 ) > + have=NGX_ALIGNMENT value=16 . auto/define > + NGX_MACH_CACHE_LINE=128 > + ;; > + > *) > have=NGX_ALIGNMENT value=16 . auto/define > NGX_MACH_CACHE_LINE=32 Any reasons to use 128? At least for Cortex-A53 Wikipedia lists 64 bytes, see https://en.wikipedia.org/wiki/ARM_Cortex-A53. -- Maxim Dounin http://mdounin.ru/ From debayang.qdt at qualcommdatacenter.com Fri Dec 8 18:43:15 2017 From: debayang.qdt at qualcommdatacenter.com (debayang.qdt) Date: Fri, 8 Dec 2017 18:43:15 +0000 Subject: [PATCH] Configure: Fix cacheline size for aarch64 platforms In-Reply-To: <20171208151704.GT78325@mdounin.ru> References: <51870787e3f3bd8dcffa.1512723841@blr-ubuntu-149.qualcomm.com> <20171208151704.GT78325@mdounin.ru> Message-ID: Hello, 64 bytes should be the minimum size. However, A53 is a small segment of arm64 based servers . Multiple aarch64 based servers uses 128 byte cache lines. For e.g Centriq 2400 aarch64 server from Qualcomm Datacenter Technologies uses 128 bytes cache line. To be very accurate , we may read the dcache line size from CTR_EL0 register. Let me know what you think. Thanks Debayan -----Original Message----- From: Maxim Dounin [mailto:mdounin at mdounin.ru] Sent: Friday, December 8, 2017 8:47 PM To: nginx-devel at nginx.org Cc: debayang.qdt Subject: Re: [PATCH] Configure: Fix cacheline size for aarch64 platforms Hello! On Fri, Dec 08, 2017 at 02:34:01PM +0530, Debayan Ghosh wrote: > # HG changeset patch > # User Debayan Ghosh > # Date 1512723685 -19800 > # Fri Dec 08 14:31:25 2017 +0530 > # Node ID 51870787e3f3bd8dcffab3b5d43f59ca3660e875 > # Parent 8b84d60ef13db20bae9141849e0e12ff23bc3bbc > Configure: Fix cacheline size for aarch64 platforms > > Currently the default cpu cacheline is set to 32 which is not > appropriate for aarch64 platforms > > diff -r 8b84d60ef13d -r 51870787e3f3 auto/os/conf > --- a/auto/os/conf Tue Nov 28 12:00:24 2017 +0300 > +++ b/auto/os/conf Fri Dec 08 14:31:25 2017 +0530 > @@ -110,6 +110,11 @@ > NGX_MACH_CACHE_LINE=64 > ;; > > + aarch64 ) > + have=NGX_ALIGNMENT value=16 . auto/define > + NGX_MACH_CACHE_LINE=128 > + ;; > + > *) > have=NGX_ALIGNMENT value=16 . auto/define > NGX_MACH_CACHE_LINE=32 Any reasons to use 128? At least for Cortex-A53 Wikipedia lists 64 bytes, see https://en.wikipedia.org/wiki/ARM_Cortex-A53. -- Maxim Dounin http://mdounin.ru/ From mdounin at mdounin.ru Fri Dec 8 19:48:05 2017 From: mdounin at mdounin.ru (Maxim Dounin) Date: Fri, 8 Dec 2017 22:48:05 +0300 Subject: [PATCH] Configure: Fix cacheline size for aarch64 platforms In-Reply-To: References: <51870787e3f3bd8dcffa.1512723841@blr-ubuntu-149.qualcomm.com> <20171208151704.GT78325@mdounin.ru> Message-ID: <20171208194805.GV78325@mdounin.ru> Hello! On Fri, Dec 08, 2017 at 06:43:15PM +0000, debayang.qdt wrote: > Hello, > > 64 bytes should be the minimum size. Any links to support this claim? > However, A53 is a small segment of arm64 based servers . > Multiple aarch64 based servers uses 128 byte cache lines. > For e.g Centriq 2400 aarch64 server from Qualcomm Datacenter Technologies uses 128 bytes cache line. AFAIK, using a smaller cache line size is mostly fine and imply almost no performance difference in nginx. On ther other hand, using larger cache line size can easily result in multiple memory access where just one should be enough, resulting in suboptimal performance. That's why we generally assume 32 unless we know better. > To be very accurate , we may read the dcache line size from CTR_EL0 register. > Let me know what you think. Given the level of popularity of aarch64 servers, I would rather not. I would prefer to rely on something architecture-independent like sysconf(_SC_LEVEL1_DCACHE_LINESIZE), though it looks like it doesn't work on aarch64 yet, see https://bugzilla.redhat.com/show_bug.cgi?id=1190638. -- Maxim Dounin http://mdounin.ru/ From debayang.qdt at qualcommdatacenter.com Sat Dec 9 14:05:04 2017 From: debayang.qdt at qualcommdatacenter.com (debayang.qdt) Date: Sat, 9 Dec 2017 14:05:04 +0000 Subject: [PATCH] Configure: Fix cacheline size for aarch64 platforms In-Reply-To: <20171208194805.GV78325@mdounin.ru> References: <51870787e3f3bd8dcffa.1512723841@blr-ubuntu-149.qualcomm.com> <20171208151704.GT78325@mdounin.ru> <20171208194805.GV78325@mdounin.ru> Message-ID: <344248f0e60449f8b5f74c4ddfba282b@aptaiexm02a.ap.qualcomm.com> Hello! On Fri, Dec 08, 2017 at 06:43:15PM +0000, debayang.qdt wrote: > Hello, > > 64 bytes should be the minimum size. >> Any links to support this claim? AFAIK several aarch64 server vendors - centriq/thunderx/xgene/A53/A57.. implementations - uses either 64B/128B cache lines . So keeping it at 64 bytes may be ok. Also in linux kernel : https://elixir.free-electrons.com/linux/v4.14.4/source/arch/arm64/include/asm/cache.h#L73 > However, A53 is a small segment of arm64 based servers . > Multiple aarch64 based servers uses 128 byte cache lines. > For e.g Centriq 2400 aarch64 server from Qualcomm Datacenter Technologies uses 128 bytes cache line. AFAIK, using a smaller cache line size is mostly fine and imply almost no performance difference in nginx. On ther other hand, using larger cache line size can easily result in multiple memory access where just one should be enough, resulting in suboptimal performance. That's why we generally assume 32 unless we know better. > To be very accurate , we may read the dcache line size from CTR_EL0 register. > Let me know what you think. >> Given the level of popularity of aarch64 servers, I would rather not. I would prefer to rely on something architecture-independent like sysconf(_SC_LEVEL1_DCACHE_LINESIZE), though it looks like it doesn't work on aarch64 yet, see https://bugzilla.redhat.com/show_bug.cgi?id=1190638. The aarch64 support is recently added in the glibc trunk . https://sourceware.org/git/?p=glibc.git;a=commit;h=6d58ce5e5072945d44f2dba83ad16cd6febd056c The implementation above reads the CTR_EL0 to get the cache information . So , as you mentioned - it may make sense to use the sysconf to determine the cache line at runtime . In case it's not available on the system (value would be 0), we can fall back to the compile time defaults . Below patch in nginx for the same. # HG changeset patch # User Debayan Ghosh # Date 1512811864 0 # Sat Dec 09 09:31:04 2017 +0000 # Node ID 217d0ed8730190a986c079c300169e10b90b4a82 # Parent c71aed1f6f88b8c5d56a4360ca4521a62a4c17ce Nginx: Use sysconf to determine cacheline size Using sysconf(_SC_LEVEL1_DCACHE_LINESIZE) to determine cache line size on the system. This will make it architecture independent. Falls back to using arch specific compile time defaults if above not supported. diff -r c71aed1f6f88 -r 217d0ed87301 auto/unix --- a/auto/unix Tue Nov 28 15:19:59 2017 +0000 +++ b/auto/unix Sat Dec 09 09:31:04 2017 +0000 @@ -963,6 +963,15 @@ ngx_feature_test="sysconf(_SC_NPROCESSORS_ONLN)" . auto/feature +ngx_feature="sysconf(_SC_LEVEL1_DCACHE_LINESIZE)" +ngx_feature_name="NGX_HAVE_LEVEL1_DCACHE_LINESIZE" +ngx_feature_run=no +ngx_feature_incs= +ngx_feature_path= +ngx_feature_libs= +ngx_feature_test="sysconf(_SC_LEVEL1_DCACHE_LINESIZE)" +. auto/feature + ngx_feature="openat(), fstatat()" ngx_feature_name="NGX_HAVE_OPENAT" diff -r c71aed1f6f88 -r 217d0ed87301 src/os/unix/ngx_posix_init.c --- a/src/os/unix/ngx_posix_init.c Tue Nov 28 15:19:59 2017 +0000 +++ b/src/os/unix/ngx_posix_init.c Sat Dec 09 09:31:04 2017 +0000 @@ -48,8 +48,17 @@ } ngx_pagesize = getpagesize(); +#if (NGX_HAVE_LEVEL1_DCACHE_LINESIZE) + ngx_int_t cpu_cache_line = sysconf(_SC_LEVEL1_DCACHE_LINESIZE); + /* Below workaround to use default values on some environments + where the cache line size yet not available */ + ngx_cacheline_size = (cpu_cache_line == 0) ? + NGX_CPU_CACHE_LINE : cpu_cache_line; +#else + /* Use default cache line for the architecture */ ngx_cacheline_size = NGX_CPU_CACHE_LINE; - +#endif + for (n = ngx_pagesize; n >>= 1; ngx_pagesize_shift++) { /* void */ } #if (NGX_HAVE_SC_NPROCESSORS_ONLN) --Debayan From debayang.qdt at qualcommdatacenter.com Sun Dec 10 14:58:17 2017 From: debayang.qdt at qualcommdatacenter.com (debayang.qdt) Date: Sun, 10 Dec 2017 14:58:17 +0000 Subject: [PATCH] Configure: Prefer gcc __atomic builtins instead of older __sync builtins In-Reply-To: <20171204210757.GE78325@mdounin.ru> References: <4576e7c90ed42da3af67.1512315712@blr-ubuntu-149.qualcomm.com> <20171204150512.GZ78325@mdounin.ru> <879ec3261fcd4b2d985aeb6a981ea541@aptaiexm02a.ap.qualcomm.com> <20171204210757.GE78325@mdounin.ru> Message-ID: Hello! On Mon, Dec 04, 2017 at 04:37:50PM +0000, debayang.qdt wrote: > For some architectures like armv8a - newer GCC generates a full > barrier for the __sync operations compared to the __atomics . > > This is seen to give some performance lag on these architectures when > using __sync compared to the atomics apis under high contention. > > The C++ atomic ops looks good as well > (http://mailman.nginx.org/pipermail/nginx-devel/2016-September/008805. > html), However I would like to test it out and confirm. > > e.g sync_fetch_add with newer GCC: > > 58: f94007e0 ldr x0, [sp,#8] > 5c: c85f7c01 ldxr x1, [x0] > 60: 91000821 add x1, x1, #0x2 > 64: c802fc01 stlxr w2, x1, [x0] > 68: 35ffffa2 cbnz w2, 5c > 6c: d5033bbf dmb ish > > With atomics_fetch_add with SEQ_CST: > > 58: f94007e0 ldr x0, [sp,#8] > 5c: c85ffc01 ldaxr x1, [x0] > 60: 91000821 add x1, x1, #0x2 > 64: c802fc01 stlxr w2, x1, [x0] > 68: 35ffffa2 cbnz w2, 5c >> Well, this may actualy mean that the __atomic and stdatomic variants won't work for us, as it does not seem to imply a barrier protecting other variables. While it may not be important for many uses of ngx_atomic_fetch_add(), it is certainly important for ngx_atomic_cmp_set() we use for shared memory mutexes, where it is assumed to be a full barrier at least for the memory area the mutex protects. >>(Just for the record, the GCC change in question seems to be documented at https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65697.) Thanks for the link. As per the above discussion the legacy sync calls were fixed to generate a barrier in gcc 5+ for aarch64 platform - to conform with the __sync full barrier specs. IMO if the weak variants or _atomic helps multiple cases as you mentioned - it still may make sense, rather than using sync calls always - as a catch all synchronization mechanism, because it is costly on some architectures. For the specific scenarios where we need strong memory order requirements we can still use the atomics with explicit seq/cst memory model and standalone fence along with it depending on context. -- Debayan Ghosh From mdounin at mdounin.ru Mon Dec 11 13:42:43 2017 From: mdounin at mdounin.ru (Maxim Dounin) Date: Mon, 11 Dec 2017 16:42:43 +0300 Subject: [PATCH] Configure: Prefer gcc __atomic builtins instead of older __sync builtins In-Reply-To: References: <4576e7c90ed42da3af67.1512315712@blr-ubuntu-149.qualcomm.com> <20171204150512.GZ78325@mdounin.ru> <879ec3261fcd4b2d985aeb6a981ea541@aptaiexm02a.ap.qualcomm.com> <20171204210757.GE78325@mdounin.ru> Message-ID: <20171211134243.GW78325@mdounin.ru> Hello! On Sun, Dec 10, 2017 at 02:58:17PM +0000, debayang.qdt wrote: > > On Mon, Dec 04, 2017 at 04:37:50PM +0000, debayang.qdt wrote: > > > > > For some architectures like armv8a - newer GCC generates a full > > > barrier for the __sync operations compared to the __atomics . > > > > > > This is seen to give some performance lag on these architectures when > > > using __sync compared to the atomics apis under high contention. > > > > > > The C++ atomic ops looks good as well > > > (http://mailman.nginx.org/pipermail/nginx-devel/2016-September/008805.html), > > > However I would like to test it out and confirm. > > > > > > e.g sync_fetch_add with newer GCC: > > > > > > 58: f94007e0 ldr x0, [sp,#8] > > > 5c: c85f7c01 ldxr x1, [x0] > > > 60: 91000821 add x1, x1, #0x2 > > > 64: c802fc01 stlxr w2, x1, [x0] > > > 68: 35ffffa2 cbnz w2, 5c > > > 6c: d5033bbf dmb ish > > > > > > With atomics_fetch_add with SEQ_CST: > > > > > > 58: f94007e0 ldr x0, [sp,#8] > > > 5c: c85ffc01 ldaxr x1, [x0] > > > 60: 91000821 add x1, x1, #0x2 > > > 64: c802fc01 stlxr w2, x1, [x0] > > > 68: 35ffffa2 cbnz w2, 5c > > > > Well, this may actualy mean that the __atomic and stdatomic > > variants won't work for us, as it does not seem to imply a > > barrier protecting other variables. While it may not be > > important for many uses of ngx_atomic_fetch_add(), it is > > certainly important for ngx_atomic_cmp_set() we use for shared > > memory mutexes, where it is assumed to be a full barrier at > > least for the memory area the mutex protects. > > > > (Just for the record, the GCC change in question seems to be > > documented at > > https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65697.) > > Thanks for the link. As per the above discussion the legacy > sync calls were fixed to generate a barrier in gcc 5+ for > aarch64 platform - to conform with the __sync full barrier > specs. > > IMO if the weak variants or _atomic helps multiple cases as you > mentioned - it still may make sense, > rather than using sync calls always - as a catch all > synchronization mechanism, because it is costly on some > architectures. I probably wasn't clear enough. I mean to say that barrier semantics is not important for ngx_atomic_fetch_add(), at least for most of the uses. Whether it helps or not is completely different question. In practice we haven't seen any performance issues due to ngx_atomic_fetch_add(). We do them relatively rarely (at most several operations per request), and full barrier shouldn't be a problem. > For the specific scenarios where we need strong memory order > requirements we can still use the atomics with explicit seq/cst > memory model and standalone fence along with it depending on > context. Using separate barriers might result in worse performance, especially on i386 / amd64, where a barrier is generally implied by the operation itself. And this will require looking through all the code to understand whether or not barriers are actually required in a particular context. Actually, initially I was under the impression that C11 atomics will work for us out of the box. But the GCC bug in question makes me think that it might not be the case. This needs additional investigation. Also, the patch for C11 atomics I've referenced earlier doesn't try to introduce load/store macros. This seems to be required for at least some implementations though - for example, stdatomic.h on FreeBSD when used with gcc48. So the patch needs more work. Given all of the above, it is not clear if it at all worth the effort - as __sync atomics work fine for us with no known problems. -- Maxim Dounin http://mdounin.ru/ From mdounin at mdounin.ru Mon Dec 11 14:33:39 2017 From: mdounin at mdounin.ru (Maxim Dounin) Date: Mon, 11 Dec 2017 17:33:39 +0300 Subject: [PATCH] Configure: Fix cacheline size for aarch64 platforms In-Reply-To: <344248f0e60449f8b5f74c4ddfba282b@aptaiexm02a.ap.qualcomm.com> References: <51870787e3f3bd8dcffa.1512723841@blr-ubuntu-149.qualcomm.com> <20171208151704.GT78325@mdounin.ru> <20171208194805.GV78325@mdounin.ru> <344248f0e60449f8b5f74c4ddfba282b@aptaiexm02a.ap.qualcomm.com> Message-ID: <20171211143339.GX78325@mdounin.ru> Hello! On Sat, Dec 09, 2017 at 02:05:04PM +0000, debayang.qdt wrote: > Hello! > > On Fri, Dec 08, 2017 at 06:43:15PM +0000, debayang.qdt wrote: > > > Hello, > > > > 64 bytes should be the minimum size. > >> Any links to support this claim? > > AFAIK several aarch64 server vendors - centriq/thunderx/xgene/A53/A57.. implementations - uses either 64B/128B cache lines . > So keeping it at 64 bytes may be ok. > Also in linux kernel : https://elixir.free-electrons.com/linux/v4.14.4/source/arch/arm64/include/asm/cache.h#L73 This seems to use either CTR_EL0 or 128, and not even mentions 64. Anyway, I have no objections to 64, as it is the cache line size on the aarch64 boxes I have access to. > > However, A53 is a small segment of arm64 based servers . > > Multiple aarch64 based servers uses 128 byte cache lines. > > For e.g Centriq 2400 aarch64 server from Qualcomm Datacenter Technologies uses 128 bytes cache line. > AFAIK, using a smaller cache line size is mostly fine and imply almost no performance difference in nginx. On ther other hand, using larger cache line size can easily result in multiple memory access where just one should be enough, resulting in suboptimal performance. That's why we generally assume 32 unless we know better. > > > To be very accurate , we may read the dcache line size from CTR_EL0 register. > > Let me know what you think. > > >> Given the level of popularity of aarch64 servers, I would rather not. I would prefer to rely on something architecture-independent like sysconf(_SC_LEVEL1_DCACHE_LINESIZE), though it looks like it doesn't work on aarch64 yet, see https://bugzilla.redhat.com/show_bug.cgi?id=1190638. > > The aarch64 support is recently added in the glibc trunk . > https://sourceware.org/git/?p=glibc.git;a=commit;h=6d58ce5e5072945d44f2dba83ad16cd6febd056c > The implementation above reads the CTR_EL0 to get the cache information . > > So , as you mentioned - it may make sense to use the sysconf to determine the cache line at runtime . In case it's not available on the system (value would be 0), we can fall back to the compile time defaults . > Below patch in nginx for the same. > > > # HG changeset patch > # User Debayan Ghosh > # Date 1512811864 0 > # Sat Dec 09 09:31:04 2017 +0000 > # Node ID 217d0ed8730190a986c079c300169e10b90b4a82 > # Parent c71aed1f6f88b8c5d56a4360ca4521a62a4c17ce > Nginx: Use sysconf to determine cacheline size There is no need for the "Nginx" prefix. Trailing dot is missing. > > Using sysconf(_SC_LEVEL1_DCACHE_LINESIZE) to determine cache line size on the system. > This will make it architecture independent. > Falls back to using arch specific compile time defaults if above not supported. Please keep lines under 80 chars. > > diff -r c71aed1f6f88 -r 217d0ed87301 auto/unix > --- a/auto/unix Tue Nov 28 15:19:59 2017 +0000 > +++ b/auto/unix Sat Dec 09 09:31:04 2017 +0000 > @@ -963,6 +963,15 @@ > ngx_feature_test="sysconf(_SC_NPROCESSORS_ONLN)" > . auto/feature > > +ngx_feature="sysconf(_SC_LEVEL1_DCACHE_LINESIZE)" > +ngx_feature_name="NGX_HAVE_LEVEL1_DCACHE_LINESIZE" > +ngx_feature_run=no > +ngx_feature_incs= > +ngx_feature_path= > +ngx_feature_libs= > +ngx_feature_test="sysconf(_SC_LEVEL1_DCACHE_LINESIZE)" > +. auto/feature > + > > ngx_feature="openat(), fstatat()" > ngx_feature_name="NGX_HAVE_OPENAT" Style: there should be two empty lines before the feature test. > diff -r c71aed1f6f88 -r 217d0ed87301 src/os/unix/ngx_posix_init.c > --- a/src/os/unix/ngx_posix_init.c Tue Nov 28 15:19:59 2017 +0000 > +++ b/src/os/unix/ngx_posix_init.c Sat Dec 09 09:31:04 2017 +0000 > @@ -48,8 +48,17 @@ > } > > ngx_pagesize = getpagesize(); > +#if (NGX_HAVE_LEVEL1_DCACHE_LINESIZE) > + ngx_int_t cpu_cache_line = sysconf(_SC_LEVEL1_DCACHE_LINESIZE); > + /* Below workaround to use default values on some environments > + where the cache line size yet not available */ > + ngx_cacheline_size = (cpu_cache_line == 0) ? > + NGX_CPU_CACHE_LINE : cpu_cache_line; > +#else > + /* Use default cache line for the architecture */ > ngx_cacheline_size = NGX_CPU_CACHE_LINE; > - > +#endif > + > for (n = ngx_pagesize; n >>= 1; ngx_pagesize_shift++) { /* void */ } > > #if (NGX_HAVE_SC_NPROCESSORS_ONLN) In no particular order: - There are multiple style issues, including: - Variables should be declared at the function start, or, in case of a conditional compilation, at the start of a block in #if. - Multi-line comments should look like, like in style(9): /* * Multi-line comments look like this. Make them real * sentences. Fill them so they look like real paragraphs. */ - I would rather suggest to leave the default as is, and introduce a separate block with sysconf() somewhere after it. This will result in much more readable code. - There should be error handling, sysconf() can return -1. - This needs some thinking about about priorities between sysconf(_SC_LEVEL1_DCACHE_LINESIZE) and ngx_cpuinfo(). We've seen cases when ngx_cpuinfo() detects wrong cache line size in virtualized environments (https://trac.nginx.org/nginx/ticket/352), so we may want to consider using sysconf(_SC_LEVEL1_DCACHE_LINESIZE) with higher priority (not sure though). -- Maxim Dounin http://mdounin.ru/ From debayang.qdt at qualcommdatacenter.com Mon Dec 11 16:52:32 2017 From: debayang.qdt at qualcommdatacenter.com (debayang.qdt) Date: Mon, 11 Dec 2017 16:52:32 +0000 Subject: [PATCH] Configure: Fix cacheline size for aarch64 platforms In-Reply-To: <20171211143339.GX78325@mdounin.ru> References: <51870787e3f3bd8dcffa.1512723841@blr-ubuntu-149.qualcomm.com> <20171208151704.GT78325@mdounin.ru> <20171208194805.GV78325@mdounin.ru> <344248f0e60449f8b5f74c4ddfba282b@aptaiexm02a.ap.qualcomm.com> <20171211143339.GX78325@mdounin.ru> Message-ID: <51f3fcb61c8e4fee807b9325c2c75f4c@aptaiexm02a.ap.qualcomm.com> Hello! On Sat, Dec 09, 2017 at 02:05:04PM +0000, debayang.qdt wrote: > Hello! > > On Fri, Dec 08, 2017 at 06:43:15PM +0000, debayang.qdt wrote: > > > Hello, > > > > 64 bytes should be the minimum size. > >> Any links to support this claim? > > AFAIK several aarch64 server vendors - centriq/thunderx/xgene/A53/A57.. implementations - uses either 64B/128B cache lines . > So keeping it at 64 bytes may be ok. > Also in linux kernel : > https://elixir.free-electrons.com/linux/v4.14.4/source/arch/arm64/incl > ude/asm/cache.h#L73 This seems to use either CTR_EL0 or 128, and not even mentions 64. Anyway, I have no objections to 64, as it is the cache line size on the aarch64 boxes I have access to. > > However, A53 is a small segment of arm64 based servers . > > Multiple aarch64 based servers uses 128 byte cache lines. > > For e.g Centriq 2400 aarch64 server from Qualcomm Datacenter Technologies uses 128 bytes cache line. > AFAIK, using a smaller cache line size is mostly fine and imply almost no performance difference in nginx. On ther other hand, using larger cache line size can easily result in multiple memory access where just one should be enough, resulting in suboptimal performance. That's why we generally assume 32 unless we know better. > > > To be very accurate , we may read the dcache line size from CTR_EL0 register. > > Let me know what you think. > > >> Given the level of popularity of aarch64 servers, I would rather not. I would prefer to rely on something architecture-independent like sysconf(_SC_LEVEL1_DCACHE_LINESIZE), though it looks like it doesn't work on aarch64 yet, see https://bugzilla.redhat.com/show_bug.cgi?id=1190638. > > The aarch64 support is recently added in the glibc trunk . > https://sourceware.org/git/?p=glibc.git;a=commit;h=6d58ce5e5072945d44f > 2dba83ad16cd6febd056c The implementation above reads the CTR_EL0 to > get the cache information . > > So , as you mentioned - it may make sense to use the sysconf to determine the cache line at runtime . In case it's not available on the system (value would be 0), we can fall back to the compile time defaults . > Below patch in nginx for the same. > > > # HG changeset patch > # User Debayan Ghosh > # Date 1512811864 0 > # Sat Dec 09 09:31:04 2017 +0000 > # Node ID 217d0ed8730190a986c079c300169e10b90b4a82 > # Parent c71aed1f6f88b8c5d56a4360ca4521a62a4c17ce > Nginx: Use sysconf to determine cacheline size There is no need for the "Nginx" prefix. Trailing dot is missing. > > Using sysconf(_SC_LEVEL1_DCACHE_LINESIZE) to determine cache line size on the system. > This will make it architecture independent. > Falls back to using arch specific compile time defaults if above not supported. Please keep lines under 80 chars. > > diff -r c71aed1f6f88 -r 217d0ed87301 auto/unix > --- a/auto/unix Tue Nov 28 15:19:59 2017 +0000 > +++ b/auto/unix Sat Dec 09 09:31:04 2017 +0000 > @@ -963,6 +963,15 @@ > ngx_feature_test="sysconf(_SC_NPROCESSORS_ONLN)" > . auto/feature > > +ngx_feature="sysconf(_SC_LEVEL1_DCACHE_LINESIZE)" > +ngx_feature_name="NGX_HAVE_LEVEL1_DCACHE_LINESIZE" > +ngx_feature_run=no > +ngx_feature_incs= > +ngx_feature_path= > +ngx_feature_libs= > +ngx_feature_test="sysconf(_SC_LEVEL1_DCACHE_LINESIZE)" > +. auto/feature > + > > ngx_feature="openat(), fstatat()" > ngx_feature_name="NGX_HAVE_OPENAT" Style: there should be two empty lines before the feature test. > diff -r c71aed1f6f88 -r 217d0ed87301 src/os/unix/ngx_posix_init.c > --- a/src/os/unix/ngx_posix_init.c Tue Nov 28 15:19:59 2017 +0000 > +++ b/src/os/unix/ngx_posix_init.c Sat Dec 09 09:31:04 2017 +0000 > @@ -48,8 +48,17 @@ > } > > ngx_pagesize = getpagesize(); > +#if (NGX_HAVE_LEVEL1_DCACHE_LINESIZE) > + ngx_int_t cpu_cache_line = sysconf(_SC_LEVEL1_DCACHE_LINESIZE); > + /* Below workaround to use default values on some environments > + where the cache line size yet not available */ > + ngx_cacheline_size = (cpu_cache_line == 0) ? > + NGX_CPU_CACHE_LINE : cpu_cache_line; #else > + /* Use default cache line for the architecture */ > ngx_cacheline_size = NGX_CPU_CACHE_LINE; > - > +#endif > + > for (n = ngx_pagesize; n >>= 1; ngx_pagesize_shift++) { /* void > */ } > > #if (NGX_HAVE_SC_NPROCESSORS_ONLN) >>In no particular order: >>- There are multiple style issues, including: >> - Variables should be declared at the function start, or, in case of a conditional compilation, at the start of a block in #if. >> - Multi-line comments should look like, like in style(9): /* * Multi-line comments look like this. Make them real * sentences. Fill them so they look like real paragraphs. */ >> - I would rather suggest to leave the default as is, and introduce a separate block with sysconf() somewhere after it. This will result in much more readable code. >> - There should be error handling, sysconf() can return -1. >> - This needs some thinking about about priorities between sysconf(_SC_LEVEL1_DCACHE_LINESIZE) and ngx_cpuinfo(). We've seen cases when ngx_cpuinfo() detects wrong cache line size in virtualized environments (https://trac.nginx.org/nginx/ticket/352), so we may want to consider using sysconf(_SC_LEVEL1_DCACHE_LINESIZE) with higher priority (not sure though). In general it may be better to rely on the arch independent code unless the specific tunings in ngx_cpuinfo() is known to give a noticeable performance impact. Below two patches taking care of the comments and giving priority to sysconf. Let me know if any further comments. # HG changeset patch # User Debayan Ghosh # Date 1513004735 0 # Mon Dec 11 15:05:35 2017 +0000 # Node ID b765307e9f516c396da24019724f82c2c8c38677 # Parent d3235149d17f7745d3ac246a6cdcc81a56698f7b Configure: Set default cacheline size to 64 for aarch64 platforms. diff -r d3235149d17f -r b765307e9f51 auto/os/conf --- a/auto/os/conf Thu Dec 07 17:09:36 2017 +0300 +++ b/auto/os/conf Mon Dec 11 15:05:35 2017 +0000 @@ -110,6 +110,11 @@ NGX_MACH_CACHE_LINE=64 ;; + aarch64 ) + have=NGX_ALIGNMENT value=16 . auto/define + NGX_MACH_CACHE_LINE=64 + ;; + *) have=NGX_ALIGNMENT value=16 . auto/define NGX_MACH_CACHE_LINE=32 # HG changeset patch # User Debayan Ghosh # Date 1513009691 0 # Mon Dec 11 16:28:11 2017 +0000 # Node ID 090538eb7d973d8cc690f8f413ed5c7b5d3338b8 # Parent b765307e9f516c396da24019724f82c2c8c38677 Use sysconf to determine cacheline size at runtime. Determine cacheline size at runtime if supported using sysconf(_SC_LEVEL1_DCACHE_LINESIZE). In case not supported, fallback to ngx_cpuinfo() or compile time defaults. diff -r b765307e9f51 -r 090538eb7d97 auto/unix --- a/auto/unix Mon Dec 11 15:05:35 2017 +0000 +++ b/auto/unix Mon Dec 11 16:28:11 2017 +0000 @@ -964,6 +964,16 @@ . auto/feature +ngx_feature="sysconf(_SC_LEVEL1_DCACHE_LINESIZE)" +ngx_feature_name="NGX_HAVE_LEVEL1_DCACHE_LINESIZE" +ngx_feature_run=no +ngx_feature_incs= +ngx_feature_path= +ngx_feature_libs= +ngx_feature_test="sysconf(_SC_LEVEL1_DCACHE_LINESIZE)" +. auto/feature + + ngx_feature="openat(), fstatat()" ngx_feature_name="NGX_HAVE_OPENAT" ngx_feature_run=no diff -r b765307e9f51 -r 090538eb7d97 src/os/unix/ngx_posix_init.c --- a/src/os/unix/ngx_posix_init.c Mon Dec 11 15:05:35 2017 +0000 +++ b/src/os/unix/ngx_posix_init.c Mon Dec 11 16:28:11 2017 +0000 @@ -36,6 +36,9 @@ { ngx_time_t *tp; ngx_uint_t n; +#if (NGX_HAVE_LEVEL1_DCACHE_LINESIZE) + ngx_int_t cpu_cache_line; +#endif #if (NGX_HAVE_OS_SPECIFIC_INIT) if (ngx_os_specific_init(log) != NGX_OK) { @@ -64,6 +67,17 @@ ngx_cpuinfo(); +#if (NGX_HAVE_LEVEL1_DCACHE_LINESIZE) + /* + * Fetch cacheline from system configuration if available. + * This is given priority over ngx_cpuinfo(). + */ + cpu_cache_line = sysconf(_SC_LEVEL1_DCACHE_LINESIZE); + if(cpu_cache_line > 0) { + ngx_cacheline_size = cpu_cache_line; + } +#endif + if (getrlimit(RLIMIT_NOFILE, &rlmt) == -1) { ngx_log_error(NGX_LOG_ALERT, log, errno, "getrlimit(RLIMIT_NOFILE) failed"); -- Debayan Ghosh From liaotonglang at gmail.com Tue Dec 12 02:39:31 2017 From: liaotonglang at gmail.com (=?UTF-8?B?5buW57uf5rWq?=) Date: Tue, 12 Dec 2017 02:39:31 +0000 Subject: [PATCH] Increase size to sizeof(ngx_pool_t) if need when create pool Message-ID: # HG changeset patch # User Liao Tonglang # Date 1512991389 -28800 # Mon Dec 11 19:23:09 2017 +0800 # Node ID 77be99f1a4766bf19761dfcf03531242923bd0a2 # Parent d3235149d17f7745d3ac246a6cdcc81a56698f7b Increase size to sizeof(ngx_pool_t) if need when create pool If size is lesser than sizeof(ngx_pool_t), increase it's size to have enough memory to store ngx_pool_t, or a coredump will occur. diff -r d3235149d17f -r 77be99f1a476 src/core/ngx_palloc.c --- a/src/core/ngx_palloc.c Thu Dec 07 17:09:36 2017 +0300 +++ b/src/core/ngx_palloc.c Mon Dec 11 19:23:09 2017 +0800 @@ -20,6 +20,10 @@ { ngx_pool_t *p; + if (size < sizeof(ngx_pool_t)) { + size = sizeof(ngx_pool_t); + } + p = ngx_memalign(NGX_POOL_ALIGNMENT, size, log); if (p == NULL) { return NULL; -------------- next part -------------- An HTML attachment was scrubbed... URL: From ru at nginx.com Tue Dec 12 13:58:45 2017 From: ru at nginx.com (Ruslan Ermilov) Date: Tue, 12 Dec 2017 16:58:45 +0300 Subject: [PATCH] Increase size to sizeof(ngx_pool_t) if need when create pool In-Reply-To: References: Message-ID: <20171212135845.GJ7492@lo0.su> Hi, On Tue, Dec 12, 2017 at 02:39:31AM +0000, ??? wrote: > # HG changeset patch > # User Liao Tonglang > # Date 1512991389 -28800 > # Mon Dec 11 19:23:09 2017 +0800 > # Node ID 77be99f1a4766bf19761dfcf03531242923bd0a2 > # Parent d3235149d17f7745d3ac246a6cdcc81a56698f7b > Increase size to sizeof(ngx_pool_t) if need when create pool > > If size is lesser than sizeof(ngx_pool_t), increase it's size to have enough > memory to store ngx_pool_t, or a coredump will occur. > > diff -r d3235149d17f -r 77be99f1a476 src/core/ngx_palloc.c > --- a/src/core/ngx_palloc.c Thu Dec 07 17:09:36 2017 +0300 > +++ b/src/core/ngx_palloc.c Mon Dec 11 19:23:09 2017 +0800 > @@ -20,6 +20,10 @@ > { > ngx_pool_t *p; > > + if (size < sizeof(ngx_pool_t)) { > + size = sizeof(ngx_pool_t); > + } > + > p = ngx_memalign(NGX_POOL_ALIGNMENT, size, log); > if (p == NULL) { > return NULL; As documented in [1], the "size" should be at least NGX_MIN_POOL_SIZE and a multiple of NGX_POOL_ALIGNMENT. [1] http://nginx.org/en/docs/dev/development_guide.html#pool Thank you for your patch, but it will not be applied. From Nate.Karstens at garmin.com Tue Dec 12 15:44:42 2017 From: Nate.Karstens at garmin.com (Karstens, Nate) Date: Tue, 12 Dec 2017 15:44:42 +0000 Subject: [PATCH] Proxy: support configuration of socket buffer sizes In-Reply-To: <20170523202433.GQ55433@mdounin.ru> References: <145451D4E6785E4DA4DFA353A58CB7B2015E152A53@OLAWPA-EXMB04.ad.garmin.com> <145451D4E6785E4DA4DFA353A58CB7B2015E158599@OLAWPA-EXMB04.ad.garmin.com> <20170519182111.GB55433@mdounin.ru> <145451D4E6785E4DA4DFA353A58CB7B2015E1590C0@OLAWPA-EXMB04.ad.garmin.com> <20170523202433.GQ55433@mdounin.ru> Message-ID: Maxim, I wanted to follow up on this because our software has been released and so I can provide a few more details about our setup. Our use case involves the user transferring a large amount of data from a mobile device (running iOS or Android) through the HTTP proxy and storing it onto an SD card (the SD card is provided by the user). If the SD card's write speed is too slow, then the proxy send buffer will eventually fill up, causing a long delay between when the HTTP client sends packets, which ultimately leads to the client timing out. Because the request contains a large amount of data, "proxy_request_buffering" is set to "off". We looked into adjusting the behavior of the client, but this was not possible. To explain, there are generally two ways a mobile app can use HTTP to transfer data. The most straightforward way is to actively transfer the data using either an HTTP client integrated into the app or the HTTP libraries provided by the platform. However, for large transfers this requires the user to keep the mobile app in the foreground -- if the mobile OS detects that the user is not actively using the app then it will suspend the app, which interrupts the transfer. The alternative method to transfer data is to utilize the HTTP background transfer functionality provided by the mobile OS. With this method, the app configures the HTTP transfer and then asks the mobile OS to complete it on the app's behalf. The advantage here is that the user can use other apps while the mobile OS completes the transfer. Unfortunately, the mobile OS provides no ability to customize connection parameters, such as timeouts. I read through the Cloudflare blog entry (thank you -- that was interesting). Their case is different because they were having problems with a download, while we are having problems with an upload. As such, perhaps the "proxy_send_timeout" setting applies in this case instead of the "send_timeout" that they were using. Still, it seems undesirable to increase the timeout value to be too large because it increases the time before you can detect a problem with the connection. The Cloudflare team also considered reducing the TCP buffer size, but ultimately decided on a different solution. I noticed that their solution has not been incorporated into the main distribution, do you know why that is? For us, the option to configure the TCP buffer sizes seems to be the most straightforward. In our system, the default TCP send buffer size is 16kB. However, this can grow to a maximum of 4MB (the Linux stack adjusts this in tcp_sndbuf_expand() -- see tcp_input.c). We do not think that reducing the system-wide maximum TCP buffer size is ideal in this case because the server provides many other TCP applications that work well with the default value; adjusting that value presents additional risk and may lead to more widespread application-specific tuning. Thanks for your consideration, Nate -----Original Message----- From: nginx-devel [mailto:nginx-devel-bounces at nginx.org] On Behalf Of Maxim Dounin Sent: Tuesday, May 23, 2017 3:25 PM To: nginx-devel at nginx.org Subject: Re: [PATCH] Proxy: support configuration of socket buffer sizes Hello! On Mon, May 22, 2017 at 07:02:04PM +0000, Karstens, Nate wrote: > Maxim, > > I'd be happy to explain. Our application is actually relying more on > the change to support to SO_SNDBUF option, but I noticed the SO_RCVBUF > option there and thought it was worth exposing that at the same time. > > The application we're having issues with is essentially a file > transfer through a proxy to a relatively slow storage medium. > Because we're using a proxy there are three buffers involved on the > receive end of the HTTP request: 1) receive buffer on external nginx > socket, 2) send buffer in nginx proxy module, and > 3) receive buffer on proxied server. So, in a system where each buffer > is a maximum of 5 MB, you can have 3 x 5 = 15 MB of data in the TCP > buffers at a given point in time. Send buffer on the client contributes to overral buffering as well, and probably should be counted too. But, frankly, 5MB is a lot, and much higher than typical default, and may result in problems by itself. See https://blog.cloudflare.com/the-curious-case-of-slow-downloads/ for a description of a problem Cloudflare faced with such socket buffer sizes. > In most circumstances, I don't think this would be a problem. > However, writing the data is so slow that the HTTP client times out > waiting for a reply (which is only sent once all data has been written > out). Unfortunately, we cannot solve this by increasing the client's > timeout. We found that reducing the size Are you using some custom client, or a browser? Even with buffers as huge as 3x5MB, a really slow backend will be required to trigger a timeout in a typical browser, as browsers seems to happily wait for 60+ seconds (actually, much more, but 60 seconds is a default timeout in nginx). This means that backend needs to be slower than 250 KB/seconds for this to become a problem even without any socket tuning, and this sounds more like an 1x CD than even a class 2 SD-card. > of each buffer -- using the "rcvbuf" parameter to the "listen" > directive lets us configure SO_RCVBUF for the first and third sockets > mentioned above, and this patch lets us configure SO_SNDBUF of the > second socket -- reduces the time between when the client sends the > last byte of its request and when it receives a reply, ultimately > preventing the timeout. We would prefer not to adjust the system's > default sizes for these buffers because that negatively impacts > performance on other applications used by the system. > > Although this seems like a fairly-specific use-case, I think it can be > generalized as: 1) the client cannot wait indefinitely after sending > the last byte of the request, 2) the server must process all data > before it can generate a reply, and 3) the server processes data > relatively slowly. This seemed general enough that it was worth adding > the functionality for our own use and thought it might be applicable > to other users as well. Normally, nginx reads the whole request from the client, and only after that starts sending it to a backend server. This effectively means infinite buffering, and certainly will trigger a timeout if the backend server is not able to process the request in a reasonable time. Socket buffer sizes may become important when using "proxy_request_buffering off" and/or non-http connections (e.g., WebSocket ones), but these are specific by itself. Overall, thank you for the patch, but it looks like something very specific for your particular use case. We would like to avoid introducing this into nginx, at least till there are more requests for this. I would also recommend to take a closer look at your setup. Numbers you've provided suggest that there may be something wrong elsewhere, and the fact that smaller buffers fix the problem may be unrelated. -- Maxim Dounin http://nginx.org/ _______________________________________________ nginx-devel mailing list nginx-devel at nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-devel ________________________________ CONFIDENTIALITY NOTICE: This email and any attachments are for the sole use of the intended recipient(s) and contain information that may be Garmin confidential and/or Garmin legally privileged. If you have received this email in error, please notify the sender by reply email and delete the message. Any disclosure, copying, distribution or use of this communication (including attachments) by someone other than the intended recipient is prohibited. Thank you. From mdounin at mdounin.ru Wed Dec 13 15:53:28 2017 From: mdounin at mdounin.ru (Maxim Dounin) Date: Wed, 13 Dec 2017 18:53:28 +0300 Subject: [PATCH] Configure: Fix cacheline size for aarch64 platforms In-Reply-To: <51f3fcb61c8e4fee807b9325c2c75f4c@aptaiexm02a.ap.qualcomm.com> References: <51870787e3f3bd8dcffa.1512723841@blr-ubuntu-149.qualcomm.com> <20171208151704.GT78325@mdounin.ru> <20171208194805.GV78325@mdounin.ru> <344248f0e60449f8b5f74c4ddfba282b@aptaiexm02a.ap.qualcomm.com> <20171211143339.GX78325@mdounin.ru> <51f3fcb61c8e4fee807b9325c2c75f4c@aptaiexm02a.ap.qualcomm.com> Message-ID: <20171213155328.GD78325@mdounin.ru> Hello! On Mon, Dec 11, 2017 at 04:52:32PM +0000, debayang.qdt wrote: [...] > >> - This needs some thinking about about priorities between > sysconf(_SC_LEVEL1_DCACHE_LINESIZE) and ngx_cpuinfo(). We've > seen cases when ngx_cpuinfo() detects wrong cache line size in > virtualized environments (https://trac.nginx.org/nginx/ticket/352), > so we may want to consider using sysconf(_SC_LEVEL1_DCACHE_LINESIZE) > with higher priority (not sure though). > > In general it may be better to rely on the arch independent code unless the specific tunings in ngx_cpuinfo() > is known to give a noticeable performance impact. Yes. The problem though is that ngx_cpuinfo() is actually the place where we apply such specific tunings right now. For example, currently we do the following in ngx_cpuinfo(): /* * Pentium 4, although its cache line size is 64 bytes, * it prefetches up to two cache lines during memory read */ case 15: ngx_cacheline_size = 128; break; While this particular part of the code is probably not important now, I don't think we want to loose the possibility to do such optimizations. So probably we should preserve ngx_cpuinfo() as the last step for now. In the future we can consider improving it to preserve ngx_cacheline_size if it was set by sysconf() and likely correct. [...] > # HG changeset patch > # User Debayan Ghosh > # Date 1513004735 0 > # Mon Dec 11 15:05:35 2017 +0000 > # Node ID b765307e9f516c396da24019724f82c2c8c38677 > # Parent d3235149d17f7745d3ac246a6cdcc81a56698f7b > Configure: Set default cacheline size to 64 for aarch64 platforms. > > diff -r d3235149d17f -r b765307e9f51 auto/os/conf > --- a/auto/os/conf Thu Dec 07 17:09:36 2017 +0300 > +++ b/auto/os/conf Mon Dec 11 15:05:35 2017 +0000 > @@ -110,6 +110,11 @@ > NGX_MACH_CACHE_LINE=64 > ;; > > + aarch64 ) > + have=NGX_ALIGNMENT value=16 . auto/define > + NGX_MACH_CACHE_LINE=64 > + ;; > + > *) > have=NGX_ALIGNMENT value=16 . auto/define > NGX_MACH_CACHE_LINE=32 > > Queued (with minor change in commit log), thnx. > # HG changeset patch > # User Debayan Ghosh > # Date 1513009691 0 > # Mon Dec 11 16:28:11 2017 +0000 > # Node ID 090538eb7d973d8cc690f8f413ed5c7b5d3338b8 > # Parent b765307e9f516c396da24019724f82c2c8c38677 > Use sysconf to determine cacheline size at runtime. > > Determine cacheline size at runtime if supported > using sysconf(_SC_LEVEL1_DCACHE_LINESIZE). In case not supported, > fallback to ngx_cpuinfo() or compile time defaults. > > diff -r b765307e9f51 -r 090538eb7d97 auto/unix > --- a/auto/unix Mon Dec 11 15:05:35 2017 +0000 > +++ b/auto/unix Mon Dec 11 16:28:11 2017 +0000 > @@ -964,6 +964,16 @@ > . auto/feature > > > +ngx_feature="sysconf(_SC_LEVEL1_DCACHE_LINESIZE)" > +ngx_feature_name="NGX_HAVE_LEVEL1_DCACHE_LINESIZE" > +ngx_feature_run=no > +ngx_feature_incs= > +ngx_feature_path= > +ngx_feature_libs= > +ngx_feature_test="sysconf(_SC_LEVEL1_DCACHE_LINESIZE)" > +. auto/feature > + > + > ngx_feature="openat(), fstatat()" > ngx_feature_name="NGX_HAVE_OPENAT" > ngx_feature_run=no > diff -r b765307e9f51 -r 090538eb7d97 src/os/unix/ngx_posix_init.c > --- a/src/os/unix/ngx_posix_init.c Mon Dec 11 15:05:35 2017 +0000 > +++ b/src/os/unix/ngx_posix_init.c Mon Dec 11 16:28:11 2017 +0000 > @@ -36,6 +36,9 @@ > { > ngx_time_t *tp; > ngx_uint_t n; > +#if (NGX_HAVE_LEVEL1_DCACHE_LINESIZE) > + ngx_int_t cpu_cache_line; > +#endif This at least needs to be fixed to match style. Also, probably using "long" as sysconf() returns is a good idea. I would also use a shorter name for the variable. > > #if (NGX_HAVE_OS_SPECIFIC_INIT) > if (ngx_os_specific_init(log) != NGX_OK) { @@ -64,6 +67,17 @@ Just a side note: it looks like your mail client corrupted the patch. > > ngx_cpuinfo(); > > +#if (NGX_HAVE_LEVEL1_DCACHE_LINESIZE) > + /* > + * Fetch cacheline from system configuration if available. > + * This is given priority over ngx_cpuinfo(). > + */ Comment looks unneeded, as it adds more or less nothing to the code. > + cpu_cache_line = sysconf(_SC_LEVEL1_DCACHE_LINESIZE); > + if(cpu_cache_line > 0) { Missing space between "if" and "(". > + ngx_cacheline_size = cpu_cache_line; > + } > +#endif > + > if (getrlimit(RLIMIT_NOFILE, &rlmt) == -1) { > ngx_log_error(NGX_LOG_ALERT, log, errno, > "getrlimit(RLIMIT_NOFILE) failed"); Here is a version of the patch updated according to the comments above. Please let me know if it looks good for you, I'll commit it then: # HG changeset patch # User Debayan Ghosh # Date 1513009691 0 # Mon Dec 11 16:28:11 2017 +0000 # Node ID 70da21da25e2117bcfb1639ad1e873f28aff44b5 # Parent e4c21e4172773fa0df7b356da9bf2ea852634a66 Use sysconf to determine cacheline size at runtime. Determine cacheline size at runtime if supported using sysconf(_SC_LEVEL1_DCACHE_LINESIZE). In case not supported, fallback to ngx_cpuinfo() or compile time defaults. diff --git a/auto/unix b/auto/unix --- a/auto/unix +++ b/auto/unix @@ -964,6 +964,16 @@ ngx_feature_test="sysconf(_SC_NPROCESSOR . auto/feature +ngx_feature="sysconf(_SC_LEVEL1_DCACHE_LINESIZE)" +ngx_feature_name="NGX_HAVE_LEVEL1_DCACHE_LINESIZE" +ngx_feature_run=no +ngx_feature_incs= +ngx_feature_path= +ngx_feature_libs= +ngx_feature_test="sysconf(_SC_LEVEL1_DCACHE_LINESIZE)" +. auto/feature + + ngx_feature="openat(), fstatat()" ngx_feature_name="NGX_HAVE_OPENAT" ngx_feature_run=no diff --git a/src/os/unix/ngx_posix_init.c b/src/os/unix/ngx_posix_init.c --- a/src/os/unix/ngx_posix_init.c +++ b/src/os/unix/ngx_posix_init.c @@ -36,6 +36,9 @@ ngx_os_init(ngx_log_t *log) { ngx_time_t *tp; ngx_uint_t n; +#if (NGX_HAVE_LEVEL1_DCACHE_LINESIZE) + long size; +#endif #if (NGX_HAVE_OS_SPECIFIC_INIT) if (ngx_os_specific_init(log) != NGX_OK) { @@ -62,6 +65,13 @@ ngx_os_init(ngx_log_t *log) ngx_ncpu = 1; } +#if (NGX_HAVE_LEVEL1_DCACHE_LINESIZE) + size = sysconf(_SC_LEVEL1_DCACHE_LINESIZE); + if (size > 0) { + ngx_cacheline_size = size; + } +#endif + ngx_cpuinfo(); if (getrlimit(RLIMIT_NOFILE, &rlmt) == -1) { -- Maxim Dounin http://mdounin.ru/ From debayang.qdt at qualcommdatacenter.com Wed Dec 13 16:17:13 2017 From: debayang.qdt at qualcommdatacenter.com (debayang.qdt) Date: Wed, 13 Dec 2017 16:17:13 +0000 Subject: [PATCH] Configure: Fix cacheline size for aarch64 platforms In-Reply-To: <20171213155328.GD78325@mdounin.ru> References: <51870787e3f3bd8dcffa.1512723841@blr-ubuntu-149.qualcomm.com> <20171208151704.GT78325@mdounin.ru> <20171208194805.GV78325@mdounin.ru> <344248f0e60449f8b5f74c4ddfba282b@aptaiexm02a.ap.qualcomm.com> <20171211143339.GX78325@mdounin.ru> <51f3fcb61c8e4fee807b9325c2c75f4c@aptaiexm02a.ap.qualcomm.com> <20171213155328.GD78325@mdounin.ru> Message-ID: <4df225b047ba4c9ca08727069897a148@aptaiexm02a.ap.qualcomm.com> Thanks. Looks good. Only the second patch commit log description may be corrected. "... In case not supported, fallback to ngx_cpuinfo() or compile time defaults." To " .. In case not supported, fallback to compile time defaults." Thanks Debayan -----Original Message----- From: Maxim Dounin [mailto:mdounin at mdounin.ru] Sent: Wednesday, December 13, 2017 9:23 PM To: nginx-devel at nginx.org Cc: debayang.qdt Subject: Re: [PATCH] Configure: Fix cacheline size for aarch64 platforms Hello! On Mon, Dec 11, 2017 at 04:52:32PM +0000, debayang.qdt wrote: [...] > >> - This needs some thinking about about priorities between > sysconf(_SC_LEVEL1_DCACHE_LINESIZE) and ngx_cpuinfo(). We've > seen cases when ngx_cpuinfo() detects wrong cache line size in > virtualized environments (https://trac.nginx.org/nginx/ticket/352), > so we may want to consider using sysconf(_SC_LEVEL1_DCACHE_LINESIZE) > with higher priority (not sure though). > > In general it may be better to rely on the arch independent code > unless the specific tunings in ngx_cpuinfo() is known to give a noticeable performance impact. Yes. The problem though is that ngx_cpuinfo() is actually the place where we apply such specific tunings right now. For example, currently we do the following in ngx_cpuinfo(): /* * Pentium 4, although its cache line size is 64 bytes, * it prefetches up to two cache lines during memory read */ case 15: ngx_cacheline_size = 128; break; While this particular part of the code is probably not important now, I don't think we want to loose the possibility to do such optimizations. So probably we should preserve ngx_cpuinfo() as the last step for now. In the future we can consider improving it to preserve ngx_cacheline_size if it was set by sysconf() and likely correct. [...] > # HG changeset patch > # User Debayan Ghosh > # Date 1513004735 0 > # Mon Dec 11 15:05:35 2017 +0000 > # Node ID b765307e9f516c396da24019724f82c2c8c38677 > # Parent d3235149d17f7745d3ac246a6cdcc81a56698f7b > Configure: Set default cacheline size to 64 for aarch64 platforms. > > diff -r d3235149d17f -r b765307e9f51 auto/os/conf > --- a/auto/os/conf Thu Dec 07 17:09:36 2017 +0300 > +++ b/auto/os/conf Mon Dec 11 15:05:35 2017 +0000 > @@ -110,6 +110,11 @@ > NGX_MACH_CACHE_LINE=64 > ;; > > + aarch64 ) > + have=NGX_ALIGNMENT value=16 . auto/define > + NGX_MACH_CACHE_LINE=64 > + ;; > + > *) > have=NGX_ALIGNMENT value=16 . auto/define > NGX_MACH_CACHE_LINE=32 > > Queued (with minor change in commit log), thnx. > # HG changeset patch > # User Debayan Ghosh > # Date 1513009691 0 > # Mon Dec 11 16:28:11 2017 +0000 > # Node ID 090538eb7d973d8cc690f8f413ed5c7b5d3338b8 > # Parent b765307e9f516c396da24019724f82c2c8c38677 > Use sysconf to determine cacheline size at runtime. > > Determine cacheline size at runtime if supported using > sysconf(_SC_LEVEL1_DCACHE_LINESIZE). In case not supported, fallback > to ngx_cpuinfo() or compile time defaults. > > diff -r b765307e9f51 -r 090538eb7d97 auto/unix > --- a/auto/unix Mon Dec 11 15:05:35 2017 +0000 > +++ b/auto/unix Mon Dec 11 16:28:11 2017 +0000 > @@ -964,6 +964,16 @@ > . auto/feature > > > +ngx_feature="sysconf(_SC_LEVEL1_DCACHE_LINESIZE)" > +ngx_feature_name="NGX_HAVE_LEVEL1_DCACHE_LINESIZE" > +ngx_feature_run=no > +ngx_feature_incs= > +ngx_feature_path= > +ngx_feature_libs= > +ngx_feature_test="sysconf(_SC_LEVEL1_DCACHE_LINESIZE)" > +. auto/feature > + > + > ngx_feature="openat(), fstatat()" > ngx_feature_name="NGX_HAVE_OPENAT" > ngx_feature_run=no > diff -r b765307e9f51 -r 090538eb7d97 src/os/unix/ngx_posix_init.c > --- a/src/os/unix/ngx_posix_init.c Mon Dec 11 15:05:35 2017 +0000 > +++ b/src/os/unix/ngx_posix_init.c Mon Dec 11 16:28:11 2017 +0000 > @@ -36,6 +36,9 @@ > { > ngx_time_t *tp; > ngx_uint_t n; > +#if (NGX_HAVE_LEVEL1_DCACHE_LINESIZE) > + ngx_int_t cpu_cache_line; > +#endif This at least needs to be fixed to match style. Also, probably using "long" as sysconf() returns is a good idea. I would also use a shorter name for the variable. > > #if (NGX_HAVE_OS_SPECIFIC_INIT) > if (ngx_os_specific_init(log) != NGX_OK) { @@ -64,6 +67,17 @@ Just a side note: it looks like your mail client corrupted the patch. > > ngx_cpuinfo(); > > +#if (NGX_HAVE_LEVEL1_DCACHE_LINESIZE) > + /* > + * Fetch cacheline from system configuration if available. > + * This is given priority over ngx_cpuinfo(). > + */ Comment looks unneeded, as it adds more or less nothing to the code. > + cpu_cache_line = sysconf(_SC_LEVEL1_DCACHE_LINESIZE); > + if(cpu_cache_line > 0) { Missing space between "if" and "(". > + ngx_cacheline_size = cpu_cache_line; > + } > +#endif > + > if (getrlimit(RLIMIT_NOFILE, &rlmt) == -1) { > ngx_log_error(NGX_LOG_ALERT, log, errno, > "getrlimit(RLIMIT_NOFILE) failed"); Here is a version of the patch updated according to the comments above. Please let me know if it looks good for you, I'll commit it then: # HG changeset patch # User Debayan Ghosh # Date 1513009691 0 # Mon Dec 11 16:28:11 2017 +0000 # Node ID 70da21da25e2117bcfb1639ad1e873f28aff44b5 # Parent e4c21e4172773fa0df7b356da9bf2ea852634a66 Use sysconf to determine cacheline size at runtime. Determine cacheline size at runtime if supported using sysconf(_SC_LEVEL1_DCACHE_LINESIZE). In case not supported, fallback to ngx_cpuinfo() or compile time defaults. diff --git a/auto/unix b/auto/unix --- a/auto/unix +++ b/auto/unix @@ -964,6 +964,16 @@ ngx_feature_test="sysconf(_SC_NPROCESSOR . auto/feature +ngx_feature="sysconf(_SC_LEVEL1_DCACHE_LINESIZE)" +ngx_feature_name="NGX_HAVE_LEVEL1_DCACHE_LINESIZE" +ngx_feature_run=no +ngx_feature_incs= +ngx_feature_path= +ngx_feature_libs= +ngx_feature_test="sysconf(_SC_LEVEL1_DCACHE_LINESIZE)" +. auto/feature + + ngx_feature="openat(), fstatat()" ngx_feature_name="NGX_HAVE_OPENAT" ngx_feature_run=no diff --git a/src/os/unix/ngx_posix_init.c b/src/os/unix/ngx_posix_init.c --- a/src/os/unix/ngx_posix_init.c +++ b/src/os/unix/ngx_posix_init.c @@ -36,6 +36,9 @@ ngx_os_init(ngx_log_t *log) { ngx_time_t *tp; ngx_uint_t n; +#if (NGX_HAVE_LEVEL1_DCACHE_LINESIZE) + long size; +#endif #if (NGX_HAVE_OS_SPECIFIC_INIT) if (ngx_os_specific_init(log) != NGX_OK) { @@ -62,6 +65,13 @@ ngx_os_init(ngx_log_t *log) ngx_ncpu = 1; } +#if (NGX_HAVE_LEVEL1_DCACHE_LINESIZE) + size = sysconf(_SC_LEVEL1_DCACHE_LINESIZE); + if (size > 0) { + ngx_cacheline_size = size; + } +#endif + ngx_cpuinfo(); if (getrlimit(RLIMIT_NOFILE, &rlmt) == -1) { -- Maxim Dounin http://mdounin.ru/ From mdounin at mdounin.ru Wed Dec 13 17:14:50 2017 From: mdounin at mdounin.ru (Maxim Dounin) Date: Wed, 13 Dec 2017 20:14:50 +0300 Subject: [PATCH] Proxy: support configuration of socket buffer sizes In-Reply-To: References: <145451D4E6785E4DA4DFA353A58CB7B2015E152A53@OLAWPA-EXMB04.ad.garmin.com> <145451D4E6785E4DA4DFA353A58CB7B2015E158599@OLAWPA-EXMB04.ad.garmin.com> <20170519182111.GB55433@mdounin.ru> <145451D4E6785E4DA4DFA353A58CB7B2015E1590C0@OLAWPA-EXMB04.ad.garmin.com> <20170523202433.GQ55433@mdounin.ru> Message-ID: <20171213171449.GE78325@mdounin.ru> Hello! On Tue, Dec 12, 2017 at 03:44:42PM +0000, Karstens, Nate wrote: > I wanted to follow up on this because our software has been > released and so I can provide a few more details about our > setup. Thank you for the details. [...] > I read through the Cloudflare blog entry (thank you -- that was > interesting). Their case is different because they were having > problems with a download, while we are having problems with an > upload. As such, perhaps the "proxy_send_timeout" setting > applies in this case instead of the "send_timeout" that they > were using. Still, it seems undesirable to increase the timeout > value to be too large because it increases the time before you > can detect a problem with the connection. The Cloudflare team > also considered reducing the TCP buffer size, but ultimately > decided on a different solution. I noticed that their solution > has not been incorporated into the main distribution, do you > know why that is? The patch in question was never submitted for inclusion into nginx. Likely because the authors consider it to be not ready for inclusion. I tend to agree. While the approach looks interesting, it probably could be implemented in a more portable way and with less intrusion into generic code. -- Maxim Dounin http://mdounin.ru/ From mdounin at mdounin.ru Wed Dec 13 17:18:48 2017 From: mdounin at mdounin.ru (Maxim Dounin) Date: Wed, 13 Dec 2017 17:18:48 +0000 Subject: [nginx] Configure: set default cacheline size to 64 for aarch64 platforms. Message-ID: details: http://hg.nginx.org/nginx/rev/e4c21e417277 branches: changeset: 7172:e4c21e417277 user: Debayan Ghosh date: Mon Dec 11 15:05:35 2017 +0000 description: Configure: set default cacheline size to 64 for aarch64 platforms. diffstat: auto/os/conf | 5 +++++ 1 files changed, 5 insertions(+), 0 deletions(-) diffs (15 lines): diff --git a/auto/os/conf b/auto/os/conf --- a/auto/os/conf +++ b/auto/os/conf @@ -110,6 +110,11 @@ case "$NGX_MACHINE" in NGX_MACH_CACHE_LINE=64 ;; + aarch64 ) + have=NGX_ALIGNMENT value=16 . auto/define + NGX_MACH_CACHE_LINE=64 + ;; + *) have=NGX_ALIGNMENT value=16 . auto/define NGX_MACH_CACHE_LINE=32 From mdounin at mdounin.ru Wed Dec 13 17:18:50 2017 From: mdounin at mdounin.ru (Maxim Dounin) Date: Wed, 13 Dec 2017 17:18:50 +0000 Subject: [nginx] Use sysconf to determine cacheline size at runtime. Message-ID: details: http://hg.nginx.org/nginx/rev/057adb2a9d23 branches: changeset: 7173:057adb2a9d23 user: Debayan Ghosh date: Mon Dec 11 16:28:11 2017 +0000 description: Use sysconf to determine cacheline size at runtime. Determine cacheline size at runtime if supported using sysconf(_SC_LEVEL1_DCACHE_LINESIZE). In case not supported, fallback to compile time defaults. diffstat: auto/unix | 10 ++++++++++ src/os/unix/ngx_posix_init.c | 10 ++++++++++ 2 files changed, 20 insertions(+), 0 deletions(-) diffs (47 lines): diff --git a/auto/unix b/auto/unix --- a/auto/unix +++ b/auto/unix @@ -964,6 +964,16 @@ ngx_feature_test="sysconf(_SC_NPROCESSOR . auto/feature +ngx_feature="sysconf(_SC_LEVEL1_DCACHE_LINESIZE)" +ngx_feature_name="NGX_HAVE_LEVEL1_DCACHE_LINESIZE" +ngx_feature_run=no +ngx_feature_incs= +ngx_feature_path= +ngx_feature_libs= +ngx_feature_test="sysconf(_SC_LEVEL1_DCACHE_LINESIZE)" +. auto/feature + + ngx_feature="openat(), fstatat()" ngx_feature_name="NGX_HAVE_OPENAT" ngx_feature_run=no diff --git a/src/os/unix/ngx_posix_init.c b/src/os/unix/ngx_posix_init.c --- a/src/os/unix/ngx_posix_init.c +++ b/src/os/unix/ngx_posix_init.c @@ -36,6 +36,9 @@ ngx_os_init(ngx_log_t *log) { ngx_time_t *tp; ngx_uint_t n; +#if (NGX_HAVE_LEVEL1_DCACHE_LINESIZE) + long size; +#endif #if (NGX_HAVE_OS_SPECIFIC_INIT) if (ngx_os_specific_init(log) != NGX_OK) { @@ -62,6 +65,13 @@ ngx_os_init(ngx_log_t *log) ngx_ncpu = 1; } +#if (NGX_HAVE_LEVEL1_DCACHE_LINESIZE) + size = sysconf(_SC_LEVEL1_DCACHE_LINESIZE); + if (size > 0) { + ngx_cacheline_size = size; + } +#endif + ngx_cpuinfo(); if (getrlimit(RLIMIT_NOFILE, &rlmt) == -1) { From mdounin at mdounin.ru Wed Dec 13 17:19:46 2017 From: mdounin at mdounin.ru (Maxim Dounin) Date: Wed, 13 Dec 2017 20:19:46 +0300 Subject: [PATCH] Configure: Fix cacheline size for aarch64 platforms In-Reply-To: <4df225b047ba4c9ca08727069897a148@aptaiexm02a.ap.qualcomm.com> References: <51870787e3f3bd8dcffa.1512723841@blr-ubuntu-149.qualcomm.com> <20171208151704.GT78325@mdounin.ru> <20171208194805.GV78325@mdounin.ru> <344248f0e60449f8b5f74c4ddfba282b@aptaiexm02a.ap.qualcomm.com> <20171211143339.GX78325@mdounin.ru> <51f3fcb61c8e4fee807b9325c2c75f4c@aptaiexm02a.ap.qualcomm.com> <20171213155328.GD78325@mdounin.ru> <4df225b047ba4c9ca08727069897a148@aptaiexm02a.ap.qualcomm.com> Message-ID: <20171213171946.GF78325@mdounin.ru> Hello! On Wed, Dec 13, 2017 at 04:17:13PM +0000, debayang.qdt wrote: > Thanks. Looks good. > > Only the second patch commit log description may be corrected. > > "... In case not supported, fallback to ngx_cpuinfo() or compile time defaults." > To > " .. In case not supported, fallback to compile time defaults." Thanks, committed. http://hg.nginx.org/nginx/rev/e4c21e417277 http://hg.nginx.org/nginx/rev/057adb2a9d23 -- Maxim Dounin http://mdounin.ru/ From sudarshan12s at gmail.com Wed Dec 13 17:25:03 2017 From: sudarshan12s at gmail.com (Sudarshan Soma) Date: Wed, 13 Dec 2017 22:55:03 +0530 Subject: nginx listening for ssh client requests and redirections Message-ID: I have the following requirement. -> ssh username at ipaddr It has to direct the ssh requests to port 2035 on machine with IP , ipaddr -> scp username at ipaddr It has to direct scp requests to port 2036 on machine with IP, ipaddr The reason we want this way is , on machine with IP addr ipaddr, we are listening on 2035 for giving custom login shell. on port 2036, we provide scp transfers. For this to work, Can Nginx run on port 22 on machine, ipaddr and add a rule to redirect to different ports based on protocol (ssh or scp) After this, can i do the following from my laptop ssh username at ipaddr // gives me custom login shell scp username at ipaddr // enables scp transfers. Regards, Grover -------------- next part -------------- An HTML attachment was scrubbed... URL: From mdounin at mdounin.ru Wed Dec 13 17:29:27 2017 From: mdounin at mdounin.ru (Maxim Dounin) Date: Wed, 13 Dec 2017 20:29:27 +0300 Subject: nginx listening for ssh client requests and redirections In-Reply-To: References: Message-ID: <20171213172926.GH78325@mdounin.ru> Hello! On Wed, Dec 13, 2017 at 10:55:03PM +0530, Sudarshan Soma wrote: > I have the following requirement. > > > -> ssh username at ipaddr > It has to direct the ssh requests to port 2035 on machine with IP , ipaddr > > -> scp username at ipaddr > It has to direct scp requests to port 2036 on machine with IP, ipaddr > > The reason we want this way is , on machine with IP addr ipaddr, we are > listening on 2035 for giving custom login shell. > on port 2036, we provide scp transfers. > > For this to work, Can Nginx run on port 22 on machine, ipaddr and add a > rule to redirect to different ports based on protocol (ssh or scp) This is a mailing list for nginx developers. For user-level questions, please use the nginx@ mailing list instead. See http://nginx.org/en/support.html for details. Thank you. -- Maxim Dounin http://mdounin.ru/ From arut at nginx.com Wed Dec 13 18:12:27 2017 From: arut at nginx.com (Roman Arutyunyan) Date: Wed, 13 Dec 2017 18:12:27 +0000 Subject: [nginx] Retain CAP_NET_RAW capability for transparent proxying. Message-ID: details: http://hg.nginx.org/nginx/rev/84e53e4735a4 branches: changeset: 7174:84e53e4735a4 user: Roman Arutyunyan date: Wed Dec 13 20:40:53 2017 +0300 description: Retain CAP_NET_RAW capability for transparent proxying. The capability is retained automatically in unprivileged worker processes after changing UID if transparent proxying is enabled at least once in nginx configuration. The feature is only available in Linux. diffstat: auto/os/linux | 31 +++++++++++++++++++++++++++++++ src/core/ngx_cycle.h | 2 ++ src/http/ngx_http_upstream.c | 6 ++++++ src/os/unix/ngx_linux_config.h | 5 +++++ src/os/unix/ngx_process_cycle.c | 32 ++++++++++++++++++++++++++++++++ src/stream/ngx_stream_proxy_module.c | 6 ++++++ 6 files changed, 82 insertions(+), 0 deletions(-) diffs (148 lines): diff -r 057adb2a9d23 -r 84e53e4735a4 auto/os/linux --- a/auto/os/linux Mon Dec 11 16:28:11 2017 +0000 +++ b/auto/os/linux Wed Dec 13 20:40:53 2017 +0300 @@ -157,6 +157,37 @@ ngx_feature_test="if (prctl(PR_SET_DUMPA . auto/feature +# prctl(PR_SET_KEEPCAPS) + +ngx_feature="prctl(PR_SET_KEEPCAPS)" +ngx_feature_name="NGX_HAVE_PR_SET_KEEPCAPS" +ngx_feature_run=yes +ngx_feature_incs="#include " +ngx_feature_path= +ngx_feature_libs= +ngx_feature_test="if (prctl(PR_SET_KEEPCAPS, 1, 0, 0, 0) == -1) return 1" +. auto/feature + + +# capabilities + +ngx_feature="capabilities" +ngx_feature_name="NGX_HAVE_CAPABILITIES" +ngx_feature_run=no +ngx_feature_incs="#include " +ngx_feature_path= +ngx_feature_libs= +ngx_feature_test="struct __user_cap_data_struct data; + struct __user_cap_header_struct header; + + header.version = _LINUX_CAPABILITY_VERSION_3; + data.effective = CAP_TO_MASK(CAP_NET_RAW); + data.permitted = 0; + + (void) capset(&header, &data)" +. auto/feature + + # crypt_r() ngx_feature="crypt_r()" diff -r 057adb2a9d23 -r 84e53e4735a4 src/core/ngx_cycle.h --- a/src/core/ngx_cycle.h Mon Dec 11 16:28:11 2017 +0000 +++ b/src/core/ngx_cycle.h Wed Dec 13 20:40:53 2017 +0300 @@ -114,6 +114,8 @@ typedef struct { ngx_array_t env; char **environment; + + ngx_uint_t transparent; /* unsigned transparent:1; */ } ngx_core_conf_t; diff -r 057adb2a9d23 -r 84e53e4735a4 src/http/ngx_http_upstream.c --- a/src/http/ngx_http_upstream.c Mon Dec 11 16:28:11 2017 +0000 +++ b/src/http/ngx_http_upstream.c Wed Dec 13 20:40:53 2017 +0300 @@ -6078,6 +6078,12 @@ ngx_http_upstream_bind_set_slot(ngx_conf if (cf->args->nelts > 2) { if (ngx_strcmp(value[2].data, "transparent") == 0) { #if (NGX_HAVE_TRANSPARENT_PROXY) + ngx_core_conf_t *ccf; + + ccf = (ngx_core_conf_t *) ngx_get_conf(cf->cycle->conf_ctx, + ngx_core_module); + + ccf->transparent = 1; local->transparent = 1; #else ngx_conf_log_error(NGX_LOG_EMERG, cf, 0, diff -r 057adb2a9d23 -r 84e53e4735a4 src/os/unix/ngx_linux_config.h --- a/src/os/unix/ngx_linux_config.h Mon Dec 11 16:28:11 2017 +0000 +++ b/src/os/unix/ngx_linux_config.h Wed Dec 13 20:40:53 2017 +0300 @@ -99,6 +99,11 @@ typedef struct iocb ngx_aiocb_t; #endif +#if (NGX_HAVE_CAPABILITIES) +#include +#endif + + #define NGX_LISTEN_BACKLOG 511 diff -r 057adb2a9d23 -r 84e53e4735a4 src/os/unix/ngx_process_cycle.c --- a/src/os/unix/ngx_process_cycle.c Mon Dec 11 16:28:11 2017 +0000 +++ b/src/os/unix/ngx_process_cycle.c Wed Dec 13 20:40:53 2017 +0300 @@ -839,12 +839,44 @@ ngx_worker_process_init(ngx_cycle_t *cyc ccf->username, ccf->group); } +#if (NGX_HAVE_PR_SET_KEEPCAPS && NGX_HAVE_CAPABILITIES) + if (ccf->transparent && ccf->user) { + if (prctl(PR_SET_KEEPCAPS, 1, 0, 0, 0) == -1) { + ngx_log_error(NGX_LOG_EMERG, cycle->log, ngx_errno, + "prctl(PR_SET_KEEPCAPS, 1) failed"); + /* fatal */ + exit(2); + } + } +#endif + if (setuid(ccf->user) == -1) { ngx_log_error(NGX_LOG_EMERG, cycle->log, ngx_errno, "setuid(%d) failed", ccf->user); /* fatal */ exit(2); } + +#if (NGX_HAVE_CAPABILITIES) + if (ccf->transparent && ccf->user) { + struct __user_cap_data_struct data; + struct __user_cap_header_struct header; + + ngx_memzero(&header, sizeof(struct __user_cap_header_struct)); + ngx_memzero(&data, sizeof(struct __user_cap_data_struct)); + + header.version = _LINUX_CAPABILITY_VERSION_3; + data.effective = CAP_TO_MASK(CAP_NET_RAW); + data.permitted = data.effective; + + if (capset(&header, &data) == -1) { + ngx_log_error(NGX_LOG_EMERG, cycle->log, ngx_errno, + "capset() failed"); + /* fatal */ + exit(2); + } + } +#endif } if (worker >= 0) { diff -r 057adb2a9d23 -r 84e53e4735a4 src/stream/ngx_stream_proxy_module.c --- a/src/stream/ngx_stream_proxy_module.c Mon Dec 11 16:28:11 2017 +0000 +++ b/src/stream/ngx_stream_proxy_module.c Wed Dec 13 20:40:53 2017 +0300 @@ -2155,6 +2155,12 @@ ngx_stream_proxy_bind(ngx_conf_t *cf, ng if (cf->args->nelts > 2) { if (ngx_strcmp(value[2].data, "transparent") == 0) { #if (NGX_HAVE_TRANSPARENT_PROXY) + ngx_core_conf_t *ccf; + + ccf = (ngx_core_conf_t *) ngx_get_conf(cf->cycle->conf_ctx, + ngx_core_module); + + ccf->transparent = 1; local->transparent = 1; #else ngx_conf_log_error(NGX_LOG_EMERG, cf, 0, From arut at nginx.com Tue Dec 19 16:04:55 2017 From: arut at nginx.com (Roman Arutyunyan) Date: Tue, 19 Dec 2017 16:04:55 +0000 Subject: [nginx] Improved the capabilities feature detection. Message-ID: details: http://hg.nginx.org/nginx/rev/56923e8e01a5 branches: changeset: 7175:56923e8e01a5 user: Roman Arutyunyan date: Mon Dec 18 21:09:39 2017 +0300 description: Improved the capabilities feature detection. Previously included file sys/capability.h mentioned in capset(2) man page, belongs to the libcap-dev package, which may not be installed on some Linux systems when compiling nginx. This prevented the capabilities feature from being detected and compiled on that systems. Now linux/capability.h system header is included instead. Since capset() declaration is located in sys/capability.h, now capset() syscall is defined explicitly in code using the SYS_capset constant, similarly to other Linux-specific features in nginx. diffstat: auto/os/linux | 5 +++-- src/os/unix/ngx_linux_config.h | 2 +- src/os/unix/ngx_process_cycle.c | 2 +- 3 files changed, 5 insertions(+), 4 deletions(-) diffs (46 lines): diff -r 84e53e4735a4 -r 56923e8e01a5 auto/os/linux --- a/auto/os/linux Wed Dec 13 20:40:53 2017 +0300 +++ b/auto/os/linux Mon Dec 18 21:09:39 2017 +0300 @@ -174,7 +174,8 @@ ngx_feature_test="if (prctl(PR_SET_KEEPC ngx_feature="capabilities" ngx_feature_name="NGX_HAVE_CAPABILITIES" ngx_feature_run=no -ngx_feature_incs="#include " +ngx_feature_incs="#include + #include " ngx_feature_path= ngx_feature_libs= ngx_feature_test="struct __user_cap_data_struct data; @@ -184,7 +185,7 @@ ngx_feature_test="struct __user_cap_data data.effective = CAP_TO_MASK(CAP_NET_RAW); data.permitted = 0; - (void) capset(&header, &data)" + (void) SYS_capset" . auto/feature diff -r 84e53e4735a4 -r 56923e8e01a5 src/os/unix/ngx_linux_config.h --- a/src/os/unix/ngx_linux_config.h Wed Dec 13 20:40:53 2017 +0300 +++ b/src/os/unix/ngx_linux_config.h Mon Dec 18 21:09:39 2017 +0300 @@ -100,7 +100,7 @@ typedef struct iocb ngx_aiocb_t; #if (NGX_HAVE_CAPABILITIES) -#include +#include #endif diff -r 84e53e4735a4 -r 56923e8e01a5 src/os/unix/ngx_process_cycle.c --- a/src/os/unix/ngx_process_cycle.c Wed Dec 13 20:40:53 2017 +0300 +++ b/src/os/unix/ngx_process_cycle.c Mon Dec 18 21:09:39 2017 +0300 @@ -869,7 +869,7 @@ ngx_worker_process_init(ngx_cycle_t *cyc data.effective = CAP_TO_MASK(CAP_NET_RAW); data.permitted = data.effective; - if (capset(&header, &data) == -1) { + if (syscall(SYS_capset, &header, &data) == -1) { ngx_log_error(NGX_LOG_EMERG, cycle->log, ngx_errno, "capset() failed"); /* fatal */ From arut at nginx.com Tue Dec 19 16:04:57 2017 From: arut at nginx.com (Roman Arutyunyan) Date: Tue, 19 Dec 2017 16:04:57 +0000 Subject: [nginx] Fixed capabilities version. Message-ID: details: http://hg.nginx.org/nginx/rev/7f28b61c92f0 branches: changeset: 7176:7f28b61c92f0 user: Roman Arutyunyan date: Tue Dec 19 19:00:27 2017 +0300 description: Fixed capabilities version. Previously, capset(2) was called with the 64-bit capabilities version _LINUX_CAPABILITY_VERSION_3. With this version Linux kernel expected two copies of struct __user_cap_data_struct, while only one was submitted. As a result, random stack memory was accessed and random capabilities were requested by the worker. This sometimes caused capset() errors. Now the 32-bit version _LINUX_CAPABILITY_VERSION_1 is used instead. This is OK since CAP_NET_RAW is a 32-bit capability (CAP_NET_RAW = 13). diffstat: auto/os/linux | 2 +- src/os/unix/ngx_process_cycle.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diffs (24 lines): diff -r 56923e8e01a5 -r 7f28b61c92f0 auto/os/linux --- a/auto/os/linux Mon Dec 18 21:09:39 2017 +0300 +++ b/auto/os/linux Tue Dec 19 19:00:27 2017 +0300 @@ -181,7 +181,7 @@ ngx_feature_libs= ngx_feature_test="struct __user_cap_data_struct data; struct __user_cap_header_struct header; - header.version = _LINUX_CAPABILITY_VERSION_3; + header.version = _LINUX_CAPABILITY_VERSION_1; data.effective = CAP_TO_MASK(CAP_NET_RAW); data.permitted = 0; diff -r 56923e8e01a5 -r 7f28b61c92f0 src/os/unix/ngx_process_cycle.c --- a/src/os/unix/ngx_process_cycle.c Mon Dec 18 21:09:39 2017 +0300 +++ b/src/os/unix/ngx_process_cycle.c Tue Dec 19 19:00:27 2017 +0300 @@ -865,7 +865,7 @@ ngx_worker_process_init(ngx_cycle_t *cyc ngx_memzero(&header, sizeof(struct __user_cap_header_struct)); ngx_memzero(&data, sizeof(struct __user_cap_data_struct)); - header.version = _LINUX_CAPABILITY_VERSION_3; + header.version = _LINUX_CAPABILITY_VERSION_1; data.effective = CAP_TO_MASK(CAP_NET_RAW); data.permitted = data.effective; From xiaohuaw at gmail.com Wed Dec 20 07:15:24 2017 From: xiaohuaw at gmail.com (Xiaohua Wang) Date: Wed, 20 Dec 2017 15:15:24 +0800 Subject: Please help review and approve one change Message-ID: Added to trace HTTP request call flow in nginx. Especially for performance or load test purpose. Because info level log is not enough, and debug log is too much which impacts performance a lot. Currently, two scenarios are supported. 1) trace any point in source code like before/after function entry, or middle of function. 2) trace any call flow which takes longer time than specific latency between two check point. -------------- next part -------------- An HTML attachment was scrubbed... URL: -------------- next part -------------- # HG changeset patch # User Xiaohua Wang # Date 1513591776 -28800 # Mon Dec 18 18:09:36 2017 +0800 # Node ID 1cf1d4a74783573da28793f39b924fa551fdfb65 # Parent d3235149d17f7745d3ac246a6cdcc81a56698f7b Added to trace http request call flow in nginx. Especillay for performance or load test purpose. Because info level log is not enough, and debug log is too much which impacts performace a lot. Currently, two scenarios are supported. 1) trace any piont in source code like before/after function entry, or middle of function. 2) trace any call flow which takes longer time than specific latency between two check point. diff -r d3235149d17f -r 1cf1d4a74783 auto/modules --- a/auto/modules Thu Dec 07 17:09:36 2017 +0300 +++ b/auto/modules Mon Dec 18 18:09:36 2017 +0800 @@ -74,6 +74,7 @@ src/http/ngx_http_config.h \ src/http/ngx_http_core_module.h \ src/http/ngx_http_cache.h \ + src/http/ngx_http_call_trace.h \ src/http/ngx_http_variables.h \ src/http/ngx_http_script.h \ src/http/ngx_http_upstream.h \ @@ -101,6 +102,11 @@ HTTP_SRCS="$HTTP_SRCS $HTTP_FILE_CACHE_SRCS" fi + if [ $HTTP_CALL_TRACE = YES ]; then + have=NGX_HTTP_CALL_TRACE . auto/have + HTTP_SRCS="$HTTP_SRCS $HTTP_CALL_TRACE_SRCS" + fi + if [ $HTTP_SSI = YES ]; then HTTP_POSTPONE=YES diff -r d3235149d17f -r 1cf1d4a74783 auto/options --- a/auto/options Thu Dec 07 17:09:36 2017 +0300 +++ b/auto/options Mon Dec 18 18:09:36 2017 +0800 @@ -54,6 +54,7 @@ NGX_HTTP_UWSGI_TEMP_PATH= NGX_HTTP_SCGI_TEMP_PATH= +HTTP_CALL_TRACE=NO HTTP_CACHE=YES HTTP_CHARSET=YES HTTP_GZIP=YES @@ -212,6 +213,7 @@ --without-http) HTTP=NO ;; --without-http-cache) HTTP_CACHE=NO ;; + --with-http-call-trace) HTTP_CALL_TRACE=YES ;; --http-log-path=*) NGX_HTTP_LOG_PATH="$value" ;; --http-client-body-temp-path=*) NGX_HTTP_CLIENT_TEMP_PATH="$value" ;; diff -r d3235149d17f -r 1cf1d4a74783 auto/sources --- a/auto/sources Thu Dec 07 17:09:36 2017 +0300 +++ b/auto/sources Mon Dec 18 18:09:36 2017 +0800 @@ -253,3 +253,6 @@ HTTP_FILE_CACHE_SRCS=src/http/ngx_http_file_cache.c + + +HTTP_CALL_TRACE_SRCS=src/http/ngx_http_call_trace.c diff -r d3235149d17f -r 1cf1d4a74783 src/http/ngx_http_call_trace.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/http/ngx_http_call_trace.c Mon Dec 18 18:09:36 2017 +0800 @@ -0,0 +1,645 @@ + +/* + * Copyright (C) Xiaohua Wang + * Copyright (C) Nginx, Inc. + */ + + +#include +#include +#include +#include +#include + + +#define NGX_HTTP_CALL_TRACE_ENABLE 1 +#define NGX_HTTP_CALL_TRACE_LOG_PRX "ngx-call-trace:" +#define NGX_HTTP_CALL_TRACE_DEPTH_HEADER_NAME "x-ngx-call-trace-depth" +#define NGX_HTTP_CALL_TRACE_HEADER_NAME_PREFIX "x-ngx-call-trace-" +#define NGX_HTTP_CALL_CHECK_COUNT_HEADER_NAME "x-ngx-call-check-count" +#define NGX_HTTP_CALL_CHECK_HEADER_NAME_PREFIX "x-ngx-call-check-" +#define NGX_HTTP_CALL_TRACE_MAX_DEPTH 990 +#define NGX_HTTP_CALL_CHECK_MAX_COUNT 990 + + +static const char NUMBER[10] = "0123456789"; + + +static ngx_table_elt_t * +search_headers_out(ngx_http_request_t *r, u_char *name, size_t len); +static char* +generate_call_trace_header_key(ngx_http_request_t *r, ngx_int_t depth); +static char* +generate_call_trace_header_value(ngx_http_request_t *r, + const char* trace_point_name); +static ngx_int_t +ngx_http_add_call_trace_internal(ngx_http_request_t *r, + const char *trace_point_name); +static ngx_int_t +ngx_http_print_call_trace_exceeds_latency_internal(ngx_http_request_t *r, + ngx_int_t latency); +static char* +generate_call_check_header_key(ngx_http_request_t *r, ngx_int_t count); +static ngx_int_t +ngx_http_add_call_check_internal(ngx_http_request_t *r, + const char *check_point_name); +static ngx_table_elt_t * +search_check_point_from_headers_out(ngx_http_request_t *r, + const char *check_point_name); +static ngx_int_t +ngx_http_print_call_check_latency_internal(ngx_http_request_t *r, + const char *check_point_name, ngx_int_t latency); + + +static ngx_table_elt_t * +search_headers_out(ngx_http_request_t *r, u_char *name, size_t len) { + ngx_list_part_t *part; + ngx_table_elt_t *h; + ngx_uint_t i; + + /* + Get the first part of the list. There is usual only one part. + */ + part = &r->headers_out.headers.part; + h = part->elts; + + /* + Headers list array may consist of more than one part, + so loop through all of it + */ + for (i = 0; /* void */ ; i++) { + if (i >= part->nelts) { + if (part->next == NULL) { + break; + } + + part = part->next; + h = part->elts; + i = 0; + } + + if (len != h[i].key.len || ngx_strncasecmp(name, h[i].key.data, len) != 0) { + continue; + } + return &h[i]; + } + return NULL; +} + + +static char* +generate_call_trace_header_key(ngx_http_request_t *r, ngx_int_t depth){ + ngx_int_t call_trace_header_key_len; + char *call_trace_header_key; + ngx_int_t i, tens; + i = depth; + /*like "x-mfdn-call-trace-001", "x-mfdn-call-trace-900"*/ + call_trace_header_key_len = ngx_strlen(NGX_HTTP_CALL_TRACE_HEADER_NAME_PREFIX) + 3 + 1; + call_trace_header_key = ngx_pcalloc(r->pool, call_trace_header_key_len); + strcpy(call_trace_header_key, NGX_HTTP_CALL_TRACE_HEADER_NAME_PREFIX); + if (i < 10){ + call_trace_header_key[call_trace_header_key_len-4] = NUMBER[0]; + call_trace_header_key[call_trace_header_key_len-3] = NUMBER[0]; + call_trace_header_key[call_trace_header_key_len-2] = NUMBER[i]; + call_trace_header_key[call_trace_header_key_len-1] = '\0'; + }else if (i<100){ + call_trace_header_key[call_trace_header_key_len-4] = NUMBER[0]; + call_trace_header_key[call_trace_header_key_len-3] = NUMBER[(i/10)]; + call_trace_header_key[call_trace_header_key_len-2] = NUMBER[(i%10)]; + call_trace_header_key[call_trace_header_key_len-1] = '\0'; + }else if (i<1000){ + tens = (i - (i/100)*100); + call_trace_header_key[call_trace_header_key_len-4] = NUMBER[(i/100)]; + call_trace_header_key[call_trace_header_key_len-3] = NUMBER[(tens/10)]; + call_trace_header_key[call_trace_header_key_len-2] = NUMBER[(tens%10)]; + call_trace_header_key[call_trace_header_key_len-1] = '\0'; + }else{ + call_trace_header_key[call_trace_header_key_len-4] = NUMBER[9]; + call_trace_header_key[call_trace_header_key_len-3] = NUMBER[9]; + call_trace_header_key[call_trace_header_key_len-2] = NUMBER[9]; + call_trace_header_key[call_trace_header_key_len-1] = '\0'; + } + return call_trace_header_key; +} + + +static char* +generate_call_trace_header_value(ngx_http_request_t *r, const char* trace_point_name){ + ngx_int_t call_trace_header_value_len; + char *call_trace_header_value; + time_t now; + now = ngx_time(); + char now_str[NGX_INT64_LEN + 1] = {'\0'}; + // ngx_log_error(NGX_LOG_WARN, r->connection->log, 0, "%s request_pointer: '%p', '%T' ", + // NGX_HTTP_CALL_TRACE_LOG_PRX, r, now); + sprintf(now_str, "%ld", now); + /*"timestamp-trace_point_name", like "1511324061-start ngx_http_nproxy_upstream_init"*/ + call_trace_header_value_len = ngx_strlen(now_str) + 1 + ngx_strlen(trace_point_name) + 1; + call_trace_header_value = ngx_pcalloc(r->pool, call_trace_header_value_len); + strcpy(call_trace_header_value, now_str); + call_trace_header_value[ngx_strlen(now_str)] = '-'; + strcpy(&(call_trace_header_value[ngx_strlen(now_str)+1]), trace_point_name); + call_trace_header_value[call_trace_header_value_len -1 ] = '\0'; + return call_trace_header_value; +} + + +static ngx_int_t +ngx_http_add_call_trace_internal(ngx_http_request_t *r, const char *trace_point_name){ + ngx_table_elt_t *h; + ngx_int_t depth; + u_char *call_trace_header_key; + u_char *call_trace_header_value; + u_char *depth_value; + ngx_int_t tens; + if (r == NULL || trace_point_name == NULL){ + return NGX_ERROR; + } + if (r->pool == NULL){ + // ngx_log_error(NGX_LOG_WARN, r->connection->log, 0, + // "%s request_pointer: '%p' can't add call trace point %s due to request pool is NULL.", + // NGX_HTTP_CALL_TRACE_LOG_PRX, r, trace_point_name); + return NGX_ERROR; + } + h = search_headers_out(r, (u_char *)NGX_HTTP_CALL_TRACE_DEPTH_HEADER_NAME, + ngx_strlen(NGX_HTTP_CALL_TRACE_DEPTH_HEADER_NAME)); + + if (h == NULL){ + /* + Need to add call trace depth header here + */ + h = ngx_list_push(&r->headers_out.headers); + if (h == NULL) { + return NGX_ERROR; + } + ngx_str_set(&h->key, NGX_HTTP_CALL_TRACE_DEPTH_HEADER_NAME); + ngx_str_set(&h->value, "1"); + h->hash = 0;//0, for internel usage, not send out, and 1 will send it out to client + + depth = 1; + }else{ + depth = ngx_atoi(h->value.data, h->value.len); + depth ++; + } + + if (depth > NGX_HTTP_CALL_TRACE_MAX_DEPTH){ + // ngx_log_error(NGX_LOG_WARN, r->connection->log, 0, "%s request_pointer: '%p' can't add call trace point %s, due to call trace depth %d exceeds %d.", + // NGX_HTTP_CALL_TRACE_LOG_PRX, r, trace_point_name, depth, NGX_HTTP_CALL_TRACE_MAX_DEPTH); + return NGX_ERROR; + } + + if (depth < 10){ + depth_value = ngx_pcalloc(r->pool, 2); + depth_value[0] = NUMBER[depth]; + depth_value[1] = '\0'; + h->value.data = depth_value; + h->value.len = 1; + }else if( depth < 100){ + depth_value = ngx_pcalloc(r->pool, 3); + depth_value[0] = NUMBER[(depth/10)]; + depth_value[1] = NUMBER[(depth%10)]; + depth_value[2] = '\0'; + h->value.data = depth_value; + h->value.len = 2; + }else if(depth < 1000){ + depth_value = ngx_pcalloc(r->pool, 4); + depth_value[0] = NUMBER[(depth/100)]; + tens = (depth - (depth/100)*100); + depth_value[1] = NUMBER[tens/10]; + depth_value[2] = NUMBER[tens%10]; + depth_value[3] = '\0'; + h->value.data = depth_value; + h->value.len = 3; + }else{ + ngx_log_error(NGX_LOG_WARN, r->connection->log, 0, "%s request_pointer: '%p'" + " can't add call trace point %s due to call trace depth %d" + " can't support more than 1000.", + NGX_HTTP_CALL_TRACE_LOG_PRX, r, trace_point_name, depth); + return NGX_ERROR; + } + + h = ngx_list_push(&r->headers_out.headers); + if (h == NULL) { + return NGX_ERROR; + } + + call_trace_header_key = (u_char *)generate_call_trace_header_key(r, depth); + call_trace_header_value = (u_char *)generate_call_trace_header_value(r, trace_point_name); + + h->key.data = call_trace_header_key; + h->key.len = ngx_strlen(call_trace_header_key); + h->value.data = call_trace_header_value; + h->value.len = ngx_strlen(call_trace_header_value); + h->hash = 0;//0, for internel usage, not send out, and 1 will send it out to client + + return NGX_OK; +} + + +ngx_int_t +ngx_http_add_call_trace(ngx_http_request_t *r, const char *trace_point_name){ +#if (NGX_HTTP_CALL_TRACE_ENABLE) + return ngx_http_add_call_trace_internal(r, trace_point_name); +#else + ngx_http_add_call_trace_internal(NULL,NULL); + return NGX_OK; +#endif +} + + +static void +ngx_http_print_call_trace_with_level(ngx_http_request_t *r, ngx_uint_t level){ + ngx_table_elt_t *h; + ngx_int_t depth; + u_char *call_trace_header; + ngx_int_t i; + if (r == NULL){ + return; + } + if (r->pool == NULL){ + return; + } + h = search_headers_out(r, (u_char *)NGX_HTTP_CALL_TRACE_DEPTH_HEADER_NAME, + ngx_strlen(NGX_HTTP_CALL_TRACE_DEPTH_HEADER_NAME)); + if (h == NULL){ + return; + } + depth = ngx_atoi(h->value.data,h->value.len); + ngx_log_error(level, r->connection->log, 0, "%s request_pointer: '%p', depth: '%d' ", + NGX_HTTP_CALL_TRACE_LOG_PRX, r, depth); + + for (i=1; i< depth+1; i++ ){ + call_trace_header = (u_char *)generate_call_trace_header_key(r, i); + + // ngx_log_error(NGX_LOG_DEBUG, r->connection->log, 0, "%s request_pointer: '%p', try to print call trace header '%s' ", + // NGX_HTTP_CALL_TRACE_LOG_PRX, r, call_trace_header); + + h = search_headers_out(r, call_trace_header, ngx_strlen(call_trace_header)); + if (h == NULL){ + ngx_log_error(level, r->connection->log, 0, "%s request_pointer: '%p'," + " can't find call trace header '%s' ", + NGX_HTTP_CALL_TRACE_LOG_PRX, r, call_trace_header); + continue; + } + ngx_log_error(level, ngx_cycle->log, 0, "%s request_pointer: '%p', '%s' : '%s'", + NGX_HTTP_CALL_TRACE_LOG_PRX, r, h->key.data, h->value.data); + } +} + + +void +ngx_http_print_call_trace_warn_level(ngx_http_request_t *r){ +#if (NGX_HTTP_CALL_TRACE_ENABLE) + ngx_http_print_call_trace_with_level(r, NGX_LOG_WARN); +#else + ngx_http_print_call_trace_with_level(NULL,NGX_LOG_WARN); +#endif +} + + +void +ngx_http_print_call_trace_debug_level(ngx_http_request_t *r){ +#if (NGX_HTTP_CALL_TRACE_ENABLE) + ngx_http_print_call_trace_with_level(r, NGX_LOG_DEBUG); +#else + ngx_http_print_call_trace_with_level(NULL,NGX_LOG_DEBUG); +#endif +} + + +/* latency in second*/ +static ngx_int_t +ngx_http_print_call_trace_exceeds_latency_internal(ngx_http_request_t *r, ngx_int_t latency){ + ngx_table_elt_t *h; + ngx_int_t depth; + u_char *call_trace_header; + u_char *s2; + ngx_int_t i; + time_t first_trace_time, last_trace_time; + if (r == NULL){ + return NGX_ERROR; + } + h = search_headers_out(r, (u_char *)NGX_HTTP_CALL_TRACE_DEPTH_HEADER_NAME + , ngx_strlen(NGX_HTTP_CALL_TRACE_DEPTH_HEADER_NAME)); + if (h == NULL){ + return NGX_ERROR; + } + depth = ngx_atoi(h->value.data, h->value.len); + if (depth <=1 ){ + return NGX_ERROR; + } + depth = ngx_atoi(h->value.data,h->value.len); + // ngx_log_error(NGX_LOG_WARN, r->connection->log, 0, "%s request_pointer: '%p', '%d' ", + // NGX_HTTP_CALL_TRACE_LOG_PRX, r, depth); + call_trace_header = (u_char *)generate_call_trace_header_key(r, 1); + h = search_headers_out(r, call_trace_header, ngx_strlen((const char*)call_trace_header)); + if (h == NULL){ + ngx_log_error(NGX_LOG_WARN, r->connection->log, 0, "%s request_pointer: '%p'," + " can't find first call trace header '%s' ", + NGX_HTTP_CALL_TRACE_LOG_PRX, r, call_trace_header); + return NGX_ERROR; + } + s2 = ngx_strnstr(h->value.data, "-", NGX_INT64_LEN); + first_trace_time = ngx_atotm(h->value.data, s2-h->value.data); + + call_trace_header = (u_char *)generate_call_trace_header_key(r, depth); + h = search_headers_out(r, call_trace_header, ngx_strlen(call_trace_header)); + if (h == NULL){ + ngx_log_error(NGX_LOG_WARN, r->connection->log, 0, "%s request_pointer: '%p'," + " can't find last call trace header '%s' ", + NGX_HTTP_CALL_TRACE_LOG_PRX, r, call_trace_header); + return NGX_ERROR; + } + s2 = ngx_strnstr(h->value.data, "-", NGX_INT64_LEN); + last_trace_time = ngx_atotm(h->value.data, s2-h->value.data); + + if ((last_trace_time - first_trace_time) < latency + && (depth < NGX_HTTP_CALL_TRACE_MAX_DEPTH)){ + return NGX_ERROR; + } + // ngx_log_error(NGX_LOG_WARN, r->connection->log, 0, "%s request_pointer: '%p', first_trace_time '%T' last_trace_time '%T' ", + // NGX_HTTP_CALL_TRACE_LOG_PRX, r, last_trace_time, first_trace_time); + + ngx_log_error(NGX_LOG_WARN, r->connection->log, 0, "%s request_pointer: '%p'," + " call trace latency '%d' exceeds '%d' ", + NGX_HTTP_CALL_TRACE_LOG_PRX, r, last_trace_time - first_trace_time, latency); + for (i=1; i< depth+1; i++ ){ + call_trace_header = (u_char *)generate_call_trace_header_key(r, i); + + // ngx_log_error(NGX_LOG_DEBUG, r->connection->log, 0, "%s request_pointer: '%p', try to print call trace header '%s' ", + // NGX_HTTP_CALL_TRACE_LOG_PRX, r, call_trace_header); + + h = search_headers_out(r, call_trace_header, ngx_strlen(call_trace_header)); + if (h == NULL){ + ngx_log_error(NGX_LOG_WARN, r->connection->log, 0, "%s request_pointer: '%p'," + " can't find call trace header '%s' ", + NGX_HTTP_CALL_TRACE_LOG_PRX, r, call_trace_header); + continue; + } + // ngx_log_error(NGX_LOG_WARN, ngx_cycle->log, 0, "%s request_pointer: '%p', '%s' : '%s'", + // NGX_HTTP_CALL_TRACE_LOG_PRX, r, h->key.data, h->value.data); + // ngx_cycle->log print out in master + ngx_log_error(NGX_LOG_WARN, r->connection->log, 0, "%s request_pointer: '%p'," + " '%s' : '%s'", + NGX_HTTP_CALL_TRACE_LOG_PRX, r, h->key.data, h->value.data); + } + return (last_trace_time - first_trace_time); +} + + +/* latency in second*/ +ngx_int_t +ngx_http_print_call_trace_exceeds_latency(ngx_http_request_t *r, ngx_int_t latency){ + ngx_int_t rv; + rv = NGX_OK; +#if (NGX_HTTP_CALL_TRACE_ENABLE) + rv = ngx_http_print_call_trace_exceeds_latency_internal(r, latency); +#else + ngx_http_print_call_trace_exceeds_latency_internal(NULL,0); + rv = NGX_OK; +#endif + return rv; +} + + +static char* +generate_call_check_header_key(ngx_http_request_t *r, ngx_int_t count){ + ngx_int_t call_check_header_key_len; + char *call_check_header_key; + ngx_int_t i, tens; + i = count; + /*like "x-mfdn-call-check-001", "x-mfdn-call-check-900"*/ + call_check_header_key_len = ngx_strlen(NGX_HTTP_CALL_CHECK_HEADER_NAME_PREFIX) + 3 + 1; + call_check_header_key = ngx_pcalloc(r->pool, call_check_header_key_len); + strcpy(call_check_header_key, NGX_HTTP_CALL_CHECK_HEADER_NAME_PREFIX); + if (i < 10){ + call_check_header_key[call_check_header_key_len-4] = NUMBER[0]; + call_check_header_key[call_check_header_key_len-3] = NUMBER[0]; + call_check_header_key[call_check_header_key_len-2] = NUMBER[i]; + call_check_header_key[call_check_header_key_len-1] = '\0'; + }else if (i<100){ + call_check_header_key[call_check_header_key_len-4] = NUMBER[0]; + call_check_header_key[call_check_header_key_len-3] = NUMBER[(i/10)]; + call_check_header_key[call_check_header_key_len-2] = NUMBER[(i%10)]; + call_check_header_key[call_check_header_key_len-1] = '\0'; + }else if (i<1000){ + tens = (i - (i/100)*100); + call_check_header_key[call_check_header_key_len-4] = NUMBER[(i/100)]; + call_check_header_key[call_check_header_key_len-3] = NUMBER[(tens/10)]; + call_check_header_key[call_check_header_key_len-2] = NUMBER[(tens%10)]; + call_check_header_key[call_check_header_key_len-1] = '\0'; + }else{ + call_check_header_key[call_check_header_key_len-4] = NUMBER[9]; + call_check_header_key[call_check_header_key_len-3] = NUMBER[9]; + call_check_header_key[call_check_header_key_len-2] = NUMBER[9]; + call_check_header_key[call_check_header_key_len-1] = '\0'; + } + return call_check_header_key; +} + + +static ngx_int_t +ngx_http_add_call_check_internal(ngx_http_request_t *r, + const char *check_point_name){ + ngx_table_elt_t *h; + ngx_int_t count; + u_char *call_check_header_key; + u_char *call_check_header_value; + u_char *count_value; + ngx_int_t tens; + if (r == NULL || check_point_name == NULL){ + return NGX_ERROR; + } + if (r->pool == NULL){ + // ngx_log_error(NGX_LOG_WARN, r->connection->log, 0, "%s request_pointer: '%p' can't add call check point %s due to request pool is NULL.", + // NGX_HTTP_CALL_TRACE_LOG_PRX, r, trace_point_name); + return NGX_ERROR; + } + h = search_headers_out(r, (u_char *)NGX_HTTP_CALL_CHECK_COUNT_HEADER_NAME + , ngx_strlen(NGX_HTTP_CALL_CHECK_COUNT_HEADER_NAME)); + + if (h == NULL){ + /* + Need to add call check header here + */ + h = ngx_list_push(&r->headers_out.headers); + if (h == NULL) { + return NGX_ERROR; + } + ngx_str_set(&h->key, NGX_HTTP_CALL_CHECK_COUNT_HEADER_NAME); + ngx_str_set(&h->value, "1"); + h->hash = 0;//0, for internel usage, not send out, and 1 will send it out to client + + count = 1; + }else{ + count = ngx_atoi(h->value.data, h->value.len); + count ++; + } + + if (count > NGX_HTTP_CALL_CHECK_MAX_COUNT){ + // ngx_log_error(NGX_LOG_WARN, r->connection->log, 0, "%s request_pointer: '%p' can't add call check point %s, due to call check count %d exceeds %d.", + // NGX_HTTP_CALL_TRACE_LOG_PRX, r, trace_point_name, depth, NGX_HTTP_CALL_CHECK_MAX_COUNT); + return NGX_ERROR; + } + + if (count < 10){ + count_value = ngx_pcalloc(r->pool, 2); + count_value[0] = NUMBER[count]; + count_value[1] = '\0'; + h->value.data = count_value; + h->value.len = 1; + }else if( count < 100){ + count_value = ngx_pcalloc(r->pool, 3); + count_value[0] = NUMBER[(count/10)]; + count_value[1] = NUMBER[(count%10)]; + count_value[2] = '\0'; + h->value.data = count_value; + h->value.len = 2; + }else if(count < 1000){ + count_value = ngx_pcalloc(r->pool, 4); + count_value[0] = NUMBER[(count/100)]; + tens = (count - (count/100)*100); + count_value[1] = NUMBER[tens/10]; + count_value[2] = NUMBER[tens%10]; + count_value[3] = '\0'; + h->value.data = count_value; + h->value.len = 3; + }else{ + ngx_log_error(NGX_LOG_WARN, r->connection->log, 0, "%s request_pointer: '%p' " + "can't add call check point %s due to call check count %d " + "can't support more than 1000.", + NGX_HTTP_CALL_TRACE_LOG_PRX, r, check_point_name, count); + return NGX_ERROR; + } + + h = ngx_list_push(&r->headers_out.headers); + if (h == NULL) { + return NGX_ERROR; + } + + call_check_header_key = (u_char *)generate_call_check_header_key(r, count); + call_check_header_value = (u_char *)generate_call_trace_header_value(r, check_point_name); + + h->key.data = call_check_header_key; + h->key.len = ngx_strlen(call_check_header_key); + h->value.data = call_check_header_value; + h->value.len = ngx_strlen(call_check_header_value); + h->hash = 0;//0, for internel usage, not send out, and 1 will send it out to client + ngx_log_error(NGX_LOG_WARN, r->connection->log, 0, "%s request_pointer: '%p'," + " add call check header '%s' : '%s'", + NGX_HTTP_CALL_TRACE_LOG_PRX, r, h->key.data, h->value.data); + return NGX_OK; +} + + +static ngx_table_elt_t * +search_check_point_from_headers_out(ngx_http_request_t *r, + const char *check_point_name) { + ngx_list_part_t *part; + ngx_table_elt_t *h; + ngx_uint_t i; + size_t key_prefix_len, key_len; + u_char* name_start_pos; + key_prefix_len = ngx_strlen(NGX_HTTP_CALL_CHECK_HEADER_NAME_PREFIX); + key_len = key_prefix_len + 3; + + /* + Get the first part of the list. There is usual only one part. + */ + part = &r->headers_out.headers.part; + h = part->elts; + + /* + Headers list array may consist of more than one part, + so loop through all of it + */ + for (i = 0; /* void */ ; i++) { + if (i >= part->nelts) { + if (part->next == NULL) { + break; + } + + part = part->next; + h = part->elts; + i = 0; + } + // ngx_log_error(NGX_LOG_WARN, r->connection->log, 0, "%s request_pointer: '%p', key.data '%s', key.len '%d', key.value.data '%s', key len '%d', check_point_name '%s', ngx_strlen(check_point_name) '%d' ", + // NGX_HTTP_CALL_TRACE_LOG_PRX, r, h[i].key.data, h[i].key.len,h[i].value.data, key_len, check_point_name, ngx_strlen(check_point_name)); + + if (key_len != h[i].key.len) { + continue; + } + if (ngx_strncasecmp(h[i].key.data, (u_char*)NGX_HTTP_CALL_CHECK_HEADER_NAME_PREFIX, key_prefix_len) != 0) { + // ngx_log_error(NGX_LOG_WARN, r->connection->log, 0, "%s request_pointer: '%p', key prefix not equal. ", + // NGX_HTTP_CALL_TRACE_LOG_PRX, r); + continue; + } + name_start_pos = ngx_strnstr(h[i].value.data, "-", NGX_INT64_LEN) + 1; + if (ngx_strncasecmp(name_start_pos, (u_char*)check_point_name, ngx_strlen(check_point_name)) != 0) { + // ngx_log_error(NGX_LOG_WARN, r->connection->log, 0, "%s request_pointer: '%p', value not equal '%s'. ", + // NGX_HTTP_CALL_TRACE_LOG_PRX, r, name_start_pos); + continue; + } + return &h[i]; + } + return NULL; +} + + +static ngx_int_t +ngx_http_print_call_check_latency_internal(ngx_http_request_t *r, + const char *check_point_name, ngx_int_t latency){ + ngx_table_elt_t *h; + u_char *call_trace_header; + u_char *s2; + time_t first_trace_time; + ngx_int_t check_latency; + if (r == NULL || check_point_name == NULL){ + return NGX_ERROR; + } + if (r->pool == NULL){ + return NGX_ERROR; + } + call_trace_header = (u_char *)generate_call_trace_header_key(r, 1); + h = search_headers_out(r, call_trace_header, ngx_strlen(call_trace_header)); + if (h == NULL){ + ngx_log_error(NGX_LOG_WARN, r->connection->log, 0, "%s request_pointer: '%p'," + " can't find first call trace header '%s' ", + NGX_HTTP_CALL_TRACE_LOG_PRX, r, call_trace_header); + return NGX_ERROR; + } + s2 = ngx_strnstr(h->value.data, "-", NGX_INT64_LEN); + first_trace_time = ngx_atotm(h->value.data, s2-h->value.data); + check_latency = ngx_time() - first_trace_time; + if (check_latency < latency){ + return NGX_ERROR; + } + //check whether already met this check point + h = search_check_point_from_headers_out(r, check_point_name); + if (h != NULL){ + // ngx_log_error(NGX_LOG_WARN, r->connection->log, 0, "%s request_pointer: '%p', already met call check point '%s', latency '%d' exceeds '%d' ", + // NGX_HTTP_CALL_TRACE_LOG_PRX, r, check_point_name, check_latency, latency); + return NGX_ERROR; + } + ngx_http_add_call_check_internal(r, check_point_name); + ngx_log_error(NGX_LOG_WARN, r->connection->log, 0, "%s request_pointer: '%p'," + "first time meet call check point '%s', latency '%d' exceeds '%d' ", + NGX_HTTP_CALL_TRACE_LOG_PRX, r, check_point_name, check_latency, latency); + return check_latency; +} + + +/* latency in second*/ +ngx_int_t +ngx_http_print_call_check_latency(ngx_http_request_t *r, const char *check_point_name, ngx_int_t latency){ + ngx_int_t rv; + rv = NGX_ERROR; +#if (NGX_HTTP_CALL_TRACE_ENABLE) + rv = ngx_http_print_call_check_latency_internal(r, check_point_name, latency); +#else + ngx_http_print_call_check_latency_internal(NULL, NULL, 0); + rv = NGX_OK; +#endif + return rv; +} + diff -r d3235149d17f -r 1cf1d4a74783 src/http/ngx_http_call_trace.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/http/ngx_http_call_trace.h Mon Dec 18 18:09:36 2017 +0800 @@ -0,0 +1,89 @@ + +/* + * Copyright (C) Xiaohua Wang + * Copyright (C) Nginx, Inc. + */ + + +#ifndef _NGX_HTTP_CALL_TRACE_H_INCLUDED_ +#define _NGX_HTTP_CALL_TRACE_H_INCLUDED_ + +/* + * Added to trace http request call flow in nginx, + * especillay for performance or load test purpose. + * Because info level log is not enough, + * and debug log is too much which impacts performace a lot. + * Currently, two scenarios are supported. + * 1) trace any piont in source code like before/after function entry, or middle of function. + * 2) trace any call flow which takes longer time than specific latency between two check point. + * Please find an example at the end of this file. + */ + +#include +#include +#include +#include + +#if (NGX_HTTP_CALL_TRACE) + +ngx_int_t ngx_http_add_call_trace(ngx_http_request_t *r, + const char *trace_point_name); +void ngx_http_print_call_trace_warn_level(ngx_http_request_t *r); +void ngx_http_print_call_trace_debug_level(ngx_http_request_t *r); +ngx_int_t ngx_http_print_call_trace_exceeds_latency(ngx_http_request_t *r, + ngx_int_t latency); +ngx_int_t ngx_http_print_call_check_latency(ngx_http_request_t *r, + const char *check_point_name, ngx_int_t latency); + +#else /*(NGX_HTTP_CALL_TRACE)*/ + +inline ngx_int_t ngx_http_add_call_trace(ngx_http_request_t *r, + const char *trace_point_name){ + return NGX_OK; +} +inline void ngx_http_print_call_trace_warn_level(ngx_http_request_t *r){ + return; +} +inline void ngx_http_print_call_trace_debug_level(ngx_http_request_t *r){ + return; +} +inline ngx_int_t ngx_http_print_call_trace_exceeds_latenc(ngx_http_request_t *r, + ngx_int_t latency){ + return NGX_OK; +} +inline ngx_int_t ngx_http_print_call_check_latency(ngx_http_request_t *r, + const char *check_point_name, ngx_int_t latency){ + return NGX_OK; +} + +#endif /*(NGX_HTTP_CALL_TRACE)*/ + +#endif /* _NGX_HTTP_CALL_TRACE_H_INCLUDED_ */ + +/* + * For example: + * void + * ngx_http_process_request(ngx_http_request_t *r) + * { + * ngx_connection_t *c; + * ngx_http_add_call_trace(r, "start ngx_http_process_request"); + * ... + * } + * + * static void + * ngx_http_request_handler(ngx_event_t *ev) + * { + * ngx_connection_t *c; + * ngx_http_request_t *r; + * + * c = ev->data; + * r = c->data; + * ngx_http_add_call_trace(r, "start ngx_http_request_handler"); + * ngx_http_set_log_request(c->log, r); + * ... + * } + * + * In error log, trace messages will be printed as following. call sequence:timestampe-check point name. + * 'x-ngx-call-trace-001' : '1513586413-start ngx_http_process_request' + * 'x-ngx-call-trace-002' : '1513586413-start ngx_http_finalize_request' + */ \ No newline at end of file From mdounin at mdounin.ru Wed Dec 20 14:02:56 2017 From: mdounin at mdounin.ru (Maxim Dounin) Date: Wed, 20 Dec 2017 17:02:56 +0300 Subject: Please help review and approve one change In-Reply-To: References: Message-ID: <20171220140256.GC78325@mdounin.ru> Hello! On Wed, Dec 20, 2017 at 03:15:24PM +0800, Xiaohua Wang wrote: > Added to trace HTTP request call flow in nginx. > > Especially for performance or load test purpose. > Because info level log is not enough, > and debug log is too much which impacts performance a lot. > Currently, two scenarios are supported. > 1) trace any point in source code like before/after function entry, or > middle of function. > 2) trace any call flow which takes longer time than specific latency > between two check point. > # HG changeset patch > # User Xiaohua Wang > # Date 1513591776 -28800 > # Mon Dec 18 18:09:36 2017 +0800 > # Node ID 1cf1d4a74783573da28793f39b924fa551fdfb65 > # Parent d3235149d17f7745d3ac246a6cdcc81a56698f7b > Added to trace http request call flow in nginx. > > Especillay for performance or load test purpose. > Because info level log is not enough, > and debug log is too much which impacts performace a lot. > > Currently, two scenarios are supported. > 1) trace any piont in source code like before/after function entry, or middle of function. > 2) trace any call flow which takes longer time than specific latency between two check point. No, thanks. If you need detailed real-time tracing, you may consider using DTrace. The following article describes how to use it with nginx: http://nginx.org/en/docs/nginx_dtrace_pid_provider.html -- Maxim Dounin http://mdounin.ru/ From rpinnelli at pfsweb.com Thu Dec 21 07:40:10 2017 From: rpinnelli at pfsweb.com (Raghu Varma Pinnelli) Date: Thu, 21 Dec 2017 07:40:10 +0000 Subject: E:Unable to locate package nginx-plus Message-ID: <168B6A543C546C41BED2301C3D2A1236060151E8@prodmbx01.pfsweb.com> Hi, While running the command "sudo apt-get install -y nginx-plus". I'm seeing an error and unable to complete the process. Error shown is "E: Unable to locate package nginx-plus". I'm using Ubuntu 17.10 in virtual box. Please help me in resolving the issue. Thanks, Raghu -------------- next part -------------- An HTML attachment was scrubbed... URL: From arut at nginx.com Thu Dec 21 13:28:00 2017 From: arut at nginx.com (Roman Arutyunyan) Date: Thu, 21 Dec 2017 13:28:00 +0000 Subject: [nginx] Allowed configuration token to start with a variable. Message-ID: details: http://hg.nginx.org/nginx/rev/d91a8c4ac6bb branches: changeset: 7177:d91a8c4ac6bb user: Roman Arutyunyan date: Thu Dec 21 13:29:40 2017 +0300 description: Allowed configuration token to start with a variable. Specifically, it is now allowed to start with a variable expression with braces: ${name}. The opening curly bracket in such a token was previously considered the start of a new block. Variables located anywhere else in a token worked fine: foo${name}. diffstat: src/core/ngx_conf_file.c | 5 +++++ 1 files changed, 5 insertions(+), 0 deletions(-) diffs (15 lines): diff -r 7f28b61c92f0 -r d91a8c4ac6bb src/core/ngx_conf_file.c --- a/src/core/ngx_conf_file.c Tue Dec 19 19:00:27 2017 +0300 +++ b/src/core/ngx_conf_file.c Thu Dec 21 13:29:40 2017 +0300 @@ -709,6 +709,11 @@ ngx_conf_read_token(ngx_conf_t *cf) last_space = 0; continue; + case '$': + variable = 1; + last_space = 0; + continue; + default: last_space = 0; } From maxim at nginx.com Thu Dec 21 15:14:14 2017 From: maxim at nginx.com (Maxim Konovalov) Date: Thu, 21 Dec 2017 18:14:14 +0300 Subject: E:Unable to locate package nginx-plus In-Reply-To: <168B6A543C546C41BED2301C3D2A1236060151E8@prodmbx01.pfsweb.com> References: <168B6A543C546C41BED2301C3D2A1236060151E8@prodmbx01.pfsweb.com> Message-ID: <32b3b0f8-2f0f-a3bf-7370-af88d386dc0c@nginx.com> Hi Raghu, On 21/12/2017 10:40, Raghu Varma Pinnelli wrote: > Hi, > > While running the command ?sudo apt-get install ?y nginx-plus?. I?m > seeing an error and unable to complete the process. Error shown is > ?E: Unable to locate package nginx-plus?. > > I?m using Ubuntu 17.10 in virtual box. Please help me in resolving > the issue. > > ? This is a mailing list for nginx OSS development topics. If you are nginx-plus subscriber please feel free to open a support case by sending email to plus-support at nginx.com. -- Maxim Konovalov From xiaohuaw at gmail.com Mon Dec 25 03:24:51 2017 From: xiaohuaw at gmail.com (Xiaohua Wang) Date: Mon, 25 Dec 2017 11:24:51 +0800 Subject: Please help review and approve one change In-Reply-To: <20171220140256.GC78325@mdounin.ru> References: <20171220140256.GC78325@mdounin.ru> Message-ID: Hi Maxim, Thanks for you reply. Actually we already tried to use the dtrace method to do real-time tracing as you mentioned. dtrace is helpful in some scenarios. But there are several issues we met while using dtrace, 1) the drace usage is not so friendly, as reference guide mentioned, need to define a lot of structure in dtrace script. 2) in performance/load test, our purpose is to trace HTTP requests call in nginx, instead of tracing some methods in one process. And what I want to add http-call-trace in nginx source code, 1) it is a separated module, can be controlled by configure options (--with-http-call-trace), no impact any existence source code. 2) it's very easy to use and support alll OS platforms which nginx can support, no dependency on Dtrace tool. Could you help think it again? Best Regards Xiaohua On Wed, Dec 20, 2017 at 10:02 PM, Maxim Dounin wrote: > Hello! > > On Wed, Dec 20, 2017 at 03:15:24PM +0800, Xiaohua Wang wrote: > > > Added to trace HTTP request call flow in nginx. > > > > Especially for performance or load test purpose. > > Because info level log is not enough, > > and debug log is too much which impacts performance a lot. > > Currently, two scenarios are supported. > > 1) trace any point in source code like before/after function entry, or > > middle of function. > > 2) trace any call flow which takes longer time than specific latency > > between two check point. > > > # HG changeset patch > > # User Xiaohua Wang > > # Date 1513591776 -28800 > > # Mon Dec 18 18:09:36 2017 +0800 > > # Node ID 1cf1d4a74783573da28793f39b924fa551fdfb65 > > # Parent d3235149d17f7745d3ac246a6cdcc81a56698f7b > > Added to trace http request call flow in nginx. > > > > Especillay for performance or load test purpose. > > Because info level log is not enough, > > and debug log is too much which impacts performace a lot. > > > > Currently, two scenarios are supported. > > 1) trace any piont in source code like before/after function entry, or > middle of function. > > 2) trace any call flow which takes longer time than specific latency > between two check point. > > No, thanks. > > If you need detailed real-time tracing, you may consider using > DTrace. The following article describes how to use it with nginx: > > http://nginx.org/en/docs/nginx_dtrace_pid_provider.html > > -- > Maxim Dounin > http://mdounin.ru/ > _______________________________________________ > nginx-devel mailing list > nginx-devel at nginx.org > http://mailman.nginx.org/mailman/listinfo/nginx-devel > -------------- next part -------------- An HTML attachment was scrubbed... URL: From mdounin at mdounin.ru Mon Dec 25 14:12:09 2017 From: mdounin at mdounin.ru (Maxim Dounin) Date: Mon, 25 Dec 2017 17:12:09 +0300 Subject: Please help review and approve one change In-Reply-To: References: <20171220140256.GC78325@mdounin.ru> Message-ID: <20171225141209.GB4104@mdounin.ru> Hello! On Mon, Dec 25, 2017 at 11:24:51AM +0800, Xiaohua Wang wrote: > Hi Maxim, > Thanks for you reply. > Actually we already tried to use the dtrace method to do real-time tracing > as you mentioned. > dtrace is helpful in some scenarios. > But there are several issues we met while using dtrace, > 1) the drace usage is not so friendly, as reference guide mentioned, need > to define a lot of structure in dtrace script. > 2) in performance/load test, our purpose is to trace HTTP requests call in > nginx, instead of tracing some methods in one process. DTrace certainly can be used for tracing particular requests, though you have to write appropriate D code to do this. > And what I want to add http-call-trace in nginx source code, > 1) it is a separated module, can be controlled by configure options > (--with-http-call-trace), no impact any existence source code. > 2) it's very easy to use and support alll OS platforms which nginx can > support, no dependency on Dtrace tool. And here are downsides, in no particular order: - As in the patch suggested, the code literally does nothing. To do something meaningful it additionally requires introducing trace calls in various functions. - The code is far from being in nginx coding style. - The code uses hacks to store its data. - The code is http-only for some reason (well, actually the reason is clear: because it uses a http-only hack). Note well that it's not a module as you claim, but rather an optional set of functions for call tracing, an optional feature similar to --with-debug. It is also not clear why it is made optional - rather, it should be made a part of --with-debug instead, or even the default, as it neither depends on any external libraries nor introduces additional calls by itself. The only reason for being optional seems to be the quality of the code. > Could you help think it again? Sorry, but the answer is still no. -- Maxim Dounin http://mdounin.ru/ From gmm at csdoc.com Mon Dec 25 16:07:45 2017 From: gmm at csdoc.com (Gena Makhomed) Date: Mon, 25 Dec 2017 18:07:45 +0200 Subject: [PATCH] Contrib: vim syntax, update core module directives. Message-ID: # HG changeset patch # User Gena Makhomed # Date 1514217421 -7200 # Mon Dec 25 17:57:01 2017 +0200 # Node ID 5b9ed8c6f2dcadcdeb0fe9d64e18ac194b881e14 # Parent d91a8c4ac6bb10bb30c598a4f2c993fc34bf8cec Contrib: vim syntax, update core module directives. diff -r d91a8c4ac6bb -r 5b9ed8c6f2dc contrib/vim/syntax/nginx.vim --- a/contrib/vim/syntax/nginx.vim Thu Dec 21 13:29:40 2017 +0300 +++ b/contrib/vim/syntax/nginx.vim Mon Dec 25 17:57:01 2017 +0200 @@ -71,6 +71,7 @@ \ add=ngxListenOptions syn keyword ngxDirectiveBlock contained http +syn keyword ngxDirectiveBlock contained stream syn keyword ngxDirectiveBlock contained mail syn keyword ngxDirectiveBlock contained events syn keyword ngxDirectiveBlock contained server @@ -105,14 +106,16 @@ syn keyword ngxDirectiveError contained error_page syn keyword ngxDirectiveError contained post_action -syn keyword ngxDirectiveDeprecated contained connections -syn keyword ngxDirectiveDeprecated contained imap -syn keyword ngxDirectiveDeprecated contained limit_zone -syn keyword ngxDirectiveDeprecated contained mysql_test -syn keyword ngxDirectiveDeprecated contained open_file_cache_retest -syn keyword ngxDirectiveDeprecated contained optimize_server_names -syn keyword ngxDirectiveDeprecated contained satisfy_any -syn keyword ngxDirectiveDeprecated contained so_keepalive +syn keyword ngxDirectiveDeprecated contained proxy_downstream_buffer +syn keyword ngxDirectiveDeprecated contained proxy_upstream_buffer +syn keyword ngxDirectiveDeprecated contained spdy_chunk_size +syn keyword ngxDirectiveDeprecated contained spdy_headers_comp +syn keyword ngxDirectiveDeprecated contained spdy_keepalive_timeout +syn keyword ngxDirectiveDeprecated contained spdy_max_concurrent_streams +syn keyword ngxDirectiveDeprecated contained spdy_pool_size +syn keyword ngxDirectiveDeprecated contained spdy_recv_buffer_size +syn keyword ngxDirectiveDeprecated contained spdy_recv_timeout +syn keyword ngxDirectiveDeprecated contained spdy_streams_index_size syn keyword ngxDirective contained absolute_redirect syn keyword ngxDirective contained accept_mutex @@ -122,6 +125,7 @@ syn keyword ngxDirective contained add_after_body syn keyword ngxDirective contained add_before_body syn keyword ngxDirective contained add_header +syn keyword ngxDirective contained add_trailer syn keyword ngxDirective contained addition_types syn keyword ngxDirective contained aio syn keyword ngxDirective contained aio_write @@ -186,6 +190,7 @@ syn keyword ngxDirective contained fastcgi_buffers syn keyword ngxDirective contained fastcgi_busy_buffers_size syn keyword ngxDirective contained fastcgi_cache +syn keyword ngxDirective contained fastcgi_cache_background_update syn keyword ngxDirective contained fastcgi_cache_bypass syn keyword ngxDirective contained fastcgi_cache_key syn keyword ngxDirective contained fastcgi_cache_lock @@ -258,15 +263,17 @@ syn keyword ngxDirective contained hls_fragment syn keyword ngxDirective contained hls_mp4_buffer_size syn keyword ngxDirective contained hls_mp4_max_buffer_size +syn keyword ngxDirective contained http2_body_preread_size syn keyword ngxDirective contained http2_chunk_size -syn keyword ngxDirective contained http2_body_preread_size syn keyword ngxDirective contained http2_idle_timeout syn keyword ngxDirective contained http2_max_concurrent_streams syn keyword ngxDirective contained http2_max_field_size syn keyword ngxDirective contained http2_max_header_size syn keyword ngxDirective contained http2_max_requests +syn keyword ngxDirective contained http2_pool_size syn keyword ngxDirective contained http2_recv_buffer_size syn keyword ngxDirective contained http2_recv_timeout +syn keyword ngxDirective contained http2_streams_index_size syn keyword ngxDirective contained if_modified_since syn keyword ngxDirective contained ignore_invalid_headers syn keyword ngxDirective contained image_filter @@ -332,6 +339,8 @@ syn keyword ngxDirective contained memcached_send_timeout syn keyword ngxDirective contained merge_slashes syn keyword ngxDirective contained min_delete_depth +syn keyword ngxDirective contained mirror +syn keyword ngxDirective contained mirror_request_body syn keyword ngxDirective contained modern_browser syn keyword ngxDirective contained modern_browser_value syn keyword ngxDirective contained mp4 @@ -374,6 +383,7 @@ syn keyword ngxDirective contained proxy_buffers syn keyword ngxDirective contained proxy_busy_buffers_size syn keyword ngxDirective contained proxy_cache +syn keyword ngxDirective contained proxy_cache_background_update syn keyword ngxDirective contained proxy_cache_bypass syn keyword ngxDirective contained proxy_cache_convert_head syn keyword ngxDirective contained proxy_cache_key @@ -421,6 +431,7 @@ syn keyword ngxDirective contained proxy_send_timeout syn keyword ngxDirective contained proxy_set_body syn keyword ngxDirective contained proxy_set_header +syn keyword ngxDirective contained proxy_ssl syn keyword ngxDirective contained proxy_ssl_certificate syn keyword ngxDirective contained proxy_ssl_certificate_key syn keyword ngxDirective contained proxy_ssl_ciphers @@ -463,6 +474,7 @@ syn keyword ngxDirective contained scgi_buffers syn keyword ngxDirective contained scgi_busy_buffers_size syn keyword ngxDirective contained scgi_cache +syn keyword ngxDirective contained scgi_cache_background_update syn keyword ngxDirective contained scgi_cache_bypass syn keyword ngxDirective contained scgi_cache_key syn keyword ngxDirective contained scgi_cache_lock @@ -520,14 +532,6 @@ syn keyword ngxDirective contained smtp_client_buffer syn keyword ngxDirective contained smtp_greeting_delay syn keyword ngxDirective contained source_charset -syn keyword ngxDirective contained spdy_chunk_size -syn keyword ngxDirective contained spdy_headers_comp -syn keyword ngxDirective contained spdy_keepalive_timeout -syn keyword ngxDirective contained spdy_max_concurrent_streams -syn keyword ngxDirective contained spdy_pool_size -syn keyword ngxDirective contained spdy_recv_buffer_size -syn keyword ngxDirective contained spdy_recv_timeout -syn keyword ngxDirective contained spdy_streams_index_size syn keyword ngxDirective contained ssi syn keyword ngxDirective contained ssi_ignore_recycled_buffers syn keyword ngxDirective contained ssi_last_modified @@ -600,11 +604,13 @@ syn keyword ngxDirective contained uwsgi_buffers syn keyword ngxDirective contained uwsgi_busy_buffers_size syn keyword ngxDirective contained uwsgi_cache +syn keyword ngxDirective contained uwsgi_cache_background_update syn keyword ngxDirective contained uwsgi_cache_bypass syn keyword ngxDirective contained uwsgi_cache_key syn keyword ngxDirective contained uwsgi_cache_lock syn keyword ngxDirective contained uwsgi_cache_lock_age syn keyword ngxDirective contained uwsgi_cache_lock_timeout +syn keyword ngxDirective contained uwsgi_cache_max_range_offset syn keyword ngxDirective contained uwsgi_cache_methods syn keyword ngxDirective contained uwsgi_cache_min_uses syn keyword ngxDirective contained uwsgi_cache_path @@ -662,6 +668,7 @@ syn keyword ngxDirective contained worker_rlimit_core syn keyword ngxDirective contained worker_rlimit_nofile syn keyword ngxDirective contained worker_rlimit_sigpending +syn keyword ngxDirective contained worker_shutdown_timeout syn keyword ngxDirective contained worker_threads syn keyword ngxDirective contained working_directory syn keyword ngxDirective contained xclient From gmm at csdoc.com Mon Dec 25 16:35:37 2017 From: gmm at csdoc.com (Gena Makhomed) Date: Mon, 25 Dec 2017 18:35:37 +0200 Subject: [PATCH] Contrib: vim syntax, listen options. Message-ID: <2ba93567-f213-2335-6f9d-b6965f551ad8@csdoc.com> # HG changeset patch # User Gena Makhomed # Date 1514219401 -7200 # Mon Dec 25 18:30:01 2017 +0200 # Node ID c0ce67821e8d151fa98dc6934a80fb962bbdbc4a # Parent 5b9ed8c6f2dcadcdeb0fe9d64e18ac194b881e14 Contrib: vim syntax, listen options. diff -r 5b9ed8c6f2dc -r c0ce67821e8d contrib/vim/syntax/nginx.vim --- a/contrib/vim/syntax/nginx.vim Mon Dec 25 17:57:01 2017 +0200 +++ b/contrib/vim/syntax/nginx.vim Mon Dec 25 18:30:01 2017 +0200 @@ -62,13 +62,14 @@ \ contained \ nextgroup=@ngxListenParams skipwhite skipempty syn keyword ngxListenOptions contained - \ default_server ssl http2 spdy proxy_protocol + \ default_server ssl http2 proxy_protocol \ setfib fastopen backlog rcvbuf sndbuf accept_filter deferred bind - \ ipv6only reuseport so_keepalive keepidle + \ ipv6only reuseport so_keepalive \ nextgroup=@ngxListenParams skipwhite skipempty +syn keyword ngxListenOptionsDeprecated contained spdy syn cluster ngxListenParams \ contains=ngxListenParam,ngxListenString,ngxListenComment - \ add=ngxListenOptions + \ add=ngxListenOptions,ngxListenOptionsDeprecated syn keyword ngxDirectiveBlock contained http syn keyword ngxDirectiveBlock contained stream @@ -2177,5 +2178,6 @@ hi link ngxDirectiveThirdParty Special hi link ngxListenOptions Keyword +hi link ngxListenOptionsDeprecated Error let b:current_syntax = "nginx" From mdounin at mdounin.ru Mon Dec 25 17:37:59 2017 From: mdounin at mdounin.ru (Maxim Dounin) Date: Mon, 25 Dec 2017 17:37:59 +0000 Subject: [nginx] Contrib: updated vim syntax rules for variables. Message-ID: details: http://hg.nginx.org/nginx/rev/e2685c467496 branches: changeset: 7178:e2685c467496 user: Maxim Dounin date: Mon Dec 25 19:41:00 2017 +0300 description: Contrib: updated vim syntax rules for variables. Non-quoted parameters are allowed to contain variables in curly brackets (see d91a8c4ac6bb), so vim syntax rules were adjusted accordingly. diffstat: contrib/vim/syntax/nginx.vim | 6 +++--- 1 files changed, 3 insertions(+), 3 deletions(-) diffs (30 lines): diff --git a/contrib/vim/syntax/nginx.vim b/contrib/vim/syntax/nginx.vim --- a/contrib/vim/syntax/nginx.vim +++ b/contrib/vim/syntax/nginx.vim @@ -15,7 +15,7 @@ endif syn match ngxName '\([^;{} \t\\]\|\\.\)\+' \ contains=@ngxDirectives \ nextgroup=@ngxParams skipwhite skipempty -syn match ngxParam '\([^;{ \t\\]\|\\.\)\+' +syn match ngxParam '\(\${\|[^;{ \t\\]\|\\.\)\+' \ contained \ contains=ngxVariable \ nextgroup=@ngxParams skipwhite skipempty @@ -29,7 +29,7 @@ syn region ngxBlock start=+{+ end=+}+ co \ contains=@ngxTopLevel syn match ngxComment '#.*$' -syn match ngxVariable '\$\w\+' contained +syn match ngxVariable '\$\(\w\+\|{\w\+}\)' contained syn match ngxVariableString '\$\(\w\+\|{\w\+}\)' contained syn cluster ngxTopLevel @@ -52,7 +52,7 @@ syn cluster ngxParams add=ngxBoolean syn cluster ngxTopLevel add=ngxDirectiveListen syn keyword ngxDirectiveListen listen \ nextgroup=@ngxListenParams skipwhite skipempty -syn match ngxListenParam '\([^;{ \t\\]\|\\.\)\+' +syn match ngxListenParam '\(\${\|[^;{ \t\\]\|\\.\)\+' \ contained \ nextgroup=@ngxListenParams skipwhite skipempty syn region ngxListenString start=+\z(["']\)+ end=+\z1+ skip=+\\\\\|\\\z1+ From mdounin at mdounin.ru Mon Dec 25 17:38:00 2017 From: mdounin at mdounin.ru (Maxim Dounin) Date: Mon, 25 Dec 2017 17:38:00 +0000 Subject: [nginx] Contrib: vim syntax, update core module directives. Message-ID: details: http://hg.nginx.org/nginx/rev/f505aeaba752 branches: changeset: 7179:f505aeaba752 user: Gena Makhomed date: Mon Dec 25 17:57:01 2017 +0200 description: Contrib: vim syntax, update core module directives. diffstat: contrib/vim/syntax/nginx.vim | 41 ++++++++++++++++++++++++----------------- 1 files changed, 24 insertions(+), 17 deletions(-) diffs (141 lines): diff --git a/contrib/vim/syntax/nginx.vim b/contrib/vim/syntax/nginx.vim --- a/contrib/vim/syntax/nginx.vim +++ b/contrib/vim/syntax/nginx.vim @@ -71,6 +71,7 @@ syn cluster ngxListenParams \ add=ngxListenOptions syn keyword ngxDirectiveBlock contained http +syn keyword ngxDirectiveBlock contained stream syn keyword ngxDirectiveBlock contained mail syn keyword ngxDirectiveBlock contained events syn keyword ngxDirectiveBlock contained server @@ -105,14 +106,16 @@ syn keyword ngxDirectiveControl containe syn keyword ngxDirectiveError contained error_page syn keyword ngxDirectiveError contained post_action -syn keyword ngxDirectiveDeprecated contained connections -syn keyword ngxDirectiveDeprecated contained imap -syn keyword ngxDirectiveDeprecated contained limit_zone -syn keyword ngxDirectiveDeprecated contained mysql_test -syn keyword ngxDirectiveDeprecated contained open_file_cache_retest -syn keyword ngxDirectiveDeprecated contained optimize_server_names -syn keyword ngxDirectiveDeprecated contained satisfy_any -syn keyword ngxDirectiveDeprecated contained so_keepalive +syn keyword ngxDirectiveDeprecated contained proxy_downstream_buffer +syn keyword ngxDirectiveDeprecated contained proxy_upstream_buffer +syn keyword ngxDirectiveDeprecated contained spdy_chunk_size +syn keyword ngxDirectiveDeprecated contained spdy_headers_comp +syn keyword ngxDirectiveDeprecated contained spdy_keepalive_timeout +syn keyword ngxDirectiveDeprecated contained spdy_max_concurrent_streams +syn keyword ngxDirectiveDeprecated contained spdy_pool_size +syn keyword ngxDirectiveDeprecated contained spdy_recv_buffer_size +syn keyword ngxDirectiveDeprecated contained spdy_recv_timeout +syn keyword ngxDirectiveDeprecated contained spdy_streams_index_size syn keyword ngxDirective contained absolute_redirect syn keyword ngxDirective contained accept_mutex @@ -122,6 +125,7 @@ syn keyword ngxDirective contained acces syn keyword ngxDirective contained add_after_body syn keyword ngxDirective contained add_before_body syn keyword ngxDirective contained add_header +syn keyword ngxDirective contained add_trailer syn keyword ngxDirective contained addition_types syn keyword ngxDirective contained aio syn keyword ngxDirective contained aio_write @@ -186,6 +190,7 @@ syn keyword ngxDirective contained fastc syn keyword ngxDirective contained fastcgi_buffers syn keyword ngxDirective contained fastcgi_busy_buffers_size syn keyword ngxDirective contained fastcgi_cache +syn keyword ngxDirective contained fastcgi_cache_background_update syn keyword ngxDirective contained fastcgi_cache_bypass syn keyword ngxDirective contained fastcgi_cache_key syn keyword ngxDirective contained fastcgi_cache_lock @@ -258,15 +263,17 @@ syn keyword ngxDirective contained hls_f syn keyword ngxDirective contained hls_fragment syn keyword ngxDirective contained hls_mp4_buffer_size syn keyword ngxDirective contained hls_mp4_max_buffer_size +syn keyword ngxDirective contained http2_body_preread_size syn keyword ngxDirective contained http2_chunk_size -syn keyword ngxDirective contained http2_body_preread_size syn keyword ngxDirective contained http2_idle_timeout syn keyword ngxDirective contained http2_max_concurrent_streams syn keyword ngxDirective contained http2_max_field_size syn keyword ngxDirective contained http2_max_header_size syn keyword ngxDirective contained http2_max_requests +syn keyword ngxDirective contained http2_pool_size syn keyword ngxDirective contained http2_recv_buffer_size syn keyword ngxDirective contained http2_recv_timeout +syn keyword ngxDirective contained http2_streams_index_size syn keyword ngxDirective contained if_modified_since syn keyword ngxDirective contained ignore_invalid_headers syn keyword ngxDirective contained image_filter @@ -332,6 +339,8 @@ syn keyword ngxDirective contained memca syn keyword ngxDirective contained memcached_send_timeout syn keyword ngxDirective contained merge_slashes syn keyword ngxDirective contained min_delete_depth +syn keyword ngxDirective contained mirror +syn keyword ngxDirective contained mirror_request_body syn keyword ngxDirective contained modern_browser syn keyword ngxDirective contained modern_browser_value syn keyword ngxDirective contained mp4 @@ -374,6 +383,7 @@ syn keyword ngxDirective contained proxy syn keyword ngxDirective contained proxy_buffers syn keyword ngxDirective contained proxy_busy_buffers_size syn keyword ngxDirective contained proxy_cache +syn keyword ngxDirective contained proxy_cache_background_update syn keyword ngxDirective contained proxy_cache_bypass syn keyword ngxDirective contained proxy_cache_convert_head syn keyword ngxDirective contained proxy_cache_key @@ -421,6 +431,7 @@ syn keyword ngxDirective contained proxy syn keyword ngxDirective contained proxy_send_timeout syn keyword ngxDirective contained proxy_set_body syn keyword ngxDirective contained proxy_set_header +syn keyword ngxDirective contained proxy_ssl syn keyword ngxDirective contained proxy_ssl_certificate syn keyword ngxDirective contained proxy_ssl_certificate_key syn keyword ngxDirective contained proxy_ssl_ciphers @@ -463,6 +474,7 @@ syn keyword ngxDirective contained scgi_ syn keyword ngxDirective contained scgi_buffers syn keyword ngxDirective contained scgi_busy_buffers_size syn keyword ngxDirective contained scgi_cache +syn keyword ngxDirective contained scgi_cache_background_update syn keyword ngxDirective contained scgi_cache_bypass syn keyword ngxDirective contained scgi_cache_key syn keyword ngxDirective contained scgi_cache_lock @@ -520,14 +532,6 @@ syn keyword ngxDirective contained smtp_ syn keyword ngxDirective contained smtp_client_buffer syn keyword ngxDirective contained smtp_greeting_delay syn keyword ngxDirective contained source_charset -syn keyword ngxDirective contained spdy_chunk_size -syn keyword ngxDirective contained spdy_headers_comp -syn keyword ngxDirective contained spdy_keepalive_timeout -syn keyword ngxDirective contained spdy_max_concurrent_streams -syn keyword ngxDirective contained spdy_pool_size -syn keyword ngxDirective contained spdy_recv_buffer_size -syn keyword ngxDirective contained spdy_recv_timeout -syn keyword ngxDirective contained spdy_streams_index_size syn keyword ngxDirective contained ssi syn keyword ngxDirective contained ssi_ignore_recycled_buffers syn keyword ngxDirective contained ssi_last_modified @@ -600,11 +604,13 @@ syn keyword ngxDirective contained uwsgi syn keyword ngxDirective contained uwsgi_buffers syn keyword ngxDirective contained uwsgi_busy_buffers_size syn keyword ngxDirective contained uwsgi_cache +syn keyword ngxDirective contained uwsgi_cache_background_update syn keyword ngxDirective contained uwsgi_cache_bypass syn keyword ngxDirective contained uwsgi_cache_key syn keyword ngxDirective contained uwsgi_cache_lock syn keyword ngxDirective contained uwsgi_cache_lock_age syn keyword ngxDirective contained uwsgi_cache_lock_timeout +syn keyword ngxDirective contained uwsgi_cache_max_range_offset syn keyword ngxDirective contained uwsgi_cache_methods syn keyword ngxDirective contained uwsgi_cache_min_uses syn keyword ngxDirective contained uwsgi_cache_path @@ -662,6 +668,7 @@ syn keyword ngxDirective contained worke syn keyword ngxDirective contained worker_rlimit_core syn keyword ngxDirective contained worker_rlimit_nofile syn keyword ngxDirective contained worker_rlimit_sigpending +syn keyword ngxDirective contained worker_shutdown_timeout syn keyword ngxDirective contained worker_threads syn keyword ngxDirective contained working_directory syn keyword ngxDirective contained xclient From mdounin at mdounin.ru Mon Dec 25 17:38:01 2017 From: mdounin at mdounin.ru (Maxim Dounin) Date: Mon, 25 Dec 2017 17:38:01 +0000 Subject: [nginx] Contrib: vim syntax, listen options. Message-ID: details: http://hg.nginx.org/nginx/rev/6939f75c4b13 branches: changeset: 7180:6939f75c4b13 user: Gena Makhomed date: Mon Dec 25 18:30:01 2017 +0200 description: Contrib: vim syntax, listen options. diffstat: contrib/vim/syntax/nginx.vim | 10 +++++++--- 1 files changed, 7 insertions(+), 3 deletions(-) diffs (30 lines): diff --git a/contrib/vim/syntax/nginx.vim b/contrib/vim/syntax/nginx.vim --- a/contrib/vim/syntax/nginx.vim +++ b/contrib/vim/syntax/nginx.vim @@ -62,13 +62,16 @@ syn match ngxListenComment '#.*$' \ contained \ nextgroup=@ngxListenParams skipwhite skipempty syn keyword ngxListenOptions contained - \ default_server ssl http2 spdy proxy_protocol + \ default_server ssl http2 proxy_protocol \ setfib fastopen backlog rcvbuf sndbuf accept_filter deferred bind - \ ipv6only reuseport so_keepalive keepidle + \ ipv6only reuseport so_keepalive + \ nextgroup=@ngxListenParams skipwhite skipempty +syn keyword ngxListenOptionsDeprecated contained + \ spdy \ nextgroup=@ngxListenParams skipwhite skipempty syn cluster ngxListenParams \ contains=ngxListenParam,ngxListenString,ngxListenComment - \ add=ngxListenOptions + \ add=ngxListenOptions,ngxListenOptionsDeprecated syn keyword ngxDirectiveBlock contained http syn keyword ngxDirectiveBlock contained stream @@ -2177,5 +2180,6 @@ hi link ngxDirective Identifier hi link ngxDirectiveThirdParty Special hi link ngxListenOptions Keyword +hi link ngxListenOptionsDeprecated Error let b:current_syntax = "nginx" From mdounin at mdounin.ru Mon Dec 25 17:38:18 2017 From: mdounin at mdounin.ru (Maxim Dounin) Date: Mon, 25 Dec 2017 20:38:18 +0300 Subject: [PATCH] Contrib: vim syntax, update core module directives. In-Reply-To: References: Message-ID: <20171225173818.GC4104@mdounin.ru> Hello! On Mon, Dec 25, 2017 at 06:07:45PM +0200, Gena Makhomed wrote: > # HG changeset patch > # User Gena Makhomed > # Date 1514217421 -7200 > # Mon Dec 25 17:57:01 2017 +0200 > # Node ID 5b9ed8c6f2dcadcdeb0fe9d64e18ac194b881e14 > # Parent d91a8c4ac6bb10bb30c598a4f2c993fc34bf8cec > Contrib: vim syntax, update core module directives. > > diff -r d91a8c4ac6bb -r 5b9ed8c6f2dc contrib/vim/syntax/nginx.vim > --- a/contrib/vim/syntax/nginx.vim Thu Dec 21 13:29:40 2017 +0300 > +++ b/contrib/vim/syntax/nginx.vim Mon Dec 25 17:57:01 2017 +0200 > @@ -71,6 +71,7 @@ > \ add=ngxListenOptions > > syn keyword ngxDirectiveBlock contained http > +syn keyword ngxDirectiveBlock contained stream > syn keyword ngxDirectiveBlock contained mail > syn keyword ngxDirectiveBlock contained events > syn keyword ngxDirectiveBlock contained server > @@ -105,14 +106,16 @@ > syn keyword ngxDirectiveError contained error_page > syn keyword ngxDirectiveError contained post_action [...] Committed, thanks. -- Maxim Dounin http://mdounin.ru/ From mdounin at mdounin.ru Mon Dec 25 17:39:55 2017 From: mdounin at mdounin.ru (Maxim Dounin) Date: Mon, 25 Dec 2017 20:39:55 +0300 Subject: [PATCH] Contrib: vim syntax, listen options. In-Reply-To: <2ba93567-f213-2335-6f9d-b6965f551ad8@csdoc.com> References: <2ba93567-f213-2335-6f9d-b6965f551ad8@csdoc.com> Message-ID: <20171225173955.GD4104@mdounin.ru> Hello! On Mon, Dec 25, 2017 at 06:35:37PM +0200, Gena Makhomed wrote: > # HG changeset patch > # User Gena Makhomed > # Date 1514219401 -7200 > # Mon Dec 25 18:30:01 2017 +0200 > # Node ID c0ce67821e8d151fa98dc6934a80fb962bbdbc4a > # Parent 5b9ed8c6f2dcadcdeb0fe9d64e18ac194b881e14 > Contrib: vim syntax, listen options. > > diff -r 5b9ed8c6f2dc -r c0ce67821e8d contrib/vim/syntax/nginx.vim > --- a/contrib/vim/syntax/nginx.vim Mon Dec 25 17:57:01 2017 +0200 > +++ b/contrib/vim/syntax/nginx.vim Mon Dec 25 18:30:01 2017 +0200 > @@ -62,13 +62,14 @@ > \ contained > \ nextgroup=@ngxListenParams skipwhite skipempty > syn keyword ngxListenOptions contained > - \ default_server ssl http2 spdy proxy_protocol > + \ default_server ssl http2 proxy_protocol > \ setfib fastopen backlog rcvbuf sndbuf accept_filter deferred bind > - \ ipv6only reuseport so_keepalive keepidle > + \ ipv6only reuseport so_keepalive > \ nextgroup=@ngxListenParams skipwhite skipempty > +syn keyword ngxListenOptionsDeprecated contained spdy > syn cluster ngxListenParams > \ contains=ngxListenParam,ngxListenString,ngxListenComment > - \ add=ngxListenOptions > + \ add=ngxListenOptions,ngxListenOptionsDeprecated > > syn keyword ngxDirectiveBlock contained http > syn keyword ngxDirectiveBlock contained stream > @@ -2177,5 +2178,6 @@ > hi link ngxDirectiveThirdParty Special > > hi link ngxListenOptions Keyword > +hi link ngxListenOptionsDeprecated Error > > let b:current_syntax = "nginx" This will break parsing of parameters following "spdy", for example: listen 443 spdy ssl; The "ssl;" part will be incorrectly interpreted as a directive, as there is no nextgroup specified for ngxListenOptionsDeprecated. A fix would be: diff --git a/contrib/vim/syntax/nginx.vim b/contrib/vim/syntax/nginx.vim --- a/contrib/vim/syntax/nginx.vim +++ b/contrib/vim/syntax/nginx.vim @@ -66,7 +66,9 @@ syn keyword ngxListenOptions contained \ setfib fastopen backlog rcvbuf sndbuf accept_filter deferred bind \ ipv6only reuseport so_keepalive \ nextgroup=@ngxListenParams skipwhite skipempty -syn keyword ngxListenOptionsDeprecated contained spdy +syn keyword ngxListenOptionsDeprecated contained + \ spdy + \ nextgroup=@ngxListenParams skipwhite skipempty syn cluster ngxListenParams \ contains=ngxListenParam,ngxListenString,ngxListenComment \ add=ngxListenOptions,ngxListenOptionsDeprecated Committed with the fix, thanks. -- Maxim Dounin http://mdounin.ru/ From xiaohuaw at gmail.com Tue Dec 26 06:19:28 2017 From: xiaohuaw at gmail.com (Xiaohua Wang) Date: Tue, 26 Dec 2017 14:19:28 +0800 Subject: Please help review and approve one change In-Reply-To: <20171225141209.GB4104@mdounin.ru> References: <20171220140256.GC78325@mdounin.ru> <20171225141209.GB4104@mdounin.ru> Message-ID: Hi Maxim, Thanks for your code review and good comments. The basic idea for http-call-trace is to provide a mechanism for nginx to have a sync-like call stack trace to enhance trouble shooting for load test. Since nginx is event driven and asynchronous based software, it's good for performance, but not easy and natural for debugging and trouble shooting like synchronous based, specially for load test. DTrace certainly can trace the request in one worker process, but only can trace entry/existence of one function. But in nginx source code, there are some functions which has a lot of lines and "goto", sometime need to trace the call flow at the middle of functions. And DTrace depends on particular OS. Why not use "--with-debug" or by default, there are two reasons: 1) want to has http-call-trace for release build means even no "--with-debug", then developer can decide it by options. 2) currently, http-call-trace use http request nginx internal private header to store call stack, so don't want to use by default. This http-call-trace optional feature (like tool/utility functions) is mainly used to help troubleshooting for load test. It do need to add trace code in nginx functions. Regarding the code style and code quality, they can be refined accordingly. Could you consider a bit more on http-call-trace feature? Especially from perspective of customization development based on nginx. Thanks a lot. On Mon, Dec 25, 2017 at 10:12 PM, Maxim Dounin wrote: > Hello! > > On Mon, Dec 25, 2017 at 11:24:51AM +0800, Xiaohua Wang wrote: > > > Hi Maxim, > > Thanks for you reply. > > Actually we already tried to use the dtrace method to do real-time > tracing > > as you mentioned. > > dtrace is helpful in some scenarios. > > But there are several issues we met while using dtrace, > > 1) the drace usage is not so friendly, as reference guide mentioned, need > > to define a lot of structure in dtrace script. > > 2) in performance/load test, our purpose is to trace HTTP requests call > in > > nginx, instead of tracing some methods in one process. > > DTrace certainly can be used for tracing particular requests, > though you have to write appropriate D code to do this. > > > And what I want to add http-call-trace in nginx source code, > > 1) it is a separated module, can be controlled by configure options > > (--with-http-call-trace), no impact any existence source code. > > 2) it's very easy to use and support alll OS platforms which nginx can > > support, no dependency on Dtrace tool. > > And here are downsides, in no particular order: > > - As in the patch suggested, the code literally does nothing. To > do something meaningful it additionally requires introducing > trace calls in various functions. > > - The code is far from being in nginx coding style. > > - The code uses hacks to store its data. > > - The code is http-only for some reason (well, actually the reason > is clear: because it uses a http-only hack). > > Note well that it's not a module as you claim, but rather an > optional set of functions for call tracing, an optional feature > similar to --with-debug. > > It is also not clear why it is made optional - rather, it should > be made a part of --with-debug instead, or even the default, as it > neither depends on any external libraries nor introduces > additional calls by itself. The only reason for being optional > seems to be the quality of the code. > > > Could you help think it again? > > Sorry, but the answer is still no. > > -- > Maxim Dounin > http://mdounin.ru/ > _______________________________________________ > nginx-devel mailing list > nginx-devel at nginx.org > http://mailman.nginx.org/mailman/listinfo/nginx-devel > -------------- next part -------------- An HTML attachment was scrubbed... URL: From mdounin at mdounin.ru Tue Dec 26 16:03:55 2017 From: mdounin at mdounin.ru (Maxim Dounin) Date: Tue, 26 Dec 2017 16:03:55 +0000 Subject: [nginx] Updated OpenSSL used for win32 builds. Message-ID: details: http://hg.nginx.org/nginx/rev/c391f2e33000 branches: changeset: 7181:c391f2e33000 user: Maxim Dounin date: Tue Dec 26 17:48:49 2017 +0300 description: Updated OpenSSL used for win32 builds. diffstat: misc/GNUmakefile | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diffs (12 lines): diff --git a/misc/GNUmakefile b/misc/GNUmakefile --- a/misc/GNUmakefile +++ b/misc/GNUmakefile @@ -6,7 +6,7 @@ TEMP = tmp CC = cl OBJS = objs.msvc8 -OPENSSL = openssl-1.0.2m +OPENSSL = openssl-1.0.2n ZLIB = zlib-1.2.11 PCRE = pcre-8.41 From mdounin at mdounin.ru Tue Dec 26 16:03:56 2017 From: mdounin at mdounin.ru (Maxim Dounin) Date: Tue, 26 Dec 2017 16:03:56 +0000 Subject: [nginx] nginx-1.13.8-RELEASE Message-ID: details: http://hg.nginx.org/nginx/rev/20ca4bcff108 branches: changeset: 7182:20ca4bcff108 user: Maxim Dounin date: Tue Dec 26 19:01:11 2017 +0300 description: nginx-1.13.8-RELEASE diffstat: docs/xml/nginx/changes.xml | 106 +++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 106 insertions(+), 0 deletions(-) diffs (116 lines): diff --git a/docs/xml/nginx/changes.xml b/docs/xml/nginx/changes.xml --- a/docs/xml/nginx/changes.xml +++ b/docs/xml/nginx/changes.xml @@ -5,6 +5,112 @@ + + + + +?????? ??? ????????????? ????????? transparent ???????? proxy_bind, +fastcgi_bind, memcached_bind, scgi_bind ? uwsgi_bind +nginx ????????????? ????????? capability CAP_NET_RAW ? ??????? ?????????. + + +now nginx automatically preserves the CAP_NET_RAW capability in worker processes +when using the "transparent" parameter of the "proxy_bind", +"fastcgi_bind", "memcached_bind", "scgi_bind", and "uwsgi_bind" directives. + + + + + +????????? ? ??????????? ??????? ?????? ???? ??????????.
+??????? Debayan Ghosh. +
+ +improved CPU cache line size detection.
+Thanks to Debayan Ghosh. +
+
+ + + +????? ????????? ? ???????? ????????? ?????????? ??? vim.
+??????? ???????? ????????. +
+ +new directives in vim syntax highlighting scripts.
+Thanks to Gena Makhomed. +
+
+ + + +????????? ?????????? ???????????? ????? ?? ????????, +???? ????? ?????????? ????????????? ???????? +????? ???????????? ????????? nginx'? ?????????? ??????? ? PID, ???????? ?? 1. + + +binary upgrade refused to work +if nginx was re-parented to a process with PID different from 1 +after its parent process has finished. + + + + + +?????? ngx_http_autoindex_module ??????????? ??????????? ??????? ? ?????. + + +the ngx_http_autoindex_module incorrectly handled requests with bodies. + + + + + +? ????????? proxy_limit_rate ??? ????????????? ? ?????????? keepalive. + + +in the "proxy_limit_rate" directive when used with the "keepalive" directive. + + + + + +??? ????????????? "proxy_buffering off" ????? ?????? ????? ????????????????, +???? ?????????? ?????????? ???????????? SSL.
+??????? Patryk Lesiewicz. +
+ +some parts of a response might be buffered when using "proxy_buffering off" +if the client connection used SSL.
+Thanks to Patryk Lesiewicz. +
+
+ + + +? ????????? proxy_cache_background_update. + + +in the "proxy_cache_background_update" directive. + + + + + +?????????? ???? "${name}" ? ?????? ? ???????? ??????? +?????? ???? ???????????? ? ?????? ????????? +?? ???????? ???? ???????? ? ???????. + + +it was not possible to start a parameter +with a variable in the "${name}" form with the name in curly brackets +without enclosing the parameter into single or double quotes. + + + +
+ + From mdounin at mdounin.ru Tue Dec 26 16:03:58 2017 From: mdounin at mdounin.ru (Maxim Dounin) Date: Tue, 26 Dec 2017 16:03:58 +0000 Subject: [nginx] release-1.13.8 tag Message-ID: details: http://hg.nginx.org/nginx/rev/32dd4fc94fba branches: changeset: 7183:32dd4fc94fba user: Maxim Dounin date: Tue Dec 26 19:01:12 2017 +0300 description: release-1.13.8 tag diffstat: .hgtags | 1 + 1 files changed, 1 insertions(+), 0 deletions(-) diffs (8 lines): diff --git a/.hgtags b/.hgtags --- a/.hgtags +++ b/.hgtags @@ -420,3 +420,4 @@ bbc642c813c829963ce8197c0ca237ab7601f3d4 0d45b4cf7c2e4e626a5a16e1fe604402ace1cea5 release-1.13.5 f87da7d9ca02b8ced4caa6c5eb9013ccd47b0117 release-1.13.6 47cca243d0ed39bf5dcb9859184affc958b79b6f release-1.13.7 +20ca4bcff108d3e66977f4d97508637093492287 release-1.13.8 From aspel at ukr.net Wed Dec 27 10:45:45 2017 From: aspel at ukr.net (aspel at ukr.net) Date: Wed, 27 Dec 2017 12:45:45 +0200 Subject: [PATCH] Added additional parameter "r/h" (requests per hour) Message-ID: <1514371183.384379709.v8b8b0lc@frv53.fwdcdn.com> # HG changeset patch # User aspel # Date 1514370676 0 # ? ? ?Wed Dec 27 10:31:16 2017 +0000 # Node ID a24cb7e952ae4db04e133fa8f3ad7b51703e03d5 # Parent ?32dd4fc94fba998762aaec65652ad8d554052fc8 Added additional parameter "r/h" (requests per hour) This additional parameter will help protect a server from brute-force. In which thousands of IP addresses participate. diff -r 32dd4fc94fba -r a24cb7e952ae src/http/modules/ngx_http_limit_req_module.c --- a/src/http/modules/ngx_http_limit_req_module.c?Tue Dec 26 19:01:12 2017 +0300 +++ b/src/http/modules/ngx_http_limit_req_module.c?Wed Dec 27 10:31:16 2017 +0000 @@ -801,6 +801,10 @@ ? ? ? ? ? ? } else if (ngx_strncmp(p, "r/m", 3) == 0) { ? ? ? ? ? ? ? ? scale = 60; ? ? ? ? ? ? ? ? len -= 3; + ? ? ? ? ? ? + ? ? ? ? ? ?} else if (ngx_strncmp(p, "r/h", 3) == 0) { + ? ? ? ? ? ? ? ?scale = 3600; + ? ? ? ? ? ? ? ?len -= 3; ? ? ? ? ? ? } ? ? ? ? ? ? rate = ngx_atoi(value[i].data + 5, len - 5); Add to Phrasebook No wordlists for English -> Russian... Create a new wordlist... Copy Add to Phrasebook No wordlists for English -> Russian... Create a new wordlist... Copy Add to Phrasebook No wordlists for English -> Russian... Create a new wordlist... Copy -------------- next part -------------- An HTML attachment was scrubbed... URL: From mdounin at mdounin.ru Wed Dec 27 12:28:40 2017 From: mdounin at mdounin.ru (Maxim Dounin) Date: Wed, 27 Dec 2017 15:28:40 +0300 Subject: [PATCH] Added additional parameter "r/h" (requests per hour) In-Reply-To: <1514371183.384379709.v8b8b0lc@frv53.fwdcdn.com> References: <1514371183.384379709.v8b8b0lc@frv53.fwdcdn.com> Message-ID: <20171227122840.GI34136@mdounin.ru> Hello! On Wed, Dec 27, 2017 at 12:45:45PM +0200, aspel at ukr.net wrote: > # HG changeset patch > # User aspel > # Date 1514370676 0 > # ? ? ?Wed Dec 27 10:31:16 2017 +0000 > # Node ID a24cb7e952ae4db04e133fa8f3ad7b51703e03d5 > # Parent ?32dd4fc94fba998762aaec65652ad8d554052fc8 > Added additional parameter "r/h" (requests per hour) > > > This additional parameter will help protect a server from brute-force. > > In which thousands of IP addresses participate. > > > diff -r 32dd4fc94fba -r a24cb7e952ae src/http/modules/ngx_http_limit_req_module.c > --- a/src/http/modules/ngx_http_limit_req_module.c?Tue Dec 26 19:01:12 2017 +0300 > +++ b/src/http/modules/ngx_http_limit_req_module.c?Wed Dec 27 10:31:16 2017 +0000 > @@ -801,6 +801,10 @@ > ? ? ? ? ? ? } else if (ngx_strncmp(p, "r/m", 3) == 0) { > ? ? ? ? ? ? ? ? scale = 60; > ? ? ? ? ? ? ? ? len -= 3; > + ? ? ? ? ? ? > + ? ? ? ? ? ?} else if (ngx_strncmp(p, "r/h", 3) == 0) { > + ? ? ? ? ? ? ? ?scale = 3600; > + ? ? ? ? ? ? ? ?len -= 3; > ? ? ? ? ? ? } > > > ? ? ? ? ? ? rate = ngx_atoi(value[i].data + 5, len - 5); This won't work as scale is limited to 1000 by the storage granularity, see ctx->rate = rate * 1000 / scale; below in the same function. That is, rate=1r/h will actually mean zero rate. See also https://trac.nginx.org/nginx/ticket/68. -- Maxim Dounin http://mdounin.ru/ From gmm at csdoc.com Thu Dec 28 10:06:23 2017 From: gmm at csdoc.com (Gena Makhomed) Date: Thu, 28 Dec 2017 12:06:23 +0200 Subject: [PATCH 1 of 2] Contrib: vim syntax, update 3rd party module directives. Message-ID: <85dd7288-6a65-1f9d-a23a-3b216beeaefe@csdoc.com> # HG changeset patch # User Gena Makhomed # Date 1514454584 -7200 # Thu Dec 28 11:49:44 2017 +0200 # Node ID 215684d20d906135281b2540149d354b6e4bb852 # Parent 6939f75c4b139203d409517c4f0e35342a3e70cb Contrib: vim syntax, update 3rd party module directives. 3rd party modules list synchronized with FreeBSD nginx-devel port. diff -r 6939f75c4b13 -r 215684d20d90 contrib/vim/syntax/nginx.vim --- a/contrib/vim/syntax/nginx.vim Mon Dec 25 18:30:01 2017 +0200 +++ b/contrib/vim/syntax/nginx.vim Thu Dec 28 11:49:44 2017 +0200 @@ -683,529 +683,618 @@ syn keyword ngxDirective contained xslt_types syn keyword ngxDirective contained zone -" 3rd party module list: -" https://www.nginx.com/resources/wiki/modules/ +" 3rd party modules list taken from +" https://github.com/freebsd/freebsd-ports/blob/master/www/nginx-devel/Makefile +" ----------------------------------------------------------------------------- -" Accept Language Module -" Parses the Accept-Language header and gives the most suitable locale from a list of supported locales. +" Accept Language +" https://github.com/giom/nginx_accept_language_module syn keyword ngxDirectiveThirdParty contained set_from_accept_language -" Access Key Module (DEPRECATED) -" Denies access unless the request URL contains an access key. -syn keyword ngxDirectiveDeprecated contained accesskey -syn keyword ngxDirectiveDeprecated contained accesskey_arg -syn keyword ngxDirectiveDeprecated contained accesskey_hashmethod -syn keyword ngxDirectiveDeprecated contained accesskey_signature +" Digest Authentication +" https://github.com/atomx/nginx-http-auth-digest +syn keyword ngxDirectiveThirdParty contained auth_digest +syn keyword ngxDirectiveThirdParty contained auth_digest_drop_time +syn keyword ngxDirectiveThirdParty contained auth_digest_evasion_time +syn keyword ngxDirectiveThirdParty contained auth_digest_expires +syn keyword ngxDirectiveThirdParty contained auth_digest_maxtries +syn keyword ngxDirectiveThirdParty contained auth_digest_replays +syn keyword ngxDirectiveThirdParty contained auth_digest_shm_size +syn keyword ngxDirectiveThirdParty contained auth_digest_timeout +syn keyword ngxDirectiveThirdParty contained auth_digest_user_file -" Asynchronous FastCGI Module -" Primarily a modified version of the Nginx FastCGI module which implements multiplexing of connections, allowing a single FastCGI server to handle many concurrent requests. -" syn keyword ngxDirectiveThirdParty contained fastcgi_bind -" syn keyword ngxDirectiveThirdParty contained fastcgi_buffer_size -" syn keyword ngxDirectiveThirdParty contained fastcgi_buffers -" syn keyword ngxDirectiveThirdParty contained fastcgi_busy_buffers_size -" syn keyword ngxDirectiveThirdParty contained fastcgi_cache -" syn keyword ngxDirectiveThirdParty contained fastcgi_cache_key -" syn keyword ngxDirectiveThirdParty contained fastcgi_cache_methods -" syn keyword ngxDirectiveThirdParty contained fastcgi_cache_min_uses -" syn keyword ngxDirectiveThirdParty contained fastcgi_cache_path -" syn keyword ngxDirectiveThirdParty contained fastcgi_cache_use_stale -" syn keyword ngxDirectiveThirdParty contained fastcgi_cache_valid -" syn keyword ngxDirectiveThirdParty contained fastcgi_catch_stderr -" syn keyword ngxDirectiveThirdParty contained fastcgi_connect_timeout -" syn keyword ngxDirectiveThirdParty contained fastcgi_hide_header -" syn keyword ngxDirectiveThirdParty contained fastcgi_ignore_client_abort -" syn keyword ngxDirectiveThirdParty contained fastcgi_ignore_headers -" syn keyword ngxDirectiveThirdParty contained fastcgi_index -" syn keyword ngxDirectiveThirdParty contained fastcgi_intercept_errors -" syn keyword ngxDirectiveThirdParty contained fastcgi_max_temp_file_size -" syn keyword ngxDirectiveThirdParty contained fastcgi_next_upstream -" syn keyword ngxDirectiveThirdParty contained fastcgi_param -" syn keyword ngxDirectiveThirdParty contained fastcgi_pass -" syn keyword ngxDirectiveThirdParty contained fastcgi_pass_header -" syn keyword ngxDirectiveThirdParty contained fastcgi_pass_request_body -" syn keyword ngxDirectiveThirdParty contained fastcgi_pass_request_headers -" syn keyword ngxDirectiveThirdParty contained fastcgi_read_timeout -" syn keyword ngxDirectiveThirdParty contained fastcgi_send_lowat -" syn keyword ngxDirectiveThirdParty contained fastcgi_send_timeout -" syn keyword ngxDirectiveThirdParty contained fastcgi_split_path_info -" syn keyword ngxDirectiveThirdParty contained fastcgi_store -" syn keyword ngxDirectiveThirdParty contained fastcgi_store_access -" syn keyword ngxDirectiveThirdParty contained fastcgi_temp_file_write_size -" syn keyword ngxDirectiveThirdParty contained fastcgi_temp_path -syn keyword ngxDirectiveDeprecated contained fastcgi_upstream_fail_timeout -syn keyword ngxDirectiveDeprecated contained fastcgi_upstream_max_fails +" SPNEGO Authentication +" https://github.com/stnoonan/spnego-http-auth-nginx-module +syn keyword ngxDirectiveThirdParty contained auth_gss +syn keyword ngxDirectiveThirdParty contained auth_gss_allow_basic_fallback +syn keyword ngxDirectiveThirdParty contained auth_gss_authorized_principal +syn keyword ngxDirectiveThirdParty contained auth_gss_force_realm +syn keyword ngxDirectiveThirdParty contained auth_gss_format_full +syn keyword ngxDirectiveThirdParty contained auth_gss_keytab +syn keyword ngxDirectiveThirdParty contained auth_gss_realm +syn keyword ngxDirectiveThirdParty contained auth_gss_service_name -" Akamai G2O Module -" Nginx Module for Authenticating Akamai G2O requests -syn keyword ngxDirectiveThirdParty contained g2o -syn keyword ngxDirectiveThirdParty contained g2o_nonce -syn keyword ngxDirectiveThirdParty contained g2o_key +" LDAP Authentication +" https://github.com/kvspb/nginx-auth-ldap +syn keyword ngxDirectiveThirdParty contained auth_ldap +syn keyword ngxDirectiveThirdParty contained auth_ldap_cache_enabled +syn keyword ngxDirectiveThirdParty contained auth_ldap_cache_expiration_time +syn keyword ngxDirectiveThirdParty contained auth_ldap_cache_size +syn keyword ngxDirectiveThirdParty contained auth_ldap_servers +syn keyword ngxDirectiveThirdParty contained auth_ldap_servers_size +syn keyword ngxDirectiveThirdParty contained ldap_server -" Lua Module -" You can be very simple to execute lua code for nginx -syn keyword ngxDirectiveThirdParty contained lua_file +" PAM Authentication +" https://github.com/sto/ngx_http_auth_pam_module +syn keyword ngxDirectiveThirdParty contained auth_pam +syn keyword ngxDirectiveThirdParty contained auth_pam_service_name +syn keyword ngxDirectiveThirdParty contained auth_pam_set_pam_env -" Array Variable Module -" Add support for array-typed variables to nginx config files -syn keyword ngxDirectiveThirdParty contained array_split -syn keyword ngxDirectiveThirdParty contained array_join -syn keyword ngxDirectiveThirdParty contained array_map -syn keyword ngxDirectiveThirdParty contained array_map_op +" AJP protocol proxy +" https://github.com/yaoweibin/nginx_ajp_module +syn keyword ngxDirectiveThirdParty contained ajp_buffer_size +syn keyword ngxDirectiveThirdParty contained ajp_buffers +syn keyword ngxDirectiveThirdParty contained ajp_busy_buffers_size +syn keyword ngxDirectiveThirdParty contained ajp_cache +syn keyword ngxDirectiveThirdParty contained ajp_cache_key +syn keyword ngxDirectiveThirdParty contained ajp_cache_lock +syn keyword ngxDirectiveThirdParty contained ajp_cache_lock_timeout +syn keyword ngxDirectiveThirdParty contained ajp_cache_methods +syn keyword ngxDirectiveThirdParty contained ajp_cache_min_uses +syn keyword ngxDirectiveThirdParty contained ajp_cache_path +syn keyword ngxDirectiveThirdParty contained ajp_cache_use_stale +syn keyword ngxDirectiveThirdParty contained ajp_cache_valid +syn keyword ngxDirectiveThirdParty contained ajp_connect_timeout +syn keyword ngxDirectiveThirdParty contained ajp_header_packet_buffer_size +syn keyword ngxDirectiveThirdParty contained ajp_hide_header +syn keyword ngxDirectiveThirdParty contained ajp_ignore_client_abort +syn keyword ngxDirectiveThirdParty contained ajp_ignore_headers +syn keyword ngxDirectiveThirdParty contained ajp_intercept_errors +syn keyword ngxDirectiveThirdParty contained ajp_keep_conn +syn keyword ngxDirectiveThirdParty contained ajp_max_data_packet_size +syn keyword ngxDirectiveThirdParty contained ajp_max_temp_file_size +syn keyword ngxDirectiveThirdParty contained ajp_next_upstream +syn keyword ngxDirectiveThirdParty contained ajp_pass +syn keyword ngxDirectiveThirdParty contained ajp_pass_header +syn keyword ngxDirectiveThirdParty contained ajp_pass_request_body +syn keyword ngxDirectiveThirdParty contained ajp_pass_request_headers +syn keyword ngxDirectiveThirdParty contained ajp_read_timeout +syn keyword ngxDirectiveThirdParty contained ajp_send_lowat +syn keyword ngxDirectiveThirdParty contained ajp_send_timeout +syn keyword ngxDirectiveThirdParty contained ajp_store +syn keyword ngxDirectiveThirdParty contained ajp_store_access +syn keyword ngxDirectiveThirdParty contained ajp_temp_file_write_size +syn keyword ngxDirectiveThirdParty contained ajp_temp_path +syn keyword ngxDirectiveThirdParty contained ajp_upstream_fail_timeout +syn keyword ngxDirectiveThirdParty contained ajp_upstream_max_fails -" Nginx Audio Track for HTTP Live Streaming -" This nginx module generates audio track for hls streams on the fly. -syn keyword ngxDirectiveThirdParty contained ngx_hls_audio_track -syn keyword ngxDirectiveThirdParty contained ngx_hls_audio_track_rootpath -syn keyword ngxDirectiveThirdParty contained ngx_hls_audio_track_output_format -syn keyword ngxDirectiveThirdParty contained ngx_hls_audio_track_output_header - -" AWS Proxy Module -" Nginx module to proxy to authenticated AWS services +" AWS proxy +" https://github.com/anomalizer/ngx_aws_auth syn keyword ngxDirectiveThirdParty contained aws_access_key +syn keyword ngxDirectiveThirdParty contained aws_endpoint syn keyword ngxDirectiveThirdParty contained aws_key_scope -syn keyword ngxDirectiveThirdParty contained aws_signing_key -syn keyword ngxDirectiveThirdParty contained aws_endpoint syn keyword ngxDirectiveThirdParty contained aws_s3_bucket syn keyword ngxDirectiveThirdParty contained aws_sign +syn keyword ngxDirectiveThirdParty contained aws_signing_key -" Backtrace module -" A Nginx module to dump backtrace when a worker process exits abnormally -syn keyword ngxDirectiveThirdParty contained backtrace_log -syn keyword ngxDirectiveThirdParty contained backtrace_max_stack_size - -" Brotli Module -" Nginx module for Brotli compression -syn keyword ngxDirectiveThirdParty contained brotli_static -syn keyword ngxDirectiveThirdParty contained brotli -syn keyword ngxDirectiveThirdParty contained brotli_types -syn keyword ngxDirectiveThirdParty contained brotli_buffers -syn keyword ngxDirectiveThirdParty contained brotli_comp_level -syn keyword ngxDirectiveThirdParty contained brotli_window -syn keyword ngxDirectiveThirdParty contained brotli_min_length - -" Cache Purge Module -" Adds ability to purge content from FastCGI, proxy, SCGI and uWSGI caches. -syn keyword ngxDirectiveThirdParty contained fastcgi_cache_purge -syn keyword ngxDirectiveThirdParty contained proxy_cache_purge -" syn keyword ngxDirectiveThirdParty contained scgi_cache_purge -" syn keyword ngxDirectiveThirdParty contained uwsgi_cache_purge - -" Chunkin Module (DEPRECATED) -" HTTP 1.1 chunked-encoding request body support for Nginx. -syn keyword ngxDirectiveDeprecated contained chunkin -syn keyword ngxDirectiveDeprecated contained chunkin_keepalive -syn keyword ngxDirectiveDeprecated contained chunkin_max_chunks_per_buf -syn keyword ngxDirectiveDeprecated contained chunkin_resume - -" Circle GIF Module -" Generates simple circle images with the colors and size specified in the URL. -syn keyword ngxDirectiveThirdParty contained circle_gif -syn keyword ngxDirectiveThirdParty contained circle_gif_max_radius -syn keyword ngxDirectiveThirdParty contained circle_gif_min_radius -syn keyword ngxDirectiveThirdParty contained circle_gif_step_radius - -" Nginx-Clojure Module -" Parses the Accept-Language header and gives the most suitable locale from a list of supported locales. +" embedding Clojure or Java or Groovy programs +" https://github.com/nginx-clojure/nginx-clojure +syn keyword ngxDirectiveThirdParty contained access_handler_code +syn keyword ngxDirectiveThirdParty contained access_handler_name +syn keyword ngxDirectiveThirdParty contained access_handler_property +syn keyword ngxDirectiveThirdParty contained access_handler_type +syn keyword ngxDirectiveThirdParty contained always_read_body +syn keyword ngxDirectiveThirdParty contained auto_upgrade_ws +syn keyword ngxDirectiveThirdParty contained body_filter_code +syn keyword ngxDirectiveThirdParty contained body_filter_name +syn keyword ngxDirectiveThirdParty contained body_filter_property +syn keyword ngxDirectiveThirdParty contained body_filter_type +syn keyword ngxDirectiveThirdParty contained content_handler_code +syn keyword ngxDirectiveThirdParty contained content_handler_name +syn keyword ngxDirectiveThirdParty contained content_handler_property +syn keyword ngxDirectiveThirdParty contained content_handler_type +syn keyword ngxDirectiveThirdParty contained handler_code +syn keyword ngxDirectiveThirdParty contained handler_name +syn keyword ngxDirectiveThirdParty contained handler_type +syn keyword ngxDirectiveThirdParty contained handlers_lazy_init +syn keyword ngxDirectiveThirdParty contained header_filter_code +syn keyword ngxDirectiveThirdParty contained header_filter_name +syn keyword ngxDirectiveThirdParty contained header_filter_property +syn keyword ngxDirectiveThirdParty contained header_filter_type +syn keyword ngxDirectiveThirdParty contained jvm_classpath +syn keyword ngxDirectiveThirdParty contained jvm_classpath_check +syn keyword ngxDirectiveThirdParty contained jvm_exit_handler_code +syn keyword ngxDirectiveThirdParty contained jvm_exit_handler_name +syn keyword ngxDirectiveThirdParty contained jvm_handler_type +syn keyword ngxDirectiveThirdParty contained jvm_init_handler_code +syn keyword ngxDirectiveThirdParty contained jvm_init_handler_name +syn keyword ngxDirectiveThirdParty contained jvm_options syn keyword ngxDirectiveThirdParty contained jvm_path syn keyword ngxDirectiveThirdParty contained jvm_var -syn keyword ngxDirectiveThirdParty contained jvm_classpath -syn keyword ngxDirectiveThirdParty contained jvm_classpath_check syn keyword ngxDirectiveThirdParty contained jvm_workers -syn keyword ngxDirectiveThirdParty contained jvm_options -syn keyword ngxDirectiveThirdParty contained jvm_handler_type -syn keyword ngxDirectiveThirdParty contained jvm_init_handler_name -syn keyword ngxDirectiveThirdParty contained jvm_init_handler_code -syn keyword ngxDirectiveThirdParty contained jvm_exit_handler_name -syn keyword ngxDirectiveThirdParty contained jvm_exit_handler_code -syn keyword ngxDirectiveThirdParty contained handlers_lazy_init -syn keyword ngxDirectiveThirdParty contained auto_upgrade_ws -syn keyword ngxDirectiveThirdParty contained content_handler_type -syn keyword ngxDirectiveThirdParty contained content_handler_name -syn keyword ngxDirectiveThirdParty contained content_handler_code +syn keyword ngxDirectiveThirdParty contained max_balanced_tcp_connections +syn keyword ngxDirectiveThirdParty contained rewrite_handler_code +syn keyword ngxDirectiveThirdParty contained rewrite_handler_name +syn keyword ngxDirectiveThirdParty contained rewrite_handler_property syn keyword ngxDirectiveThirdParty contained rewrite_handler_type -syn keyword ngxDirectiveThirdParty contained rewrite_handler_name -syn keyword ngxDirectiveThirdParty contained rewrite_handler_code -syn keyword ngxDirectiveThirdParty contained access_handler_type -syn keyword ngxDirectiveThirdParty contained access_handler_name -syn keyword ngxDirectiveThirdParty contained access_handler_code -syn keyword ngxDirectiveThirdParty contained header_filter_type -syn keyword ngxDirectiveThirdParty contained header_filter_name -syn keyword ngxDirectiveThirdParty contained header_filter_code -syn keyword ngxDirectiveThirdParty contained content_handler_property -syn keyword ngxDirectiveThirdParty contained rewrite_handler_property -syn keyword ngxDirectiveThirdParty contained access_handler_property -syn keyword ngxDirectiveThirdParty contained header_filter_property -syn keyword ngxDirectiveThirdParty contained always_read_body syn keyword ngxDirectiveThirdParty contained shared_map syn keyword ngxDirectiveThirdParty contained write_page_size -" Upstream Consistent Hash -" A load balancer that uses an internal consistent hash ring to select the right backend node. -syn keyword ngxDirectiveThirdParty contained consistent_hash +" Certificate Transparency +" https://github.com/grahamedgecombe/nginx-ct +syn keyword ngxDirectiveThirdParty contained ssl_ct +syn keyword ngxDirectiveThirdParty contained ssl_ct_static_scts -" Nginx Development Kit -" The NDK is an Nginx module that is designed to extend the core functionality of the excellent Nginx webserver in a way that can be used as a basis of other Nginx modules. -" NDK_UPSTREAM_LIST -" This submodule provides a directive that creates a list of upstreams, with optional weighting. This list can then be used by other modules to hash over the upstreams however they choose. -syn keyword ngxDirectiveThirdParty contained upstream_list +" ngx_echo +" https://github.com/openresty/echo-nginx-module +syn keyword ngxDirectiveThirdParty contained echo_abort_parent +syn keyword ngxDirectiveThirdParty contained echo_after_body +syn keyword ngxDirectiveThirdParty contained echo_before_body +syn keyword ngxDirectiveThirdParty contained echo_blocking_sleep +syn keyword ngxDirectiveThirdParty contained echo_end +syn keyword ngxDirectiveThirdParty contained echo_exec +syn keyword ngxDirectiveThirdParty contained echo_flush +syn keyword ngxDirectiveThirdParty contained echo_foreach_split +syn keyword ngxDirectiveThirdParty contained echo_location +syn keyword ngxDirectiveThirdParty contained echo_location_async +syn keyword ngxDirectiveThirdParty contained echo_read_request_body +syn keyword ngxDirectiveThirdParty contained echo_request_body +syn keyword ngxDirectiveThirdParty contained echo_reset_timer +syn keyword ngxDirectiveThirdParty contained echo_status +syn keyword ngxDirectiveThirdParty contained echo_subrequest +syn keyword ngxDirectiveThirdParty contained echo_subrequest_async -" Drizzle Module -" Upstream module for talking to MySQL and Drizzle directly -syn keyword ngxDirectiveThirdParty contained drizzle_server -syn keyword ngxDirectiveThirdParty contained drizzle_keepalive -syn keyword ngxDirectiveThirdParty contained drizzle_query -syn keyword ngxDirectiveThirdParty contained drizzle_pass -syn keyword ngxDirectiveThirdParty contained drizzle_connect_timeout -syn keyword ngxDirectiveThirdParty contained drizzle_send_query_timeout -syn keyword ngxDirectiveThirdParty contained drizzle_recv_cols_timeout -syn keyword ngxDirectiveThirdParty contained drizzle_recv_rows_timeout -syn keyword ngxDirectiveThirdParty contained drizzle_buffer_size -syn keyword ngxDirectiveThirdParty contained drizzle_module_header -syn keyword ngxDirectiveThirdParty contained drizzle_status +" FastDFS +" https://github.com/happyfish100/fastdfs-nginx-module +syn keyword ngxDirectiveThirdParty contained ngx_fastdfs_module -" Dynamic ETags Module -" Attempt at handling ETag / If-None-Match on proxied content. -syn keyword ngxDirectiveThirdParty contained dynamic_etags - -" Echo Module -" Bringing the power of "echo", "sleep", "time" and more to Nginx's config file -syn keyword ngxDirectiveThirdParty contained echo -syn keyword ngxDirectiveThirdParty contained echo_duplicate -syn keyword ngxDirectiveThirdParty contained echo_flush -syn keyword ngxDirectiveThirdParty contained echo_sleep -syn keyword ngxDirectiveThirdParty contained echo_blocking_sleep -syn keyword ngxDirectiveThirdParty contained echo_reset_timer -syn keyword ngxDirectiveThirdParty contained echo_read_request_body -syn keyword ngxDirectiveThirdParty contained echo_location_async -syn keyword ngxDirectiveThirdParty contained echo_location -syn keyword ngxDirectiveThirdParty contained echo_subrequest_async -syn keyword ngxDirectiveThirdParty contained echo_subrequest -syn keyword ngxDirectiveThirdParty contained echo_foreach_split -syn keyword ngxDirectiveThirdParty contained echo_end -syn keyword ngxDirectiveThirdParty contained echo_request_body -syn keyword ngxDirectiveThirdParty contained echo_exec -syn keyword ngxDirectiveThirdParty contained echo_status -syn keyword ngxDirectiveThirdParty contained echo_before_body -syn keyword ngxDirectiveThirdParty contained echo_after_body - -" Encrypted Session Module -" Encrypt and decrypt nginx variable values -syn keyword ngxDirectiveThirdParty contained encrypted_session_key -syn keyword ngxDirectiveThirdParty contained encrypted_session_iv -syn keyword ngxDirectiveThirdParty contained encrypted_session_expires -syn keyword ngxDirectiveThirdParty contained set_encrypt_session -syn keyword ngxDirectiveThirdParty contained set_decrypt_session - -" Enhanced Memcached Module -" This module is based on the standard Nginx Memcached module, with some additonal features -syn keyword ngxDirectiveThirdParty contained enhanced_memcached_pass -syn keyword ngxDirectiveThirdParty contained enhanced_memcached_hash_keys_with_md5 -syn keyword ngxDirectiveThirdParty contained enhanced_memcached_allow_put -syn keyword ngxDirectiveThirdParty contained enhanced_memcached_allow_delete -syn keyword ngxDirectiveThirdParty contained enhanced_memcached_stats -syn keyword ngxDirectiveThirdParty contained enhanced_memcached_flush -syn keyword ngxDirectiveThirdParty contained enhanced_memcached_flush_namespace -syn keyword ngxDirectiveThirdParty contained enhanced_memcached_bind -syn keyword ngxDirectiveThirdParty contained enhanced_memcached_connect_timeout -syn keyword ngxDirectiveThirdParty contained enhanced_memcached_send_timeout -syn keyword ngxDirectiveThirdParty contained enhanced_memcached_buffer_size -syn keyword ngxDirectiveThirdParty contained enhanced_memcached_read_timeout - -" Events Module (DEPRECATED) -" Provides options for start/stop events. -syn keyword ngxDirectiveDeprecated contained on_start -syn keyword ngxDirectiveDeprecated contained on_stop - -" EY Balancer Module -" Adds a request queue to Nginx that allows the limiting of concurrent requests passed to the upstream. -syn keyword ngxDirectiveThirdParty contained max_connections -syn keyword ngxDirectiveThirdParty contained max_connections_max_queue_length -syn keyword ngxDirectiveThirdParty contained max_connections_queue_timeout - -" Upstream Fair Balancer -" Sends an incoming request to the least-busy backend server, rather than distributing requests round-robin. -syn keyword ngxDirectiveThirdParty contained fair -syn keyword ngxDirectiveThirdParty contained upstream_fair_shm_size - -" Fancy Indexes Module -" Like the built-in autoindex module, but fancier. -syn keyword ngxDirectiveThirdParty contained fancyindex -syn keyword ngxDirectiveThirdParty contained fancyindex_default_sort -syn keyword ngxDirectiveThirdParty contained fancyindex_directories_first -syn keyword ngxDirectiveThirdParty contained fancyindex_css_href -syn keyword ngxDirectiveThirdParty contained fancyindex_exact_size -syn keyword ngxDirectiveThirdParty contained fancyindex_name_length -syn keyword ngxDirectiveThirdParty contained fancyindex_footer -syn keyword ngxDirectiveThirdParty contained fancyindex_header -syn keyword ngxDirectiveThirdParty contained fancyindex_show_path -syn keyword ngxDirectiveThirdParty contained fancyindex_ignore -syn keyword ngxDirectiveThirdParty contained fancyindex_hide_symlinks -syn keyword ngxDirectiveThirdParty contained fancyindex_localtime -syn keyword ngxDirectiveThirdParty contained fancyindex_time_format - -" Form Auth Module -" Provides authentication and authorization with credentials submitted via POST request -syn keyword ngxDirectiveThirdParty contained form_auth -syn keyword ngxDirectiveThirdParty contained form_auth_pam_service -syn keyword ngxDirectiveThirdParty contained form_auth_login -syn keyword ngxDirectiveThirdParty contained form_auth_password -syn keyword ngxDirectiveThirdParty contained form_auth_remote_user - -" Form Input Module -" Reads HTTP POST and PUT request body encoded in "application/x-www-form-urlencoded" and parses the arguments into nginx variables. -syn keyword ngxDirectiveThirdParty contained set_form_input -syn keyword ngxDirectiveThirdParty contained set_form_input_multi - -" GeoIP Module (DEPRECATED) -" Country code lookups via the MaxMind GeoIP API. -syn keyword ngxDirectiveDeprecated contained geoip_country_file - -" GeoIP 2 Module -" Creates variables with values from the maxmind geoip2 databases based on the client IP -syn keyword ngxDirectiveThirdParty contained geoip2 - -" GridFS Module -" Nginx module for serving files from MongoDB's GridFS -syn keyword ngxDirectiveThirdParty contained gridfs - -" Headers More Module -" Set and clear input and output headers...more than "add"! +" ngx_headers_more +" https://github.com/openresty/headers-more-nginx-module syn keyword ngxDirectiveThirdParty contained more_clear_headers syn keyword ngxDirectiveThirdParty contained more_clear_input_headers syn keyword ngxDirectiveThirdParty contained more_set_headers syn keyword ngxDirectiveThirdParty contained more_set_input_headers -" Health Checks Upstreams Module -" Polls backends and if they respond with HTTP 200 + an optional request body, they are marked good. Otherwise, they are marked bad. -syn keyword ngxDirectiveThirdParty contained healthcheck_enabled -syn keyword ngxDirectiveThirdParty contained healthcheck_delay -syn keyword ngxDirectiveThirdParty contained healthcheck_timeout -syn keyword ngxDirectiveThirdParty contained healthcheck_failcount -syn keyword ngxDirectiveThirdParty contained healthcheck_send -syn keyword ngxDirectiveThirdParty contained healthcheck_expected -syn keyword ngxDirectiveThirdParty contained healthcheck_buffer -syn keyword ngxDirectiveThirdParty contained healthcheck_status +" NGINX WebDAV missing commands support (PROPFIND & OPTIONS) +" https://github.com/arut/nginx-dav-ext-module +syn keyword ngxDirectiveThirdParty contained dav_ext_methods -" HTTP Accounting Module -" Add traffic stat function to nginx. Useful for http accounting based on nginx configuration logic -syn keyword ngxDirectiveThirdParty contained http_accounting -syn keyword ngxDirectiveThirdParty contained http_accounting_log -syn keyword ngxDirectiveThirdParty contained http_accounting_id -syn keyword ngxDirectiveThirdParty contained http_accounting_interval -syn keyword ngxDirectiveThirdParty contained http_accounting_perturb +" ngx_eval +" https://github.com/openresty/nginx-eval-module +syn keyword ngxDirectiveThirdParty contained eval +syn keyword ngxDirectiveThirdParty contained eval_buffer_size +syn keyword ngxDirectiveThirdParty contained eval_escalate +syn keyword ngxDirectiveThirdParty contained eval_override_content_type +syn keyword ngxDirectiveThirdParty contained eval_subrequest_in_memory -" Nginx Digest Authentication module -" Digest Authentication for Nginx -syn keyword ngxDirectiveThirdParty contained auth_digest -syn keyword ngxDirectiveThirdParty contained auth_digest_user_file -syn keyword ngxDirectiveThirdParty contained auth_digest_timeout -syn keyword ngxDirectiveThirdParty contained auth_digest_expires -syn keyword ngxDirectiveThirdParty contained auth_digest_replays -syn keyword ngxDirectiveThirdParty contained auth_digest_shm_size +" Fancy Index +" https://github.com/aperezdc/ngx-fancyindex +syn keyword ngxDirectiveThirdParty contained fancyindex +syn keyword ngxDirectiveThirdParty contained fancyindex_css_href +syn keyword ngxDirectiveThirdParty contained fancyindex_default_sort +syn keyword ngxDirectiveThirdParty contained fancyindex_directories_first +syn keyword ngxDirectiveThirdParty contained fancyindex_exact_size +syn keyword ngxDirectiveThirdParty contained fancyindex_footer +syn keyword ngxDirectiveThirdParty contained fancyindex_header +syn keyword ngxDirectiveThirdParty contained fancyindex_hide_symlinks +syn keyword ngxDirectiveThirdParty contained fancyindex_ignore +syn keyword ngxDirectiveThirdParty contained fancyindex_localtime +syn keyword ngxDirectiveThirdParty contained fancyindex_name_length +syn keyword ngxDirectiveThirdParty contained fancyindex_show_path +syn keyword ngxDirectiveThirdParty contained fancyindex_time_format -" Auth PAM Module -" HTTP Basic Authentication using PAM. -syn keyword ngxDirectiveThirdParty contained auth_pam -syn keyword ngxDirectiveThirdParty contained auth_pam_service_name - -" HTTP Auth Request Module -" Implements client authorization based on the result of a subrequest -" syn keyword ngxDirectiveThirdParty contained auth_request -" syn keyword ngxDirectiveThirdParty contained auth_request_set - -" HTTP Concatenation module for Nginx -" A Nginx module for concatenating files in a given context: CSS and JS files usually -syn keyword ngxDirectiveThirdParty contained concat -syn keyword ngxDirectiveThirdParty contained concat_types -syn keyword ngxDirectiveThirdParty contained concat_unique -syn keyword ngxDirectiveThirdParty contained concat_max_files -syn keyword ngxDirectiveThirdParty contained concat_delimiter -syn keyword ngxDirectiveThirdParty contained concat_ignore_file_error - -" HTTP Dynamic Upstream Module -" Update upstreams' config by restful interface -syn keyword ngxDirectiveThirdParty contained dyups_interface -syn keyword ngxDirectiveThirdParty contained dyups_read_msg_timeout -syn keyword ngxDirectiveThirdParty contained dyups_shm_zone_size -syn keyword ngxDirectiveThirdParty contained dyups_upstream_conf -syn keyword ngxDirectiveThirdParty contained dyups_trylock - -" HTTP Footer If Filter Module -" The ngx_http_footer_if_filter_module is used to add given content to the end of the response according to the condition specified. -syn keyword ngxDirectiveThirdParty contained footer_if - -" HTTP Footer Filter Module -" This module implements a body filter that adds a given string to the page footer. +" Footer filter +" https://github.com/alibaba/nginx-http-footer-filter syn keyword ngxDirectiveThirdParty contained footer syn keyword ngxDirectiveThirdParty contained footer_types -" HTTP Internal Redirect Module -" Make an internal redirect to the uri specified according to the condition specified. -syn keyword ngxDirectiveThirdParty contained internal_redirect_if -syn keyword ngxDirectiveThirdParty contained internal_redirect_if_no_postponed +" ngx_http_geoip2_module +" https://github.com/leev/ngx_http_geoip2_module +syn keyword ngxDirectiveThirdParty contained geoip2 +syn keyword ngxDirectiveThirdParty contained geoip2_proxy +syn keyword ngxDirectiveThirdParty contained geoip2_proxy_recursive -" HTTP JavaScript Module -" Embedding SpiderMonkey. Nearly full port on Perl module. -syn keyword ngxDirectiveThirdParty contained js -syn keyword ngxDirectiveThirdParty contained js_filter -syn keyword ngxDirectiveThirdParty contained js_filter_types -syn keyword ngxDirectiveThirdParty contained js_load -syn keyword ngxDirectiveThirdParty contained js_maxmem -syn keyword ngxDirectiveThirdParty contained js_require -syn keyword ngxDirectiveThirdParty contained js_set -syn keyword ngxDirectiveThirdParty contained js_utf8 +" A version of the Nginx HTTP stub status module that outputs in JSON format +" https://github.com/nginx-modules/nginx-json-status-module +syn keyword ngxDirectiveThirdParty contained json_status +syn keyword ngxDirectiveThirdParty contained json_status_type -" HTTP Push Module (DEPRECATED) -" Turn Nginx into an adept long-polling HTTP Push (Comet) server. -syn keyword ngxDirectiveDeprecated contained push_buffer_size -syn keyword ngxDirectiveDeprecated contained push_listener -syn keyword ngxDirectiveDeprecated contained push_message_timeout -syn keyword ngxDirectiveDeprecated contained push_queue_messages -syn keyword ngxDirectiveDeprecated contained push_sender +" MogileFS client for nginx +" https://github.com/vkholodkov/nginx-mogilefs-module +syn keyword ngxDirectiveThirdParty contained mogilefs_class +syn keyword ngxDirectiveThirdParty contained mogilefs_connect_timeout +syn keyword ngxDirectiveThirdParty contained mogilefs_domain +syn keyword ngxDirectiveThirdParty contained mogilefs_methods +syn keyword ngxDirectiveThirdParty contained mogilefs_noverify +syn keyword ngxDirectiveThirdParty contained mogilefs_pass +syn keyword ngxDirectiveThirdParty contained mogilefs_read_timeout +syn keyword ngxDirectiveThirdParty contained mogilefs_send_timeout +syn keyword ngxDirectiveThirdParty contained mogilefs_tracker -" HTTP Redis Module -" Redis support. +" Ancient nginx plugin; probably not useful to anyone +" https://github.com/kr/nginx-notice +syn keyword ngxDirectiveThirdParty contained notice +syn keyword ngxDirectiveThirdParty contained notice_type + +" nchan +" https://github.com/slact/nchan +syn keyword ngxDirectiveThirdParty contained nchan_access_control_allow_origin +syn keyword ngxDirectiveThirdParty contained nchan_authorize_request +syn keyword ngxDirectiveThirdParty contained nchan_channel_event_string +syn keyword ngxDirectiveThirdParty contained nchan_channel_events_channel_id +syn keyword ngxDirectiveThirdParty contained nchan_channel_group +syn keyword ngxDirectiveThirdParty contained nchan_channel_group_accounting +syn keyword ngxDirectiveThirdParty contained nchan_channel_id +syn keyword ngxDirectiveThirdParty contained nchan_channel_id_split_delimiter +syn keyword ngxDirectiveThirdParty contained nchan_channel_timeout +syn keyword ngxDirectiveThirdParty contained nchan_deflate_message_for_websocket +syn keyword ngxDirectiveThirdParty contained nchan_eventsource_event +syn keyword ngxDirectiveThirdParty contained nchan_group_location +syn keyword ngxDirectiveThirdParty contained nchan_group_max_channels +syn keyword ngxDirectiveThirdParty contained nchan_group_max_messages +syn keyword ngxDirectiveThirdParty contained nchan_group_max_messages_disk +syn keyword ngxDirectiveThirdParty contained nchan_group_max_messages_memory +syn keyword ngxDirectiveThirdParty contained nchan_group_max_subscribers +syn keyword ngxDirectiveThirdParty contained nchan_longpoll_multipart_response +syn keyword ngxDirectiveThirdParty contained nchan_max_channel_id_length +syn keyword ngxDirectiveThirdParty contained nchan_max_channel_subscribers +syn keyword ngxDirectiveThirdParty contained nchan_max_reserved_memory +syn keyword ngxDirectiveThirdParty contained nchan_message_buffer_length +syn keyword ngxDirectiveThirdParty contained nchan_message_max_buffer_length +syn keyword ngxDirectiveThirdParty contained nchan_message_temp_path +syn keyword ngxDirectiveThirdParty contained nchan_message_timeout +syn keyword ngxDirectiveThirdParty contained nchan_permessage_deflate_compression_level +syn keyword ngxDirectiveThirdParty contained nchan_permessage_deflate_compression_memlevel +syn keyword ngxDirectiveThirdParty contained nchan_permessage_deflate_compression_strategy +syn keyword ngxDirectiveThirdParty contained nchan_permessage_deflate_compression_window +syn keyword ngxDirectiveThirdParty contained nchan_pub_channel_id +syn keyword ngxDirectiveThirdParty contained nchan_publisher +syn keyword ngxDirectiveThirdParty contained nchan_publisher_channel_id +syn keyword ngxDirectiveThirdParty contained nchan_publisher_location +syn keyword ngxDirectiveThirdParty contained nchan_publisher_upstream_request +syn keyword ngxDirectiveThirdParty contained nchan_pubsub +syn keyword ngxDirectiveThirdParty contained nchan_pubsub_channel_id +syn keyword ngxDirectiveThirdParty contained nchan_pubsub_location +syn keyword ngxDirectiveThirdParty contained nchan_redis_fakesub_timer_interval +syn keyword ngxDirectiveThirdParty contained nchan_redis_idle_channel_cache_timeout +syn keyword ngxDirectiveThirdParty contained nchan_redis_namespace +syn keyword ngxDirectiveThirdParty contained nchan_redis_pass +syn keyword ngxDirectiveThirdParty contained nchan_redis_pass_inheritable +syn keyword ngxDirectiveThirdParty contained nchan_redis_ping_interval +syn keyword ngxDirectiveThirdParty contained nchan_redis_publish_msgpacked_max_size +syn keyword ngxDirectiveThirdParty contained nchan_redis_server +syn keyword ngxDirectiveThirdParty contained nchan_redis_storage_mode +syn keyword ngxDirectiveThirdParty contained nchan_redis_url +syn keyword ngxDirectiveThirdParty contained nchan_shared_memory_size +syn keyword ngxDirectiveThirdParty contained nchan_storage_engine +syn keyword ngxDirectiveThirdParty contained nchan_store_messages +syn keyword ngxDirectiveThirdParty contained nchan_stub_status +syn keyword ngxDirectiveThirdParty contained nchan_sub_channel_id +syn keyword ngxDirectiveThirdParty contained nchan_subscribe_existing_channels_only +syn keyword ngxDirectiveThirdParty contained nchan_subscribe_request +syn keyword ngxDirectiveThirdParty contained nchan_subscriber +syn keyword ngxDirectiveThirdParty contained nchan_subscriber_channel_id +syn keyword ngxDirectiveThirdParty contained nchan_subscriber_compound_etag_message_id +syn keyword ngxDirectiveThirdParty contained nchan_subscriber_first_message +syn keyword ngxDirectiveThirdParty contained nchan_subscriber_http_raw_stream_separator +syn keyword ngxDirectiveThirdParty contained nchan_subscriber_last_message_id +syn keyword ngxDirectiveThirdParty contained nchan_subscriber_location +syn keyword ngxDirectiveThirdParty contained nchan_subscriber_message_id_custom_etag_header +syn keyword ngxDirectiveThirdParty contained nchan_subscriber_timeout +syn keyword ngxDirectiveThirdParty contained nchan_unsubscribe_request +syn keyword ngxDirectiveThirdParty contained nchan_use_redis +syn keyword ngxDirectiveThirdParty contained nchan_websocket_client_heartbeat +syn keyword ngxDirectiveThirdParty contained nchan_websocket_ping_interval +syn keyword ngxDirectiveThirdParty contained push_authorized_channels_only +syn keyword ngxDirectiveThirdParty contained push_channel_group +syn keyword ngxDirectiveThirdParty contained push_channel_timeout +syn keyword ngxDirectiveThirdParty contained push_max_channel_id_length +syn keyword ngxDirectiveThirdParty contained push_max_channel_subscribers +syn keyword ngxDirectiveThirdParty contained push_max_message_buffer_length +syn keyword ngxDirectiveThirdParty contained push_max_reserved_memory +syn keyword ngxDirectiveThirdParty contained push_message_buffer_length +syn keyword ngxDirectiveThirdParty contained push_message_timeout +syn keyword ngxDirectiveThirdParty contained push_min_message_buffer_length +syn keyword ngxDirectiveThirdParty contained push_publisher +syn keyword ngxDirectiveThirdParty contained push_store_messages +syn keyword ngxDirectiveThirdParty contained push_subscriber +syn keyword ngxDirectiveThirdParty contained push_subscriber_concurrency +syn keyword ngxDirectiveThirdParty contained push_subscriber_timeout + +" Push Stream +" https://github.com/wandenberg/nginx-push-stream-module +syn keyword ngxDirectiveThirdParty contained push_stream_allow_connections_to_events_channel +syn keyword ngxDirectiveThirdParty contained push_stream_allowed_origins +syn keyword ngxDirectiveThirdParty contained push_stream_authorized_channels_only +syn keyword ngxDirectiveThirdParty contained push_stream_channel_deleted_message_text +syn keyword ngxDirectiveThirdParty contained push_stream_channel_inactivity_time +syn keyword ngxDirectiveThirdParty contained push_stream_channel_info_on_publish +syn keyword ngxDirectiveThirdParty contained push_stream_channels_path +syn keyword ngxDirectiveThirdParty contained push_stream_channels_statistics +syn keyword ngxDirectiveThirdParty contained push_stream_events_channel_id +syn keyword ngxDirectiveThirdParty contained push_stream_footer_template +syn keyword ngxDirectiveThirdParty contained push_stream_header_template +syn keyword ngxDirectiveThirdParty contained push_stream_header_template_file +syn keyword ngxDirectiveThirdParty contained push_stream_last_event_id +syn keyword ngxDirectiveThirdParty contained push_stream_last_received_message_tag +syn keyword ngxDirectiveThirdParty contained push_stream_last_received_message_time +syn keyword ngxDirectiveThirdParty contained push_stream_longpolling_connection_ttl +syn keyword ngxDirectiveThirdParty contained push_stream_max_channel_id_length +syn keyword ngxDirectiveThirdParty contained push_stream_max_messages_stored_per_channel +syn keyword ngxDirectiveThirdParty contained push_stream_max_number_of_channels +syn keyword ngxDirectiveThirdParty contained push_stream_max_number_of_wildcard_channels +syn keyword ngxDirectiveThirdParty contained push_stream_max_subscribers_per_channel +syn keyword ngxDirectiveThirdParty contained push_stream_message_template +syn keyword ngxDirectiveThirdParty contained push_stream_message_ttl +syn keyword ngxDirectiveThirdParty contained push_stream_padding_by_user_agent +syn keyword ngxDirectiveThirdParty contained push_stream_ping_message_interval +syn keyword ngxDirectiveThirdParty contained push_stream_ping_message_text +syn keyword ngxDirectiveThirdParty contained push_stream_publisher +syn keyword ngxDirectiveThirdParty contained push_stream_shared_memory_size +syn keyword ngxDirectiveThirdParty contained push_stream_store_messages +syn keyword ngxDirectiveThirdParty contained push_stream_subscriber +syn keyword ngxDirectiveThirdParty contained push_stream_subscriber_connection_ttl +syn keyword ngxDirectiveThirdParty contained push_stream_timeout_with_body +syn keyword ngxDirectiveThirdParty contained push_stream_user_agent +syn keyword ngxDirectiveThirdParty contained push_stream_websocket_allow_publish +syn keyword ngxDirectiveThirdParty contained push_stream_wildcard_channel_max_qtd +syn keyword ngxDirectiveThirdParty contained push_stream_wildcard_channel_prefix + +" redis module +" https://www.nginx.com/resources/wiki/modules/redis/ syn keyword ngxDirectiveThirdParty contained redis_bind syn keyword ngxDirectiveThirdParty contained redis_buffer_size syn keyword ngxDirectiveThirdParty contained redis_connect_timeout +syn keyword ngxDirectiveThirdParty contained redis_gzip_flag syn keyword ngxDirectiveThirdParty contained redis_next_upstream syn keyword ngxDirectiveThirdParty contained redis_pass syn keyword ngxDirectiveThirdParty contained redis_read_timeout syn keyword ngxDirectiveThirdParty contained redis_send_timeout -" Iconv Module -" A character conversion nginx module using libiconv -syn keyword ngxDirectiveThirdParty contained set_iconv -syn keyword ngxDirectiveThirdParty contained iconv_buffer_size -syn keyword ngxDirectiveThirdParty contained iconv_filter +" ngx_http_response +" http://catap.ru/downloads/nginx/ +syn keyword ngxDirectiveThirdParty contained response +syn keyword ngxDirectiveThirdParty contained response_type -" IP Blocker Module -" An efficient shared memory IP blocking system for nginx. -syn keyword ngxDirectiveThirdParty contained ip_blocker +" nginx_substitutions_filter +" https://github.com/yaoweibin/ngx_http_substitutions_filter_module +syn keyword ngxDirectiveThirdParty contained subs_buffers +syn keyword ngxDirectiveThirdParty contained subs_filter +syn keyword ngxDirectiveThirdParty contained subs_filter_bypass +syn keyword ngxDirectiveThirdParty contained subs_filter_types +syn keyword ngxDirectiveThirdParty contained subs_line_buffer_size -" IP2Location Module -" Allows user to lookup for geolocation information using IP2Location database -syn keyword ngxDirectiveThirdParty contained ip2location_database +" Tarantool nginx upstream module +" https://github.com/tarantool/nginx_upstream_module +syn keyword ngxDirectiveThirdParty contained tnt_allowed_indexes +syn keyword ngxDirectiveThirdParty contained tnt_allowed_spaces +syn keyword ngxDirectiveThirdParty contained tnt_buffer_size +syn keyword ngxDirectiveThirdParty contained tnt_connect_timeout +syn keyword ngxDirectiveThirdParty contained tnt_delete +syn keyword ngxDirectiveThirdParty contained tnt_http_methods +syn keyword ngxDirectiveThirdParty contained tnt_http_rest_methods +syn keyword ngxDirectiveThirdParty contained tnt_in_multiplier +syn keyword ngxDirectiveThirdParty contained tnt_insert +syn keyword ngxDirectiveThirdParty contained tnt_method +syn keyword ngxDirectiveThirdParty contained tnt_multireturn_skip_count +syn keyword ngxDirectiveThirdParty contained tnt_next_upstream +syn keyword ngxDirectiveThirdParty contained tnt_next_upstream_timeout +syn keyword ngxDirectiveThirdParty contained tnt_next_upstream_tries +syn keyword ngxDirectiveThirdParty contained tnt_out_multiplier +syn keyword ngxDirectiveThirdParty contained tnt_pass +syn keyword ngxDirectiveThirdParty contained tnt_pass_http_request +syn keyword ngxDirectiveThirdParty contained tnt_pass_http_request_buffer_size +syn keyword ngxDirectiveThirdParty contained tnt_pure_result +syn keyword ngxDirectiveThirdParty contained tnt_read_timeout +syn keyword ngxDirectiveThirdParty contained tnt_replace +syn keyword ngxDirectiveThirdParty contained tnt_select +syn keyword ngxDirectiveThirdParty contained tnt_select_limit_max +syn keyword ngxDirectiveThirdParty contained tnt_send_timeout +syn keyword ngxDirectiveThirdParty contained tnt_set_header -" JS Module -" Reflect the nginx functionality in JS -syn keyword ngxDirectiveThirdParty contained js -syn keyword ngxDirectiveThirdParty contained js_access -syn keyword ngxDirectiveThirdParty contained js_load -syn keyword ngxDirectiveThirdParty contained js_set +" A module for nginx web server for handling file uploads using multipart/form-data encoding (RFC 1867) +" https://github.com/Austinb/nginx-upload-module +syn keyword ngxDirectiveThirdParty contained upload_aggregate_form_field +syn keyword ngxDirectiveThirdParty contained upload_archive_elm +syn keyword ngxDirectiveThirdParty contained upload_archive_elm_separator +syn keyword ngxDirectiveThirdParty contained upload_archive_path +syn keyword ngxDirectiveThirdParty contained upload_archive_path_separator +syn keyword ngxDirectiveThirdParty contained upload_buffer_size +syn keyword ngxDirectiveThirdParty contained upload_cleanup +syn keyword ngxDirectiveThirdParty contained upload_content_type +syn keyword ngxDirectiveThirdParty contained upload_discard +syn keyword ngxDirectiveThirdParty contained upload_field_name +syn keyword ngxDirectiveThirdParty contained upload_file_crc32 +syn keyword ngxDirectiveThirdParty contained upload_file_md5 +syn keyword ngxDirectiveThirdParty contained upload_file_md5_uc +syn keyword ngxDirectiveThirdParty contained upload_file_name +syn keyword ngxDirectiveThirdParty contained upload_file_sha1 +syn keyword ngxDirectiveThirdParty contained upload_file_sha1_uc +syn keyword ngxDirectiveThirdParty contained upload_file_size +syn keyword ngxDirectiveThirdParty contained upload_filter +syn keyword ngxDirectiveThirdParty contained upload_max_file_size +syn keyword ngxDirectiveThirdParty contained upload_max_output_body_len +syn keyword ngxDirectiveThirdParty contained upload_max_part_header_len +syn keyword ngxDirectiveThirdParty contained upload_pass +syn keyword ngxDirectiveThirdParty contained upload_pass_args +syn keyword ngxDirectiveThirdParty contained upload_pass_form_field +syn keyword ngxDirectiveThirdParty contained upload_set_form_field +syn keyword ngxDirectiveThirdParty contained upload_store +syn keyword ngxDirectiveThirdParty contained upload_store_access +syn keyword ngxDirectiveThirdParty contained upload_tmp_path +syn keyword ngxDirectiveThirdParty contained upload_unzip +syn keyword ngxDirectiveThirdParty contained upload_unzip_buffers +syn keyword ngxDirectiveThirdParty contained upload_unzip_hash +syn keyword ngxDirectiveThirdParty contained upload_unzip_max_file_name_len +syn keyword ngxDirectiveThirdParty contained upload_unzip_window +syn keyword ngxDirectiveThirdParty contained upload_void_content_type -" Limit Upload Rate Module -" Limit client-upload rate when they are sending request bodies to you -syn keyword ngxDirectiveThirdParty contained limit_upload_rate -syn keyword ngxDirectiveThirdParty contained limit_upload_rate_after +" nginx-upload-progress-module +" https://github.com/masterzen/nginx-upload-progress-module +syn keyword ngxDirectiveThirdParty contained report_uploads +syn keyword ngxDirectiveThirdParty contained track_uploads +syn keyword ngxDirectiveThirdParty contained upload_progress +syn keyword ngxDirectiveThirdParty contained upload_progress_content_type +syn keyword ngxDirectiveThirdParty contained upload_progress_header +syn keyword ngxDirectiveThirdParty contained upload_progress_java_output +syn keyword ngxDirectiveThirdParty contained upload_progress_json_output +syn keyword ngxDirectiveThirdParty contained upload_progress_jsonp_output +syn keyword ngxDirectiveThirdParty contained upload_progress_jsonp_parameter +syn keyword ngxDirectiveThirdParty contained upload_progress_template -" Limit Upstream Module -" Limit the number of connections to upstream for NGINX -syn keyword ngxDirectiveThirdParty contained limit_upstream_zone -syn keyword ngxDirectiveThirdParty contained limit_upstream_conn -syn keyword ngxDirectiveThirdParty contained limit_upstream_log_level +" Health checks upstreams for nginx +" https://github.com/yaoweibin/nginx_upstream_check_module +syn keyword ngxDirectiveThirdParty contained check +syn keyword ngxDirectiveThirdParty contained check_fastcgi_param +syn keyword ngxDirectiveThirdParty contained check_http_expect_alive +syn keyword ngxDirectiveThirdParty contained check_http_send +syn keyword ngxDirectiveThirdParty contained check_keepalive_requests +syn keyword ngxDirectiveThirdParty contained check_shm_size +syn keyword ngxDirectiveThirdParty contained check_status -" Log If Module -" Conditional accesslog for nginx -syn keyword ngxDirectiveThirdParty contained access_log_bypass_if +" The fair load balancer module for nginx +" https://github.com/cryptofuture/nginx-upstream-fair +syn keyword ngxDirectiveThirdParty contained fair +syn keyword ngxDirectiveThirdParty contained upstream_fair_shm_size -" Log Request Speed (DEPRECATED) -" Log the time it took to process each request. -syn keyword ngxDirectiveDeprecated contained log_request_speed_filter -syn keyword ngxDirectiveDeprecated contained log_request_speed_filter_timeout +" Nginx Video Thumb Extractor Module +" https://github.com/wandenberg/nginx-video-thumbextractor-module +syn keyword ngxDirectiveThirdParty contained video_thumbextractor +syn keyword ngxDirectiveThirdParty contained video_thumbextractor_image_height +syn keyword ngxDirectiveThirdParty contained video_thumbextractor_image_width +syn keyword ngxDirectiveThirdParty contained video_thumbextractor_jpeg_baseline +syn keyword ngxDirectiveThirdParty contained video_thumbextractor_jpeg_dpi +syn keyword ngxDirectiveThirdParty contained video_thumbextractor_jpeg_optimize +syn keyword ngxDirectiveThirdParty contained video_thumbextractor_jpeg_progressive_mode +syn keyword ngxDirectiveThirdParty contained video_thumbextractor_jpeg_quality +syn keyword ngxDirectiveThirdParty contained video_thumbextractor_jpeg_smooth +syn keyword ngxDirectiveThirdParty contained video_thumbextractor_next_time +syn keyword ngxDirectiveThirdParty contained video_thumbextractor_only_keyframe +syn keyword ngxDirectiveThirdParty contained video_thumbextractor_processes_per_worker +syn keyword ngxDirectiveThirdParty contained video_thumbextractor_threads +syn keyword ngxDirectiveThirdParty contained video_thumbextractor_tile_color +syn keyword ngxDirectiveThirdParty contained video_thumbextractor_tile_cols +syn keyword ngxDirectiveThirdParty contained video_thumbextractor_tile_margin +syn keyword ngxDirectiveThirdParty contained video_thumbextractor_tile_max_cols +syn keyword ngxDirectiveThirdParty contained video_thumbextractor_tile_max_rows +syn keyword ngxDirectiveThirdParty contained video_thumbextractor_tile_padding +syn keyword ngxDirectiveThirdParty contained video_thumbextractor_tile_rows +syn keyword ngxDirectiveThirdParty contained video_thumbextractor_tile_sample_interval +syn keyword ngxDirectiveThirdParty contained video_thumbextractor_video_filename +syn keyword ngxDirectiveThirdParty contained video_thumbextractor_video_second -" Log ZeroMQ Module -" ZeroMQ logger module for nginx -syn keyword ngxDirectiveThirdParty contained log_zmq_server -syn keyword ngxDirectiveThirdParty contained log_zmq_endpoint -syn keyword ngxDirectiveThirdParty contained log_zmq_format -syn keyword ngxDirectiveThirdParty contained log_zmq_off +" drizzle-nginx-module - Upstream module for talking to MySQL and Drizzle directly +" https://github.com/openresty/drizzle-nginx-module +syn keyword ngxDirectiveThirdParty contained drizzle_buffer_size +syn keyword ngxDirectiveThirdParty contained drizzle_connect_timeout +syn keyword ngxDirectiveThirdParty contained drizzle_dbname +syn keyword ngxDirectiveThirdParty contained drizzle_keepalive +syn keyword ngxDirectiveThirdParty contained drizzle_module_header +syn keyword ngxDirectiveThirdParty contained drizzle_pass +syn keyword ngxDirectiveThirdParty contained drizzle_query +syn keyword ngxDirectiveThirdParty contained drizzle_recv_cols_timeout +syn keyword ngxDirectiveThirdParty contained drizzle_recv_rows_timeout +syn keyword ngxDirectiveThirdParty contained drizzle_send_query_timeout +syn keyword ngxDirectiveThirdParty contained drizzle_server +syn keyword ngxDirectiveThirdParty contained drizzle_status -" Lower/UpperCase Module -" This module simply uppercases or lowercases a string and saves it into a new variable. -syn keyword ngxDirectiveThirdParty contained lower -syn keyword ngxDirectiveThirdParty contained upper +" ngx_dynamic_upstream +" https://github.com/cubicdaiya/ngx_dynamic_upstream +syn keyword ngxDirectiveThirdParty contained dynamic_upstream -" Lua Upstream Module -" Nginx C module to expose Lua API to ngx_lua for Nginx upstreams +" encrypt and decrypt nginx variable values +" https://github.com/openresty/encrypted-session-nginx-module +syn keyword ngxDirectiveThirdParty contained encrypted_session_expires +syn keyword ngxDirectiveThirdParty contained encrypted_session_iv +syn keyword ngxDirectiveThirdParty contained encrypted_session_key +syn keyword ngxDirectiveThirdParty contained set_decrypt_session +syn keyword ngxDirectiveThirdParty contained set_encrypt_session -" Lua Module -" Embed the Power of Lua into NGINX HTTP servers -syn keyword ngxDirectiveThirdParty contained lua_use_default_type -syn keyword ngxDirectiveThirdParty contained lua_malloc_trim -syn keyword ngxDirectiveThirdParty contained lua_code_cache -syn keyword ngxDirectiveThirdParty contained lua_regex_cache_max_entries -syn keyword ngxDirectiveThirdParty contained lua_regex_match_limit -syn keyword ngxDirectiveThirdParty contained lua_package_path -syn keyword ngxDirectiveThirdParty contained lua_package_cpath +" serve content directly from MongoDB's GridFS +" https://github.com/mdirolf/nginx-gridfs +syn keyword ngxDirectiveThirdParty contained gridfs +syn keyword ngxDirectiveThirdParty contained mongo + +" Adds support for arithmetic operations to NGINX config +" https://github.com/arut/nginx-let-module +syn keyword ngxDirectiveThirdParty contained let + +" ngx_http_lua_module - Embed the power of Lua into Nginx HTTP Servers +" https://github.com/openresty/lua-nginx-module +syn keyword ngxDirectiveThirdParty contained access_by_lua +syn keyword ngxDirectiveThirdParty contained access_by_lua_block +syn keyword ngxDirectiveThirdParty contained access_by_lua_file +syn keyword ngxDirectiveThirdParty contained access_by_lua_no_postpone +syn keyword ngxDirectiveThirdParty contained balancer_by_lua_block +syn keyword ngxDirectiveThirdParty contained balancer_by_lua_file +syn keyword ngxDirectiveThirdParty contained body_filter_by_lua +syn keyword ngxDirectiveThirdParty contained body_filter_by_lua_block +syn keyword ngxDirectiveThirdParty contained body_filter_by_lua_file +syn keyword ngxDirectiveThirdParty contained content_by_lua +syn keyword ngxDirectiveThirdParty contained content_by_lua_block +syn keyword ngxDirectiveThirdParty contained content_by_lua_file +syn keyword ngxDirectiveThirdParty contained header_filter_by_lua +syn keyword ngxDirectiveThirdParty contained header_filter_by_lua_block +syn keyword ngxDirectiveThirdParty contained header_filter_by_lua_file syn keyword ngxDirectiveThirdParty contained init_by_lua syn keyword ngxDirectiveThirdParty contained init_by_lua_block syn keyword ngxDirectiveThirdParty contained init_by_lua_file syn keyword ngxDirectiveThirdParty contained init_worker_by_lua syn keyword ngxDirectiveThirdParty contained init_worker_by_lua_block syn keyword ngxDirectiveThirdParty contained init_worker_by_lua_file +syn keyword ngxDirectiveThirdParty contained log_by_lua +syn keyword ngxDirectiveThirdParty contained log_by_lua_block +syn keyword ngxDirectiveThirdParty contained log_by_lua_file +syn keyword ngxDirectiveThirdParty contained lua_capture_error_log +syn keyword ngxDirectiveThirdParty contained lua_check_client_abort +syn keyword ngxDirectiveThirdParty contained lua_code_cache +syn keyword ngxDirectiveThirdParty contained lua_fake_shm +syn keyword ngxDirectiveThirdParty contained lua_http10_buffering +syn keyword ngxDirectiveThirdParty contained lua_malloc_trim +syn keyword ngxDirectiveThirdParty contained lua_max_pending_timers +syn keyword ngxDirectiveThirdParty contained lua_max_running_timers +syn keyword ngxDirectiveThirdParty contained lua_need_request_body +syn keyword ngxDirectiveThirdParty contained lua_package_cpath +syn keyword ngxDirectiveThirdParty contained lua_package_path +syn keyword ngxDirectiveThirdParty contained lua_regex_cache_max_entries +syn keyword ngxDirectiveThirdParty contained lua_regex_match_limit +syn keyword ngxDirectiveThirdParty contained lua_shared_dict +syn keyword ngxDirectiveThirdParty contained lua_socket_buffer_size +syn keyword ngxDirectiveThirdParty contained lua_socket_connect_timeout +syn keyword ngxDirectiveThirdParty contained lua_socket_keepalive_timeout +syn keyword ngxDirectiveThirdParty contained lua_socket_log_errors +syn keyword ngxDirectiveThirdParty contained lua_socket_pool_size +syn keyword ngxDirectiveThirdParty contained lua_socket_read_timeout +syn keyword ngxDirectiveThirdParty contained lua_socket_send_lowat +syn keyword ngxDirectiveThirdParty contained lua_socket_send_timeout +syn keyword ngxDirectiveThirdParty contained lua_ssl_ciphers +syn keyword ngxDirectiveThirdParty contained lua_ssl_crl +syn keyword ngxDirectiveThirdParty contained lua_ssl_protocols +syn keyword ngxDirectiveThirdParty contained lua_ssl_trusted_certificate +syn keyword ngxDirectiveThirdParty contained lua_ssl_verify_depth +syn keyword ngxDirectiveThirdParty contained lua_transform_underscores_in_response_headers +syn keyword ngxDirectiveThirdParty contained lua_use_default_type +syn keyword ngxDirectiveThirdParty contained rewrite_by_lua +syn keyword ngxDirectiveThirdParty contained rewrite_by_lua_block +syn keyword ngxDirectiveThirdParty contained rewrite_by_lua_file +syn keyword ngxDirectiveThirdParty contained rewrite_by_lua_no_postpone syn keyword ngxDirectiveThirdParty contained set_by_lua syn keyword ngxDirectiveThirdParty contained set_by_lua_block syn keyword ngxDirectiveThirdParty contained set_by_lua_file -syn keyword ngxDirectiveThirdParty contained content_by_lua -syn keyword ngxDirectiveThirdParty contained content_by_lua_block -syn keyword ngxDirectiveThirdParty contained content_by_lua_file -syn keyword ngxDirectiveThirdParty contained rewrite_by_lua -syn keyword ngxDirectiveThirdParty contained rewrite_by_lua_block -syn keyword ngxDirectiveThirdParty contained rewrite_by_lua_file -syn keyword ngxDirectiveThirdParty contained access_by_lua -syn keyword ngxDirectiveThirdParty contained access_by_lua_block -syn keyword ngxDirectiveThirdParty contained access_by_lua_file -syn keyword ngxDirectiveThirdParty contained header_filter_by_lua -syn keyword ngxDirectiveThirdParty contained header_filter_by_lua_block -syn keyword ngxDirectiveThirdParty contained header_filter_by_lua_file -syn keyword ngxDirectiveThirdParty contained body_filter_by_lua -syn keyword ngxDirectiveThirdParty contained body_filter_by_lua_block -syn keyword ngxDirectiveThirdParty contained body_filter_by_lua_file -syn keyword ngxDirectiveThirdParty contained log_by_lua -syn keyword ngxDirectiveThirdParty contained log_by_lua_block -syn keyword ngxDirectiveThirdParty contained log_by_lua_file -syn keyword ngxDirectiveThirdParty contained balancer_by_lua_block -syn keyword ngxDirectiveThirdParty contained balancer_by_lua_file -syn keyword ngxDirectiveThirdParty contained lua_need_request_body syn keyword ngxDirectiveThirdParty contained ssl_certificate_by_lua_block syn keyword ngxDirectiveThirdParty contained ssl_certificate_by_lua_file syn keyword ngxDirectiveThirdParty contained ssl_session_fetch_by_lua_block syn keyword ngxDirectiveThirdParty contained ssl_session_fetch_by_lua_file syn keyword ngxDirectiveThirdParty contained ssl_session_store_by_lua_block syn keyword ngxDirectiveThirdParty contained ssl_session_store_by_lua_file -syn keyword ngxDirectiveThirdParty contained lua_shared_dict -syn keyword ngxDirectiveThirdParty contained lua_socket_connect_timeout -syn keyword ngxDirectiveThirdParty contained lua_socket_send_timeout -syn keyword ngxDirectiveThirdParty contained lua_socket_send_lowat -syn keyword ngxDirectiveThirdParty contained lua_socket_read_timeout -syn keyword ngxDirectiveThirdParty contained lua_socket_buffer_size -syn keyword ngxDirectiveThirdParty contained lua_socket_pool_size -syn keyword ngxDirectiveThirdParty contained lua_socket_keepalive_timeout -syn keyword ngxDirectiveThirdParty contained lua_socket_log_errors -syn keyword ngxDirectiveThirdParty contained lua_ssl_ciphers -syn keyword ngxDirectiveThirdParty contained lua_ssl_crl -syn keyword ngxDirectiveThirdParty contained lua_ssl_protocols -syn keyword ngxDirectiveThirdParty contained lua_ssl_trusted_certificate -syn keyword ngxDirectiveThirdParty contained lua_ssl_verify_depth -syn keyword ngxDirectiveThirdParty contained lua_http10_buffering -syn keyword ngxDirectiveThirdParty contained rewrite_by_lua_no_postpone -syn keyword ngxDirectiveThirdParty contained access_by_lua_no_postpone -syn keyword ngxDirectiveThirdParty contained lua_transform_underscores_in_response_headers -syn keyword ngxDirectiveThirdParty contained lua_check_client_abort -syn keyword ngxDirectiveThirdParty contained lua_max_pending_timers -syn keyword ngxDirectiveThirdParty contained lua_max_running_timers -" MD5 Filter Module -" A content filter for nginx, which returns the md5 hash of the content otherwise returned. -syn keyword ngxDirectiveThirdParty contained md5_filter - -" Memc Module -" An extended version of the standard memcached module that supports set, add, delete, and many more memcached commands. +" ngx_memc - An extended version of the standard memcached module +" https://github.com/openresty/memc-nginx-module syn keyword ngxDirectiveThirdParty contained memc_buffer_size syn keyword ngxDirectiveThirdParty contained memc_cmds_allowed syn keyword ngxDirectiveThirdParty contained memc_connect_timeout syn keyword ngxDirectiveThirdParty contained memc_flags_to_last_modified +syn keyword ngxDirectiveThirdParty contained memc_ignore_client_abort syn keyword ngxDirectiveThirdParty contained memc_next_upstream syn keyword ngxDirectiveThirdParty contained memc_pass syn keyword ngxDirectiveThirdParty contained memc_read_timeout @@ -1213,597 +1302,330 @@ syn keyword ngxDirectiveThirdParty contained memc_upstream_fail_timeout syn keyword ngxDirectiveThirdParty contained memc_upstream_max_fails -" Mod Security Module -" ModSecurity is an open source, cross platform web application firewall (WAF) engine +" ModSecurity web application firewall +" https://github.com/SpiderLabs/ModSecurity/tree/master syn keyword ngxDirectiveThirdParty contained ModSecurityConfig syn keyword ngxDirectiveThirdParty contained ModSecurityEnabled -syn keyword ngxDirectiveThirdParty contained pool_context syn keyword ngxDirectiveThirdParty contained pool_context_hash_size -" Mogilefs Module -" MogileFS client for nginx web server. -syn keyword ngxDirectiveThirdParty contained mogilefs_pass -syn keyword ngxDirectiveThirdParty contained mogilefs_methods -syn keyword ngxDirectiveThirdParty contained mogilefs_domain -syn keyword ngxDirectiveThirdParty contained mogilefs_class -syn keyword ngxDirectiveThirdParty contained mogilefs_tracker -syn keyword ngxDirectiveThirdParty contained mogilefs_noverify -syn keyword ngxDirectiveThirdParty contained mogilefs_connect_timeout -syn keyword ngxDirectiveThirdParty contained mogilefs_send_timeout -syn keyword ngxDirectiveThirdParty contained mogilefs_read_timeout +" NAXSI is an open-source, high performance, low rules maintenance WAF for NGINX +" https://github.com/nbs-system/naxsi +syn keyword ngxDirectiveThirdParty contained BasicRule +syn keyword ngxDirectiveThirdParty contained CheckRule +syn keyword ngxDirectiveThirdParty contained DeniedUrl +syn keyword ngxDirectiveThirdParty contained LearningMode +syn keyword ngxDirectiveThirdParty contained LibInjectionSql +syn keyword ngxDirectiveThirdParty contained LibInjectionXss +syn keyword ngxDirectiveThirdParty contained MainRule +syn keyword ngxDirectiveThirdParty contained SecRulesDisabled +syn keyword ngxDirectiveThirdParty contained SecRulesEnabled +syn keyword ngxDirectiveThirdParty contained basic_rule +syn keyword ngxDirectiveThirdParty contained check_rule +syn keyword ngxDirectiveThirdParty contained denied_url +syn keyword ngxDirectiveThirdParty contained learning_mode +syn keyword ngxDirectiveThirdParty contained libinjection_sql +syn keyword ngxDirectiveThirdParty contained libinjection_xss +syn keyword ngxDirectiveThirdParty contained main_rule +syn keyword ngxDirectiveThirdParty contained rules_disabled +syn keyword ngxDirectiveThirdParty contained rules_enabled -" Mongo Module -" Upstream module that allows nginx to communicate directly with MongoDB database. -syn keyword ngxDirectiveThirdParty contained mongo_auth -syn keyword ngxDirectiveThirdParty contained mongo_pass -syn keyword ngxDirectiveThirdParty contained mongo_query -syn keyword ngxDirectiveThirdParty contained mongo_json -syn keyword ngxDirectiveThirdParty contained mongo_bind -syn keyword ngxDirectiveThirdParty contained mongo_connect_timeout -syn keyword ngxDirectiveThirdParty contained mongo_send_timeout -syn keyword ngxDirectiveThirdParty contained mongo_read_timeout -syn keyword ngxDirectiveThirdParty contained mongo_buffering -syn keyword ngxDirectiveThirdParty contained mongo_buffer_size -syn keyword ngxDirectiveThirdParty contained mongo_buffers -syn keyword ngxDirectiveThirdParty contained mongo_busy_buffers_size -syn keyword ngxDirectiveThirdParty contained mongo_next_upstream - -" MP4 Streaming Lite Module -" Will seek to a certain time within H.264/MP4 files when provided with a 'start' parameter in the URL. -" syn keyword ngxDirectiveThirdParty contained mp4 - -" NAXSI Module -" NAXSI is an open-source, high performance, low rules maintenance WAF for NGINX -syn keyword ngxDirectiveThirdParty contained DeniedUrl denied_url -syn keyword ngxDirectiveThirdParty contained LearningMode learning_mode -syn keyword ngxDirectiveThirdParty contained SecRulesEnabled rules_enabled -syn keyword ngxDirectiveThirdParty contained SecRulesDisabled rules_disabled -syn keyword ngxDirectiveThirdParty contained CheckRule check_rule -syn keyword ngxDirectiveThirdParty contained BasicRule basic_rule -syn keyword ngxDirectiveThirdParty contained MainRule main_rule -syn keyword ngxDirectiveThirdParty contained LibInjectionSql libinjection_sql -syn keyword ngxDirectiveThirdParty contained LibInjectionXss libinjection_xss - -" Nchan Module -" Fast, horizontally scalable, multiprocess pub/sub queuing server and proxy for HTTP, long-polling, Websockets and EventSource (SSE) -syn keyword ngxDirectiveThirdParty contained nchan_channel_id -syn keyword ngxDirectiveThirdParty contained nchan_channel_id_split_delimiter -syn keyword ngxDirectiveThirdParty contained nchan_eventsource_event -syn keyword ngxDirectiveThirdParty contained nchan_longpoll_multipart_response -syn keyword ngxDirectiveThirdParty contained nchan_publisher -syn keyword ngxDirectiveThirdParty contained nchan_publisher_channel_id -syn keyword ngxDirectiveThirdParty contained nchan_publisher_upstream_request -syn keyword ngxDirectiveThirdParty contained nchan_pubsub -syn keyword ngxDirectiveThirdParty contained nchan_subscribe_request -syn keyword ngxDirectiveThirdParty contained nchan_subscriber -syn keyword ngxDirectiveThirdParty contained nchan_subscriber_channel_id -syn keyword ngxDirectiveThirdParty contained nchan_subscriber_compound_etag_message_id -syn keyword ngxDirectiveThirdParty contained nchan_subscriber_first_message -syn keyword ngxDirectiveThirdParty contained nchan_subscriber_http_raw_stream_separator -syn keyword ngxDirectiveThirdParty contained nchan_subscriber_last_message_id -syn keyword ngxDirectiveThirdParty contained nchan_subscriber_message_id_custom_etag_header -syn keyword ngxDirectiveThirdParty contained nchan_subscriber_timeout -syn keyword ngxDirectiveThirdParty contained nchan_unsubscribe_request -syn keyword ngxDirectiveThirdParty contained nchan_websocket_ping_interval -syn keyword ngxDirectiveThirdParty contained nchan_authorize_request -syn keyword ngxDirectiveThirdParty contained nchan_max_reserved_memory -syn keyword ngxDirectiveThirdParty contained nchan_message_buffer_length -syn keyword ngxDirectiveThirdParty contained nchan_message_timeout -syn keyword ngxDirectiveThirdParty contained nchan_redis_idle_channel_cache_timeout -syn keyword ngxDirectiveThirdParty contained nchan_redis_namespace -syn keyword ngxDirectiveThirdParty contained nchan_redis_pass -syn keyword ngxDirectiveThirdParty contained nchan_redis_ping_interval -syn keyword ngxDirectiveThirdParty contained nchan_redis_server -syn keyword ngxDirectiveThirdParty contained nchan_redis_storage_mode -syn keyword ngxDirectiveThirdParty contained nchan_redis_url -syn keyword ngxDirectiveThirdParty contained nchan_store_messages -syn keyword ngxDirectiveThirdParty contained nchan_use_redis -syn keyword ngxDirectiveThirdParty contained nchan_access_control_allow_origin -syn keyword ngxDirectiveThirdParty contained nchan_channel_group -syn keyword ngxDirectiveThirdParty contained nchan_channel_group_accounting -syn keyword ngxDirectiveThirdParty contained nchan_group_location -syn keyword ngxDirectiveThirdParty contained nchan_group_max_channels -syn keyword ngxDirectiveThirdParty contained nchan_group_max_messages -syn keyword ngxDirectiveThirdParty contained nchan_group_max_messages_disk -syn keyword ngxDirectiveThirdParty contained nchan_group_max_messages_memory -syn keyword ngxDirectiveThirdParty contained nchan_group_max_subscribers -syn keyword ngxDirectiveThirdParty contained nchan_subscribe_existing_channels_only -syn keyword ngxDirectiveThirdParty contained nchan_channel_event_string -syn keyword ngxDirectiveThirdParty contained nchan_channel_events_channel_id -syn keyword ngxDirectiveThirdParty contained nchan_stub_status -syn keyword ngxDirectiveThirdParty contained nchan_max_channel_id_length -syn keyword ngxDirectiveThirdParty contained nchan_max_channel_subscribers -syn keyword ngxDirectiveThirdParty contained nchan_channel_timeout -syn keyword ngxDirectiveThirdParty contained nchan_storage_engine - -" Nginx Notice Module -" Serve static file to POST requests. -syn keyword ngxDirectiveThirdParty contained notice -syn keyword ngxDirectiveThirdParty contained notice_type - -" OCSP Proxy Module -" Nginx OCSP processing module designed for response caching -syn keyword ngxDirectiveThirdParty contained ocsp_proxy -syn keyword ngxDirectiveThirdParty contained ocsp_cache_timeout - -" Eval Module -" Module for nginx web server evaluates response of proxy or memcached module into variables. -syn keyword ngxDirectiveThirdParty contained eval -syn keyword ngxDirectiveThirdParty contained eval_escalate -syn keyword ngxDirectiveThirdParty contained eval_buffer_size -syn keyword ngxDirectiveThirdParty contained eval_override_content_type -syn keyword ngxDirectiveThirdParty contained eval_subrequest_in_memory - -" OpenSSL Version Module -" Nginx OpenSSL version check at startup -syn keyword ngxDirectiveThirdParty contained openssl_version_minimum -syn keyword ngxDirectiveThirdParty contained openssl_builddate_minimum - -" Owner Match Module -" Control access for specific owners and groups of files -syn keyword ngxDirectiveThirdParty contained omallow -syn keyword ngxDirectiveThirdParty contained omdeny - -" Accept Language Module -" Parses the Accept-Language header and gives the most suitable locale from a list of supported locales. -syn keyword ngxDirectiveThirdParty contained pagespeed - -" PHP Memcache Standard Balancer Module -" Loadbalancer that is compatible to the standard loadbalancer in the php-memcache module -syn keyword ngxDirectiveThirdParty contained hash_key - -" PHP Session Module -" Nginx module to parse php sessions -syn keyword ngxDirectiveThirdParty contained php_session_parse -syn keyword ngxDirectiveThirdParty contained php_session_strip_formatting - -" Phusion Passenger Module -" Passenger is an open source web application server. -syn keyword ngxDirectiveThirdParty contained passenger_root +" Phusion Passenger +" https://www.phusionpassenger.com/library/config/nginx/reference/ +syn keyword ngxDirectiveThirdParty contained disable_security_update_check +syn keyword ngxDirectiveThirdParty contained passenger_abort_on_startup_error +syn keyword ngxDirectiveThirdParty contained passenger_abort_websockets_on_process_shutdown +syn keyword ngxDirectiveThirdParty contained passenger_analytics_log_group +syn keyword ngxDirectiveThirdParty contained passenger_analytics_log_user +syn keyword ngxDirectiveThirdParty contained passenger_app_env +syn keyword ngxDirectiveThirdParty contained passenger_app_file_descriptor_ulimit +syn keyword ngxDirectiveThirdParty contained passenger_app_group_name +syn keyword ngxDirectiveThirdParty contained passenger_app_rights +syn keyword ngxDirectiveThirdParty contained passenger_app_root +syn keyword ngxDirectiveThirdParty contained passenger_app_type +syn keyword ngxDirectiveThirdParty contained passenger_base_uri +syn keyword ngxDirectiveThirdParty contained passenger_buffer_response +syn keyword ngxDirectiveThirdParty contained passenger_buffer_size +syn keyword ngxDirectiveThirdParty contained passenger_buffers +syn keyword ngxDirectiveThirdParty contained passenger_busy_buffers_size +syn keyword ngxDirectiveThirdParty contained passenger_concurrency_model +syn keyword ngxDirectiveThirdParty contained passenger_core_file_descriptor_ulimit +syn keyword ngxDirectiveThirdParty contained passenger_ctl +syn keyword ngxDirectiveThirdParty contained passenger_data_buffer_dir +syn keyword ngxDirectiveThirdParty contained passenger_debugger +syn keyword ngxDirectiveThirdParty contained passenger_default_group +syn keyword ngxDirectiveThirdParty contained passenger_default_user +syn keyword ngxDirectiveThirdParty contained passenger_disable_security_update_check +syn keyword ngxDirectiveThirdParty contained passenger_document_root syn keyword ngxDirectiveThirdParty contained passenger_enabled -syn keyword ngxDirectiveThirdParty contained passenger_base_uri -syn keyword ngxDirectiveThirdParty contained passenger_document_root -syn keyword ngxDirectiveThirdParty contained passenger_ruby -syn keyword ngxDirectiveThirdParty contained passenger_python -syn keyword ngxDirectiveThirdParty contained passenger_nodejs -syn keyword ngxDirectiveThirdParty contained passenger_meteor_app_settings -syn keyword ngxDirectiveThirdParty contained passenger_app_env -syn keyword ngxDirectiveThirdParty contained passenger_app_root -syn keyword ngxDirectiveThirdParty contained passenger_app_group_name -syn keyword ngxDirectiveThirdParty contained passenger_app_type -syn keyword ngxDirectiveThirdParty contained passenger_startup_file -syn keyword ngxDirectiveThirdParty contained passenger_restart_dir -syn keyword ngxDirectiveThirdParty contained passenger_spawn_method syn keyword ngxDirectiveThirdParty contained passenger_env_var +syn keyword ngxDirectiveThirdParty contained passenger_file_descriptor_log_file +syn keyword ngxDirectiveThirdParty contained passenger_fly_with +syn keyword ngxDirectiveThirdParty contained passenger_force_max_concurrent_requests_per_process +syn keyword ngxDirectiveThirdParty contained passenger_friendly_error_pages +syn keyword ngxDirectiveThirdParty contained passenger_group +syn keyword ngxDirectiveThirdParty contained passenger_headers_hash_bucket_size +syn keyword ngxDirectiveThirdParty contained passenger_headers_hash_max_size +syn keyword ngxDirectiveThirdParty contained passenger_ignore_client_abort +syn keyword ngxDirectiveThirdParty contained passenger_ignore_headers +syn keyword ngxDirectiveThirdParty contained passenger_instance_registry_dir +syn keyword ngxDirectiveThirdParty contained passenger_intercept_errors syn keyword ngxDirectiveThirdParty contained passenger_load_shell_envvars -syn keyword ngxDirectiveThirdParty contained passenger_rolling_restarts -syn keyword ngxDirectiveThirdParty contained passenger_resist_deployment_errors -syn keyword ngxDirectiveThirdParty contained passenger_user_switching -syn keyword ngxDirectiveThirdParty contained passenger_user -syn keyword ngxDirectiveThirdParty contained passenger_group -syn keyword ngxDirectiveThirdParty contained passenger_default_user -syn keyword ngxDirectiveThirdParty contained passenger_default_group -syn keyword ngxDirectiveThirdParty contained passenger_show_version_in_header -syn keyword ngxDirectiveThirdParty contained passenger_friendly_error_pages -syn keyword ngxDirectiveThirdParty contained passenger_disable_security_update_check -syn keyword ngxDirectiveThirdParty contained passenger_security_update_check_proxy -syn keyword ngxDirectiveThirdParty contained passenger_max_pool_size -syn keyword ngxDirectiveThirdParty contained passenger_min_instances +syn keyword ngxDirectiveThirdParty contained passenger_log_file +syn keyword ngxDirectiveThirdParty contained passenger_log_level syn keyword ngxDirectiveThirdParty contained passenger_max_instances syn keyword ngxDirectiveThirdParty contained passenger_max_instances_per_app +syn keyword ngxDirectiveThirdParty contained passenger_max_pool_size +syn keyword ngxDirectiveThirdParty contained passenger_max_preloader_idle_time +syn keyword ngxDirectiveThirdParty contained passenger_max_request_queue_size +syn keyword ngxDirectiveThirdParty contained passenger_max_request_time +syn keyword ngxDirectiveThirdParty contained passenger_max_requests +syn keyword ngxDirectiveThirdParty contained passenger_memory_limit +syn keyword ngxDirectiveThirdParty contained passenger_meteor_app_settings +syn keyword ngxDirectiveThirdParty contained passenger_min_instances +syn keyword ngxDirectiveThirdParty contained passenger_nodejs +syn keyword ngxDirectiveThirdParty contained passenger_pass_header syn keyword ngxDirectiveThirdParty contained passenger_pool_idle_time -syn keyword ngxDirectiveThirdParty contained passenger_max_preloader_idle_time -syn keyword ngxDirectiveThirdParty contained passenger_force_max_concurrent_requests_per_process +syn keyword ngxDirectiveThirdParty contained passenger_pre_start +syn keyword ngxDirectiveThirdParty contained passenger_python +syn keyword ngxDirectiveThirdParty contained passenger_read_timeout +syn keyword ngxDirectiveThirdParty contained passenger_request_queue_overflow_status_code +syn keyword ngxDirectiveThirdParty contained passenger_resist_deployment_errors +syn keyword ngxDirectiveThirdParty contained passenger_response_buffer_high_watermark +syn keyword ngxDirectiveThirdParty contained passenger_restart_dir +syn keyword ngxDirectiveThirdParty contained passenger_rolling_restarts +syn keyword ngxDirectiveThirdParty contained passenger_root +syn keyword ngxDirectiveThirdParty contained passenger_ruby +syn keyword ngxDirectiveThirdParty contained passenger_security_update_check_proxy +syn keyword ngxDirectiveThirdParty contained passenger_set_header +syn keyword ngxDirectiveThirdParty contained passenger_show_version_in_header +syn keyword ngxDirectiveThirdParty contained passenger_socket_backlog +syn keyword ngxDirectiveThirdParty contained passenger_spawn_method syn keyword ngxDirectiveThirdParty contained passenger_start_timeout -syn keyword ngxDirectiveThirdParty contained passenger_concurrency_model -syn keyword ngxDirectiveThirdParty contained passenger_thread_count -syn keyword ngxDirectiveThirdParty contained passenger_max_requests -syn keyword ngxDirectiveThirdParty contained passenger_max_request_time -syn keyword ngxDirectiveThirdParty contained passenger_memory_limit +syn keyword ngxDirectiveThirdParty contained passenger_startup_file syn keyword ngxDirectiveThirdParty contained passenger_stat_throttle_rate -syn keyword ngxDirectiveThirdParty contained passenger_core_file_descriptor_ulimit -syn keyword ngxDirectiveThirdParty contained passenger_app_file_descriptor_ulimit -syn keyword ngxDirectiveThirdParty contained passenger_pre_start -syn keyword ngxDirectiveThirdParty contained passenger_set_header -syn keyword ngxDirectiveThirdParty contained passenger_max_request_queue_size -syn keyword ngxDirectiveThirdParty contained passenger_request_queue_overflow_status_code syn keyword ngxDirectiveThirdParty contained passenger_sticky_sessions syn keyword ngxDirectiveThirdParty contained passenger_sticky_sessions_cookie_name -syn keyword ngxDirectiveThirdParty contained passenger_abort_websockets_on_process_shutdown -syn keyword ngxDirectiveThirdParty contained passenger_ignore_client_abort -syn keyword ngxDirectiveThirdParty contained passenger_intercept_errors -syn keyword ngxDirectiveThirdParty contained passenger_pass_header -syn keyword ngxDirectiveThirdParty contained passenger_ignore_headers -syn keyword ngxDirectiveThirdParty contained passenger_headers_hash_bucket_size -syn keyword ngxDirectiveThirdParty contained passenger_headers_hash_max_size -syn keyword ngxDirectiveThirdParty contained passenger_buffer_response -syn keyword ngxDirectiveThirdParty contained passenger_response_buffer_high_watermark -syn keyword ngxDirectiveThirdParty contained passenger_buffer_size, passenger_buffers, passenger_busy_buffers_size -syn keyword ngxDirectiveThirdParty contained passenger_socket_backlog -syn keyword ngxDirectiveThirdParty contained passenger_log_level -syn keyword ngxDirectiveThirdParty contained passenger_log_file -syn keyword ngxDirectiveThirdParty contained passenger_file_descriptor_log_file -syn keyword ngxDirectiveThirdParty contained passenger_debugger -syn keyword ngxDirectiveThirdParty contained passenger_instance_registry_dir -syn keyword ngxDirectiveThirdParty contained passenger_data_buffer_dir -syn keyword ngxDirectiveThirdParty contained passenger_fly_with -syn keyword ngxDirectiveThirdParty contained union_station_support +syn keyword ngxDirectiveThirdParty contained passenger_thread_count +syn keyword ngxDirectiveThirdParty contained passenger_turbocaching +syn keyword ngxDirectiveThirdParty contained passenger_user +syn keyword ngxDirectiveThirdParty contained passenger_user_switching +syn keyword ngxDirectiveThirdParty contained passenger_vary_turbocache_by_cookie +syn keyword ngxDirectiveThirdParty contained rack_env +syn keyword ngxDirectiveThirdParty contained rails_app_spawner_idle_time +syn keyword ngxDirectiveThirdParty contained rails_env +syn keyword ngxDirectiveThirdParty contained security_update_check_proxy +syn keyword ngxDirectiveThirdParty contained union_station_filter +syn keyword ngxDirectiveThirdParty contained union_station_gateway_address +syn keyword ngxDirectiveThirdParty contained union_station_gateway_cert +syn keyword ngxDirectiveThirdParty contained union_station_gateway_port syn keyword ngxDirectiveThirdParty contained union_station_key syn keyword ngxDirectiveThirdParty contained union_station_proxy_address -syn keyword ngxDirectiveThirdParty contained union_station_filter -syn keyword ngxDirectiveThirdParty contained union_station_gateway_address -syn keyword ngxDirectiveThirdParty contained union_station_gateway_port -syn keyword ngxDirectiveThirdParty contained union_station_gateway_cert -syn keyword ngxDirectiveDeprecated contained rails_spawn_method -syn keyword ngxDirectiveDeprecated contained passenger_debug_log_file +syn keyword ngxDirectiveThirdParty contained union_station_support +syn keyword ngxDirectiveThirdPartyDeprecated contained passenger_debug_log_file +syn keyword ngxDirectiveThirdPartyDeprecated contained passenger_use_global_queue +syn keyword ngxDirectiveThirdPartyDeprecated contained rails_framework_spawner_idle_time +syn keyword ngxDirectiveThirdPartyDeprecated contained rails_spawn_method -" Postgres Module -" Upstream module that allows nginx to communicate directly with PostgreSQL database. -syn keyword ngxDirectiveThirdParty contained postgres_server +" ngx_postgres is an upstream module that allows nginx to communicate directly with PostgreSQL database +" https://github.com/FRiCKLE/ngx_postgres +syn keyword ngxDirectiveThirdParty contained postgres_connect_timeout +syn keyword ngxDirectiveThirdParty contained postgres_escape syn keyword ngxDirectiveThirdParty contained postgres_keepalive +syn keyword ngxDirectiveThirdParty contained postgres_output syn keyword ngxDirectiveThirdParty contained postgres_pass syn keyword ngxDirectiveThirdParty contained postgres_query +syn keyword ngxDirectiveThirdParty contained postgres_result_timeout syn keyword ngxDirectiveThirdParty contained postgres_rewrite -syn keyword ngxDirectiveThirdParty contained postgres_output +syn keyword ngxDirectiveThirdParty contained postgres_server syn keyword ngxDirectiveThirdParty contained postgres_set -syn keyword ngxDirectiveThirdParty contained postgres_escape -syn keyword ngxDirectiveThirdParty contained postgres_connect_timeout -syn keyword ngxDirectiveThirdParty contained postgres_result_timeout -" Pubcookie Module -" Authorizes users using encrypted cookies -syn keyword ngxDirectiveThirdParty contained pubcookie_inactive_expire -syn keyword ngxDirectiveThirdParty contained pubcookie_hard_expire -syn keyword ngxDirectiveThirdParty contained pubcookie_app_id -syn keyword ngxDirectiveThirdParty contained pubcookie_dir_depth -syn keyword ngxDirectiveThirdParty contained pubcookie_catenate_app_ids -syn keyword ngxDirectiveThirdParty contained pubcookie_app_srv_id -syn keyword ngxDirectiveThirdParty contained pubcookie_login -syn keyword ngxDirectiveThirdParty contained pubcookie_login_method -syn keyword ngxDirectiveThirdParty contained pubcookie_post -syn keyword ngxDirectiveThirdParty contained pubcookie_domain -syn keyword ngxDirectiveThirdParty contained pubcookie_granting_cert_file -syn keyword ngxDirectiveThirdParty contained pubcookie_session_key_file -syn keyword ngxDirectiveThirdParty contained pubcookie_session_cert_file -syn keyword ngxDirectiveThirdParty contained pubcookie_crypt_key_file -syn keyword ngxDirectiveThirdParty contained pubcookie_end_session -syn keyword ngxDirectiveThirdParty contained pubcookie_encryption -syn keyword ngxDirectiveThirdParty contained pubcookie_session_reauth -syn keyword ngxDirectiveThirdParty contained pubcookie_auth_type_names -syn keyword ngxDirectiveThirdParty contained pubcookie_no_prompt -syn keyword ngxDirectiveThirdParty contained pubcookie_on_demand -syn keyword ngxDirectiveThirdParty contained pubcookie_addl_request -syn keyword ngxDirectiveThirdParty contained pubcookie_no_obscure_cookies -syn keyword ngxDirectiveThirdParty contained pubcookie_no_clean_creds -syn keyword ngxDirectiveThirdParty contained pubcookie_egd_device -syn keyword ngxDirectiveThirdParty contained pubcookie_no_blank -syn keyword ngxDirectiveThirdParty contained pubcookie_super_debug -syn keyword ngxDirectiveThirdParty contained pubcookie_set_remote_user +" ngx_rds_csv - Nginx output filter module to convert Resty-DBD-Streams (RDS) to Comma-Separated Values (CSV) +" https://github.com/openresty/rds-csv-nginx-module +syn keyword ngxDirectiveThirdParty contained rds_csv +syn keyword ngxDirectiveThirdParty contained rds_csv_buffer_size +syn keyword ngxDirectiveThirdParty contained rds_csv_content_type +syn keyword ngxDirectiveThirdParty contained rds_csv_field_name_header +syn keyword ngxDirectiveThirdParty contained rds_csv_field_separator +syn keyword ngxDirectiveThirdParty contained rds_csv_row_terminator -" Push Stream Module -" A pure stream http push technology for your Nginx setup -syn keyword ngxDirectiveThirdParty contained push_stream_channels_statistics -syn keyword ngxDirectiveThirdParty contained push_stream_publisher -syn keyword ngxDirectiveThirdParty contained push_stream_subscriber -syn keyword ngxDirectiveThirdParty contained push_stream_shared_memory_size -syn keyword ngxDirectiveThirdParty contained push_stream_channel_deleted_message_text -syn keyword ngxDirectiveThirdParty contained push_stream_channel_inactivity_time -syn keyword ngxDirectiveThirdParty contained push_stream_ping_message_text -syn keyword ngxDirectiveThirdParty contained push_stream_timeout_with_body -syn keyword ngxDirectiveThirdParty contained push_stream_message_ttl -syn keyword ngxDirectiveThirdParty contained push_stream_max_subscribers_per_channel -syn keyword ngxDirectiveThirdParty contained push_stream_max_messages_stored_per_channel -syn keyword ngxDirectiveThirdParty contained push_stream_max_channel_id_length -syn keyword ngxDirectiveThirdParty contained push_stream_max_number_of_channels -syn keyword ngxDirectiveThirdParty contained push_stream_max_number_of_wildcard_channels -syn keyword ngxDirectiveThirdParty contained push_stream_wildcard_channel_prefix -syn keyword ngxDirectiveThirdParty contained push_stream_events_channel_id -syn keyword ngxDirectiveThirdParty contained push_stream_channels_path -syn keyword ngxDirectiveThirdParty contained push_stream_store_messages -syn keyword ngxDirectiveThirdParty contained push_stream_channel_info_on_publish -syn keyword ngxDirectiveThirdParty contained push_stream_authorized_channels_only -syn keyword ngxDirectiveThirdParty contained push_stream_header_template_file -syn keyword ngxDirectiveThirdParty contained push_stream_header_template -syn keyword ngxDirectiveThirdParty contained push_stream_message_template -syn keyword ngxDirectiveThirdParty contained push_stream_footer_template -syn keyword ngxDirectiveThirdParty contained push_stream_wildcard_channel_max_qtd -syn keyword ngxDirectiveThirdParty contained push_stream_ping_message_interval -syn keyword ngxDirectiveThirdParty contained push_stream_subscriber_connection_ttl -syn keyword ngxDirectiveThirdParty contained push_stream_longpolling_connection_ttl -syn keyword ngxDirectiveThirdParty contained push_stream_websocket_allow_publish -syn keyword ngxDirectiveThirdParty contained push_stream_last_received_message_time -syn keyword ngxDirectiveThirdParty contained push_stream_last_received_message_tag -syn keyword ngxDirectiveThirdParty contained push_stream_last_event_id -syn keyword ngxDirectiveThirdParty contained push_stream_user_agent -syn keyword ngxDirectiveThirdParty contained push_stream_padding_by_user_agent -syn keyword ngxDirectiveThirdParty contained push_stream_allowed_origins -syn keyword ngxDirectiveThirdParty contained push_stream_allow_connections_to_events_channel - -" rDNS Module -" Make a reverse DNS (rDNS) lookup for incoming connection and provides simple access control of incoming hostname by allow/deny rules -syn keyword ngxDirectiveThirdParty contained rdns -syn keyword ngxDirectiveThirdParty contained rdns_allow -syn keyword ngxDirectiveThirdParty contained rdns_deny - -" RDS CSV Module -" Nginx output filter module to convert Resty-DBD-Streams (RDS) to Comma-Separated Values (CSV) -syn keyword ngxDirectiveThirdParty contained rds_csv -syn keyword ngxDirectiveThirdParty contained rds_csv_row_terminator -syn keyword ngxDirectiveThirdParty contained rds_csv_field_separator -syn keyword ngxDirectiveThirdParty contained rds_csv_field_name_header -syn keyword ngxDirectiveThirdParty contained rds_csv_content_type -syn keyword ngxDirectiveThirdParty contained rds_csv_buffer_size - -" RDS JSON Module -" An output filter that formats Resty DBD Streams generated by ngx_drizzle and others to JSON +" ngx_rds_json - an output filter that formats Resty DBD Streams generated by ngx_drizzle and others to JSON +" https://github.com/openresty/rds-json-nginx-module syn keyword ngxDirectiveThirdParty contained rds_json syn keyword ngxDirectiveThirdParty contained rds_json_buffer_size +syn keyword ngxDirectiveThirdParty contained rds_json_content_type +syn keyword ngxDirectiveThirdParty contained rds_json_errcode_key +syn keyword ngxDirectiveThirdParty contained rds_json_errstr_key syn keyword ngxDirectiveThirdParty contained rds_json_format +syn keyword ngxDirectiveThirdParty contained rds_json_ret syn keyword ngxDirectiveThirdParty contained rds_json_root syn keyword ngxDirectiveThirdParty contained rds_json_success_property syn keyword ngxDirectiveThirdParty contained rds_json_user_property -syn keyword ngxDirectiveThirdParty contained rds_json_errcode_key -syn keyword ngxDirectiveThirdParty contained rds_json_errstr_key -syn keyword ngxDirectiveThirdParty contained rds_json_ret -syn keyword ngxDirectiveThirdParty contained rds_json_content_type -" Redis Module -" Use this module to perform simple caching -syn keyword ngxDirectiveThirdParty contained redis_pass -syn keyword ngxDirectiveThirdParty contained redis_bind -syn keyword ngxDirectiveThirdParty contained redis_connect_timeout -syn keyword ngxDirectiveThirdParty contained redis_read_timeout -syn keyword ngxDirectiveThirdParty contained redis_send_timeout -syn keyword ngxDirectiveThirdParty contained redis_buffer_size -syn keyword ngxDirectiveThirdParty contained redis_next_upstream -syn keyword ngxDirectiveThirdParty contained redis_gzip_flag +" ngx_redis2 - Nginx upstream module for the Redis 2.0 protocol +" https://github.com/openresty/redis2-nginx-module +syn keyword ngxDirectiveThirdParty contained redis2_bind +syn keyword ngxDirectiveThirdParty contained redis2_buffer_size +syn keyword ngxDirectiveThirdParty contained redis2_connect_timeout +syn keyword ngxDirectiveThirdParty contained redis2_literal_raw_query +syn keyword ngxDirectiveThirdParty contained redis2_next_upstream +syn keyword ngxDirectiveThirdParty contained redis2_pass +syn keyword ngxDirectiveThirdParty contained redis2_query +syn keyword ngxDirectiveThirdParty contained redis2_raw_queries +syn keyword ngxDirectiveThirdParty contained redis2_raw_query +syn keyword ngxDirectiveThirdParty contained redis2_read_timeout +syn keyword ngxDirectiveThirdParty contained redis2_send_timeout -" Redis 2 Module -" Nginx upstream module for the Redis 2.0 protocol -syn keyword ngxDirectiveThirdParty contained redis2_query -syn keyword ngxDirectiveThirdParty contained redis2_raw_query -syn keyword ngxDirectiveThirdParty contained redis2_raw_queries -syn keyword ngxDirectiveThirdParty contained redis2_literal_raw_query -syn keyword ngxDirectiveThirdParty contained redis2_pass -syn keyword ngxDirectiveThirdParty contained redis2_connect_timeout -syn keyword ngxDirectiveThirdParty contained redis2_send_timeout -syn keyword ngxDirectiveThirdParty contained redis2_read_timeout -syn keyword ngxDirectiveThirdParty contained redis2_buffer_size -syn keyword ngxDirectiveThirdParty contained redis2_next_upstream - -" Replace Filter Module -" Streaming regular expression replacement in response bodies -syn keyword ngxDirectiveThirdParty contained replace_filter -syn keyword ngxDirectiveThirdParty contained replace_filter_types -syn keyword ngxDirectiveThirdParty contained replace_filter_max_buffered_size -syn keyword ngxDirectiveThirdParty contained replace_filter_last_modified -syn keyword ngxDirectiveThirdParty contained replace_filter_skip - -" Roboo Module -" HTTP Robot Mitigator - -" RRD Graph Module -" This module provides an HTTP interface to RRDtool's graphing facilities. -syn keyword ngxDirectiveThirdParty contained rrd_graph -syn keyword ngxDirectiveThirdParty contained rrd_graph_root - -" RTMP Module " NGINX-based Media Streaming Server -syn keyword ngxDirectiveThirdParty contained rtmp -" syn keyword ngxDirectiveThirdParty contained server -" syn keyword ngxDirectiveThirdParty contained listen +" https://github.com/arut/nginx-rtmp-module +syn keyword ngxDirectiveThirdParty contained ack_window syn keyword ngxDirectiveThirdParty contained application -" syn keyword ngxDirectiveThirdParty contained timeout +syn keyword ngxDirectiveThirdParty contained buffer +syn keyword ngxDirectiveThirdParty contained buflen +syn keyword ngxDirectiveThirdParty contained busy +syn keyword ngxDirectiveThirdParty contained chunk_size +syn keyword ngxDirectiveThirdParty contained dash +syn keyword ngxDirectiveThirdParty contained dash_cleanup +syn keyword ngxDirectiveThirdParty contained dash_fragment +syn keyword ngxDirectiveThirdParty contained dash_nested +syn keyword ngxDirectiveThirdParty contained dash_path +syn keyword ngxDirectiveThirdParty contained dash_playlist_length +syn keyword ngxDirectiveThirdParty contained drop_idle_publisher +syn keyword ngxDirectiveThirdParty contained exec +syn keyword ngxDirectiveThirdParty contained exec_block +syn keyword ngxDirectiveThirdParty contained exec_kill_signal +syn keyword ngxDirectiveThirdParty contained exec_options +syn keyword ngxDirectiveThirdParty contained exec_play +syn keyword ngxDirectiveThirdParty contained exec_play_done +syn keyword ngxDirectiveThirdParty contained exec_publish +syn keyword ngxDirectiveThirdParty contained exec_publish_done +syn keyword ngxDirectiveThirdParty contained exec_pull +syn keyword ngxDirectiveThirdParty contained exec_push +syn keyword ngxDirectiveThirdParty contained exec_record_done +syn keyword ngxDirectiveThirdParty contained exec_static +syn keyword ngxDirectiveThirdParty contained hls_audio_buffer_size +syn keyword ngxDirectiveThirdParty contained hls_base_url +syn keyword ngxDirectiveThirdParty contained hls_cleanup +syn keyword ngxDirectiveThirdParty contained hls_continuous +syn keyword ngxDirectiveThirdParty contained hls_fragment_naming +syn keyword ngxDirectiveThirdParty contained hls_fragment_naming_granularity +syn keyword ngxDirectiveThirdParty contained hls_fragment_slicing +syn keyword ngxDirectiveThirdParty contained hls_fragments_per_key +syn keyword ngxDirectiveThirdParty contained hls_key_path +syn keyword ngxDirectiveThirdParty contained hls_key_url +syn keyword ngxDirectiveThirdParty contained hls_keys +syn keyword ngxDirectiveThirdParty contained hls_max_audio_delay +syn keyword ngxDirectiveThirdParty contained hls_max_fragment +syn keyword ngxDirectiveThirdParty contained hls_muxdelay +syn keyword ngxDirectiveThirdParty contained hls_nested +syn keyword ngxDirectiveThirdParty contained hls_path +syn keyword ngxDirectiveThirdParty contained hls_playlist_length +syn keyword ngxDirectiveThirdParty contained hls_sync +syn keyword ngxDirectiveThirdParty contained hls_type +syn keyword ngxDirectiveThirdParty contained hls_variant +syn keyword ngxDirectiveThirdParty contained idle_streams +syn keyword ngxDirectiveThirdParty contained interleave +syn keyword ngxDirectiveThirdParty contained live +syn keyword ngxDirectiveThirdParty contained max_connections +syn keyword ngxDirectiveThirdParty contained max_message +syn keyword ngxDirectiveThirdParty contained max_streams +syn keyword ngxDirectiveThirdParty contained meta +syn keyword ngxDirectiveThirdParty contained netcall_buffer +syn keyword ngxDirectiveThirdParty contained netcall_timeout +syn keyword ngxDirectiveThirdParty contained notify_method +syn keyword ngxDirectiveThirdParty contained notify_relay_redirect +syn keyword ngxDirectiveThirdParty contained notify_update_strict +syn keyword ngxDirectiveThirdParty contained notify_update_timeout +syn keyword ngxDirectiveThirdParty contained on_connect +syn keyword ngxDirectiveThirdParty contained on_disconnect +syn keyword ngxDirectiveThirdParty contained on_done +syn keyword ngxDirectiveThirdParty contained on_play +syn keyword ngxDirectiveThirdParty contained on_play_done +syn keyword ngxDirectiveThirdParty contained on_publish +syn keyword ngxDirectiveThirdParty contained on_publish_done +syn keyword ngxDirectiveThirdParty contained on_record_done +syn keyword ngxDirectiveThirdParty contained on_update +syn keyword ngxDirectiveThirdParty contained out_cork +syn keyword ngxDirectiveThirdParty contained out_queue syn keyword ngxDirectiveThirdParty contained ping syn keyword ngxDirectiveThirdParty contained ping_timeout -syn keyword ngxDirectiveThirdParty contained max_streams -syn keyword ngxDirectiveThirdParty contained ack_window -syn keyword ngxDirectiveThirdParty contained chunk_size -syn keyword ngxDirectiveThirdParty contained max_queue -syn keyword ngxDirectiveThirdParty contained max_message -syn keyword ngxDirectiveThirdParty contained out_queue -syn keyword ngxDirectiveThirdParty contained out_cork -" syn keyword ngxDirectiveThirdParty contained allow -" syn keyword ngxDirectiveThirdParty contained deny -syn keyword ngxDirectiveThirdParty contained exec_push -syn keyword ngxDirectiveThirdParty contained exec_pull -syn keyword ngxDirectiveThirdParty contained exec -syn keyword ngxDirectiveThirdParty contained exec_options -syn keyword ngxDirectiveThirdParty contained exec_static -syn keyword ngxDirectiveThirdParty contained exec_kill_signal -syn keyword ngxDirectiveThirdParty contained respawn -syn keyword ngxDirectiveThirdParty contained respawn_timeout -syn keyword ngxDirectiveThirdParty contained exec_publish -syn keyword ngxDirectiveThirdParty contained exec_play -syn keyword ngxDirectiveThirdParty contained exec_play_done -syn keyword ngxDirectiveThirdParty contained exec_publish_done -syn keyword ngxDirectiveThirdParty contained exec_record_done -syn keyword ngxDirectiveThirdParty contained live -syn keyword ngxDirectiveThirdParty contained meta -syn keyword ngxDirectiveThirdParty contained interleave -syn keyword ngxDirectiveThirdParty contained wait_key -syn keyword ngxDirectiveThirdParty contained wait_video +syn keyword ngxDirectiveThirdParty contained play +syn keyword ngxDirectiveThirdParty contained play_local_path +syn keyword ngxDirectiveThirdParty contained play_restart +syn keyword ngxDirectiveThirdParty contained play_temp_path +syn keyword ngxDirectiveThirdParty contained play_time_fix syn keyword ngxDirectiveThirdParty contained publish_notify -syn keyword ngxDirectiveThirdParty contained drop_idle_publisher -syn keyword ngxDirectiveThirdParty contained sync -syn keyword ngxDirectiveThirdParty contained play_restart -syn keyword ngxDirectiveThirdParty contained idle_streams +syn keyword ngxDirectiveThirdParty contained publish_time_fix +syn keyword ngxDirectiveThirdParty contained pull +syn keyword ngxDirectiveThirdParty contained pull_reconnect +syn keyword ngxDirectiveThirdParty contained push +syn keyword ngxDirectiveThirdParty contained push_reconnect syn keyword ngxDirectiveThirdParty contained record +syn keyword ngxDirectiveThirdParty contained record_append +syn keyword ngxDirectiveThirdParty contained record_interval +syn keyword ngxDirectiveThirdParty contained record_lock +syn keyword ngxDirectiveThirdParty contained record_max_frames +syn keyword ngxDirectiveThirdParty contained record_max_size +syn keyword ngxDirectiveThirdParty contained record_notify syn keyword ngxDirectiveThirdParty contained record_path syn keyword ngxDirectiveThirdParty contained record_suffix syn keyword ngxDirectiveThirdParty contained record_unique -syn keyword ngxDirectiveThirdParty contained record_append -syn keyword ngxDirectiveThirdParty contained record_lock -syn keyword ngxDirectiveThirdParty contained record_max_size -syn keyword ngxDirectiveThirdParty contained record_max_frames -syn keyword ngxDirectiveThirdParty contained record_interval syn keyword ngxDirectiveThirdParty contained recorder -syn keyword ngxDirectiveThirdParty contained record_notify -syn keyword ngxDirectiveThirdParty contained play -syn keyword ngxDirectiveThirdParty contained play_temp_path -syn keyword ngxDirectiveThirdParty contained play_local_path -syn keyword ngxDirectiveThirdParty contained pull -syn keyword ngxDirectiveThirdParty contained push -syn keyword ngxDirectiveThirdParty contained push_reconnect -syn keyword ngxDirectiveThirdParty contained session_relay -syn keyword ngxDirectiveThirdParty contained on_connect -syn keyword ngxDirectiveThirdParty contained on_play -syn keyword ngxDirectiveThirdParty contained on_publish -syn keyword ngxDirectiveThirdParty contained on_done -syn keyword ngxDirectiveThirdParty contained on_play_done -syn keyword ngxDirectiveThirdParty contained on_publish_done -syn keyword ngxDirectiveThirdParty contained on_record_done -syn keyword ngxDirectiveThirdParty contained on_update -syn keyword ngxDirectiveThirdParty contained notify_update_timeout -syn keyword ngxDirectiveThirdParty contained notify_update_strict -syn keyword ngxDirectiveThirdParty contained notify_relay_redirect -syn keyword ngxDirectiveThirdParty contained notify_method -syn keyword ngxDirectiveThirdParty contained hls -syn keyword ngxDirectiveThirdParty contained hls_path -syn keyword ngxDirectiveThirdParty contained hls_fragment -syn keyword ngxDirectiveThirdParty contained hls_playlist_length -syn keyword ngxDirectiveThirdParty contained hls_sync -syn keyword ngxDirectiveThirdParty contained hls_continuous -syn keyword ngxDirectiveThirdParty contained hls_nested -syn keyword ngxDirectiveThirdParty contained hls_base_url -syn keyword ngxDirectiveThirdParty contained hls_cleanup -syn keyword ngxDirectiveThirdParty contained hls_fragment_naming -syn keyword ngxDirectiveThirdParty contained hls_fragment_slicing -syn keyword ngxDirectiveThirdParty contained hls_variant -syn keyword ngxDirectiveThirdParty contained hls_type -syn keyword ngxDirectiveThirdParty contained hls_keys -syn keyword ngxDirectiveThirdParty contained hls_key_path -syn keyword ngxDirectiveThirdParty contained hls_key_url -syn keyword ngxDirectiveThirdParty contained hls_fragments_per_key -syn keyword ngxDirectiveThirdParty contained dash -syn keyword ngxDirectiveThirdParty contained dash_path -syn keyword ngxDirectiveThirdParty contained dash_fragment -syn keyword ngxDirectiveThirdParty contained dash_playlist_length -syn keyword ngxDirectiveThirdParty contained dash_nested -syn keyword ngxDirectiveThirdParty contained dash_cleanup -" syn keyword ngxDirectiveThirdParty contained access_log -" syn keyword ngxDirectiveThirdParty contained log_format -syn keyword ngxDirectiveThirdParty contained max_connections +syn keyword ngxDirectiveThirdParty contained relay_buffer +syn keyword ngxDirectiveThirdParty contained respawn +syn keyword ngxDirectiveThirdParty contained respawn_timeout +syn keyword ngxDirectiveThirdParty contained rtmp +syn keyword ngxDirectiveThirdParty contained rtmp_auto_push +syn keyword ngxDirectiveThirdParty contained rtmp_auto_push_reconnect +syn keyword ngxDirectiveThirdParty contained rtmp_control +syn keyword ngxDirectiveThirdParty contained rtmp_socket_dir syn keyword ngxDirectiveThirdParty contained rtmp_stat syn keyword ngxDirectiveThirdParty contained rtmp_stat_stylesheet -syn keyword ngxDirectiveThirdParty contained rtmp_auto_push -syn keyword ngxDirectiveThirdParty contained rtmp_auto_push_reconnect -syn keyword ngxDirectiveThirdParty contained rtmp_socket_dir -syn keyword ngxDirectiveThirdParty contained rtmp_control +syn keyword ngxDirectiveThirdParty contained session_relay +syn keyword ngxDirectiveThirdParty contained so_keepalive +syn keyword ngxDirectiveThirdParty contained stream_buckets +syn keyword ngxDirectiveThirdParty contained sync +syn keyword ngxDirectiveThirdParty contained wait_key +syn keyword ngxDirectiveThirdParty contained wait_video -" RTMPT Module -" Module for nginx to proxy rtmp using http protocol -syn keyword ngxDirectiveThirdParty contained rtmpt_proxy_target -syn keyword ngxDirectiveThirdParty contained rtmpt_proxy_rtmp_timeout -syn keyword ngxDirectiveThirdParty contained rtmpt_proxy_http_timeout -syn keyword ngxDirectiveThirdParty contained rtmpt_proxy -syn keyword ngxDirectiveThirdParty contained rtmpt_proxy_stat -syn keyword ngxDirectiveThirdParty contained rtmpt_proxy_stylesheet - -" Syntactically Awesome Module -" Providing on-the-fly compiling of Sass files as an NGINX module. -syn keyword ngxDirectiveThirdParty contained sass_compile -syn keyword ngxDirectiveThirdParty contained sass_error_log -syn keyword ngxDirectiveThirdParty contained sass_include_path -syn keyword ngxDirectiveThirdParty contained sass_indent -syn keyword ngxDirectiveThirdParty contained sass_is_indented_syntax -syn keyword ngxDirectiveThirdParty contained sass_linefeed -syn keyword ngxDirectiveThirdParty contained sass_precision -syn keyword ngxDirectiveThirdParty contained sass_output_style -syn keyword ngxDirectiveThirdParty contained sass_source_comments -syn keyword ngxDirectiveThirdParty contained sass_source_map_embed - -" Secure Download Module -" Enables you to create links which are only valid until a certain datetime is reached -syn keyword ngxDirectiveThirdParty contained secure_download -syn keyword ngxDirectiveThirdParty contained secure_download_secret -syn keyword ngxDirectiveThirdParty contained secure_download_path_mode - -" Selective Cache Purge Module -" A module to purge cache by GLOB patterns. The supported patterns are the same as supported by Redis. -syn keyword ngxDirectiveThirdParty contained selective_cache_purge_redis_unix_socket -syn keyword ngxDirectiveThirdParty contained selective_cache_purge_redis_host -syn keyword ngxDirectiveThirdParty contained selective_cache_purge_redis_port -syn keyword ngxDirectiveThirdParty contained selective_cache_purge_redis_database -syn keyword ngxDirectiveThirdParty contained selective_cache_purge_query - -" Set cconv Module -" Cconv rewrite set commands -syn keyword ngxDirectiveThirdParty contained set_cconv_to_simp -syn keyword ngxDirectiveThirdParty contained set_cconv_to_trad -syn keyword ngxDirectiveThirdParty contained set_pinyin_to_normal - -" Set Hash Module -" Nginx module that allows the setting of variables to the value of a variety of hashes -syn keyword ngxDirectiveThirdParty contained set_md5 -syn keyword ngxDirectiveThirdParty contained set_md5_upper -syn keyword ngxDirectiveThirdParty contained set_murmur2 -syn keyword ngxDirectiveThirdParty contained set_murmur2_upper -syn keyword ngxDirectiveThirdParty contained set_sha1 -syn keyword ngxDirectiveThirdParty contained set_sha1_upper - -" Set Lang Module -" Provides a variety of ways for setting a variable denoting the langauge that content should be returned in. -syn keyword ngxDirectiveThirdParty contained set_lang -syn keyword ngxDirectiveThirdParty contained set_lang_method -syn keyword ngxDirectiveThirdParty contained lang_cookie -syn keyword ngxDirectiveThirdParty contained lang_get_var -syn keyword ngxDirectiveThirdParty contained lang_list -syn keyword ngxDirectiveThirdParty contained lang_post_var -syn keyword ngxDirectiveThirdParty contained lang_host -syn keyword ngxDirectiveThirdParty contained lang_referer - -" Set Misc Module -" Various set_xxx directives added to nginx's rewrite module +" ngx_set_misc - Various set_xxx directives added to nginx's rewrite module (md5/sha1, sql/json quoting, and many more) +" https://github.com/openresty/set-misc-nginx-module +syn keyword ngxDirectiveThirdParty contained set_base32_alphabet +syn keyword ngxDirectiveThirdParty contained set_base32_padding +syn keyword ngxDirectiveThirdParty contained set_decode_base32 +syn keyword ngxDirectiveThirdParty contained set_decode_base64 +syn keyword ngxDirectiveThirdParty contained set_decode_hex +syn keyword ngxDirectiveThirdParty contained set_encode_base32 +syn keyword ngxDirectiveThirdParty contained set_encode_base64 +syn keyword ngxDirectiveThirdParty contained set_encode_hex +syn keyword ngxDirectiveThirdParty contained set_escape_uri +syn keyword ngxDirectiveThirdParty contained set_formatted_gmt_time +syn keyword ngxDirectiveThirdParty contained set_formatted_local_time +syn keyword ngxDirectiveThirdParty contained set_hashed_upstream +syn keyword ngxDirectiveThirdParty contained set_hmac_sha1 syn keyword ngxDirectiveThirdParty contained set_if_empty +syn keyword ngxDirectiveThirdParty contained set_local_today +syn keyword ngxDirectiveThirdParty contained set_misc_base32_padding +syn keyword ngxDirectiveThirdParty contained set_quote_json_str +syn keyword ngxDirectiveThirdParty contained set_quote_pgsql_str syn keyword ngxDirectiveThirdParty contained set_quote_sql_str -syn keyword ngxDirectiveThirdParty contained set_quote_pgsql_str -syn keyword ngxDirectiveThirdParty contained set_quote_json_str -syn keyword ngxDirectiveThirdParty contained set_unescape_uri -syn keyword ngxDirectiveThirdParty contained set_escape_uri -syn keyword ngxDirectiveThirdParty contained set_hashed_upstream -syn keyword ngxDirectiveThirdParty contained set_encode_base32 -syn keyword ngxDirectiveThirdParty contained set_base32_padding -syn keyword ngxDirectiveThirdParty contained set_misc_base32_padding -syn keyword ngxDirectiveThirdParty contained set_base32_alphabet -syn keyword ngxDirectiveThirdParty contained set_decode_base32 -syn keyword ngxDirectiveThirdParty contained set_encode_base64 -syn keyword ngxDirectiveThirdParty contained set_decode_base64 -syn keyword ngxDirectiveThirdParty contained set_encode_hex -syn keyword ngxDirectiveThirdParty contained set_decode_hex -syn keyword ngxDirectiveThirdParty contained set_sha1 -syn keyword ngxDirectiveThirdParty contained set_md5 -syn keyword ngxDirectiveThirdParty contained set_hmac_sha1 syn keyword ngxDirectiveThirdParty contained set_random +syn keyword ngxDirectiveThirdParty contained set_rotate syn keyword ngxDirectiveThirdParty contained set_secure_random_alphanum syn keyword ngxDirectiveThirdParty contained set_secure_random_lcalpha -syn keyword ngxDirectiveThirdParty contained set_rotate -syn keyword ngxDirectiveThirdParty contained set_local_today -syn keyword ngxDirectiveThirdParty contained set_formatted_gmt_time -syn keyword ngxDirectiveThirdParty contained set_formatted_local_time +syn keyword ngxDirectiveThirdParty contained set_unescape_uri -" SFlow Module -" A binary, random-sampling nginx module designed for: lightweight, centralized, continuous, real-time monitoring of very large and very busy web farms. +" nginx-sflow-module +" https://github.com/sflow/nginx-sflow-module syn keyword ngxDirectiveThirdParty contained sflow -" Shibboleth Module -" Shibboleth auth request module for nginx +" Shibboleth auth request module for Nginx +" https://github.com/nginx-shib/nginx-http-shibboleth syn keyword ngxDirectiveThirdParty contained shib_request syn keyword ngxDirectiveThirdParty contained shib_request_set syn keyword ngxDirectiveThirdParty contained shib_request_use_headers -" Slice Module -" Nginx module for serving a file in slices (reverse byte-range) -" syn keyword ngxDirectiveThirdParty contained slice -syn keyword ngxDirectiveThirdParty contained slice_arg_begin -syn keyword ngxDirectiveThirdParty contained slice_arg_end -syn keyword ngxDirectiveThirdParty contained slice_header -syn keyword ngxDirectiveThirdParty contained slice_footer -syn keyword ngxDirectiveThirdParty contained slice_header_first -syn keyword ngxDirectiveThirdParty contained slice_footer_last - -" SlowFS Cache Module -" Module adding ability to cache static files. +" nginx module which adds ability to cache static files +" https://github.com/FRiCKLE/ngx_slowfs_cache syn keyword ngxDirectiveThirdParty contained slowfs_big_file_size syn keyword ngxDirectiveThirdParty contained slowfs_cache syn keyword ngxDirectiveThirdParty contained slowfs_cache_key @@ -1813,350 +1635,586 @@ syn keyword ngxDirectiveThirdParty contained slowfs_cache_valid syn keyword ngxDirectiveThirdParty contained slowfs_temp_path -" Small Light Module -" Dynamic Image Transformation Module For nginx. +" Dynamic Image Transformation Module For nginx +" https://github.com/cubicdaiya/ngx_small_light syn keyword ngxDirectiveThirdParty contained small_light +syn keyword ngxDirectiveThirdParty contained small_light_buffer syn keyword ngxDirectiveThirdParty contained small_light_getparam_mode +syn keyword ngxDirectiveThirdParty contained small_light_imlib2_temp_dir syn keyword ngxDirectiveThirdParty contained small_light_material_dir syn keyword ngxDirectiveThirdParty contained small_light_pattern_define syn keyword ngxDirectiveThirdParty contained small_light_radius_max syn keyword ngxDirectiveThirdParty contained small_light_sigma_max -syn keyword ngxDirectiveThirdParty contained small_light_imlib2_temp_dir -syn keyword ngxDirectiveThirdParty contained small_light_buffer -" Sorted Querystring Filter Module -" Nginx module to expose querystring parameters sorted in a variable to be used on cache_key as example -syn keyword ngxDirectiveThirdParty contained sorted_querystring_filter_parameter - -" Sphinx2 Module -" Nginx upstream module for Sphinx 2.x -syn keyword ngxDirectiveThirdParty contained sphinx2_pass -syn keyword ngxDirectiveThirdParty contained sphinx2_bind -syn keyword ngxDirectiveThirdParty contained sphinx2_connect_timeout -syn keyword ngxDirectiveThirdParty contained sphinx2_send_timeout -syn keyword ngxDirectiveThirdParty contained sphinx2_buffer_size -syn keyword ngxDirectiveThirdParty contained sphinx2_read_timeout -syn keyword ngxDirectiveThirdParty contained sphinx2_next_upstream - -" HTTP SPNEGO auth Module -" This module implements adds SPNEGO support to nginx(http://nginx.org). It currently supports only Kerberos authentication via GSSAPI -syn keyword ngxDirectiveThirdParty contained auth_gss -syn keyword ngxDirectiveThirdParty contained auth_gss_keytab -syn keyword ngxDirectiveThirdParty contained auth_gss_realm -syn keyword ngxDirectiveThirdParty contained auth_gss_service_name -syn keyword ngxDirectiveThirdParty contained auth_gss_authorized_principal -syn keyword ngxDirectiveThirdParty contained auth_gss_allow_basic_fallback - -" SR Cache Module -" Transparent subrequest-based caching layout for arbitrary nginx locations +" ngx_srcache - Transparent subrequest-based caching layout for arbitrary nginx locations +" https://github.com/openresty/srcache-nginx-module +syn keyword ngxDirectiveThirdParty contained srcache_buffer +syn keyword ngxDirectiveThirdParty contained srcache_default_expire syn keyword ngxDirectiveThirdParty contained srcache_fetch syn keyword ngxDirectiveThirdParty contained srcache_fetch_skip +syn keyword ngxDirectiveThirdParty contained srcache_header_buffer_size +syn keyword ngxDirectiveThirdParty contained srcache_ignore_content_encoding +syn keyword ngxDirectiveThirdParty contained srcache_max_expire +syn keyword ngxDirectiveThirdParty contained srcache_methods +syn keyword ngxDirectiveThirdParty contained srcache_request_cache_control +syn keyword ngxDirectiveThirdParty contained srcache_response_cache_control syn keyword ngxDirectiveThirdParty contained srcache_store +syn keyword ngxDirectiveThirdParty contained srcache_store_hide_header syn keyword ngxDirectiveThirdParty contained srcache_store_max_size +syn keyword ngxDirectiveThirdParty contained srcache_store_no_cache +syn keyword ngxDirectiveThirdParty contained srcache_store_no_store +syn keyword ngxDirectiveThirdParty contained srcache_store_pass_header +syn keyword ngxDirectiveThirdParty contained srcache_store_private +syn keyword ngxDirectiveThirdParty contained srcache_store_ranges syn keyword ngxDirectiveThirdParty contained srcache_store_skip syn keyword ngxDirectiveThirdParty contained srcache_store_statuses -syn keyword ngxDirectiveThirdParty contained srcache_store_ranges -syn keyword ngxDirectiveThirdParty contained srcache_header_buffer_size -syn keyword ngxDirectiveThirdParty contained srcache_store_hide_header -syn keyword ngxDirectiveThirdParty contained srcache_store_pass_header -syn keyword ngxDirectiveThirdParty contained srcache_methods -syn keyword ngxDirectiveThirdParty contained srcache_ignore_content_encoding -syn keyword ngxDirectiveThirdParty contained srcache_request_cache_control -syn keyword ngxDirectiveThirdParty contained srcache_response_cache_control -syn keyword ngxDirectiveThirdParty contained srcache_store_no_store -syn keyword ngxDirectiveThirdParty contained srcache_store_no_cache -syn keyword ngxDirectiveThirdParty contained srcache_store_private -syn keyword ngxDirectiveThirdParty contained srcache_default_expire -syn keyword ngxDirectiveThirdParty contained srcache_max_expire -" SSSD Info Module -" Retrives additional attributes from SSSD for current authentizated user +" NGINX-based VOD Packager +" https://github.com/kaltura/nginx-vod-module +syn keyword ngxDirectiveThirdParty contained vod +syn keyword ngxDirectiveThirdParty contained vod_align_segments_to_key_frames +syn keyword ngxDirectiveThirdParty contained vod_apply_dynamic_mapping +syn keyword ngxDirectiveThirdParty contained vod_base_url +syn keyword ngxDirectiveThirdParty contained vod_bootstrap_segment_durations +syn keyword ngxDirectiveThirdParty contained vod_cache_buffer_size +syn keyword ngxDirectiveThirdParty contained vod_clip_from_param_name +syn keyword ngxDirectiveThirdParty contained vod_clip_to_param_name +syn keyword ngxDirectiveThirdParty contained vod_drm_clear_lead_segment_count +syn keyword ngxDirectiveThirdParty contained vod_drm_enabled +syn keyword ngxDirectiveThirdParty contained vod_drm_info_cache +syn keyword ngxDirectiveThirdParty contained vod_drm_max_info_length +syn keyword ngxDirectiveThirdParty contained vod_drm_request_uri +syn keyword ngxDirectiveThirdParty contained vod_drm_single_key +syn keyword ngxDirectiveThirdParty contained vod_drm_upstream_location +syn keyword ngxDirectiveThirdParty contained vod_dynamic_clip_map_uri +syn keyword ngxDirectiveThirdParty contained vod_dynamic_mapping_cache +syn keyword ngxDirectiveThirdParty contained vod_encryption_iv_seed +syn keyword ngxDirectiveThirdParty contained vod_expires +syn keyword ngxDirectiveThirdParty contained vod_expires_live +syn keyword ngxDirectiveThirdParty contained vod_expires_live_time_dependent +syn keyword ngxDirectiveThirdParty contained vod_fallback_upstream_location +syn keyword ngxDirectiveThirdParty contained vod_force_continuous_timestamps +syn keyword ngxDirectiveThirdParty contained vod_force_playlist_type_vod +syn keyword ngxDirectiveThirdParty contained vod_gop_look_ahead +syn keyword ngxDirectiveThirdParty contained vod_gop_look_behind +syn keyword ngxDirectiveThirdParty contained vod_ignore_edit_list +syn keyword ngxDirectiveThirdParty contained vod_initial_read_size +syn keyword ngxDirectiveThirdParty contained vod_lang_param_name +syn keyword ngxDirectiveThirdParty contained vod_last_modified +syn keyword ngxDirectiveThirdParty contained vod_last_modified_types +syn keyword ngxDirectiveThirdParty contained vod_live_mapping_cache +syn keyword ngxDirectiveThirdParty contained vod_live_response_cache +syn keyword ngxDirectiveThirdParty contained vod_live_window_duration +syn keyword ngxDirectiveThirdParty contained vod_manifest_duration_policy +syn keyword ngxDirectiveThirdParty contained vod_manifest_segment_durations_mode +syn keyword ngxDirectiveThirdParty contained vod_mapping_cache +syn keyword ngxDirectiveThirdParty contained vod_max_frames_size +syn keyword ngxDirectiveThirdParty contained vod_max_mapping_response_size +syn keyword ngxDirectiveThirdParty contained vod_max_metadata_size +syn keyword ngxDirectiveThirdParty contained vod_max_upstream_headers_size +syn keyword ngxDirectiveThirdParty contained vod_media_set_map_uri +syn keyword ngxDirectiveThirdParty contained vod_media_set_override_json +syn keyword ngxDirectiveThirdParty contained vod_metadata_cache +syn keyword ngxDirectiveThirdParty contained vod_min_single_nalu_per_frame_segment +syn keyword ngxDirectiveThirdParty contained vod_mode +syn keyword ngxDirectiveThirdParty contained vod_multi_uri_suffix +syn keyword ngxDirectiveThirdParty contained vod_notification_uri +syn keyword ngxDirectiveThirdParty contained vod_open_file_thread_pool +syn keyword ngxDirectiveThirdParty contained vod_output_buffer_pool +syn keyword ngxDirectiveThirdParty contained vod_parse_hdlr_name +syn keyword ngxDirectiveThirdParty contained vod_path_response_postfix +syn keyword ngxDirectiveThirdParty contained vod_path_response_prefix +syn keyword ngxDirectiveThirdParty contained vod_performance_counters +syn keyword ngxDirectiveThirdParty contained vod_proxy_header_name +syn keyword ngxDirectiveThirdParty contained vod_proxy_header_value +syn keyword ngxDirectiveThirdParty contained vod_redirect_segments_url +syn keyword ngxDirectiveThirdParty contained vod_remote_upstream_location +syn keyword ngxDirectiveThirdParty contained vod_response_cache +syn keyword ngxDirectiveThirdParty contained vod_secret_key +syn keyword ngxDirectiveThirdParty contained vod_segment_count_policy +syn keyword ngxDirectiveThirdParty contained vod_segment_duration +syn keyword ngxDirectiveThirdParty contained vod_segments_base_url +syn keyword ngxDirectiveThirdParty contained vod_source_clip_map_uri +syn keyword ngxDirectiveThirdParty contained vod_speed_param_name +syn keyword ngxDirectiveThirdParty contained vod_status +syn keyword ngxDirectiveThirdParty contained vod_time_shift_param_name +syn keyword ngxDirectiveThirdParty contained vod_tracks_param_name +syn keyword ngxDirectiveThirdParty contained vod_upstream_extra_args +syn keyword ngxDirectiveThirdParty contained vod_upstream_location + +" Nginx virtual host traffic status module +" https://github.com/vozlt/nginx-module-vts +syn keyword ngxDirectiveThirdParty contained vhost_traffic_status +syn keyword ngxDirectiveThirdParty contained vhost_traffic_status_average_method +syn keyword ngxDirectiveThirdParty contained vhost_traffic_status_bypass_limit +syn keyword ngxDirectiveThirdParty contained vhost_traffic_status_bypass_stats +syn keyword ngxDirectiveThirdParty contained vhost_traffic_status_display +syn keyword ngxDirectiveThirdParty contained vhost_traffic_status_display_format +syn keyword ngxDirectiveThirdParty contained vhost_traffic_status_display_jsonp +syn keyword ngxDirectiveThirdParty contained vhost_traffic_status_display_sum_key +syn keyword ngxDirectiveThirdParty contained vhost_traffic_status_dump +syn keyword ngxDirectiveThirdParty contained vhost_traffic_status_filter +syn keyword ngxDirectiveThirdParty contained vhost_traffic_status_filter_by_host +syn keyword ngxDirectiveThirdParty contained vhost_traffic_status_filter_by_set_key +syn keyword ngxDirectiveThirdParty contained vhost_traffic_status_filter_check_duplicate +syn keyword ngxDirectiveThirdParty contained vhost_traffic_status_limit +syn keyword ngxDirectiveThirdParty contained vhost_traffic_status_limit_check_duplicate +syn keyword ngxDirectiveThirdParty contained vhost_traffic_status_limit_traffic +syn keyword ngxDirectiveThirdParty contained vhost_traffic_status_limit_traffic_by_set_key +syn keyword ngxDirectiveThirdParty contained vhost_traffic_status_set_by_filter +syn keyword ngxDirectiveThirdParty contained vhost_traffic_status_zone + +" xss-nginx-module - Native cross-site scripting support in nginx +" https://github.com/openresty/xss-nginx-module +syn keyword ngxDirectiveThirdParty contained xss_callback_arg +syn keyword ngxDirectiveThirdParty contained xss_check_status +syn keyword ngxDirectiveThirdParty contained xss_get +syn keyword ngxDirectiveThirdParty contained xss_input_types +syn keyword ngxDirectiveThirdParty contained xss_output_type +syn keyword ngxDirectiveThirdParty contained xss_override_status + +" Add support for array-typed variables to nginx config files +" https://github.com/openresty/array-var-nginx-module +syn keyword ngxDirectiveThirdParty contained array_join +syn keyword ngxDirectiveThirdParty contained array_map +syn keyword ngxDirectiveThirdParty contained array_map_op +syn keyword ngxDirectiveThirdParty contained array_split + +" NGINX module for Brotli compression +" https://github.com/eustas/ngx_brotli +syn keyword ngxDirectiveThirdParty contained brotli +syn keyword ngxDirectiveThirdParty contained brotli_buffers +syn keyword ngxDirectiveThirdParty contained brotli_comp_level +syn keyword ngxDirectiveThirdParty contained brotli_min_length +syn keyword ngxDirectiveThirdParty contained brotli_static +syn keyword ngxDirectiveThirdParty contained brotli_types +syn keyword ngxDirectiveThirdParty contained brotli_window + +" form-input-nginx-module +" https://github.com/calio/form-input-nginx-module +syn keyword ngxDirectiveThirdParty contained set_form_input +syn keyword ngxDirectiveThirdParty contained set_form_input_multi + +" character conversion nginx module using libiconv +" https://github.com/calio/iconv-nginx-module +syn keyword ngxDirectiveThirdParty contained iconv_buffer_size +syn keyword ngxDirectiveThirdParty contained iconv_filter +syn keyword ngxDirectiveThirdParty contained set_iconv + +" 3rd party modules list taken from +" https://www.nginx.com/resources/wiki/modules/ +" --------------------------------------------- + +" Nginx Module for Authenticating Akamai G2O requests +" https://github.com/kaltura/nginx_mod_akamai_g2o +syn keyword ngxDirectiveThirdParty contained g2o +syn keyword ngxDirectiveThirdParty contained g2o_data_header +syn keyword ngxDirectiveThirdParty contained g2o_hash_function +syn keyword ngxDirectiveThirdParty contained g2o_key +syn keyword ngxDirectiveThirdParty contained g2o_log_level +syn keyword ngxDirectiveThirdParty contained g2o_nonce +syn keyword ngxDirectiveThirdParty contained g2o_sign_header +syn keyword ngxDirectiveThirdParty contained g2o_time_window +syn keyword ngxDirectiveThirdParty contained g2o_version + +" nginx_lua_module +" https://github.com/alacner/nginx_lua_module +syn keyword ngxDirectiveThirdParty contained lua_file + +" Nginx Audio Track for HTTP Live Streaming +" https://github.com/flavioribeiro/nginx-audio-track-for-hls-module +syn keyword ngxDirectiveThirdParty contained ngx_hls_audio_track +syn keyword ngxDirectiveThirdParty contained ngx_hls_audio_track_output_format +syn keyword ngxDirectiveThirdParty contained ngx_hls_audio_track_output_header +syn keyword ngxDirectiveThirdParty contained ngx_hls_audio_track_rootpath + +" A Nginx module to dump backtrace when a worker process exits abnormally +" https://github.com/alibaba/nginx-backtrace +syn keyword ngxDirectiveThirdParty contained backtrace_log +syn keyword ngxDirectiveThirdParty contained backtrace_max_stack_size + +" circle_gif module +" https://github.com/evanmiller/nginx_circle_gif +syn keyword ngxDirectiveThirdParty contained circle_gif +syn keyword ngxDirectiveThirdParty contained circle_gif_max_radius +syn keyword ngxDirectiveThirdParty contained circle_gif_min_radius +syn keyword ngxDirectiveThirdParty contained circle_gif_step_radius + +" Upstream Consistent Hash +" https://github.com/replay/ngx_http_consistent_hash +syn keyword ngxDirectiveThirdParty contained consistent_hash + +" Nginx module for etags on dynamic content +" https://github.com/kali/nginx-dynamic-etags +syn keyword ngxDirectiveThirdParty contained dynamic_etags + +" Enhanced Nginx Memcached Module +" https://github.com/bpaquet/ngx_http_enhanced_memcached_module +syn keyword ngxDirectiveThirdParty contained enhanced_memcached_allow_delete +syn keyword ngxDirectiveThirdParty contained enhanced_memcached_allow_put +syn keyword ngxDirectiveThirdParty contained enhanced_memcached_bind +syn keyword ngxDirectiveThirdParty contained enhanced_memcached_buffer_size +syn keyword ngxDirectiveThirdParty contained enhanced_memcached_connect_timeout +syn keyword ngxDirectiveThirdParty contained enhanced_memcached_flush +syn keyword ngxDirectiveThirdParty contained enhanced_memcached_flush_namespace +syn keyword ngxDirectiveThirdParty contained enhanced_memcached_hash_keys_with_md5 +syn keyword ngxDirectiveThirdParty contained enhanced_memcached_pass +syn keyword ngxDirectiveThirdParty contained enhanced_memcached_read_timeout +syn keyword ngxDirectiveThirdParty contained enhanced_memcached_send_timeout +syn keyword ngxDirectiveThirdParty contained enhanced_memcached_stats + +" nginx max connections queue +" https://github.com/ezmobius/nginx-ey-balancer +syn keyword ngxDirectiveThirdParty contained max_connections_max_queue_length +syn keyword ngxDirectiveThirdParty contained max_connections_queue_timeout + +" Nginx module for POST authentication and authorization +" https://github.com/veruu/ngx_form_auth +syn keyword ngxDirectiveThirdParty contained form_auth +syn keyword ngxDirectiveThirdParty contained form_auth_login +syn keyword ngxDirectiveThirdParty contained form_auth_pam_service +syn keyword ngxDirectiveThirdParty contained form_auth_password +syn keyword ngxDirectiveThirdParty contained form_auth_remote_user + +" ngx_http_accounting_module +" https://github.com/Lax/ngx_http_accounting_module +syn keyword ngxDirectiveThirdParty contained http_accounting +syn keyword ngxDirectiveThirdParty contained http_accounting_id +syn keyword ngxDirectiveThirdParty contained http_accounting_interval +syn keyword ngxDirectiveThirdParty contained http_accounting_log +syn keyword ngxDirectiveThirdParty contained http_accounting_perturb + +" concatenating files in a given context: CSS and JS files usually +" https://github.com/alibaba/nginx-http-concat +syn keyword ngxDirectiveThirdParty contained concat +syn keyword ngxDirectiveThirdParty contained concat_delimiter +syn keyword ngxDirectiveThirdParty contained concat_ignore_file_error +syn keyword ngxDirectiveThirdParty contained concat_max_files +syn keyword ngxDirectiveThirdParty contained concat_types +syn keyword ngxDirectiveThirdParty contained concat_unique + +" update upstreams' config by restful interface +" https://github.com/yzprofile/ngx_http_dyups_module +syn keyword ngxDirectiveThirdParty contained dyups_interface +syn keyword ngxDirectiveThirdParty contained dyups_read_msg_log +syn keyword ngxDirectiveThirdParty contained dyups_read_msg_timeout +syn keyword ngxDirectiveThirdParty contained dyups_shm_zone_size +syn keyword ngxDirectiveThirdParty contained dyups_trylock +syn keyword ngxDirectiveThirdParty contained dyups_upstream_conf + +" add given content to the end of the response according to the condition specified +" https://github.com/flygoast/ngx_http_footer_if_filter +syn keyword ngxDirectiveThirdParty contained footer_if + +" NGINX HTTP Internal Redirect Module +" https://github.com/flygoast/ngx_http_internal_redirect +syn keyword ngxDirectiveThirdParty contained internal_redirect_if +syn keyword ngxDirectiveThirdParty contained internal_redirect_if_no_postpone + +" nginx-ip-blocker +" https://github.com/tmthrgd/nginx-ip-blocker +syn keyword ngxDirectiveThirdParty contained ip_blocker + +" IP2Location Nginx +" https://github.com/chrislim2888/ip2location-nginx +syn keyword ngxDirectiveThirdParty contained ip2location_database + +" Limit upload rate +" https://github.com/cfsego/limit_upload_rate +syn keyword ngxDirectiveThirdParty contained limit_upload_rate +syn keyword ngxDirectiveThirdParty contained limit_upload_rate_after +syn keyword ngxDirectiveThirdParty contained limit_upload_rate_log_level + +" limit the number of connections to upstream +" https://github.com/cfsego/nginx-limit-upstream +syn keyword ngxDirectiveThirdParty contained limit_upstream_conn +syn keyword ngxDirectiveThirdParty contained limit_upstream_log_level +syn keyword ngxDirectiveThirdParty contained limit_upstream_zone + +" conditional accesslog for nginx +" https://github.com/cfsego/ngx_log_if +syn keyword ngxDirectiveThirdParty contained access_log_bypass_if + +" log messages over ZeroMQ +" https://github.com/alticelabs/nginx-log-zmq +syn keyword ngxDirectiveThirdParty contained log_zmq_endpoint +syn keyword ngxDirectiveThirdParty contained log_zmq_format +syn keyword ngxDirectiveThirdParty contained log_zmq_off +syn keyword ngxDirectiveThirdParty contained log_zmq_server + +" simple module to uppercase/lowercase strings in the nginx config +" https://github.com/replay/ngx_http_lower_upper_case +syn keyword ngxDirectiveThirdParty contained lower +syn keyword ngxDirectiveThirdParty contained upper + +" content filter for nginx, which returns the md5 hash of the content otherwise returned +" https://github.com/kainswor/nginx_md5_filter +syn keyword ngxDirectiveThirdParty contained md5_filter + +" Non-blocking upstream module for Nginx to connect to MongoDB +" https://github.com/simpl/ngx_mongo +syn keyword ngxDirectiveThirdParty contained mongo_auth +syn keyword ngxDirectiveThirdParty contained mongo_bind +syn keyword ngxDirectiveThirdParty contained mongo_buffer_size +syn keyword ngxDirectiveThirdParty contained mongo_buffering +syn keyword ngxDirectiveThirdParty contained mongo_buffers +syn keyword ngxDirectiveThirdParty contained mongo_busy_buffers_size +syn keyword ngxDirectiveThirdParty contained mongo_connect_timeout +syn keyword ngxDirectiveThirdParty contained mongo_json +syn keyword ngxDirectiveThirdParty contained mongo_next_upstream +syn keyword ngxDirectiveThirdParty contained mongo_pass +syn keyword ngxDirectiveThirdParty contained mongo_query +syn keyword ngxDirectiveThirdParty contained mongo_read_timeout +syn keyword ngxDirectiveThirdParty contained mongo_send_timeout + +" Nginx OCSP processing module designed for response caching +" https://github.com/kyprizel/nginx_ocsp_proxy-module +syn keyword ngxDirectiveThirdParty contained ocsp_cache_timeout +syn keyword ngxDirectiveThirdParty contained ocsp_proxy + +" Nginx OpenSSL version check at startup +" https://github.com/apcera/nginx-openssl-version +syn keyword ngxDirectiveThirdParty contained openssl_builddate_minimum +syn keyword ngxDirectiveThirdParty contained openssl_version_minimum + +" Automatic PageSpeed optimization module for Nginx +" https://github.com/pagespeed/ngx_pagespeed +syn keyword ngxDirectiveThirdParty contained pagespeed + +" PECL Memcache standard hashing compatible loadbalancer for Nginx +" https://github.com/replay/ngx_http_php_memcache_standard_balancer +syn keyword ngxDirectiveThirdParty contained hash_key + +" nginx module to parse php sessions +" https://github.com/replay/ngx_http_php_session +syn keyword ngxDirectiveThirdParty contained php_session_parse +syn keyword ngxDirectiveThirdParty contained php_session_strip_formatting + +" Nginx HTTP rDNS module +" https://github.com/flant/nginx-http-rdns +syn keyword ngxDirectiveThirdParty contained rdns +syn keyword ngxDirectiveThirdParty contained rdns_allow +syn keyword ngxDirectiveThirdParty contained rdns_deny + +" Streaming regular expression replacement in response bodies +" https://github.com/openresty/replace-filter-nginx-module +syn keyword ngxDirectiveThirdParty contained replace_filter +syn keyword ngxDirectiveThirdParty contained replace_filter_last_modified +syn keyword ngxDirectiveThirdParty contained replace_filter_max_buffered_size +syn keyword ngxDirectiveThirdParty contained replace_filter_skip +syn keyword ngxDirectiveThirdParty contained replace_filter_types + +" Link RRDtool's graphing facilities directly into nginx +" https://github.com/evanmiller/mod_rrd_graph +syn keyword ngxDirectiveThirdParty contained rrd_graph +syn keyword ngxDirectiveThirdParty contained rrd_graph_root + +" Module for nginx to proxy rtmp using http protocol +" https://github.com/kwojtek/nginx-rtmpt-proxy-module +syn keyword ngxDirectiveThirdParty contained rtmpt_proxy +syn keyword ngxDirectiveThirdParty contained rtmpt_proxy_http_timeout +syn keyword ngxDirectiveThirdParty contained rtmpt_proxy_rtmp_timeout +syn keyword ngxDirectiveThirdParty contained rtmpt_proxy_stat +syn keyword ngxDirectiveThirdParty contained rtmpt_proxy_stylesheet +syn keyword ngxDirectiveThirdParty contained rtmpt_proxy_target + +" Syntactically Awesome NGINX Module +" https://github.com/mneudert/sass-nginx-module +syn keyword ngxDirectiveThirdParty contained sass_compile +syn keyword ngxDirectiveThirdParty contained sass_error_log +syn keyword ngxDirectiveThirdParty contained sass_include_path +syn keyword ngxDirectiveThirdParty contained sass_indent +syn keyword ngxDirectiveThirdParty contained sass_is_indented_syntax +syn keyword ngxDirectiveThirdParty contained sass_linefeed +syn keyword ngxDirectiveThirdParty contained sass_output_style +syn keyword ngxDirectiveThirdParty contained sass_precision +syn keyword ngxDirectiveThirdParty contained sass_source_comments +syn keyword ngxDirectiveThirdParty contained sass_source_map_embed + +" Nginx Selective Cache Purge Module +" https://github.com/wandenberg/nginx-selective-cache-purge-module +syn keyword ngxDirectiveThirdParty contained selective_cache_purge_query +syn keyword ngxDirectiveThirdParty contained selective_cache_purge_redis_database +syn keyword ngxDirectiveThirdParty contained selective_cache_purge_redis_host +syn keyword ngxDirectiveThirdParty contained selective_cache_purge_redis_port +syn keyword ngxDirectiveThirdParty contained selective_cache_purge_redis_unix_socket + +" cconv nginx module +" https://github.com/liseen/set-cconv-nginx-module +syn keyword ngxDirectiveThirdParty contained set_cconv_to_simp +syn keyword ngxDirectiveThirdParty contained set_cconv_to_trad +syn keyword ngxDirectiveThirdParty contained set_pinyin_to_normal + +" Nginx module that allows the setting of variables to the value of a variety of hashes +" https://github.com/simpl/ngx_http_set_hash +syn keyword ngxDirectiveThirdParty contained set_md5 +syn keyword ngxDirectiveThirdParty contained set_md5_upper +syn keyword ngxDirectiveThirdParty contained set_murmur2 +syn keyword ngxDirectiveThirdParty contained set_murmur2_upper +syn keyword ngxDirectiveThirdParty contained set_sha1 +syn keyword ngxDirectiveThirdParty contained set_sha1_upper + +" Nginx module to set the language of a request based on a number of options +" https://github.com/simpl/ngx_http_set_lang +syn keyword ngxDirectiveThirdParty contained lang_cookie +syn keyword ngxDirectiveThirdParty contained lang_get_var +syn keyword ngxDirectiveThirdParty contained lang_host +syn keyword ngxDirectiveThirdParty contained lang_list +syn keyword ngxDirectiveThirdParty contained lang_post_var +syn keyword ngxDirectiveThirdParty contained lang_referer +syn keyword ngxDirectiveThirdParty contained set_lang +syn keyword ngxDirectiveThirdParty contained set_lang_method + +" Nginx Sorted Querystring Module +" https://github.com/wandenberg/nginx-sorted-querystring-module +syn keyword ngxDirectiveThirdParty contained sorted_querysting_filter_parameter + +" Nginx upstream module for Sphinx 2.x search daemon +" https://github.com/reeteshranjan/sphinx2-nginx-module +syn keyword ngxDirectiveThirdParty contained sphinx2_bind +syn keyword ngxDirectiveThirdParty contained sphinx2_buffer_size +syn keyword ngxDirectiveThirdParty contained sphinx2_connect_timeout +syn keyword ngxDirectiveThirdParty contained sphinx2_next_upstream +syn keyword ngxDirectiveThirdParty contained sphinx2_pass +syn keyword ngxDirectiveThirdParty contained sphinx2_read_timeout +syn keyword ngxDirectiveThirdParty contained sphinx2_send_timeout + +" Nginx module for retrieving user attributes and groups from SSSD +" https://github.com/veruu/ngx_sssd_info syn keyword ngxDirectiveThirdParty contained sssd_info -syn keyword ngxDirectiveThirdParty contained sssd_info_output_to -syn keyword ngxDirectiveThirdParty contained sssd_info_groups +syn keyword ngxDirectiveThirdParty contained sssd_info_attribute +syn keyword ngxDirectiveThirdParty contained sssd_info_attribute_separator +syn keyword ngxDirectiveThirdParty contained sssd_info_attributes syn keyword ngxDirectiveThirdParty contained sssd_info_group syn keyword ngxDirectiveThirdParty contained sssd_info_group_separator -syn keyword ngxDirectiveThirdParty contained sssd_info_attributes -syn keyword ngxDirectiveThirdParty contained sssd_info_attribute -syn keyword ngxDirectiveThirdParty contained sssd_info_attribute_separator +syn keyword ngxDirectiveThirdParty contained sssd_info_groups +syn keyword ngxDirectiveThirdParty contained sssd_info_output_to -" Static Etags Module -" Generate etags for static content -syn keyword ngxDirectiveThirdParty contained FileETag - -" Statsd Module " An nginx module for sending statistics to statsd +" https://github.com/zebrafishlabs/nginx-statsd +syn keyword ngxDirectiveThirdParty contained statsd_count +syn keyword ngxDirectiveThirdParty contained statsd_sample_rate syn keyword ngxDirectiveThirdParty contained statsd_server -syn keyword ngxDirectiveThirdParty contained statsd_sample_rate -syn keyword ngxDirectiveThirdParty contained statsd_count syn keyword ngxDirectiveThirdParty contained statsd_timing -" Sticky Module -" Add a sticky cookie to be always forwarded to the same upstream server -" syn keyword ngxDirectiveThirdParty contained sticky - -" Stream Echo Module -" TCP/stream echo module for NGINX (a port of ngx_http_echo_module) +" ngx_stream_echo - TCP/stream echo module for NGINX (a port of the ngx_http_echo module) +" https://github.com/openresty/stream-echo-nginx-module syn keyword ngxDirectiveThirdParty contained echo +syn keyword ngxDirectiveThirdParty contained echo_client_error_log_level +syn keyword ngxDirectiveThirdParty contained echo_discard_request syn keyword ngxDirectiveThirdParty contained echo_duplicate syn keyword ngxDirectiveThirdParty contained echo_flush_wait -syn keyword ngxDirectiveThirdParty contained echo_sleep -syn keyword ngxDirectiveThirdParty contained echo_send_timeout -syn keyword ngxDirectiveThirdParty contained echo_read_bytes -syn keyword ngxDirectiveThirdParty contained echo_read_line -syn keyword ngxDirectiveThirdParty contained echo_request_data -syn keyword ngxDirectiveThirdParty contained echo_discard_request -syn keyword ngxDirectiveThirdParty contained echo_read_buffer_size -syn keyword ngxDirectiveThirdParty contained echo_read_timeout -syn keyword ngxDirectiveThirdParty contained echo_client_error_log_level syn keyword ngxDirectiveThirdParty contained echo_lingering_close syn keyword ngxDirectiveThirdParty contained echo_lingering_time syn keyword ngxDirectiveThirdParty contained echo_lingering_timeout +syn keyword ngxDirectiveThirdParty contained echo_read_buffer_size +syn keyword ngxDirectiveThirdParty contained echo_read_bytes +syn keyword ngxDirectiveThirdParty contained echo_read_line +syn keyword ngxDirectiveThirdParty contained echo_read_timeout +syn keyword ngxDirectiveThirdParty contained echo_request_data +syn keyword ngxDirectiveThirdParty contained echo_send_timeout +syn keyword ngxDirectiveThirdParty contained echo_sleep -" Stream Lua Module -" Embed the power of Lua into Nginx stream/TCP Servers. -syn keyword ngxDirectiveThirdParty contained lua_resolver -syn keyword ngxDirectiveThirdParty contained lua_resolver_timeout -syn keyword ngxDirectiveThirdParty contained lua_lingering_close -syn keyword ngxDirectiveThirdParty contained lua_lingering_time -syn keyword ngxDirectiveThirdParty contained lua_lingering_timeout +" Embed the power of Lua into NGINX TCP/UDP servers +" https://github.com/openresty/stream-lua-nginx-module +syn keyword ngxDirectiveThirdParty contained preread_by_lua_block +syn keyword ngxDirectiveThirdParty contained preread_by_lua_file -" Stream Upsync Module -" Sync upstreams from consul or others, dynamiclly modify backend-servers attribute(weight, max_fails,...), needn't reload nginx. +" nginx-upsync-module +" https://github.com/weibocom/nginx-upsync-module +syn keyword ngxDirectiveThirdParty contained upstream_show syn keyword ngxDirectiveThirdParty contained upsync syn keyword ngxDirectiveThirdParty contained upsync_dump_path syn keyword ngxDirectiveThirdParty contained upsync_lb -syn keyword ngxDirectiveThirdParty contained upsync_show -" Strip Module -" Whitespace remover. +" Whitespace stripper for nginx +" https://github.com/evanmiller/mod_strip syn keyword ngxDirectiveThirdParty contained strip -" Subrange Module " Split one big HTTP/Range request to multiple subrange requesets +" https://github.com/Qihoo360/ngx_http_subrange_module syn keyword ngxDirectiveThirdParty contained subrange -" Substitutions Module -" A filter module which can do both regular expression and fixed string substitutions on response bodies. -syn keyword ngxDirectiveThirdParty contained subs_filter -syn keyword ngxDirectiveThirdParty contained subs_filter_types +" summarizer-nginx-module +" https://github.com/reeteshranjan/summarizer-nginx-module +syn keyword ngxDirectiveThirdParty contained summarizer_bind +syn keyword ngxDirectiveThirdParty contained summarizer_buffer_size +syn keyword ngxDirectiveThirdParty contained summarizer_connect_timeout +syn keyword ngxDirectiveThirdParty contained summarizer_next_upstream +syn keyword ngxDirectiveThirdParty contained summarizer_pass +syn keyword ngxDirectiveThirdParty contained summarizer_read_timeout +syn keyword ngxDirectiveThirdParty contained summarizer_send_timeout -" Summarizer Module -" Upstream nginx module to get summaries of documents using the summarizer daemon service -syn keyword ngxDirectiveThirdParty contained smrzr_filename -syn keyword ngxDirectiveThirdParty contained smrzr_ratio - -" Supervisord Module -" Module providing nginx with API to communicate with supervisord and manage (start/stop) backends on-demand. +" nginx module providing API to communicate with supervisord and manage (start/stop) backends on-demand +" https://github.com/FRiCKLE/ngx_supervisord syn keyword ngxDirectiveThirdParty contained supervisord syn keyword ngxDirectiveThirdParty contained supervisord_inherit_backend_status syn keyword ngxDirectiveThirdParty contained supervisord_name syn keyword ngxDirectiveThirdParty contained supervisord_start syn keyword ngxDirectiveThirdParty contained supervisord_stop -" Tarantool Upstream Module -" Tarantool NginX upstream module (REST, JSON API, websockets, load balancing) -syn keyword ngxDirectiveThirdParty contained tnt_pass -syn keyword ngxDirectiveThirdParty contained tnt_http_methods -syn keyword ngxDirectiveThirdParty contained tnt_http_rest_methods -syn keyword ngxDirectiveThirdParty contained tnt_pass_http_request -syn keyword ngxDirectiveThirdParty contained tnt_pass_http_request_buffer_size -syn keyword ngxDirectiveThirdParty contained tnt_method -syn keyword ngxDirectiveThirdParty contained tnt_http_allowed_methods - experemental -syn keyword ngxDirectiveThirdParty contained tnt_send_timeout -syn keyword ngxDirectiveThirdParty contained tnt_read_timeout -syn keyword ngxDirectiveThirdParty contained tnt_buffer_size -syn keyword ngxDirectiveThirdParty contained tnt_next_upstream -syn keyword ngxDirectiveThirdParty contained tnt_connect_timeout -syn keyword ngxDirectiveThirdParty contained tnt_next_upstream -syn keyword ngxDirectiveThirdParty contained tnt_next_upstream_tries -syn keyword ngxDirectiveThirdParty contained tnt_next_upstream_timeout - -" TCP Proxy Module -" Add the feature of tcp proxy with nginx, with health check and status monitor -syn keyword ngxDirectiveBlock contained tcp -" syn keyword ngxDirectiveThirdParty contained server -" syn keyword ngxDirectiveThirdParty contained listen -" syn keyword ngxDirectiveThirdParty contained allow -" syn keyword ngxDirectiveThirdParty contained deny -" syn keyword ngxDirectiveThirdParty contained so_keepalive -" syn keyword ngxDirectiveThirdParty contained tcp_nodelay -" syn keyword ngxDirectiveThirdParty contained timeout -" syn keyword ngxDirectiveThirdParty contained server_name -" syn keyword ngxDirectiveThirdParty contained resolver -" syn keyword ngxDirectiveThirdParty contained resolver_timeout -" syn keyword ngxDirectiveThirdParty contained upstream -syn keyword ngxDirectiveThirdParty contained check -syn keyword ngxDirectiveThirdParty contained check_http_send -syn keyword ngxDirectiveThirdParty contained check_http_expect_alive -syn keyword ngxDirectiveThirdParty contained check_smtp_send -syn keyword ngxDirectiveThirdParty contained check_smtp_expect_alive -syn keyword ngxDirectiveThirdParty contained check_shm_size -syn keyword ngxDirectiveThirdParty contained check_status -" syn keyword ngxDirectiveThirdParty contained ip_hash -" syn keyword ngxDirectiveThirdParty contained proxy_pass -" syn keyword ngxDirectiveThirdParty contained proxy_buffer -" syn keyword ngxDirectiveThirdParty contained proxy_connect_timeout -" syn keyword ngxDirectiveThirdParty contained proxy_read_timeout -syn keyword ngxDirectiveThirdParty contained proxy_write_timeout - -" Testcookie Module -" NGINX module for L7 DDoS attack mitigation +" simple robot mitigation module using cookie based challenge/response technique. Not supported any more. +" https://github.com/kyprizel/testcookie-nginx-module syn keyword ngxDirectiveThirdParty contained testcookie -syn keyword ngxDirectiveThirdParty contained testcookie_name +syn keyword ngxDirectiveThirdParty contained testcookie_arg +syn keyword ngxDirectiveThirdParty contained testcookie_deny_keepalive syn keyword ngxDirectiveThirdParty contained testcookie_domain syn keyword ngxDirectiveThirdParty contained testcookie_expires +syn keyword ngxDirectiveThirdParty contained testcookie_fallback +syn keyword ngxDirectiveThirdParty contained testcookie_get_only +syn keyword ngxDirectiveThirdParty contained testcookie_httponly_flag +syn keyword ngxDirectiveThirdParty contained testcookie_https_location +syn keyword ngxDirectiveThirdParty contained testcookie_internal +syn keyword ngxDirectiveThirdParty contained testcookie_max_attempts +syn keyword ngxDirectiveThirdParty contained testcookie_name +syn keyword ngxDirectiveThirdParty contained testcookie_p3p +syn keyword ngxDirectiveThirdParty contained testcookie_pass syn keyword ngxDirectiveThirdParty contained testcookie_path +syn keyword ngxDirectiveThirdParty contained testcookie_port_in_redirect +syn keyword ngxDirectiveThirdParty contained testcookie_redirect_via_refresh +syn keyword ngxDirectiveThirdParty contained testcookie_refresh_encrypt_cookie +syn keyword ngxDirectiveThirdParty contained testcookie_refresh_encrypt_cookie_iv +syn keyword ngxDirectiveThirdParty contained testcookie_refresh_encrypt_cookie_key +syn keyword ngxDirectiveThirdParty contained testcookie_refresh_status +syn keyword ngxDirectiveThirdParty contained testcookie_refresh_template syn keyword ngxDirectiveThirdParty contained testcookie_secret +syn keyword ngxDirectiveThirdParty contained testcookie_secure_flag syn keyword ngxDirectiveThirdParty contained testcookie_session -syn keyword ngxDirectiveThirdParty contained testcookie_arg -syn keyword ngxDirectiveThirdParty contained testcookie_max_attempts -syn keyword ngxDirectiveThirdParty contained testcookie_p3p -syn keyword ngxDirectiveThirdParty contained testcookie_fallback syn keyword ngxDirectiveThirdParty contained testcookie_whitelist -syn keyword ngxDirectiveThirdParty contained testcookie_pass -syn keyword ngxDirectiveThirdParty contained testcookie_redirect_via_refresh -syn keyword ngxDirectiveThirdParty contained testcookie_refresh_template -syn keyword ngxDirectiveThirdParty contained testcookie_refresh_status -syn keyword ngxDirectiveThirdParty contained testcookie_deny_keepalive -syn keyword ngxDirectiveThirdParty contained testcookie_get_only -syn keyword ngxDirectiveThirdParty contained testcookie_https_location -syn keyword ngxDirectiveThirdParty contained testcookie_refresh_encrypt_cookie -syn keyword ngxDirectiveThirdParty contained testcookie_refresh_encrypt_cookie_key -syn keyword ngxDirectiveThirdParty contained testcookie_refresh_encrypt_iv -syn keyword ngxDirectiveThirdParty contained testcookie_internal -syn keyword ngxDirectiveThirdParty contained testcookie_httponly_flag -syn keyword ngxDirectiveThirdParty contained testcookie_secure_flag -" Types Filter Module -" Change the `Content-Type` output header depending on an extension variable according to a condition specified in the 'if' clause. +" ngx_http_types_filter_module +" https://github.com/flygoast/ngx_http_types_filter syn keyword ngxDirectiveThirdParty contained types_filter syn keyword ngxDirectiveThirdParty contained types_filter_use_default -" Unzip Module -" Enabling fetching of files that are stored in zipped archives. +" A module allowing the nginx to use files embedded in a zip file +" https://github.com/youzee/nginx-unzip-module +syn keyword ngxDirectiveThirdParty contained file_in_unzip syn keyword ngxDirectiveThirdParty contained file_in_unzip_archivefile syn keyword ngxDirectiveThirdParty contained file_in_unzip_extract -syn keyword ngxDirectiveThirdParty contained file_in_unzip -" Upload Progress Module -" An upload progress system, that monitors RFC1867 POST upload as they are transmitted to upstream servers -syn keyword ngxDirectiveThirdParty contained upload_progress -syn keyword ngxDirectiveThirdParty contained track_uploads -syn keyword ngxDirectiveThirdParty contained report_uploads -syn keyword ngxDirectiveThirdParty contained upload_progress_content_type -syn keyword ngxDirectiveThirdParty contained upload_progress_header -syn keyword ngxDirectiveThirdParty contained upload_progress_jsonp_parameter -syn keyword ngxDirectiveThirdParty contained upload_progress_json_output -syn keyword ngxDirectiveThirdParty contained upload_progress_jsonp_output -syn keyword ngxDirectiveThirdParty contained upload_progress_template - -" Upload Module -" Parses request body storing all files being uploaded to a directory specified by upload_store directive -syn keyword ngxDirectiveThirdParty contained upload_pass -syn keyword ngxDirectiveThirdParty contained upload_resumable -syn keyword ngxDirectiveThirdParty contained upload_store -syn keyword ngxDirectiveThirdParty contained upload_state_store -syn keyword ngxDirectiveThirdParty contained upload_store_access -syn keyword ngxDirectiveThirdParty contained upload_set_form_field -syn keyword ngxDirectiveThirdParty contained upload_aggregate_form_field -syn keyword ngxDirectiveThirdParty contained upload_pass_form_field -syn keyword ngxDirectiveThirdParty contained upload_cleanup -syn keyword ngxDirectiveThirdParty contained upload_buffer_size -syn keyword ngxDirectiveThirdParty contained upload_max_part_header_len -syn keyword ngxDirectiveThirdParty contained upload_max_file_size -syn keyword ngxDirectiveThirdParty contained upload_limit_rate -syn keyword ngxDirectiveThirdParty contained upload_max_output_body_len -syn keyword ngxDirectiveThirdParty contained upload_tame_arrays -syn keyword ngxDirectiveThirdParty contained upload_pass_args - -" Upstream Fair Module -" The fair load balancer module for nginx http://nginx.localdomain.pl -syn keyword ngxDirectiveThirdParty contained fair -syn keyword ngxDirectiveThirdParty contained upstream_fair_shm_size - -" Upstream Hash Module (DEPRECATED) -" Provides simple upstream load distribution by hashing a configurable variable. -" syn keyword ngxDirectiveDeprecated contained hash -syn keyword ngxDirectiveDeprecated contained hash_again - -" Upstream Domain Resolve Module -" A load-balancer that resolves an upstream domain name asynchronously. +" An asynchronous domain name resolve module for nginx upstream +" https://github.com/wdaike/ngx_upstream_jdomain syn keyword ngxDirectiveThirdParty contained jdomain -" Upsync Module -" Sync upstreams from consul or others, dynamiclly modify backend-servers attribute(weight, max_fails,...), needn't reload nginx -syn keyword ngxDirectiveThirdParty contained upsync -syn keyword ngxDirectiveThirdParty contained upsync_dump_path -syn keyword ngxDirectiveThirdParty contained upsync_lb -syn keyword ngxDirectiveThirdParty contained upstream_show - -" URL Module " Nginx url encoding converting module +" https://github.com/vozlt/nginx-module-url syn keyword ngxDirectiveThirdParty contained url_encoding_convert +syn keyword ngxDirectiveThirdParty contained url_encoding_convert_alloc_size +syn keyword ngxDirectiveThirdParty contained url_encoding_convert_alloc_size_x syn keyword ngxDirectiveThirdParty contained url_encoding_convert_from +syn keyword ngxDirectiveThirdParty contained url_encoding_convert_phase syn keyword ngxDirectiveThirdParty contained url_encoding_convert_to -" User Agent Module -" Match browsers and crawlers +" A nginx module to match browsers and crawlers +" https://github.com/alibaba/nginx-http-user-agent syn keyword ngxDirectiveThirdParty contained user_agent -" Upstrema Ketama Chash Module -" Nginx load-balancer module implementing ketama consistent hashing. +" nginx load-balancer module implementing ketama consistent hashing +" https://github.com/flygoast/ngx_http_upstream_ketama_chash syn keyword ngxDirectiveThirdParty contained ketama_chash -" Video Thumbextractor Module -" Extract thumbs from a video file -syn keyword ngxDirectiveThirdParty contained video_thumbextractor -syn keyword ngxDirectiveThirdParty contained video_thumbextractor_video_filename -syn keyword ngxDirectiveThirdParty contained video_thumbextractor_video_second -syn keyword ngxDirectiveThirdParty contained video_thumbextractor_image_width -syn keyword ngxDirectiveThirdParty contained video_thumbextractor_image_height -syn keyword ngxDirectiveThirdParty contained video_thumbextractor_only_keyframe -syn keyword ngxDirectiveThirdParty contained video_thumbextractor_next_time -syn keyword ngxDirectiveThirdParty contained video_thumbextractor_tile_rows -syn keyword ngxDirectiveThirdParty contained video_thumbextractor_tile_cols -syn keyword ngxDirectiveThirdParty contained video_thumbextractor_tile_max_rows -syn keyword ngxDirectiveThirdParty contained video_thumbextractor_tile_max_cols -syn keyword ngxDirectiveThirdParty contained video_thumbextractor_tile_sample_interval -syn keyword ngxDirectiveThirdParty contained video_thumbextractor_tile_color -syn keyword ngxDirectiveThirdParty contained video_thumbextractor_tile_margin -syn keyword ngxDirectiveThirdParty contained video_thumbextractor_tile_padding -syn keyword ngxDirectiveThirdParty contained video_thumbextractor_threads -syn keyword ngxDirectiveThirdParty contained video_thumbextractor_processes_per_worker -" Eval Module -" Module for nginx web server evaluates response of proxy or memcached module into variables. -syn keyword ngxDirectiveThirdParty contained eval -syn keyword ngxDirectiveThirdParty contained eval_escalate -syn keyword ngxDirectiveThirdParty contained eval_override_content_type - -" VTS Module -" Nginx virtual host traffic status module -syn keyword ngxDirectiveThirdParty contained vhost_traffic_status -syn keyword ngxDirectiveThirdParty contained vhost_traffic_status_zone -syn keyword ngxDirectiveThirdParty contained vhost_traffic_status_display -syn keyword ngxDirectiveThirdParty contained vhost_traffic_status_display_format -syn keyword ngxDirectiveThirdParty contained vhost_traffic_status_display_jsonp -syn keyword ngxDirectiveThirdParty contained vhost_traffic_status_filter -syn keyword ngxDirectiveThirdParty contained vhost_traffic_status_filter_by_host -syn keyword ngxDirectiveThirdParty contained vhost_traffic_status_filter_by_set_key -syn keyword ngxDirectiveThirdParty contained vhost_traffic_status_filter_check_duplicate -syn keyword ngxDirectiveThirdParty contained vhost_traffic_status_limit -syn keyword ngxDirectiveThirdParty contained vhost_traffic_status_limit_traffic -syn keyword ngxDirectiveThirdParty contained vhost_traffic_status_limit_traffic_by_set_key -syn keyword ngxDirectiveThirdParty contained vhost_traffic_status_limit_check_duplicate - -" XSS Module -" Native support for cross-site scripting (XSS) in an nginx. -syn keyword ngxDirectiveThirdParty contained xss_get -syn keyword ngxDirectiveThirdParty contained xss_callback_arg -syn keyword ngxDirectiveThirdParty contained xss_override_status -syn keyword ngxDirectiveThirdParty contained xss_check_status -syn keyword ngxDirectiveThirdParty contained xss_input_types - -" ZIP Module -" ZIP archiver for nginx " highlight @@ -2178,6 +2236,7 @@ hi link ngxDirectiveDeprecated Error hi link ngxDirective Identifier hi link ngxDirectiveThirdParty Special +hi link ngxDirectiveThirdPartyDeprecated Error hi link ngxListenOptions Keyword hi link ngxListenOptionsDeprecated Error From gmm at csdoc.com Thu Dec 28 10:07:54 2017 From: gmm at csdoc.com (Gena Makhomed) Date: Thu, 28 Dec 2017 12:07:54 +0200 Subject: [PATCH 2 of 2] Contrib: vim syntax, update core module directives. Message-ID: <354953f8-a0f1-11a3-9183-604722886fec@csdoc.com> # HG changeset patch # User Gena Makhomed # Date 1514455265 -7200 # Thu Dec 28 12:01:05 2017 +0200 # Node ID 16674bef9168f70962cafb451a0dd212b37d9c61 # Parent 215684d20d906135281b2540149d354b6e4bb852 Contrib: vim syntax, update core module directives. Removed non-existent directives and directive redefinitions. diff -r 215684d20d90 -r 16674bef9168 contrib/vim/syntax/nginx.vim --- a/contrib/vim/syntax/nginx.vim Thu Dec 28 11:49:44 2017 +0200 +++ b/contrib/vim/syntax/nginx.vim Thu Dec 28 12:01:05 2017 +0200 @@ -90,9 +90,7 @@ syn keyword ngxDirectiveImportant contained include syn keyword ngxDirectiveImportant contained root -"syn keyword ngxDirectiveImportant contained server syn keyword ngxDirectiveImportant contained server_name -"syn keyword ngxDirectiveImportant contained listen syn keyword ngxDirectiveImportant contained internal syn keyword ngxDirectiveImportant contained proxy_pass syn keyword ngxDirectiveImportant contained memcached_pass @@ -151,7 +149,6 @@ syn keyword ngxDirective contained autoindex_format syn keyword ngxDirective contained autoindex_localtime syn keyword ngxDirective contained charset -syn keyword ngxDirective contained charset_map syn keyword ngxDirective contained charset_types syn keyword ngxDirective contained chunked_transfer_encoding syn keyword ngxDirective contained client_body_buffer_size @@ -466,10 +463,6 @@ syn keyword ngxDirective contained resolver syn keyword ngxDirective contained resolver_timeout syn keyword ngxDirective contained rewrite_log -syn keyword ngxDirective contained rtsig_overflow_events -syn keyword ngxDirective contained rtsig_overflow_test -syn keyword ngxDirective contained rtsig_overflow_threshold -syn keyword ngxDirective contained rtsig_signo syn keyword ngxDirective contained satisfy syn keyword ngxDirective contained scgi_bind syn keyword ngxDirective contained scgi_buffer_size @@ -583,7 +576,6 @@ syn keyword ngxDirective contained tcp_nodelay syn keyword ngxDirective contained tcp_nopush syn keyword ngxDirective contained thread_pool -syn keyword ngxDirective contained thread_stack_size syn keyword ngxDirective contained timeout syn keyword ngxDirective contained timer_resolution syn keyword ngxDirective contained types_hash_bucket_size @@ -636,7 +628,6 @@ syn keyword ngxDirective contained uwsgi_next_upstream_tries syn keyword ngxDirective contained uwsgi_no_cache syn keyword ngxDirective contained uwsgi_param -syn keyword ngxDirective contained uwsgi_pass syn keyword ngxDirective contained uwsgi_pass_header syn keyword ngxDirective contained uwsgi_pass_request_body syn keyword ngxDirective contained uwsgi_pass_request_headers @@ -670,9 +661,7 @@ syn keyword ngxDirective contained worker_processes syn keyword ngxDirective contained worker_rlimit_core syn keyword ngxDirective contained worker_rlimit_nofile -syn keyword ngxDirective contained worker_rlimit_sigpending syn keyword ngxDirective contained worker_shutdown_timeout -syn keyword ngxDirective contained worker_threads syn keyword ngxDirective contained working_directory syn keyword ngxDirective contained xclient syn keyword ngxDirective contained xml_entities From gmm at csdoc.com Thu Dec 28 10:42:25 2017 From: gmm at csdoc.com (Gena Makhomed) Date: Thu, 28 Dec 2017 12:42:25 +0200 Subject: nginx undocumented directives Message-ID: <418fda51-227c-221f-804f-aa7e88322a53@csdoc.com> Hello, All! Scanning nginx sources and nginx documentation I found some directives, which present in nginx sources but absent in nginx documentation: acceptex_read degradation degrade devpoll_changes devpoll_events epoll_events eventport_events gzip_hash gzip_no_buffer gzip_window http2_pool_size http2_streams_index_size iocp_threads kqueue_changes kqueue_events post_acceptex post_action postpone_gzipping smtp_client_buffer smtp_greeting_delay ssi_ignore_recycled_buffers uwsgi_string post_action is known dangerous directive, it undocumented by purpose and in vim syntax file it marked accordingly: syn keyword ngxDirectiveError contained post_action But what about all rest undocumented directives, they are undocumented by purpose or through inadvertence, and may be in the near future all it (except post_action directive) will be documented? And second question: how they are should be marked in nginx syntax file, as normal nginx directives, or color mark it as undocumented directives? For example: syn keyword ngxDirectiveUndocumented contained acceptex_read syn keyword ngxDirectiveUndocumented contained degradation ... syn keyword ngxDirectiveUndocumented contained uwsgi_string hi link ngxDirectiveUndocumented Constant -- Best regards, Gena From ru at nginx.com Thu Dec 28 12:25:33 2017 From: ru at nginx.com (Ruslan Ermilov) Date: Thu, 28 Dec 2017 15:25:33 +0300 Subject: nginx undocumented directives In-Reply-To: <418fda51-227c-221f-804f-aa7e88322a53@csdoc.com> References: <418fda51-227c-221f-804f-aa7e88322a53@csdoc.com> Message-ID: <20171228122533.GC15734@lo0.su> Hi Gena, On Thu, Dec 28, 2017 at 12:42:25PM +0200, Gena Makhomed wrote: > Hello, All! > > Scanning nginx sources and nginx documentation > I found some directives, which present in nginx sources > but absent in nginx documentation: Internally, we have a document that explains why certain directives are undocumented. > acceptex_read > iocp_threads > post_acceptex + use iocp These are undocumented b/c ngx_iocp_module is non-functional. > devpoll_changes > devpoll_events > epoll_events > eventport_events > kqueue_changes > kqueue_events > gzip_hash > gzip_no_buffer > gzip_window > postpone_gzipping > http2_pool_size > http2_streams_index_size These are undocumented b/c we consider them "excessive configuraion". > ssi_ignore_recycled_buffers This used to be a hack for one big company, but isn't suitable for general consumption. > uwsgi_string This is undocumented with the following notes: "no working examples, no eval in recent uWSGI). Sorry, but I don't remember what exactly this means. :) > degradation > degrade This module needs more work. > post_action You already know the answer. > smtp_client_buffer > smtp_greeting_delay There are no notes of why these aren't documented. > post_action is known dangerous directive, it undocumented > by purpose and in vim syntax file it marked accordingly: > > syn keyword ngxDirectiveError contained post_action > > But what about all rest undocumented directives, they are undocumented > by purpose or through inadvertence, and may be in the near future > all it (except post_action directive) will be documented? > > And second question: how they are should be marked in nginx syntax file, > as normal nginx directives, or color mark it as undocumented directives? > > For example: > > syn keyword ngxDirectiveUndocumented contained acceptex_read > syn keyword ngxDirectiveUndocumented contained degradation > ... > syn keyword ngxDirectiveUndocumented contained uwsgi_string > > hi link ngxDirectiveUndocumented Constant From mdounin at mdounin.ru Thu Dec 28 13:17:36 2017 From: mdounin at mdounin.ru (Maxim Dounin) Date: Thu, 28 Dec 2017 16:17:36 +0300 Subject: nginx undocumented directives In-Reply-To: <20171228122533.GC15734@lo0.su> References: <418fda51-227c-221f-804f-aa7e88322a53@csdoc.com> <20171228122533.GC15734@lo0.su> Message-ID: <20171228131735.GJ34136@mdounin.ru> Hello! On Thu, Dec 28, 2017 at 03:25:33PM +0300, Ruslan Ermilov wrote: [...] > > smtp_client_buffer > > smtp_greeting_delay > > There are no notes of why these aren't documented. I guess the reason is that mail documentation is mostly contributed, and was never seriously considered by the documentation project. The smtp_client_buffer directive is identical to imap_client_buffer, but for the smtp module. The smtp_greeting_delay directive allows introducing an artificial delay before sending an SMTP greeting, and rejecting clients who fail to wait for a greeting before sending commands. -- Maxim Dounin http://mdounin.ru/ From mdounin at mdounin.ru Fri Dec 29 21:54:25 2017 From: mdounin at mdounin.ru (Maxim Dounin) Date: Fri, 29 Dec 2017 21:54:25 +0000 Subject: [nginx] Version bump. Message-ID: details: http://hg.nginx.org/nginx/rev/1fd1bbd18ebd branches: changeset: 7184:1fd1bbd18ebd user: Maxim Dounin date: Sat Dec 30 00:15:07 2017 +0300 description: Version bump. diffstat: src/core/nginx.h | 4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-) diffs (14 lines): diff --git a/src/core/nginx.h b/src/core/nginx.h --- a/src/core/nginx.h +++ b/src/core/nginx.h @@ -9,8 +9,8 @@ #define _NGINX_H_INCLUDED_ -#define nginx_version 1013008 -#define NGINX_VERSION "1.13.8" +#define nginx_version 1013009 +#define NGINX_VERSION "1.13.9" #define NGINX_VER "nginx/" NGINX_VERSION #ifdef NGX_BUILD From mdounin at mdounin.ru Fri Dec 29 21:54:27 2017 From: mdounin at mdounin.ru (Maxim Dounin) Date: Fri, 29 Dec 2017 21:54:27 +0000 Subject: [nginx] Contrib: vim syntax, update 3rd party module directives. Message-ID: details: http://hg.nginx.org/nginx/rev/c9a7f4e11d3e branches: changeset: 7185:c9a7f4e11d3e user: Gena Makhomed date: Thu Dec 28 11:49:44 2017 +0200 description: Contrib: vim syntax, update 3rd party module directives. 3rd party modules list synchronized with FreeBSD nginx-devel port. diffstat: contrib/vim/syntax/nginx.vim | 2543 +++++++++++++++++++++-------------------- 1 files changed, 1301 insertions(+), 1242 deletions(-) diffs (truncated from 2798 to 1000 lines): diff --git a/contrib/vim/syntax/nginx.vim b/contrib/vim/syntax/nginx.vim --- a/contrib/vim/syntax/nginx.vim +++ b/contrib/vim/syntax/nginx.vim @@ -37,7 +37,7 @@ syn cluster ngxTopLevel syn cluster ngxDirectives \ contains=ngxDirective,ngxDirectiveBlock,ngxDirectiveImportant \ add=ngxDirectiveControl,ngxDirectiveError,ngxDirectiveDeprecated - \ add=ngxDirectiveThirdParty + \ add=ngxDirectiveThirdParty,ngxDirectiveThirdPartyDeprecated syn cluster ngxParams \ contains=ngxParam,ngxString,ngxParamComment,ngxSemicolon,ngxBlock @@ -683,529 +683,618 @@ syn keyword ngxDirective contained xslt_ syn keyword ngxDirective contained xslt_types syn keyword ngxDirective contained zone -" 3rd party module list: -" https://www.nginx.com/resources/wiki/modules/ +" 3rd party modules list taken from +" https://github.com/freebsd/freebsd-ports/blob/master/www/nginx-devel/Makefile +" ----------------------------------------------------------------------------- -" Accept Language Module -" Parses the Accept-Language header and gives the most suitable locale from a list of supported locales. +" Accept Language +" https://github.com/giom/nginx_accept_language_module syn keyword ngxDirectiveThirdParty contained set_from_accept_language -" Access Key Module (DEPRECATED) -" Denies access unless the request URL contains an access key. -syn keyword ngxDirectiveDeprecated contained accesskey -syn keyword ngxDirectiveDeprecated contained accesskey_arg -syn keyword ngxDirectiveDeprecated contained accesskey_hashmethod -syn keyword ngxDirectiveDeprecated contained accesskey_signature +" Digest Authentication +" https://github.com/atomx/nginx-http-auth-digest +syn keyword ngxDirectiveThirdParty contained auth_digest +syn keyword ngxDirectiveThirdParty contained auth_digest_drop_time +syn keyword ngxDirectiveThirdParty contained auth_digest_evasion_time +syn keyword ngxDirectiveThirdParty contained auth_digest_expires +syn keyword ngxDirectiveThirdParty contained auth_digest_maxtries +syn keyword ngxDirectiveThirdParty contained auth_digest_replays +syn keyword ngxDirectiveThirdParty contained auth_digest_shm_size +syn keyword ngxDirectiveThirdParty contained auth_digest_timeout +syn keyword ngxDirectiveThirdParty contained auth_digest_user_file + +" SPNEGO Authentication +" https://github.com/stnoonan/spnego-http-auth-nginx-module +syn keyword ngxDirectiveThirdParty contained auth_gss +syn keyword ngxDirectiveThirdParty contained auth_gss_allow_basic_fallback +syn keyword ngxDirectiveThirdParty contained auth_gss_authorized_principal +syn keyword ngxDirectiveThirdParty contained auth_gss_force_realm +syn keyword ngxDirectiveThirdParty contained auth_gss_format_full +syn keyword ngxDirectiveThirdParty contained auth_gss_keytab +syn keyword ngxDirectiveThirdParty contained auth_gss_realm +syn keyword ngxDirectiveThirdParty contained auth_gss_service_name + +" LDAP Authentication +" https://github.com/kvspb/nginx-auth-ldap +syn keyword ngxDirectiveThirdParty contained auth_ldap +syn keyword ngxDirectiveThirdParty contained auth_ldap_cache_enabled +syn keyword ngxDirectiveThirdParty contained auth_ldap_cache_expiration_time +syn keyword ngxDirectiveThirdParty contained auth_ldap_cache_size +syn keyword ngxDirectiveThirdParty contained auth_ldap_servers +syn keyword ngxDirectiveThirdParty contained auth_ldap_servers_size +syn keyword ngxDirectiveThirdParty contained ldap_server + +" PAM Authentication +" https://github.com/sto/ngx_http_auth_pam_module +syn keyword ngxDirectiveThirdParty contained auth_pam +syn keyword ngxDirectiveThirdParty contained auth_pam_service_name +syn keyword ngxDirectiveThirdParty contained auth_pam_set_pam_env -" Asynchronous FastCGI Module -" Primarily a modified version of the Nginx FastCGI module which implements multiplexing of connections, allowing a single FastCGI server to handle many concurrent requests. -" syn keyword ngxDirectiveThirdParty contained fastcgi_bind -" syn keyword ngxDirectiveThirdParty contained fastcgi_buffer_size -" syn keyword ngxDirectiveThirdParty contained fastcgi_buffers -" syn keyword ngxDirectiveThirdParty contained fastcgi_busy_buffers_size -" syn keyword ngxDirectiveThirdParty contained fastcgi_cache -" syn keyword ngxDirectiveThirdParty contained fastcgi_cache_key -" syn keyword ngxDirectiveThirdParty contained fastcgi_cache_methods -" syn keyword ngxDirectiveThirdParty contained fastcgi_cache_min_uses -" syn keyword ngxDirectiveThirdParty contained fastcgi_cache_path -" syn keyword ngxDirectiveThirdParty contained fastcgi_cache_use_stale -" syn keyword ngxDirectiveThirdParty contained fastcgi_cache_valid -" syn keyword ngxDirectiveThirdParty contained fastcgi_catch_stderr -" syn keyword ngxDirectiveThirdParty contained fastcgi_connect_timeout -" syn keyword ngxDirectiveThirdParty contained fastcgi_hide_header -" syn keyword ngxDirectiveThirdParty contained fastcgi_ignore_client_abort -" syn keyword ngxDirectiveThirdParty contained fastcgi_ignore_headers -" syn keyword ngxDirectiveThirdParty contained fastcgi_index -" syn keyword ngxDirectiveThirdParty contained fastcgi_intercept_errors -" syn keyword ngxDirectiveThirdParty contained fastcgi_max_temp_file_size -" syn keyword ngxDirectiveThirdParty contained fastcgi_next_upstream -" syn keyword ngxDirectiveThirdParty contained fastcgi_param -" syn keyword ngxDirectiveThirdParty contained fastcgi_pass -" syn keyword ngxDirectiveThirdParty contained fastcgi_pass_header -" syn keyword ngxDirectiveThirdParty contained fastcgi_pass_request_body -" syn keyword ngxDirectiveThirdParty contained fastcgi_pass_request_headers -" syn keyword ngxDirectiveThirdParty contained fastcgi_read_timeout -" syn keyword ngxDirectiveThirdParty contained fastcgi_send_lowat -" syn keyword ngxDirectiveThirdParty contained fastcgi_send_timeout -" syn keyword ngxDirectiveThirdParty contained fastcgi_split_path_info -" syn keyword ngxDirectiveThirdParty contained fastcgi_store -" syn keyword ngxDirectiveThirdParty contained fastcgi_store_access -" syn keyword ngxDirectiveThirdParty contained fastcgi_temp_file_write_size -" syn keyword ngxDirectiveThirdParty contained fastcgi_temp_path -syn keyword ngxDirectiveDeprecated contained fastcgi_upstream_fail_timeout -syn keyword ngxDirectiveDeprecated contained fastcgi_upstream_max_fails +" AJP protocol proxy +" https://github.com/yaoweibin/nginx_ajp_module +syn keyword ngxDirectiveThirdParty contained ajp_buffer_size +syn keyword ngxDirectiveThirdParty contained ajp_buffers +syn keyword ngxDirectiveThirdParty contained ajp_busy_buffers_size +syn keyword ngxDirectiveThirdParty contained ajp_cache +syn keyword ngxDirectiveThirdParty contained ajp_cache_key +syn keyword ngxDirectiveThirdParty contained ajp_cache_lock +syn keyword ngxDirectiveThirdParty contained ajp_cache_lock_timeout +syn keyword ngxDirectiveThirdParty contained ajp_cache_methods +syn keyword ngxDirectiveThirdParty contained ajp_cache_min_uses +syn keyword ngxDirectiveThirdParty contained ajp_cache_path +syn keyword ngxDirectiveThirdParty contained ajp_cache_use_stale +syn keyword ngxDirectiveThirdParty contained ajp_cache_valid +syn keyword ngxDirectiveThirdParty contained ajp_connect_timeout +syn keyword ngxDirectiveThirdParty contained ajp_header_packet_buffer_size +syn keyword ngxDirectiveThirdParty contained ajp_hide_header +syn keyword ngxDirectiveThirdParty contained ajp_ignore_client_abort +syn keyword ngxDirectiveThirdParty contained ajp_ignore_headers +syn keyword ngxDirectiveThirdParty contained ajp_intercept_errors +syn keyword ngxDirectiveThirdParty contained ajp_keep_conn +syn keyword ngxDirectiveThirdParty contained ajp_max_data_packet_size +syn keyword ngxDirectiveThirdParty contained ajp_max_temp_file_size +syn keyword ngxDirectiveThirdParty contained ajp_next_upstream +syn keyword ngxDirectiveThirdParty contained ajp_pass +syn keyword ngxDirectiveThirdParty contained ajp_pass_header +syn keyword ngxDirectiveThirdParty contained ajp_pass_request_body +syn keyword ngxDirectiveThirdParty contained ajp_pass_request_headers +syn keyword ngxDirectiveThirdParty contained ajp_read_timeout +syn keyword ngxDirectiveThirdParty contained ajp_send_lowat +syn keyword ngxDirectiveThirdParty contained ajp_send_timeout +syn keyword ngxDirectiveThirdParty contained ajp_store +syn keyword ngxDirectiveThirdParty contained ajp_store_access +syn keyword ngxDirectiveThirdParty contained ajp_temp_file_write_size +syn keyword ngxDirectiveThirdParty contained ajp_temp_path +syn keyword ngxDirectiveThirdParty contained ajp_upstream_fail_timeout +syn keyword ngxDirectiveThirdParty contained ajp_upstream_max_fails -" Akamai G2O Module -" Nginx Module for Authenticating Akamai G2O requests -syn keyword ngxDirectiveThirdParty contained g2o -syn keyword ngxDirectiveThirdParty contained g2o_nonce -syn keyword ngxDirectiveThirdParty contained g2o_key - -" Lua Module -" You can be very simple to execute lua code for nginx -syn keyword ngxDirectiveThirdParty contained lua_file - -" Array Variable Module -" Add support for array-typed variables to nginx config files -syn keyword ngxDirectiveThirdParty contained array_split -syn keyword ngxDirectiveThirdParty contained array_join -syn keyword ngxDirectiveThirdParty contained array_map -syn keyword ngxDirectiveThirdParty contained array_map_op - -" Nginx Audio Track for HTTP Live Streaming -" This nginx module generates audio track for hls streams on the fly. -syn keyword ngxDirectiveThirdParty contained ngx_hls_audio_track -syn keyword ngxDirectiveThirdParty contained ngx_hls_audio_track_rootpath -syn keyword ngxDirectiveThirdParty contained ngx_hls_audio_track_output_format -syn keyword ngxDirectiveThirdParty contained ngx_hls_audio_track_output_header - -" AWS Proxy Module -" Nginx module to proxy to authenticated AWS services +" AWS proxy +" https://github.com/anomalizer/ngx_aws_auth syn keyword ngxDirectiveThirdParty contained aws_access_key +syn keyword ngxDirectiveThirdParty contained aws_endpoint syn keyword ngxDirectiveThirdParty contained aws_key_scope -syn keyword ngxDirectiveThirdParty contained aws_signing_key -syn keyword ngxDirectiveThirdParty contained aws_endpoint syn keyword ngxDirectiveThirdParty contained aws_s3_bucket syn keyword ngxDirectiveThirdParty contained aws_sign - -" Backtrace module -" A Nginx module to dump backtrace when a worker process exits abnormally -syn keyword ngxDirectiveThirdParty contained backtrace_log -syn keyword ngxDirectiveThirdParty contained backtrace_max_stack_size - -" Brotli Module -" Nginx module for Brotli compression -syn keyword ngxDirectiveThirdParty contained brotli_static -syn keyword ngxDirectiveThirdParty contained brotli -syn keyword ngxDirectiveThirdParty contained brotli_types -syn keyword ngxDirectiveThirdParty contained brotli_buffers -syn keyword ngxDirectiveThirdParty contained brotli_comp_level -syn keyword ngxDirectiveThirdParty contained brotli_window -syn keyword ngxDirectiveThirdParty contained brotli_min_length +syn keyword ngxDirectiveThirdParty contained aws_signing_key -" Cache Purge Module -" Adds ability to purge content from FastCGI, proxy, SCGI and uWSGI caches. -syn keyword ngxDirectiveThirdParty contained fastcgi_cache_purge -syn keyword ngxDirectiveThirdParty contained proxy_cache_purge -" syn keyword ngxDirectiveThirdParty contained scgi_cache_purge -" syn keyword ngxDirectiveThirdParty contained uwsgi_cache_purge - -" Chunkin Module (DEPRECATED) -" HTTP 1.1 chunked-encoding request body support for Nginx. -syn keyword ngxDirectiveDeprecated contained chunkin -syn keyword ngxDirectiveDeprecated contained chunkin_keepalive -syn keyword ngxDirectiveDeprecated contained chunkin_max_chunks_per_buf -syn keyword ngxDirectiveDeprecated contained chunkin_resume - -" Circle GIF Module -" Generates simple circle images with the colors and size specified in the URL. -syn keyword ngxDirectiveThirdParty contained circle_gif -syn keyword ngxDirectiveThirdParty contained circle_gif_max_radius -syn keyword ngxDirectiveThirdParty contained circle_gif_min_radius -syn keyword ngxDirectiveThirdParty contained circle_gif_step_radius - -" Nginx-Clojure Module -" Parses the Accept-Language header and gives the most suitable locale from a list of supported locales. +" embedding Clojure or Java or Groovy programs +" https://github.com/nginx-clojure/nginx-clojure +syn keyword ngxDirectiveThirdParty contained access_handler_code +syn keyword ngxDirectiveThirdParty contained access_handler_name +syn keyword ngxDirectiveThirdParty contained access_handler_property +syn keyword ngxDirectiveThirdParty contained access_handler_type +syn keyword ngxDirectiveThirdParty contained always_read_body +syn keyword ngxDirectiveThirdParty contained auto_upgrade_ws +syn keyword ngxDirectiveThirdParty contained body_filter_code +syn keyword ngxDirectiveThirdParty contained body_filter_name +syn keyword ngxDirectiveThirdParty contained body_filter_property +syn keyword ngxDirectiveThirdParty contained body_filter_type +syn keyword ngxDirectiveThirdParty contained content_handler_code +syn keyword ngxDirectiveThirdParty contained content_handler_name +syn keyword ngxDirectiveThirdParty contained content_handler_property +syn keyword ngxDirectiveThirdParty contained content_handler_type +syn keyword ngxDirectiveThirdParty contained handler_code +syn keyword ngxDirectiveThirdParty contained handler_name +syn keyword ngxDirectiveThirdParty contained handler_type +syn keyword ngxDirectiveThirdParty contained handlers_lazy_init +syn keyword ngxDirectiveThirdParty contained header_filter_code +syn keyword ngxDirectiveThirdParty contained header_filter_name +syn keyword ngxDirectiveThirdParty contained header_filter_property +syn keyword ngxDirectiveThirdParty contained header_filter_type +syn keyword ngxDirectiveThirdParty contained jvm_classpath +syn keyword ngxDirectiveThirdParty contained jvm_classpath_check +syn keyword ngxDirectiveThirdParty contained jvm_exit_handler_code +syn keyword ngxDirectiveThirdParty contained jvm_exit_handler_name +syn keyword ngxDirectiveThirdParty contained jvm_handler_type +syn keyword ngxDirectiveThirdParty contained jvm_init_handler_code +syn keyword ngxDirectiveThirdParty contained jvm_init_handler_name +syn keyword ngxDirectiveThirdParty contained jvm_options syn keyword ngxDirectiveThirdParty contained jvm_path syn keyword ngxDirectiveThirdParty contained jvm_var -syn keyword ngxDirectiveThirdParty contained jvm_classpath -syn keyword ngxDirectiveThirdParty contained jvm_classpath_check syn keyword ngxDirectiveThirdParty contained jvm_workers -syn keyword ngxDirectiveThirdParty contained jvm_options -syn keyword ngxDirectiveThirdParty contained jvm_handler_type -syn keyword ngxDirectiveThirdParty contained jvm_init_handler_name -syn keyword ngxDirectiveThirdParty contained jvm_init_handler_code -syn keyword ngxDirectiveThirdParty contained jvm_exit_handler_name -syn keyword ngxDirectiveThirdParty contained jvm_exit_handler_code -syn keyword ngxDirectiveThirdParty contained handlers_lazy_init -syn keyword ngxDirectiveThirdParty contained auto_upgrade_ws -syn keyword ngxDirectiveThirdParty contained content_handler_type -syn keyword ngxDirectiveThirdParty contained content_handler_name -syn keyword ngxDirectiveThirdParty contained content_handler_code -syn keyword ngxDirectiveThirdParty contained rewrite_handler_type +syn keyword ngxDirectiveThirdParty contained max_balanced_tcp_connections +syn keyword ngxDirectiveThirdParty contained rewrite_handler_code syn keyword ngxDirectiveThirdParty contained rewrite_handler_name -syn keyword ngxDirectiveThirdParty contained rewrite_handler_code -syn keyword ngxDirectiveThirdParty contained access_handler_type -syn keyword ngxDirectiveThirdParty contained access_handler_name -syn keyword ngxDirectiveThirdParty contained access_handler_code -syn keyword ngxDirectiveThirdParty contained header_filter_type -syn keyword ngxDirectiveThirdParty contained header_filter_name -syn keyword ngxDirectiveThirdParty contained header_filter_code -syn keyword ngxDirectiveThirdParty contained content_handler_property syn keyword ngxDirectiveThirdParty contained rewrite_handler_property -syn keyword ngxDirectiveThirdParty contained access_handler_property -syn keyword ngxDirectiveThirdParty contained header_filter_property -syn keyword ngxDirectiveThirdParty contained always_read_body +syn keyword ngxDirectiveThirdParty contained rewrite_handler_type syn keyword ngxDirectiveThirdParty contained shared_map syn keyword ngxDirectiveThirdParty contained write_page_size -" Upstream Consistent Hash -" A load balancer that uses an internal consistent hash ring to select the right backend node. -syn keyword ngxDirectiveThirdParty contained consistent_hash - -" Nginx Development Kit -" The NDK is an Nginx module that is designed to extend the core functionality of the excellent Nginx webserver in a way that can be used as a basis of other Nginx modules. -" NDK_UPSTREAM_LIST -" This submodule provides a directive that creates a list of upstreams, with optional weighting. This list can then be used by other modules to hash over the upstreams however they choose. -syn keyword ngxDirectiveThirdParty contained upstream_list - -" Drizzle Module -" Upstream module for talking to MySQL and Drizzle directly -syn keyword ngxDirectiveThirdParty contained drizzle_server -syn keyword ngxDirectiveThirdParty contained drizzle_keepalive -syn keyword ngxDirectiveThirdParty contained drizzle_query -syn keyword ngxDirectiveThirdParty contained drizzle_pass -syn keyword ngxDirectiveThirdParty contained drizzle_connect_timeout -syn keyword ngxDirectiveThirdParty contained drizzle_send_query_timeout -syn keyword ngxDirectiveThirdParty contained drizzle_recv_cols_timeout -syn keyword ngxDirectiveThirdParty contained drizzle_recv_rows_timeout -syn keyword ngxDirectiveThirdParty contained drizzle_buffer_size -syn keyword ngxDirectiveThirdParty contained drizzle_module_header -syn keyword ngxDirectiveThirdParty contained drizzle_status - -" Dynamic ETags Module -" Attempt at handling ETag / If-None-Match on proxied content. -syn keyword ngxDirectiveThirdParty contained dynamic_etags - -" Echo Module -" Bringing the power of "echo", "sleep", "time" and more to Nginx's config file -syn keyword ngxDirectiveThirdParty contained echo -syn keyword ngxDirectiveThirdParty contained echo_duplicate -syn keyword ngxDirectiveThirdParty contained echo_flush -syn keyword ngxDirectiveThirdParty contained echo_sleep -syn keyword ngxDirectiveThirdParty contained echo_blocking_sleep -syn keyword ngxDirectiveThirdParty contained echo_reset_timer -syn keyword ngxDirectiveThirdParty contained echo_read_request_body -syn keyword ngxDirectiveThirdParty contained echo_location_async -syn keyword ngxDirectiveThirdParty contained echo_location -syn keyword ngxDirectiveThirdParty contained echo_subrequest_async -syn keyword ngxDirectiveThirdParty contained echo_subrequest -syn keyword ngxDirectiveThirdParty contained echo_foreach_split -syn keyword ngxDirectiveThirdParty contained echo_end -syn keyword ngxDirectiveThirdParty contained echo_request_body -syn keyword ngxDirectiveThirdParty contained echo_exec -syn keyword ngxDirectiveThirdParty contained echo_status -syn keyword ngxDirectiveThirdParty contained echo_before_body -syn keyword ngxDirectiveThirdParty contained echo_after_body - -" Encrypted Session Module -" Encrypt and decrypt nginx variable values -syn keyword ngxDirectiveThirdParty contained encrypted_session_key -syn keyword ngxDirectiveThirdParty contained encrypted_session_iv -syn keyword ngxDirectiveThirdParty contained encrypted_session_expires -syn keyword ngxDirectiveThirdParty contained set_encrypt_session -syn keyword ngxDirectiveThirdParty contained set_decrypt_session +" Certificate Transparency +" https://github.com/grahamedgecombe/nginx-ct +syn keyword ngxDirectiveThirdParty contained ssl_ct +syn keyword ngxDirectiveThirdParty contained ssl_ct_static_scts -" Enhanced Memcached Module -" This module is based on the standard Nginx Memcached module, with some additonal features -syn keyword ngxDirectiveThirdParty contained enhanced_memcached_pass -syn keyword ngxDirectiveThirdParty contained enhanced_memcached_hash_keys_with_md5 -syn keyword ngxDirectiveThirdParty contained enhanced_memcached_allow_put -syn keyword ngxDirectiveThirdParty contained enhanced_memcached_allow_delete -syn keyword ngxDirectiveThirdParty contained enhanced_memcached_stats -syn keyword ngxDirectiveThirdParty contained enhanced_memcached_flush -syn keyword ngxDirectiveThirdParty contained enhanced_memcached_flush_namespace -syn keyword ngxDirectiveThirdParty contained enhanced_memcached_bind -syn keyword ngxDirectiveThirdParty contained enhanced_memcached_connect_timeout -syn keyword ngxDirectiveThirdParty contained enhanced_memcached_send_timeout -syn keyword ngxDirectiveThirdParty contained enhanced_memcached_buffer_size -syn keyword ngxDirectiveThirdParty contained enhanced_memcached_read_timeout - -" Events Module (DEPRECATED) -" Provides options for start/stop events. -syn keyword ngxDirectiveDeprecated contained on_start -syn keyword ngxDirectiveDeprecated contained on_stop - -" EY Balancer Module -" Adds a request queue to Nginx that allows the limiting of concurrent requests passed to the upstream. -syn keyword ngxDirectiveThirdParty contained max_connections -syn keyword ngxDirectiveThirdParty contained max_connections_max_queue_length -syn keyword ngxDirectiveThirdParty contained max_connections_queue_timeout - -" Upstream Fair Balancer -" Sends an incoming request to the least-busy backend server, rather than distributing requests round-robin. -syn keyword ngxDirectiveThirdParty contained fair -syn keyword ngxDirectiveThirdParty contained upstream_fair_shm_size +" ngx_echo +" https://github.com/openresty/echo-nginx-module +syn keyword ngxDirectiveThirdParty contained echo_abort_parent +syn keyword ngxDirectiveThirdParty contained echo_after_body +syn keyword ngxDirectiveThirdParty contained echo_before_body +syn keyword ngxDirectiveThirdParty contained echo_blocking_sleep +syn keyword ngxDirectiveThirdParty contained echo_end +syn keyword ngxDirectiveThirdParty contained echo_exec +syn keyword ngxDirectiveThirdParty contained echo_flush +syn keyword ngxDirectiveThirdParty contained echo_foreach_split +syn keyword ngxDirectiveThirdParty contained echo_location +syn keyword ngxDirectiveThirdParty contained echo_location_async +syn keyword ngxDirectiveThirdParty contained echo_read_request_body +syn keyword ngxDirectiveThirdParty contained echo_request_body +syn keyword ngxDirectiveThirdParty contained echo_reset_timer +syn keyword ngxDirectiveThirdParty contained echo_status +syn keyword ngxDirectiveThirdParty contained echo_subrequest +syn keyword ngxDirectiveThirdParty contained echo_subrequest_async -" Fancy Indexes Module -" Like the built-in autoindex module, but fancier. -syn keyword ngxDirectiveThirdParty contained fancyindex -syn keyword ngxDirectiveThirdParty contained fancyindex_default_sort -syn keyword ngxDirectiveThirdParty contained fancyindex_directories_first -syn keyword ngxDirectiveThirdParty contained fancyindex_css_href -syn keyword ngxDirectiveThirdParty contained fancyindex_exact_size -syn keyword ngxDirectiveThirdParty contained fancyindex_name_length -syn keyword ngxDirectiveThirdParty contained fancyindex_footer -syn keyword ngxDirectiveThirdParty contained fancyindex_header -syn keyword ngxDirectiveThirdParty contained fancyindex_show_path -syn keyword ngxDirectiveThirdParty contained fancyindex_ignore -syn keyword ngxDirectiveThirdParty contained fancyindex_hide_symlinks -syn keyword ngxDirectiveThirdParty contained fancyindex_localtime -syn keyword ngxDirectiveThirdParty contained fancyindex_time_format +" FastDFS +" https://github.com/happyfish100/fastdfs-nginx-module +syn keyword ngxDirectiveThirdParty contained ngx_fastdfs_module -" Form Auth Module -" Provides authentication and authorization with credentials submitted via POST request -syn keyword ngxDirectiveThirdParty contained form_auth -syn keyword ngxDirectiveThirdParty contained form_auth_pam_service -syn keyword ngxDirectiveThirdParty contained form_auth_login -syn keyword ngxDirectiveThirdParty contained form_auth_password -syn keyword ngxDirectiveThirdParty contained form_auth_remote_user - -" Form Input Module -" Reads HTTP POST and PUT request body encoded in "application/x-www-form-urlencoded" and parses the arguments into nginx variables. -syn keyword ngxDirectiveThirdParty contained set_form_input -syn keyword ngxDirectiveThirdParty contained set_form_input_multi - -" GeoIP Module (DEPRECATED) -" Country code lookups via the MaxMind GeoIP API. -syn keyword ngxDirectiveDeprecated contained geoip_country_file - -" GeoIP 2 Module -" Creates variables with values from the maxmind geoip2 databases based on the client IP -syn keyword ngxDirectiveThirdParty contained geoip2 - -" GridFS Module -" Nginx module for serving files from MongoDB's GridFS -syn keyword ngxDirectiveThirdParty contained gridfs - -" Headers More Module -" Set and clear input and output headers...more than "add"! +" ngx_headers_more +" https://github.com/openresty/headers-more-nginx-module syn keyword ngxDirectiveThirdParty contained more_clear_headers syn keyword ngxDirectiveThirdParty contained more_clear_input_headers syn keyword ngxDirectiveThirdParty contained more_set_headers syn keyword ngxDirectiveThirdParty contained more_set_input_headers -" Health Checks Upstreams Module -" Polls backends and if they respond with HTTP 200 + an optional request body, they are marked good. Otherwise, they are marked bad. -syn keyword ngxDirectiveThirdParty contained healthcheck_enabled -syn keyword ngxDirectiveThirdParty contained healthcheck_delay -syn keyword ngxDirectiveThirdParty contained healthcheck_timeout -syn keyword ngxDirectiveThirdParty contained healthcheck_failcount -syn keyword ngxDirectiveThirdParty contained healthcheck_send -syn keyword ngxDirectiveThirdParty contained healthcheck_expected -syn keyword ngxDirectiveThirdParty contained healthcheck_buffer -syn keyword ngxDirectiveThirdParty contained healthcheck_status +" NGINX WebDAV missing commands support (PROPFIND & OPTIONS) +" https://github.com/arut/nginx-dav-ext-module +syn keyword ngxDirectiveThirdParty contained dav_ext_methods -" HTTP Accounting Module -" Add traffic stat function to nginx. Useful for http accounting based on nginx configuration logic -syn keyword ngxDirectiveThirdParty contained http_accounting -syn keyword ngxDirectiveThirdParty contained http_accounting_log -syn keyword ngxDirectiveThirdParty contained http_accounting_id -syn keyword ngxDirectiveThirdParty contained http_accounting_interval -syn keyword ngxDirectiveThirdParty contained http_accounting_perturb - -" Nginx Digest Authentication module -" Digest Authentication for Nginx -syn keyword ngxDirectiveThirdParty contained auth_digest -syn keyword ngxDirectiveThirdParty contained auth_digest_user_file -syn keyword ngxDirectiveThirdParty contained auth_digest_timeout -syn keyword ngxDirectiveThirdParty contained auth_digest_expires -syn keyword ngxDirectiveThirdParty contained auth_digest_replays -syn keyword ngxDirectiveThirdParty contained auth_digest_shm_size +" ngx_eval +" https://github.com/openresty/nginx-eval-module +syn keyword ngxDirectiveThirdParty contained eval +syn keyword ngxDirectiveThirdParty contained eval_buffer_size +syn keyword ngxDirectiveThirdParty contained eval_escalate +syn keyword ngxDirectiveThirdParty contained eval_override_content_type +syn keyword ngxDirectiveThirdParty contained eval_subrequest_in_memory -" Auth PAM Module -" HTTP Basic Authentication using PAM. -syn keyword ngxDirectiveThirdParty contained auth_pam -syn keyword ngxDirectiveThirdParty contained auth_pam_service_name - -" HTTP Auth Request Module -" Implements client authorization based on the result of a subrequest -" syn keyword ngxDirectiveThirdParty contained auth_request -" syn keyword ngxDirectiveThirdParty contained auth_request_set +" Fancy Index +" https://github.com/aperezdc/ngx-fancyindex +syn keyword ngxDirectiveThirdParty contained fancyindex +syn keyword ngxDirectiveThirdParty contained fancyindex_css_href +syn keyword ngxDirectiveThirdParty contained fancyindex_default_sort +syn keyword ngxDirectiveThirdParty contained fancyindex_directories_first +syn keyword ngxDirectiveThirdParty contained fancyindex_exact_size +syn keyword ngxDirectiveThirdParty contained fancyindex_footer +syn keyword ngxDirectiveThirdParty contained fancyindex_header +syn keyword ngxDirectiveThirdParty contained fancyindex_hide_symlinks +syn keyword ngxDirectiveThirdParty contained fancyindex_ignore +syn keyword ngxDirectiveThirdParty contained fancyindex_localtime +syn keyword ngxDirectiveThirdParty contained fancyindex_name_length +syn keyword ngxDirectiveThirdParty contained fancyindex_show_path +syn keyword ngxDirectiveThirdParty contained fancyindex_time_format -" HTTP Concatenation module for Nginx -" A Nginx module for concatenating files in a given context: CSS and JS files usually -syn keyword ngxDirectiveThirdParty contained concat -syn keyword ngxDirectiveThirdParty contained concat_types -syn keyword ngxDirectiveThirdParty contained concat_unique -syn keyword ngxDirectiveThirdParty contained concat_max_files -syn keyword ngxDirectiveThirdParty contained concat_delimiter -syn keyword ngxDirectiveThirdParty contained concat_ignore_file_error - -" HTTP Dynamic Upstream Module -" Update upstreams' config by restful interface -syn keyword ngxDirectiveThirdParty contained dyups_interface -syn keyword ngxDirectiveThirdParty contained dyups_read_msg_timeout -syn keyword ngxDirectiveThirdParty contained dyups_shm_zone_size -syn keyword ngxDirectiveThirdParty contained dyups_upstream_conf -syn keyword ngxDirectiveThirdParty contained dyups_trylock - -" HTTP Footer If Filter Module -" The ngx_http_footer_if_filter_module is used to add given content to the end of the response according to the condition specified. -syn keyword ngxDirectiveThirdParty contained footer_if - -" HTTP Footer Filter Module -" This module implements a body filter that adds a given string to the page footer. +" Footer filter +" https://github.com/alibaba/nginx-http-footer-filter syn keyword ngxDirectiveThirdParty contained footer syn keyword ngxDirectiveThirdParty contained footer_types -" HTTP Internal Redirect Module -" Make an internal redirect to the uri specified according to the condition specified. -syn keyword ngxDirectiveThirdParty contained internal_redirect_if -syn keyword ngxDirectiveThirdParty contained internal_redirect_if_no_postponed +" ngx_http_geoip2_module +" https://github.com/leev/ngx_http_geoip2_module +syn keyword ngxDirectiveThirdParty contained geoip2 +syn keyword ngxDirectiveThirdParty contained geoip2_proxy +syn keyword ngxDirectiveThirdParty contained geoip2_proxy_recursive + +" A version of the Nginx HTTP stub status module that outputs in JSON format +" https://github.com/nginx-modules/nginx-json-status-module +syn keyword ngxDirectiveThirdParty contained json_status +syn keyword ngxDirectiveThirdParty contained json_status_type + +" MogileFS client for nginx +" https://github.com/vkholodkov/nginx-mogilefs-module +syn keyword ngxDirectiveThirdParty contained mogilefs_class +syn keyword ngxDirectiveThirdParty contained mogilefs_connect_timeout +syn keyword ngxDirectiveThirdParty contained mogilefs_domain +syn keyword ngxDirectiveThirdParty contained mogilefs_methods +syn keyword ngxDirectiveThirdParty contained mogilefs_noverify +syn keyword ngxDirectiveThirdParty contained mogilefs_pass +syn keyword ngxDirectiveThirdParty contained mogilefs_read_timeout +syn keyword ngxDirectiveThirdParty contained mogilefs_send_timeout +syn keyword ngxDirectiveThirdParty contained mogilefs_tracker + +" Ancient nginx plugin; probably not useful to anyone +" https://github.com/kr/nginx-notice +syn keyword ngxDirectiveThirdParty contained notice +syn keyword ngxDirectiveThirdParty contained notice_type -" HTTP JavaScript Module -" Embedding SpiderMonkey. Nearly full port on Perl module. -syn keyword ngxDirectiveThirdParty contained js -syn keyword ngxDirectiveThirdParty contained js_filter -syn keyword ngxDirectiveThirdParty contained js_filter_types -syn keyword ngxDirectiveThirdParty contained js_load -syn keyword ngxDirectiveThirdParty contained js_maxmem -syn keyword ngxDirectiveThirdParty contained js_require -syn keyword ngxDirectiveThirdParty contained js_set -syn keyword ngxDirectiveThirdParty contained js_utf8 +" nchan +" https://github.com/slact/nchan +syn keyword ngxDirectiveThirdParty contained nchan_access_control_allow_origin +syn keyword ngxDirectiveThirdParty contained nchan_authorize_request +syn keyword ngxDirectiveThirdParty contained nchan_channel_event_string +syn keyword ngxDirectiveThirdParty contained nchan_channel_events_channel_id +syn keyword ngxDirectiveThirdParty contained nchan_channel_group +syn keyword ngxDirectiveThirdParty contained nchan_channel_group_accounting +syn keyword ngxDirectiveThirdParty contained nchan_channel_id +syn keyword ngxDirectiveThirdParty contained nchan_channel_id_split_delimiter +syn keyword ngxDirectiveThirdParty contained nchan_channel_timeout +syn keyword ngxDirectiveThirdParty contained nchan_deflate_message_for_websocket +syn keyword ngxDirectiveThirdParty contained nchan_eventsource_event +syn keyword ngxDirectiveThirdParty contained nchan_group_location +syn keyword ngxDirectiveThirdParty contained nchan_group_max_channels +syn keyword ngxDirectiveThirdParty contained nchan_group_max_messages +syn keyword ngxDirectiveThirdParty contained nchan_group_max_messages_disk +syn keyword ngxDirectiveThirdParty contained nchan_group_max_messages_memory +syn keyword ngxDirectiveThirdParty contained nchan_group_max_subscribers +syn keyword ngxDirectiveThirdParty contained nchan_longpoll_multipart_response +syn keyword ngxDirectiveThirdParty contained nchan_max_channel_id_length +syn keyword ngxDirectiveThirdParty contained nchan_max_channel_subscribers +syn keyword ngxDirectiveThirdParty contained nchan_max_reserved_memory +syn keyword ngxDirectiveThirdParty contained nchan_message_buffer_length +syn keyword ngxDirectiveThirdParty contained nchan_message_max_buffer_length +syn keyword ngxDirectiveThirdParty contained nchan_message_temp_path +syn keyword ngxDirectiveThirdParty contained nchan_message_timeout +syn keyword ngxDirectiveThirdParty contained nchan_permessage_deflate_compression_level +syn keyword ngxDirectiveThirdParty contained nchan_permessage_deflate_compression_memlevel +syn keyword ngxDirectiveThirdParty contained nchan_permessage_deflate_compression_strategy +syn keyword ngxDirectiveThirdParty contained nchan_permessage_deflate_compression_window +syn keyword ngxDirectiveThirdParty contained nchan_pub_channel_id +syn keyword ngxDirectiveThirdParty contained nchan_publisher +syn keyword ngxDirectiveThirdParty contained nchan_publisher_channel_id +syn keyword ngxDirectiveThirdParty contained nchan_publisher_location +syn keyword ngxDirectiveThirdParty contained nchan_publisher_upstream_request +syn keyword ngxDirectiveThirdParty contained nchan_pubsub +syn keyword ngxDirectiveThirdParty contained nchan_pubsub_channel_id +syn keyword ngxDirectiveThirdParty contained nchan_pubsub_location +syn keyword ngxDirectiveThirdParty contained nchan_redis_fakesub_timer_interval +syn keyword ngxDirectiveThirdParty contained nchan_redis_idle_channel_cache_timeout +syn keyword ngxDirectiveThirdParty contained nchan_redis_namespace +syn keyword ngxDirectiveThirdParty contained nchan_redis_pass +syn keyword ngxDirectiveThirdParty contained nchan_redis_pass_inheritable +syn keyword ngxDirectiveThirdParty contained nchan_redis_ping_interval +syn keyword ngxDirectiveThirdParty contained nchan_redis_publish_msgpacked_max_size +syn keyword ngxDirectiveThirdParty contained nchan_redis_server +syn keyword ngxDirectiveThirdParty contained nchan_redis_storage_mode +syn keyword ngxDirectiveThirdParty contained nchan_redis_url +syn keyword ngxDirectiveThirdParty contained nchan_shared_memory_size +syn keyword ngxDirectiveThirdParty contained nchan_storage_engine +syn keyword ngxDirectiveThirdParty contained nchan_store_messages +syn keyword ngxDirectiveThirdParty contained nchan_stub_status +syn keyword ngxDirectiveThirdParty contained nchan_sub_channel_id +syn keyword ngxDirectiveThirdParty contained nchan_subscribe_existing_channels_only +syn keyword ngxDirectiveThirdParty contained nchan_subscribe_request +syn keyword ngxDirectiveThirdParty contained nchan_subscriber +syn keyword ngxDirectiveThirdParty contained nchan_subscriber_channel_id +syn keyword ngxDirectiveThirdParty contained nchan_subscriber_compound_etag_message_id +syn keyword ngxDirectiveThirdParty contained nchan_subscriber_first_message +syn keyword ngxDirectiveThirdParty contained nchan_subscriber_http_raw_stream_separator +syn keyword ngxDirectiveThirdParty contained nchan_subscriber_last_message_id +syn keyword ngxDirectiveThirdParty contained nchan_subscriber_location +syn keyword ngxDirectiveThirdParty contained nchan_subscriber_message_id_custom_etag_header +syn keyword ngxDirectiveThirdParty contained nchan_subscriber_timeout +syn keyword ngxDirectiveThirdParty contained nchan_unsubscribe_request +syn keyword ngxDirectiveThirdParty contained nchan_use_redis +syn keyword ngxDirectiveThirdParty contained nchan_websocket_client_heartbeat +syn keyword ngxDirectiveThirdParty contained nchan_websocket_ping_interval +syn keyword ngxDirectiveThirdParty contained push_authorized_channels_only +syn keyword ngxDirectiveThirdParty contained push_channel_group +syn keyword ngxDirectiveThirdParty contained push_channel_timeout +syn keyword ngxDirectiveThirdParty contained push_max_channel_id_length +syn keyword ngxDirectiveThirdParty contained push_max_channel_subscribers +syn keyword ngxDirectiveThirdParty contained push_max_message_buffer_length +syn keyword ngxDirectiveThirdParty contained push_max_reserved_memory +syn keyword ngxDirectiveThirdParty contained push_message_buffer_length +syn keyword ngxDirectiveThirdParty contained push_message_timeout +syn keyword ngxDirectiveThirdParty contained push_min_message_buffer_length +syn keyword ngxDirectiveThirdParty contained push_publisher +syn keyword ngxDirectiveThirdParty contained push_store_messages +syn keyword ngxDirectiveThirdParty contained push_subscriber +syn keyword ngxDirectiveThirdParty contained push_subscriber_concurrency +syn keyword ngxDirectiveThirdParty contained push_subscriber_timeout -" HTTP Push Module (DEPRECATED) -" Turn Nginx into an adept long-polling HTTP Push (Comet) server. -syn keyword ngxDirectiveDeprecated contained push_buffer_size -syn keyword ngxDirectiveDeprecated contained push_listener -syn keyword ngxDirectiveDeprecated contained push_message_timeout -syn keyword ngxDirectiveDeprecated contained push_queue_messages -syn keyword ngxDirectiveDeprecated contained push_sender +" Push Stream +" https://github.com/wandenberg/nginx-push-stream-module +syn keyword ngxDirectiveThirdParty contained push_stream_allow_connections_to_events_channel +syn keyword ngxDirectiveThirdParty contained push_stream_allowed_origins +syn keyword ngxDirectiveThirdParty contained push_stream_authorized_channels_only +syn keyword ngxDirectiveThirdParty contained push_stream_channel_deleted_message_text +syn keyword ngxDirectiveThirdParty contained push_stream_channel_inactivity_time +syn keyword ngxDirectiveThirdParty contained push_stream_channel_info_on_publish +syn keyword ngxDirectiveThirdParty contained push_stream_channels_path +syn keyword ngxDirectiveThirdParty contained push_stream_channels_statistics +syn keyword ngxDirectiveThirdParty contained push_stream_events_channel_id +syn keyword ngxDirectiveThirdParty contained push_stream_footer_template +syn keyword ngxDirectiveThirdParty contained push_stream_header_template +syn keyword ngxDirectiveThirdParty contained push_stream_header_template_file +syn keyword ngxDirectiveThirdParty contained push_stream_last_event_id +syn keyword ngxDirectiveThirdParty contained push_stream_last_received_message_tag +syn keyword ngxDirectiveThirdParty contained push_stream_last_received_message_time +syn keyword ngxDirectiveThirdParty contained push_stream_longpolling_connection_ttl +syn keyword ngxDirectiveThirdParty contained push_stream_max_channel_id_length +syn keyword ngxDirectiveThirdParty contained push_stream_max_messages_stored_per_channel +syn keyword ngxDirectiveThirdParty contained push_stream_max_number_of_channels +syn keyword ngxDirectiveThirdParty contained push_stream_max_number_of_wildcard_channels +syn keyword ngxDirectiveThirdParty contained push_stream_max_subscribers_per_channel +syn keyword ngxDirectiveThirdParty contained push_stream_message_template +syn keyword ngxDirectiveThirdParty contained push_stream_message_ttl +syn keyword ngxDirectiveThirdParty contained push_stream_padding_by_user_agent +syn keyword ngxDirectiveThirdParty contained push_stream_ping_message_interval +syn keyword ngxDirectiveThirdParty contained push_stream_ping_message_text +syn keyword ngxDirectiveThirdParty contained push_stream_publisher +syn keyword ngxDirectiveThirdParty contained push_stream_shared_memory_size +syn keyword ngxDirectiveThirdParty contained push_stream_store_messages +syn keyword ngxDirectiveThirdParty contained push_stream_subscriber +syn keyword ngxDirectiveThirdParty contained push_stream_subscriber_connection_ttl +syn keyword ngxDirectiveThirdParty contained push_stream_timeout_with_body +syn keyword ngxDirectiveThirdParty contained push_stream_user_agent +syn keyword ngxDirectiveThirdParty contained push_stream_websocket_allow_publish +syn keyword ngxDirectiveThirdParty contained push_stream_wildcard_channel_max_qtd +syn keyword ngxDirectiveThirdParty contained push_stream_wildcard_channel_prefix -" HTTP Redis Module -" Redis support. +" redis module +" https://www.nginx.com/resources/wiki/modules/redis/ syn keyword ngxDirectiveThirdParty contained redis_bind syn keyword ngxDirectiveThirdParty contained redis_buffer_size syn keyword ngxDirectiveThirdParty contained redis_connect_timeout +syn keyword ngxDirectiveThirdParty contained redis_gzip_flag syn keyword ngxDirectiveThirdParty contained redis_next_upstream syn keyword ngxDirectiveThirdParty contained redis_pass syn keyword ngxDirectiveThirdParty contained redis_read_timeout syn keyword ngxDirectiveThirdParty contained redis_send_timeout -" Iconv Module -" A character conversion nginx module using libiconv -syn keyword ngxDirectiveThirdParty contained set_iconv -syn keyword ngxDirectiveThirdParty contained iconv_buffer_size -syn keyword ngxDirectiveThirdParty contained iconv_filter +" ngx_http_response +" http://catap.ru/downloads/nginx/ +syn keyword ngxDirectiveThirdParty contained response +syn keyword ngxDirectiveThirdParty contained response_type + +" nginx_substitutions_filter +" https://github.com/yaoweibin/ngx_http_substitutions_filter_module +syn keyword ngxDirectiveThirdParty contained subs_buffers +syn keyword ngxDirectiveThirdParty contained subs_filter +syn keyword ngxDirectiveThirdParty contained subs_filter_bypass +syn keyword ngxDirectiveThirdParty contained subs_filter_types +syn keyword ngxDirectiveThirdParty contained subs_line_buffer_size -" IP Blocker Module -" An efficient shared memory IP blocking system for nginx. -syn keyword ngxDirectiveThirdParty contained ip_blocker - -" IP2Location Module -" Allows user to lookup for geolocation information using IP2Location database -syn keyword ngxDirectiveThirdParty contained ip2location_database +" Tarantool nginx upstream module +" https://github.com/tarantool/nginx_upstream_module +syn keyword ngxDirectiveThirdParty contained tnt_allowed_indexes +syn keyword ngxDirectiveThirdParty contained tnt_allowed_spaces +syn keyword ngxDirectiveThirdParty contained tnt_buffer_size +syn keyword ngxDirectiveThirdParty contained tnt_connect_timeout +syn keyword ngxDirectiveThirdParty contained tnt_delete +syn keyword ngxDirectiveThirdParty contained tnt_http_methods +syn keyword ngxDirectiveThirdParty contained tnt_http_rest_methods +syn keyword ngxDirectiveThirdParty contained tnt_in_multiplier +syn keyword ngxDirectiveThirdParty contained tnt_insert +syn keyword ngxDirectiveThirdParty contained tnt_method +syn keyword ngxDirectiveThirdParty contained tnt_multireturn_skip_count +syn keyword ngxDirectiveThirdParty contained tnt_next_upstream +syn keyword ngxDirectiveThirdParty contained tnt_next_upstream_timeout +syn keyword ngxDirectiveThirdParty contained tnt_next_upstream_tries +syn keyword ngxDirectiveThirdParty contained tnt_out_multiplier +syn keyword ngxDirectiveThirdParty contained tnt_pass +syn keyword ngxDirectiveThirdParty contained tnt_pass_http_request +syn keyword ngxDirectiveThirdParty contained tnt_pass_http_request_buffer_size +syn keyword ngxDirectiveThirdParty contained tnt_pure_result +syn keyword ngxDirectiveThirdParty contained tnt_read_timeout +syn keyword ngxDirectiveThirdParty contained tnt_replace +syn keyword ngxDirectiveThirdParty contained tnt_select +syn keyword ngxDirectiveThirdParty contained tnt_select_limit_max +syn keyword ngxDirectiveThirdParty contained tnt_send_timeout +syn keyword ngxDirectiveThirdParty contained tnt_set_header -" JS Module -" Reflect the nginx functionality in JS -syn keyword ngxDirectiveThirdParty contained js -syn keyword ngxDirectiveThirdParty contained js_access -syn keyword ngxDirectiveThirdParty contained js_load -syn keyword ngxDirectiveThirdParty contained js_set +" A module for nginx web server for handling file uploads using multipart/form-data encoding (RFC 1867) +" https://github.com/Austinb/nginx-upload-module +syn keyword ngxDirectiveThirdParty contained upload_aggregate_form_field +syn keyword ngxDirectiveThirdParty contained upload_archive_elm +syn keyword ngxDirectiveThirdParty contained upload_archive_elm_separator +syn keyword ngxDirectiveThirdParty contained upload_archive_path +syn keyword ngxDirectiveThirdParty contained upload_archive_path_separator +syn keyword ngxDirectiveThirdParty contained upload_buffer_size +syn keyword ngxDirectiveThirdParty contained upload_cleanup +syn keyword ngxDirectiveThirdParty contained upload_content_type +syn keyword ngxDirectiveThirdParty contained upload_discard +syn keyword ngxDirectiveThirdParty contained upload_field_name +syn keyword ngxDirectiveThirdParty contained upload_file_crc32 +syn keyword ngxDirectiveThirdParty contained upload_file_md5 +syn keyword ngxDirectiveThirdParty contained upload_file_md5_uc +syn keyword ngxDirectiveThirdParty contained upload_file_name +syn keyword ngxDirectiveThirdParty contained upload_file_sha1 +syn keyword ngxDirectiveThirdParty contained upload_file_sha1_uc +syn keyword ngxDirectiveThirdParty contained upload_file_size +syn keyword ngxDirectiveThirdParty contained upload_filter +syn keyword ngxDirectiveThirdParty contained upload_max_file_size +syn keyword ngxDirectiveThirdParty contained upload_max_output_body_len +syn keyword ngxDirectiveThirdParty contained upload_max_part_header_len +syn keyword ngxDirectiveThirdParty contained upload_pass +syn keyword ngxDirectiveThirdParty contained upload_pass_args +syn keyword ngxDirectiveThirdParty contained upload_pass_form_field +syn keyword ngxDirectiveThirdParty contained upload_set_form_field +syn keyword ngxDirectiveThirdParty contained upload_store +syn keyword ngxDirectiveThirdParty contained upload_store_access +syn keyword ngxDirectiveThirdParty contained upload_tmp_path +syn keyword ngxDirectiveThirdParty contained upload_unzip +syn keyword ngxDirectiveThirdParty contained upload_unzip_buffers +syn keyword ngxDirectiveThirdParty contained upload_unzip_hash +syn keyword ngxDirectiveThirdParty contained upload_unzip_max_file_name_len +syn keyword ngxDirectiveThirdParty contained upload_unzip_window +syn keyword ngxDirectiveThirdParty contained upload_void_content_type -" Limit Upload Rate Module -" Limit client-upload rate when they are sending request bodies to you -syn keyword ngxDirectiveThirdParty contained limit_upload_rate -syn keyword ngxDirectiveThirdParty contained limit_upload_rate_after - -" Limit Upstream Module -" Limit the number of connections to upstream for NGINX -syn keyword ngxDirectiveThirdParty contained limit_upstream_zone -syn keyword ngxDirectiveThirdParty contained limit_upstream_conn -syn keyword ngxDirectiveThirdParty contained limit_upstream_log_level +" nginx-upload-progress-module +" https://github.com/masterzen/nginx-upload-progress-module +syn keyword ngxDirectiveThirdParty contained report_uploads +syn keyword ngxDirectiveThirdParty contained track_uploads +syn keyword ngxDirectiveThirdParty contained upload_progress +syn keyword ngxDirectiveThirdParty contained upload_progress_content_type +syn keyword ngxDirectiveThirdParty contained upload_progress_header +syn keyword ngxDirectiveThirdParty contained upload_progress_java_output +syn keyword ngxDirectiveThirdParty contained upload_progress_json_output +syn keyword ngxDirectiveThirdParty contained upload_progress_jsonp_output +syn keyword ngxDirectiveThirdParty contained upload_progress_jsonp_parameter +syn keyword ngxDirectiveThirdParty contained upload_progress_template -" Log If Module -" Conditional accesslog for nginx -syn keyword ngxDirectiveThirdParty contained access_log_bypass_if +" Health checks upstreams for nginx +" https://github.com/yaoweibin/nginx_upstream_check_module +syn keyword ngxDirectiveThirdParty contained check +syn keyword ngxDirectiveThirdParty contained check_fastcgi_param +syn keyword ngxDirectiveThirdParty contained check_http_expect_alive +syn keyword ngxDirectiveThirdParty contained check_http_send +syn keyword ngxDirectiveThirdParty contained check_keepalive_requests +syn keyword ngxDirectiveThirdParty contained check_shm_size +syn keyword ngxDirectiveThirdParty contained check_status + +" The fair load balancer module for nginx +" https://github.com/cryptofuture/nginx-upstream-fair +syn keyword ngxDirectiveThirdParty contained fair +syn keyword ngxDirectiveThirdParty contained upstream_fair_shm_size -" Log Request Speed (DEPRECATED) -" Log the time it took to process each request. -syn keyword ngxDirectiveDeprecated contained log_request_speed_filter -syn keyword ngxDirectiveDeprecated contained log_request_speed_filter_timeout - -" Log ZeroMQ Module -" ZeroMQ logger module for nginx -syn keyword ngxDirectiveThirdParty contained log_zmq_server -syn keyword ngxDirectiveThirdParty contained log_zmq_endpoint -syn keyword ngxDirectiveThirdParty contained log_zmq_format -syn keyword ngxDirectiveThirdParty contained log_zmq_off +" Nginx Video Thumb Extractor Module +" https://github.com/wandenberg/nginx-video-thumbextractor-module +syn keyword ngxDirectiveThirdParty contained video_thumbextractor +syn keyword ngxDirectiveThirdParty contained video_thumbextractor_image_height +syn keyword ngxDirectiveThirdParty contained video_thumbextractor_image_width +syn keyword ngxDirectiveThirdParty contained video_thumbextractor_jpeg_baseline +syn keyword ngxDirectiveThirdParty contained video_thumbextractor_jpeg_dpi +syn keyword ngxDirectiveThirdParty contained video_thumbextractor_jpeg_optimize +syn keyword ngxDirectiveThirdParty contained video_thumbextractor_jpeg_progressive_mode +syn keyword ngxDirectiveThirdParty contained video_thumbextractor_jpeg_quality +syn keyword ngxDirectiveThirdParty contained video_thumbextractor_jpeg_smooth +syn keyword ngxDirectiveThirdParty contained video_thumbextractor_next_time +syn keyword ngxDirectiveThirdParty contained video_thumbextractor_only_keyframe +syn keyword ngxDirectiveThirdParty contained video_thumbextractor_processes_per_worker +syn keyword ngxDirectiveThirdParty contained video_thumbextractor_threads +syn keyword ngxDirectiveThirdParty contained video_thumbextractor_tile_color +syn keyword ngxDirectiveThirdParty contained video_thumbextractor_tile_cols +syn keyword ngxDirectiveThirdParty contained video_thumbextractor_tile_margin +syn keyword ngxDirectiveThirdParty contained video_thumbextractor_tile_max_cols +syn keyword ngxDirectiveThirdParty contained video_thumbextractor_tile_max_rows +syn keyword ngxDirectiveThirdParty contained video_thumbextractor_tile_padding +syn keyword ngxDirectiveThirdParty contained video_thumbextractor_tile_rows +syn keyword ngxDirectiveThirdParty contained video_thumbextractor_tile_sample_interval +syn keyword ngxDirectiveThirdParty contained video_thumbextractor_video_filename +syn keyword ngxDirectiveThirdParty contained video_thumbextractor_video_second -" Lower/UpperCase Module -" This module simply uppercases or lowercases a string and saves it into a new variable. -syn keyword ngxDirectiveThirdParty contained lower -syn keyword ngxDirectiveThirdParty contained upper +" drizzle-nginx-module - Upstream module for talking to MySQL and Drizzle directly +" https://github.com/openresty/drizzle-nginx-module +syn keyword ngxDirectiveThirdParty contained drizzle_buffer_size +syn keyword ngxDirectiveThirdParty contained drizzle_connect_timeout +syn keyword ngxDirectiveThirdParty contained drizzle_dbname +syn keyword ngxDirectiveThirdParty contained drizzle_keepalive +syn keyword ngxDirectiveThirdParty contained drizzle_module_header +syn keyword ngxDirectiveThirdParty contained drizzle_pass +syn keyword ngxDirectiveThirdParty contained drizzle_query +syn keyword ngxDirectiveThirdParty contained drizzle_recv_cols_timeout +syn keyword ngxDirectiveThirdParty contained drizzle_recv_rows_timeout +syn keyword ngxDirectiveThirdParty contained drizzle_send_query_timeout +syn keyword ngxDirectiveThirdParty contained drizzle_server +syn keyword ngxDirectiveThirdParty contained drizzle_status -" Lua Upstream Module -" Nginx C module to expose Lua API to ngx_lua for Nginx upstreams +" ngx_dynamic_upstream +" https://github.com/cubicdaiya/ngx_dynamic_upstream +syn keyword ngxDirectiveThirdParty contained dynamic_upstream + +" encrypt and decrypt nginx variable values +" https://github.com/openresty/encrypted-session-nginx-module +syn keyword ngxDirectiveThirdParty contained encrypted_session_expires +syn keyword ngxDirectiveThirdParty contained encrypted_session_iv +syn keyword ngxDirectiveThirdParty contained encrypted_session_key +syn keyword ngxDirectiveThirdParty contained set_decrypt_session +syn keyword ngxDirectiveThirdParty contained set_encrypt_session -" Lua Module -" Embed the Power of Lua into NGINX HTTP servers -syn keyword ngxDirectiveThirdParty contained lua_use_default_type -syn keyword ngxDirectiveThirdParty contained lua_malloc_trim -syn keyword ngxDirectiveThirdParty contained lua_code_cache -syn keyword ngxDirectiveThirdParty contained lua_regex_cache_max_entries -syn keyword ngxDirectiveThirdParty contained lua_regex_match_limit -syn keyword ngxDirectiveThirdParty contained lua_package_path -syn keyword ngxDirectiveThirdParty contained lua_package_cpath +" serve content directly from MongoDB's GridFS +" https://github.com/mdirolf/nginx-gridfs +syn keyword ngxDirectiveThirdParty contained gridfs +syn keyword ngxDirectiveThirdParty contained mongo + +" Adds support for arithmetic operations to NGINX config +" https://github.com/arut/nginx-let-module +syn keyword ngxDirectiveThirdParty contained let + +" ngx_http_lua_module - Embed the power of Lua into Nginx HTTP Servers +" https://github.com/openresty/lua-nginx-module +syn keyword ngxDirectiveThirdParty contained access_by_lua +syn keyword ngxDirectiveThirdParty contained access_by_lua_block +syn keyword ngxDirectiveThirdParty contained access_by_lua_file +syn keyword ngxDirectiveThirdParty contained access_by_lua_no_postpone +syn keyword ngxDirectiveThirdParty contained balancer_by_lua_block +syn keyword ngxDirectiveThirdParty contained balancer_by_lua_file +syn keyword ngxDirectiveThirdParty contained body_filter_by_lua +syn keyword ngxDirectiveThirdParty contained body_filter_by_lua_block +syn keyword ngxDirectiveThirdParty contained body_filter_by_lua_file +syn keyword ngxDirectiveThirdParty contained content_by_lua +syn keyword ngxDirectiveThirdParty contained content_by_lua_block +syn keyword ngxDirectiveThirdParty contained content_by_lua_file +syn keyword ngxDirectiveThirdParty contained header_filter_by_lua +syn keyword ngxDirectiveThirdParty contained header_filter_by_lua_block +syn keyword ngxDirectiveThirdParty contained header_filter_by_lua_file syn keyword ngxDirectiveThirdParty contained init_by_lua syn keyword ngxDirectiveThirdParty contained init_by_lua_block syn keyword ngxDirectiveThirdParty contained init_by_lua_file syn keyword ngxDirectiveThirdParty contained init_worker_by_lua syn keyword ngxDirectiveThirdParty contained init_worker_by_lua_block syn keyword ngxDirectiveThirdParty contained init_worker_by_lua_file -syn keyword ngxDirectiveThirdParty contained set_by_lua -syn keyword ngxDirectiveThirdParty contained set_by_lua_block -syn keyword ngxDirectiveThirdParty contained set_by_lua_file -syn keyword ngxDirectiveThirdParty contained content_by_lua -syn keyword ngxDirectiveThirdParty contained content_by_lua_block -syn keyword ngxDirectiveThirdParty contained content_by_lua_file +syn keyword ngxDirectiveThirdParty contained log_by_lua +syn keyword ngxDirectiveThirdParty contained log_by_lua_block +syn keyword ngxDirectiveThirdParty contained log_by_lua_file +syn keyword ngxDirectiveThirdParty contained lua_capture_error_log +syn keyword ngxDirectiveThirdParty contained lua_check_client_abort +syn keyword ngxDirectiveThirdParty contained lua_code_cache +syn keyword ngxDirectiveThirdParty contained lua_fake_shm +syn keyword ngxDirectiveThirdParty contained lua_http10_buffering +syn keyword ngxDirectiveThirdParty contained lua_malloc_trim +syn keyword ngxDirectiveThirdParty contained lua_max_pending_timers +syn keyword ngxDirectiveThirdParty contained lua_max_running_timers +syn keyword ngxDirectiveThirdParty contained lua_need_request_body +syn keyword ngxDirectiveThirdParty contained lua_package_cpath +syn keyword ngxDirectiveThirdParty contained lua_package_path +syn keyword ngxDirectiveThirdParty contained lua_regex_cache_max_entries From mdounin at mdounin.ru Fri Dec 29 21:54:28 2017 From: mdounin at mdounin.ru (Maxim Dounin) Date: Fri, 29 Dec 2017 21:54:28 +0000 Subject: [nginx] Contrib: vim syntax, update core module directives. Message-ID: details: http://hg.nginx.org/nginx/rev/6d2e92acb013 branches: changeset: 7186:6d2e92acb013 user: Gena Makhomed date: Thu Dec 28 12:01:05 2017 +0200 description: Contrib: vim syntax, update core module directives. Removed non-existent directives and directive redefinitions. diffstat: contrib/vim/syntax/nginx.vim | 11 ----------- 1 files changed, 0 insertions(+), 11 deletions(-) diffs (58 lines): diff --git a/contrib/vim/syntax/nginx.vim b/contrib/vim/syntax/nginx.vim --- a/contrib/vim/syntax/nginx.vim +++ b/contrib/vim/syntax/nginx.vim @@ -90,9 +90,7 @@ syn keyword ngxDirectiveBlock contained syn keyword ngxDirectiveImportant contained include syn keyword ngxDirectiveImportant contained root -"syn keyword ngxDirectiveImportant contained server syn keyword ngxDirectiveImportant contained server_name -"syn keyword ngxDirectiveImportant contained listen syn keyword ngxDirectiveImportant contained internal syn keyword ngxDirectiveImportant contained proxy_pass syn keyword ngxDirectiveImportant contained memcached_pass @@ -151,7 +149,6 @@ syn keyword ngxDirective contained autoi syn keyword ngxDirective contained autoindex_format syn keyword ngxDirective contained autoindex_localtime syn keyword ngxDirective contained charset -syn keyword ngxDirective contained charset_map syn keyword ngxDirective contained charset_types syn keyword ngxDirective contained chunked_transfer_encoding syn keyword ngxDirective contained client_body_buffer_size @@ -466,10 +463,6 @@ syn keyword ngxDirective contained reset syn keyword ngxDirective contained resolver syn keyword ngxDirective contained resolver_timeout syn keyword ngxDirective contained rewrite_log -syn keyword ngxDirective contained rtsig_overflow_events -syn keyword ngxDirective contained rtsig_overflow_test -syn keyword ngxDirective contained rtsig_overflow_threshold -syn keyword ngxDirective contained rtsig_signo syn keyword ngxDirective contained satisfy syn keyword ngxDirective contained scgi_bind syn keyword ngxDirective contained scgi_buffer_size @@ -583,7 +576,6 @@ syn keyword ngxDirective contained sub_f syn keyword ngxDirective contained tcp_nodelay syn keyword ngxDirective contained tcp_nopush syn keyword ngxDirective contained thread_pool -syn keyword ngxDirective contained thread_stack_size syn keyword ngxDirective contained timeout syn keyword ngxDirective contained timer_resolution syn keyword ngxDirective contained types_hash_bucket_size @@ -636,7 +628,6 @@ syn keyword ngxDirective contained uwsgi syn keyword ngxDirective contained uwsgi_next_upstream_tries syn keyword ngxDirective contained uwsgi_no_cache syn keyword ngxDirective contained uwsgi_param -syn keyword ngxDirective contained uwsgi_pass syn keyword ngxDirective contained uwsgi_pass_header syn keyword ngxDirective contained uwsgi_pass_request_body syn keyword ngxDirective contained uwsgi_pass_request_headers @@ -670,9 +661,7 @@ syn keyword ngxDirective contained worke syn keyword ngxDirective contained worker_processes syn keyword ngxDirective contained worker_rlimit_core syn keyword ngxDirective contained worker_rlimit_nofile -syn keyword ngxDirective contained worker_rlimit_sigpending syn keyword ngxDirective contained worker_shutdown_timeout -syn keyword ngxDirective contained worker_threads syn keyword ngxDirective contained working_directory syn keyword ngxDirective contained xclient syn keyword ngxDirective contained xml_entities From mdounin at mdounin.ru Fri Dec 29 21:54:32 2017 From: mdounin at mdounin.ru (Maxim Dounin) Date: Sat, 30 Dec 2017 00:54:32 +0300 Subject: [PATCH 1 of 2] Contrib: vim syntax, update 3rd party module directives. In-Reply-To: <85dd7288-6a65-1f9d-a23a-3b216beeaefe@csdoc.com> References: <85dd7288-6a65-1f9d-a23a-3b216beeaefe@csdoc.com> Message-ID: <20171229215432.GL34136@mdounin.ru> Hello! On Thu, Dec 28, 2017 at 12:06:23PM +0200, Gena Makhomed wrote: > # HG changeset patch > # User Gena Makhomed > # Date 1514454584 -7200 > # Thu Dec 28 11:49:44 2017 +0200 > # Node ID 215684d20d906135281b2540149d354b6e4bb852 > # Parent 6939f75c4b139203d409517c4f0e35342a3e70cb > Contrib: vim syntax, update 3rd party module directives. > > 3rd party modules list synchronized with FreeBSD nginx-devel port. > > diff -r 6939f75c4b13 -r 215684d20d90 contrib/vim/syntax/nginx.vim > --- a/contrib/vim/syntax/nginx.vim Mon Dec 25 18:30:01 2017 +0200 > +++ b/contrib/vim/syntax/nginx.vim Thu Dec 28 11:49:44 2017 +0200 > @@ -683,529 +683,618 @@ > syn keyword ngxDirective contained xslt_types > syn keyword ngxDirective contained zone > > -" 3rd party module list: > -" https://www.nginx.com/resources/wiki/modules/ > +" 3rd party modules list taken from > +" > https://github.com/freebsd/freebsd-ports/blob/master/www/nginx-devel/Makefile > +" > ----------------------------------------------------------------------------- > > -" Accept Language Module > > -" Parses the Accept-Language header and gives the most suitable locale > from a list of supported locales. > +" Accept Language > +" https://github.com/giom/nginx_accept_language_module > syn keyword ngxDirectiveThirdParty contained set_from_accept_language [...] > @@ -2178,6 +2236,7 @@ > hi link ngxDirectiveDeprecated Error > hi link ngxDirective Identifier > hi link ngxDirectiveThirdParty Special > +hi link ngxDirectiveThirdPartyDeprecated Error For ngxDirectiveThirdPartyDeprecated to actually work, you have to link into the ngxDirectives cluster: diff --git a/contrib/vim/syntax/nginx.vim b/contrib/vim/syntax/nginx.vim --- a/contrib/vim/syntax/nginx.vim +++ b/contrib/vim/syntax/nginx.vim @@ -37,7 +37,7 @@ syn cluster ngxTopLevel syn cluster ngxDirectives \ contains=ngxDirective,ngxDirectiveBlock,ngxDirectiveImportant \ add=ngxDirectiveControl,ngxDirectiveError,ngxDirectiveDeprecated - \ add=ngxDirectiveThirdParty + \ add=ngxDirectiveThirdParty,ngxDirectiveThirdPartyDeprecated syn cluster ngxParams \ contains=ngxParam,ngxString,ngxParamComment,ngxSemicolon,ngxBlock Committed with the above fix, thanks. -- Maxim Dounin http://mdounin.ru/ From mdounin at mdounin.ru Fri Dec 29 21:54:59 2017 From: mdounin at mdounin.ru (Maxim Dounin) Date: Sat, 30 Dec 2017 00:54:59 +0300 Subject: [PATCH 2 of 2] Contrib: vim syntax, update core module directives. In-Reply-To: <354953f8-a0f1-11a3-9183-604722886fec@csdoc.com> References: <354953f8-a0f1-11a3-9183-604722886fec@csdoc.com> Message-ID: <20171229215459.GM34136@mdounin.ru> Hello! On Thu, Dec 28, 2017 at 12:07:54PM +0200, Gena Makhomed wrote: > # HG changeset patch > # User Gena Makhomed > # Date 1514455265 -7200 > # Thu Dec 28 12:01:05 2017 +0200 > # Node ID 16674bef9168f70962cafb451a0dd212b37d9c61 > # Parent 215684d20d906135281b2540149d354b6e4bb852 > Contrib: vim syntax, update core module directives. > > Removed non-existent directives and directive redefinitions. [...] Committed, thanks. -- Maxim Dounin http://mdounin.ru/