[-]
[+]
|
Changed |
nginx.spec
|
|
[-]
[+]
|
Deleted |
2bc1dac6fb3ed263529decb211ec784824132bf4.patch
^
|
@@ -1,38 +0,0 @@
-From 2bc1dac6fb3ed263529decb211ec784824132bf4 Mon Sep 17 00:00:00 2001
-From: Chris Lea <chris.lea@gmail.com>
-Date: Tue, 15 Nov 2016 22:26:35 -0800
-Subject: [PATCH] default_port was removed in 1.11.6.
-
----
- ngx_http_upstream_fair_module.c | 9 ++++++++-
- 1 file changed, 8 insertions(+), 1 deletion(-)
-
-diff --git a/ngx_http_upstream_fair_module.c b/ngx_http_upstream_fair_module.c
-index a4419ca..66144e9 100644
---- a/ngx_http_upstream_fair_module.c
-+++ b/ngx_http_upstream_fair_module.c
-@@ -540,7 +540,11 @@ ngx_http_upstream_init_fair_rr(ngx_conf_t *cf, ngx_http_upstream_srv_conf_t *us)
-
- /* an upstream implicitly defined by proxy_pass, etc. */
-
-+#if nginx_version < 1011006
- if (us->port == 0 && us->default_port == 0) {
-+#else
-+ if (us->port == 0) {
-+#endif
- ngx_log_error(NGX_LOG_EMERG, cf->log, 0,
- "no port in upstream \"%V\" in %s:%ui",
- &us->host, us->file_name, us->line);
-@@ -550,8 +554,11 @@ ngx_http_upstream_init_fair_rr(ngx_conf_t *cf, ngx_http_upstream_srv_conf_t *us)
- ngx_memzero(&u, sizeof(ngx_url_t));
-
- u.host = us->host;
-+#if nginx_version < 1011006
- u.port = (in_port_t) (us->port ? us->port : us->default_port);
--
-+#else
-+ u.port = (in_port_t) us->port;
-+#endif
- if (ngx_inet_resolve_host(cf->pool, &u) != NGX_OK) {
- if (u.err) {
- ngx_log_error(NGX_LOG_EMERG, cf->log, 0,
|
[-]
[+]
|
Deleted |
check_1.7.5+.patch
^
|
@@ -1,195 +0,0 @@
-diff --git a/src/http/modules/ngx_http_upstream_ip_hash_module.c b/src/http/modules/ngx_http_upstream_ip_hash_module.c
-index 148d73a..913e395 100644
---- a/src/http/modules/ngx_http_upstream_ip_hash_module.c
-+++ b/src/http/modules/ngx_http_upstream_ip_hash_module.c
-@@ -9,6 +9,9 @@
- #include <ngx_core.h>
- #include <ngx_http.h>
-
-+#if (NGX_HTTP_UPSTREAM_CHECK)
-+#include "ngx_http_upstream_check_module.h"
-+#endif
-
- typedef struct {
- /* the round robin data must be first */
-@@ -212,6 +215,15 @@ ngx_http_upstream_get_ip_hash_peer(ngx_peer_connection_t *pc, void *data)
- goto next_try;
- }
-
-+#if (NGX_HTTP_UPSTREAM_CHECK)
-+ ngx_log_debug1(NGX_LOG_DEBUG_HTTP, pc->log, 0,
-+ "get ip_hash peer, check_index: %ui",
-+ peer->check_index);
-+ if (ngx_http_upstream_check_peer_down(peer->check_index)) {
-+ goto next_try;
-+ }
-+#endif
-+
- if (peer->max_fails
- && peer->fails >= peer->max_fails
- && now - peer->checked <= peer->fail_timeout)
-diff --git a/src/http/modules/ngx_http_upstream_least_conn_module.c b/src/http/modules/ngx_http_upstream_least_conn_module.c
-index 623bc9b..a223839 100644
---- a/src/http/modules/ngx_http_upstream_least_conn_module.c
-+++ b/src/http/modules/ngx_http_upstream_least_conn_module.c
-@@ -9,6 +9,9 @@
- #include <ngx_core.h>
- #include <ngx_http.h>
-
-+#if (NGX_HTTP_UPSTREAM_CHECK)
-+#include "ngx_http_upstream_check_module.h"
-+#endif
-
- typedef struct {
- ngx_uint_t *conns;
-@@ -203,6 +206,16 @@ ngx_http_upstream_get_least_conn_peer(ngx_peer_connection_t *pc, void *data)
- continue;
- }
-
-+#if (NGX_HTTP_UPSTREAM_CHECK)
-+ ngx_log_debug1(NGX_LOG_DEBUG_HTTP, pc->log, 0,
-+ "get least_conn peer, check_index: %ui",
-+ peer->check_index);
-+
-+ if (ngx_http_upstream_check_peer_down(peer->check_index)) {
-+ continue;
-+ }
-+#endif
-+
- if (peer->max_fails
- && peer->fails >= peer->max_fails
- && now - peer->checked <= peer->fail_timeout)
-@@ -256,6 +269,16 @@ ngx_http_upstream_get_least_conn_peer(ngx_peer_connection_t *pc, void *data)
- continue;
- }
-
-+#if (NGX_HTTP_UPSTREAM_CHECK)
-+ ngx_log_debug1(NGX_LOG_DEBUG_HTTP, pc->log, 0,
-+ "get least_conn peer, check_index: %ui",
-+ peer->check_index);
-+
-+ if (ngx_http_upstream_check_peer_down(peer->check_index)) {
-+ continue;
-+ }
-+#endif
-+
- if (lcp->conns[i] * best->weight != lcp->conns[p] * peer->weight) {
- continue;
- }
-diff --git a/src/http/ngx_http_upstream_round_robin.c b/src/http/ngx_http_upstream_round_robin.c
-index 2d0649b..b9789eb 100644
---- a/src/http/ngx_http_upstream_round_robin.c
-+++ b/src/http/ngx_http_upstream_round_robin.c
-@@ -9,6 +9,9 @@
- #include <ngx_core.h>
- #include <ngx_http.h>
-
-+#if (NGX_HTTP_UPSTREAM_CHECK)
-+#include "ngx_http_upstream_check_module.h"
-+#endif
-
- #define ngx_http_upstream_tries(p) ((p)->number \
- + ((p)->next ? (p)->next->number : 0))
-@@ -92,6 +95,14 @@ ngx_http_upstream_init_round_robin(ngx_conf_t *cf,
- peer[n].fail_timeout = server[i].fail_timeout;
- peer[n].down = server[i].down;
- peer[n].server = server[i].name;
-+#if (NGX_HTTP_UPSTREAM_CHECK)
-+ if (!server[i].down) {
-+ peers->peer[n].check_index =
-+ ngx_http_upstream_check_add_peer(cf, us, &server[i].addrs[j]);
-+ } else {
-+ peers->peer[n].check_index = (ngx_uint_t) NGX_ERROR;
-+ }
-+#endif
- n++;
- }
- }
-@@ -148,6 +159,15 @@ ngx_http_upstream_init_round_robin(ngx_conf_t *cf,
- peer[n].fail_timeout = server[i].fail_timeout;
- peer[n].down = server[i].down;
- peer[n].server = server[i].name;
-+#if (NGX_HTTP_UPSTREAM_CHECK)
-+ if (!server[i].down) {
-+ backup->peer[n].check_index =
-+ ngx_http_upstream_check_add_peer(cf, us, &server[i].addrs[j]);
-+ }
-+ else {
-+ backup->peer[n].check_index = (ngx_uint_t) NGX_ERROR;
-+ }
-+#endif
- n++;
- }
- }
-@@ -207,6 +227,9 @@ ngx_http_upstream_init_round_robin(ngx_conf_t *cf,
- peer[i].current_weight = 0;
- peer[i].max_fails = 1;
- peer[i].fail_timeout = 10;
-+#if (NGX_HTTP_UPSTREAM_CHECK)
-+ peers->peer[i].check_index = (ngx_uint_t) NGX_ERROR;
-+#endif
- }
-
- us->peer.data = peers;
-@@ -316,7 +339,9 @@ ngx_http_upstream_create_round_robin_peer(ngx_http_request_t *r,
- peer[0].current_weight = 0;
- peer[0].max_fails = 1;
- peer[0].fail_timeout = 10;
--
-+#if (NGX_HTTP_UPSTREAM_CHECK)
-+ peers->peer[0].check_index = (ngx_uint_t) NGX_ERROR;
-+#endif
- } else {
-
- for (i = 0; i < ur->naddrs; i++) {
-@@ -356,6 +381,9 @@ ngx_http_upstream_create_round_robin_peer(ngx_http_request_t *r,
- peer[i].current_weight = 0;
- peer[i].max_fails = 1;
- peer[i].fail_timeout = 10;
-+#if (NGX_HTTP_UPSTREAM_CHECK)
-+ peers->peer[i].check_index = (ngx_uint_t) NGX_ERROR;
-+#endif
- }
- }
-
-@@ -415,6 +443,12 @@ ngx_http_upstream_get_round_robin_peer(ngx_peer_connection_t *pc, void *data)
- goto failed;
- }
-
-+#if (NGX_HTTP_UPSTREAM_CHECK)
-+ if (ngx_http_upstream_check_peer_down(peer->check_index)) {
-+ goto failed;
-+ }
-+#endif
-+
- } else {
-
- /* there are several peers */
-@@ -507,6 +541,12 @@ ngx_http_upstream_get_peer(ngx_http_upstream_rr_peer_data_t *rrp)
- continue;
- }
-
-+#if (NGX_HTTP_UPSTREAM_CHECK)
-+ if (ngx_http_upstream_check_peer_down(peer->check_index)) {
-+ continue;
-+ }
-+#endif
-+
- if (peer->max_fails
- && peer->fails >= peer->max_fails
- && now - peer->checked <= peer->fail_timeout)
-diff --git a/src/http/ngx_http_upstream_round_robin.h b/src/http/ngx_http_upstream_round_robin.h
-index 9db82a6..6e19a65 100644
---- a/src/http/ngx_http_upstream_round_robin.h
-+++ b/src/http/ngx_http_upstream_round_robin.h
-@@ -31,6 +31,10 @@ typedef struct {
- ngx_uint_t max_fails;
- time_t fail_timeout;
-
-+#if (NGX_HTTP_UPSTREAM_CHECK)
-+ ngx_uint_t check_index;
-+#endif
-+
- ngx_uint_t down; /* unsigned down:1; */
-
- #if (NGX_HTTP_SSL)
|
[-]
[+]
|
Deleted |
nginx-0.4.0-no_Werror.patch
^
|
@@ -1,13 +0,0 @@
-Index: auto/cc/gcc
-===================================================================
---- auto/cc/gcc.orig
-+++ auto/cc/gcc
-@@ -171,7 +171,7 @@
-
-
- # stop on warning
--CFLAGS="$CFLAGS -Werror"
-+CFLAGS="$CFLAGS"
-
- # debug
- CFLAGS="$CFLAGS -g"
|
[-]
[+]
|
Deleted |
nginx-0.4.0-perl_vendor_install.patch
^
|
@@ -1,13 +0,0 @@
-Index: auto/install
-===================================================================
---- auto/install.orig
-+++ auto/install
-@@ -7,7 +7,7 @@
- cat << END >> $NGX_MAKEFILE
-
- install_perl_modules:
-- cd $NGX_OBJS/src/http/modules/perl && make install
-+ cd $NGX_OBJS/src/http/modules/perl && make install_vendor
- END
-
- NGX_INSTALL_PERL_MODULES=install_perl_modules
|
[-]
[+]
|
Deleted |
nginx-0.6.31-DESTDIR.patch
^
|
@@ -1,75 +0,0 @@
-Index: auto/install
-===================================================================
---- auto/install.orig 2007-07-30 12:51:55.000000000 +0200
-+++ auto/install 2008-05-29 18:00:45.383221398 +0200
-@@ -19,45 +19,45 @@ cat << END
-
- install: $NGX_OBJS${ngx_dirsep}nginx${ngx_binext} \
- $NGX_INSTALL_PERL_MODULES
-- test -d '$NGX_PREFIX' || mkdir -p '$NGX_PREFIX'
-+ test -d '\$(DESTDIR)$NGX_PREFIX' || mkdir -p '\$(DESTDIR)$NGX_PREFIX'
-
-- test -d '`dirname "$NGX_SBIN_PATH"`' \
-- || mkdir -p '`dirname "$NGX_SBIN_PATH"`'
-- test ! -f '$NGX_SBIN_PATH' || mv '$NGX_SBIN_PATH' '$NGX_SBIN_PATH.old'
-- cp $NGX_OBJS/nginx '$NGX_SBIN_PATH'
-+ test -d '\$(DESTDIR)`dirname "$NGX_SBIN_PATH"`' \
-+ || mkdir -p '\$(DESTDIR)`dirname "$NGX_SBIN_PATH"`'
-+ test ! -f '\$(DESTDIR)$NGX_SBIN_PATH' || mv '\$(DESTDIR)$NGX_SBIN_PATH' '\$(DESTDIR)$NGX_SBIN_PATH.old'
-+ cp $NGX_OBJS/nginx '\$(DESTDIR)$NGX_SBIN_PATH'
-
-- test -d '$NGX_CONF_PREFIX' || mkdir -p '$NGX_CONF_PREFIX'
-+ test -d '\$(DESTDIR)$NGX_CONF_PREFIX' || mkdir -p '\$(DESTDIR)$NGX_CONF_PREFIX'
-
-- cp conf/koi-win '$NGX_CONF_PREFIX'
-- cp conf/koi-utf '$NGX_CONF_PREFIX'
-- cp conf/win-utf '$NGX_CONF_PREFIX'
-+ cp conf/koi-win '\$(DESTDIR)$NGX_CONF_PREFIX'
-+ cp conf/koi-utf '\$(DESTDIR)$NGX_CONF_PREFIX'
-+ cp conf/win-utf '\$(DESTDIR)$NGX_CONF_PREFIX'
-
-- test -f '$NGX_CONF_PREFIX/mime.types' \
-- || cp conf/mime.types '$NGX_CONF_PREFIX'
-- cp conf/mime.types '$NGX_CONF_PREFIX/mime.types.default'
-+ test -f '\$(DESTDIR)$NGX_CONF_PREFIX/mime.types' \
-+ || cp conf/mime.types '\$(DESTDIR)$NGX_CONF_PREFIX'
-+ cp conf/mime.types '\$(DESTDIR)$NGX_CONF_PREFIX/mime.types.default'
-
-- test -f '$NGX_CONF_PREFIX/fastcgi_params' \
-- || cp conf/fastcgi_params '$NGX_CONF_PREFIX'
-- cp conf/fastcgi_params '$NGX_CONF_PREFIX/fastcgi_params.default'
-+ test -f '\$(DESTDIR)$NGX_CONF_PREFIX/fastcgi_params' \
-+ || cp conf/fastcgi_params '\$(DESTDIR)$NGX_CONF_PREFIX'
-+ cp conf/fastcgi_params '\$(DESTDIR)$NGX_CONF_PREFIX/fastcgi_params.default'
-
-- test -f '$NGX_CONF_PATH' || cp conf/nginx.conf '$NGX_CONF_PREFIX'
-- cp conf/nginx.conf '$NGX_CONF_PREFIX/nginx.conf.default'
-+ test -f '\$(DESTDIR)$NGX_CONF_PATH' || cp conf/nginx.conf '\$(DESTDIR)$NGX_CONF_PREFIX'
-+ cp conf/nginx.conf '\$(DESTDIR)$NGX_CONF_PREFIX/nginx.conf.default'
-
-- test -d '`dirname "$NGX_PID_PATH"`' \
-- || mkdir -p '`dirname "$NGX_PID_PATH"`'
-+ test -d '\$(DESTDIR)`dirname "$NGX_PID_PATH"`' \
-+ || mkdir -p '\$(DESTDIR)`dirname "$NGX_PID_PATH"`'
-
-- test -d '`dirname "$NGX_HTTP_LOG_PATH"`' || \
-- mkdir -p '`dirname "$NGX_HTTP_LOG_PATH"`'
-+ test -d '\$(DESTDIR)`dirname "$NGX_HTTP_LOG_PATH"`' || \
-+ mkdir -p '\$(DESTDIR)`dirname "$NGX_HTTP_LOG_PATH"`'
-
-- test -d '$NGX_PREFIX/html' || cp -r html '$NGX_PREFIX'
-+ test -d '\$(DESTDIR)$NGX_PREFIX/html' || cp -r html '\$(DESTDIR)$NGX_PREFIX'
- END
-
-
--if test -n "$NGX_ERROR_LOG_PATH"; then
-+if test -n "\$(DESTDIR)$NGX_ERROR_LOG_PATH"; then
- cat << END >> $NGX_MAKEFILE
-
-- test -d '`dirname "$NGX_ERROR_LOG_PATH"`' || \
-- mkdir -p '`dirname "$NGX_ERROR_LOG_PATH"`'
-+ test -d '\$(DESTDIR)`dirname "$NGX_ERROR_LOG_PATH"`' || \
-+ mkdir -p '\$(DESTDIR)`dirname "$NGX_ERROR_LOG_PATH"`'
- END
-
- fi
|
[-]
[+]
|
Deleted |
nginx-0.6.31_default_config.patch
^
|
@@ -1,71 +0,0 @@
-Index: conf/nginx.conf
-===================================================================
---- conf/nginx.conf.orig 2009-04-06 15:43:46.000000000 +0200
-+++ conf/nginx.conf 2009-05-08 20:19:55.436773498 +0200
-@@ -1,12 +1,12 @@
-
--#user nobody;
-+user nginx;
- worker_processes 1;
-
--#error_log logs/error.log;
--#error_log logs/error.log notice;
--#error_log logs/error.log info;
-+#error_log /var/log/nginx/error.log;
-+#error_log /var/log/nginx/error.log notice;
-+#error_log /var/log/nginx/error.log info;
-
--#pid logs/nginx.pid;
-+#pid /var/run/nginx.pid;
-
-
- events {
-@@ -22,7 +22,7 @@ http {
- # '$status $body_bytes_sent "$http_referer" '
- # '"$http_user_agent" "$http_x_forwarded_for"';
-
-- #access_log logs/access.log main;
-+ #access_log /var/log/nginx/access.log main;
-
- sendfile on;
- #tcp_nopush on;
-@@ -38,10 +38,10 @@ http {
-
- #charset koi8-r;
-
-- #access_log logs/host.access.log main;
-+ #access_log /var/log/nginx/host.access.log main;
-
- location / {
-- root html;
-+ root /srv/www/htdocs/;
- index index.html index.htm;
- }
-
-@@ -51,7 +51,7 @@ http {
- #
- error_page 500 502 503 504 /50x.html;
- location = /50x.html {
-- root html;
-+ root /srv/www/htdocs/;
- }
-
- # proxy the PHP scripts to Apache listening on 127.0.0.1:80
-@@ -87,7 +87,7 @@ http {
- # server_name somename alias another.alias;
-
- # location / {
-- # root html;
-+ # root /srv/www/htdocs/;
- # index index.html index.htm;
- # }
- #}
-@@ -110,7 +110,7 @@ http {
- # ssl_prefer_server_ciphers on;
-
- # location / {
-- # root html;
-+ # root /srv/www/htdocs/;
- # index index.html index.htm;
- # }
- #}
|
[-]
[+]
|
Deleted |
nginx-0.6.38-html.patch
^
|
@@ -1,14 +0,0 @@
-Index: auto/install
-===================================================================
---- auto/install.orig
-+++ auto/install
-@@ -54,8 +54,7 @@
- test -d '\$(DESTDIR)`dirname "$NGX_HTTP_LOG_PATH"`' || \
- mkdir -p '\$(DESTDIR)`dirname "$NGX_HTTP_LOG_PATH"`'
-
-- test -d '\$(DESTDIR)$NGX_PREFIX/html' \
-- || cp -r html '\$(DESTDIR)$NGX_PREFIX'
-+ test -d '\$(DESTDIR)/srv/www/htdocs' || install -d '\$(DESTDIR)/srv/www/' && cp -r html '\$(DESTDIR)/srv/www/htdocs'
- END
-
-
|
[-]
[+]
|
Changed |
_service
^
|
@@ -2,6 +2,6 @@
<service name="download_url">
<param name="host">nginx.org</param>
<param name="protocol">http</param>
- <param name="path">/download/nginx-1.13.7.tar.gz</param>
+ <param name="path">/download/nginx-1.12.2.tar.gz</param>
</service>
-<service name="download_url"><param name="host">nginx.org</param><param name="protocol">http</param><param name="path">/download/nginx-1.13.7.tar.gz</param></service><service name="download_url"><param name="host">www.openssl.org</param><param name="protocol">https</param><param name="path">/source/openssl-1.1.0g.tar.gz</param></service></services>
\ No newline at end of file
+<service name="download_url"><param name="host">nginx.org</param><param name="protocol">http</param><param name="path">/download/nginx-1.12.2.tar.gz</param></service><service name="download_url"><param name="host">www.openssl.org</param><param name="protocol">https</param><param name="path">/source/openssl-1.1.0g.tar.gz</param></service></services>
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.12.2.tar.gz/CHANGES
^
|
@@ -1,178 +1,36 @@
-Changes with nginx 1.13.7 21 Nov 2017
+Changes with nginx 1.12.2 17 Oct 2017
- *) Bugfix: in the $upstream_status variable.
-
- *) Bugfix: a segmentation fault might occur in a worker process if a
- backend returned a "101 Switching Protocols" response to a
- subrequest.
-
- *) Bugfix: a segmentation fault occurred in a master process if a shared
- memory zone size was changed during a reconfiguration and the
- reconfiguration failed.
-
- *) Bugfix: in the ngx_http_fastcgi_module.
-
- *) Bugfix: nginx returned the 500 error if parameters without variables
- were specified in the "xslt_stylesheet" directive.
-
- *) Workaround: "gzip filter failed to use preallocated memory" alerts
- appeared in logs when using a zlib library variant from Intel.
-
- *) Bugfix: the "worker_shutdown_timeout" directive did not work when
- using mail proxy and when proxying WebSocket connections.
+ *) Bugfix: client SSL connections were immediately closed if deferred
+ accept and the "proxy_protocol" parameter of the "listen" directive
+ were used.
+ *) Bugfix: client connections might be dropped during configuration
+ testing when using the "reuseport" parameter of the "listen"
+ directive on Linux.
-Changes with nginx 1.13.6 10 Oct 2017
+ *) Bugfix: incorrect response length was returned on 32-bit platforms
+ when requesting more than 4 gigabytes with multiple ranges.
*) Bugfix: switching to the next upstream server in the stream module
did not work when using the "ssl_preread" directive.
- *) Bugfix: in the ngx_http_v2_module.
- Thanks to Piotr Sikora.
-
- *) Bugfix: nginx did not support dates after the year 2038 on 32-bit
- platforms with 64-bit time_t.
-
- *) Bugfix: in handling of dates prior to the year 1970 and after the
- year 10000.
-
- *) Bugfix: in the stream module timeouts waiting for UDP datagrams from
- upstream servers were not logged or logged at the "info" level
- instead of "error".
-
- *) Bugfix: when using HTTP/2 nginx might return the 400 response without
- logging the reason.
-
- *) Bugfix: in processing of corrupted cache files.
-
- *) Bugfix: cache control headers were ignored when caching errors
- intercepted by error_page.
-
*) Bugfix: when using HTTP/2 client request body might be corrupted.
*) Bugfix: in handling of client addresses when using unix domain
sockets.
- *) Bugfix: nginx hogged CPU when using the "hash ... consistent"
- directive in the upstream block if large weights were used and all or
- most of the servers were unavailable.
-
-
-Changes with nginx 1.13.5 05 Sep 2017
- *) Feature: the $ssl_client_escaped_cert variable.
-
- *) Bugfix: the "ssl_session_ticket_key" directive and the "include"
- parameter of the "geo" directive did not work on Windows.
-
- *) Bugfix: incorrect response length was returned on 32-bit platforms
- when requesting more than 4 gigabytes with multiple ranges.
-
- *) Bugfix: the "expires modified" directive and processing of the
- "If-Range" request header line did not use the response last
- modification time if proxying without caching was used.
-
-
-Changes with nginx 1.13.4 08 Aug 2017
-
- *) Feature: the ngx_http_mirror_module.
-
- *) Bugfix: client connections might be dropped during configuration
- testing when using the "reuseport" parameter of the "listen"
- directive on Linux.
-
- *) Bugfix: request body might not be available in subrequests if it was
- saved to a file and proxying was used.
-
- *) Bugfix: cleaning cache based on the "max_size" parameter did not work
- on Windows.
-
- *) Bugfix: any shared memory allocation required 4096 bytes on Windows.
-
- *) Bugfix: nginx worker might be terminated abnormally when using the
- "zone" directive inside the "upstream" block on Windows.
-
-
-Changes with nginx 1.13.3 11 Jul 2017
+Changes with nginx 1.12.1 11 Jul 2017
*) Security: a specially crafted request might result in an integer
overflow and incorrect processing of ranges in the range filter,
potentially resulting in sensitive information leak (CVE-2017-7529).
-Changes with nginx 1.13.2 27 Jun 2017
-
- *) Change: nginx now returns 200 instead of 416 when a range starting
- with 0 is requested from an empty file.
-
- *) Feature: the "add_trailer" directive.
- Thanks to Piotr Sikora.
-
- *) Bugfix: nginx could not be built on Cygwin and NetBSD; the bug had
- appeared in 1.13.0.
-
- *) Bugfix: nginx could not be built under MSYS2 / MinGW 64-bit.
- Thanks to Orgad Shaneh.
-
- *) Bugfix: a segmentation fault might occur in a worker process when
- using SSI with many includes and proxy_pass with variables.
-
- *) Bugfix: in the ngx_http_v2_module.
- Thanks to Piotr Sikora.
-
-
-Changes with nginx 1.13.1 30 May 2017
-
- *) Feature: now a hostname can be used as the "set_real_ip_from"
- directive parameter.
-
- *) Feature: vim syntax highlighting scripts improvements.
-
- *) Feature: the "worker_cpu_affinity" directive now works on DragonFly
- BSD.
- Thanks to Sepherosa Ziehau.
-
- *) Bugfix: SSL renegotiation on backend connections did not work when
- using OpenSSL before 1.1.0.
-
- *) Workaround: nginx could not be built with Oracle Developer Studio
- 12.5.
-
- *) Workaround: now cache manager ignores long locked cache entries when
- cleaning cache based on the "max_size" parameter.
-
- *) Bugfix: client SSL connections were immediately closed if deferred
- accept and the "proxy_protocol" parameter of the "listen" directive
- were used.
-
- *) Bugfix: in the "proxy_cache_background_update" directive.
-
- *) Workaround: now the "tcp_nodelay" directive sets the TCP_NODELAY
- option before an SSL handshake.
-
-
-Changes with nginx 1.13.0 25 Apr 2017
-
- *) Change: SSL renegotiation is now allowed on backend connections.
-
- *) Feature: the "rcvbuf" and "sndbuf" parameters of the "listen"
- directives of the mail proxy and stream modules.
-
- *) Feature: the "return" and "error_page" directives can now be used to
- return 308 redirections.
- Thanks to Simon Leblanc.
-
- *) Feature: the "TLSv1.3" parameter of the "ssl_protocols" directive.
-
- *) Feature: when logging signals nginx now logs PID of the process which
- sent the signal.
-
- *) Bugfix: in memory allocation error handling.
+Changes with nginx 1.12.0 12 Apr 2017
- *) Bugfix: if a server in the stream module listened on a wildcard
- address, the source address of a response UDP datagram could differ
- from the original datagram destination address.
+ *) 1.12.x stable branch.
Changes with nginx 1.11.13 04 Apr 2017
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.12.2.tar.gz/CHANGES.ru
^
|
@@ -1,100 +1,28 @@
-Изменения в nginx 1.13.7 21.11.2017
+Изменения в nginx 1.12.2 17.10.2017
- *) Исправление: в переменной $upstream_status.
-
- *) Исправление: в рабочем процессе мог произойти segmentation fault,
- если бэкенд возвращал ответ "101 Switching Protocols" на подзапрос.
-
- *) Исправление: если при переконфигурации изменялся размер зоны
- разделяемой памяти и переконфигурация завершалась неудачно, то в
- главном процессе происходил segmentation fault.
-
- *) Исправление: в модуле ngx_http_fastcgi_module.
-
- *) Исправление: nginx возвращал ошибку 500, если в директиве
- xslt_stylesheet были заданы параметры без использования переменных.
-
- *) Изменение: при использовании варианта библиотеки zlib от Intel в лог
- писались сообщения "gzip filter failed to use preallocated memory".
-
- *) Исправление: директива worker_shutdown_timeout не работала при
- использовании почтового прокси-сервера и при проксировании
- WebSocket-соединений.
+ *) Исправление: клиентские SSL-соединения сразу закрывались, если
+ использовался отложенный accept и параметр proxy_protocol директивы
+ listen.
+ *) Исправление: клиентские соединения могли сбрасываться при
+ тестировании конфигурации, если использовался параметр reuseport
+ директивы listen на Linux.
-Изменения в nginx 1.13.6 10.10.2017
+ *) Исправление: на 32-битных платформах при запросе более 4 гигабайт с
+ помощью нескольких диапазонов возвращалась некорректная длина ответа.
*) Исправление: при использовании директивы ssl_preread в модуле stream
не работало переключение на следующий бэкенд.
- *) Исправление: в модуле ngx_http_v2_module.
- Спасибо Piotr Sikora.
-
- *) Исправление: nginx не поддерживал даты после 2038 года на 32-битных
- платформах с 64-битным time_t.
-
- *) Исправление: в обработке дат до 1970 года и после 10000 года.
-
- *) Исправление: в модуле stream таймауты ожидания UDP-пакетов от
- бэкендов не логгировались или логгировались на уровне info вместо
- error.
-
- *) Исправление: при использовании HTTP/2 nginx мог вернуть ошибку 400,
- не указав в логе причину.
-
- *) Исправление: в обработке повреждённых файлов кэша.
-
- *) Исправление: при кэшировании ошибок, перехваченных error_page, не
- учитывались заголовки управления кэшированием.
-
*) Исправление: при использовании HTTP/2 тело запроса могло быть
повреждено.
*) Исправление: в обработке адресов клиентов при использовании unix
domain сокетов.
- *) Исправление: при использовании директивы "hash ... consistent" в
- блоке upstream nginx нагружал процессор, если использовались большие
- веса и все или почти все бэкенды были недоступны.
-
-
-Изменения в nginx 1.13.5 05.09.2017
- *) Добавление: переменная $ssl_client_escaped_cert.
-
- *) Исправление: директива ssl_session_ticket_key и параметр include
- директивы geo не работали на Windows.
-
- *) Исправление: на 32-битных платформах при запросе более 4 гигабайт с
- помощью нескольких диапазонов возвращалась некорректная длина ответа.
-
- *) Исправление: директива "expires modified" и обработка строки If-Range
- заголовка запроса не учитывали время последнего изменения ответа,
- если использовалось проксирование без кэширования.
-
-
-Изменения в nginx 1.13.4 08.08.2017
-
- *) Добавление: модуль ngx_http_mirror_module.
-
- *) Исправление: клиентские соединения могли сбрасываться при
- тестировании конфигурации, если использовался параметр reuseport
- директивы listen на Linux.
-
- *) Исправление: тело запроса могло быть недоступно в подзапросах, если
- оно было сохранено в файл и использовалось проксирование.
-
- *) Исправление: очистка кэша по max_size не работала на Windows.
-
- *) Исправление: любое выделение разделяемой памяти на Windows требовало
- 4096 байт памяти.
-
- *) Исправление: при использовании директивы zone в блоке upstream на
- Windows рабочий процесс мог завершаться аварийно.
-
-
-Изменения в nginx 1.13.3 11.07.2017
+Изменения в nginx 1.12.1 11.07.2017
*) Безопасность: специально созданный запрос мог вызвать целочисленное
переполнение в range-фильтре и последующую некорректную обработку
@@ -102,79 +30,9 @@
конфиденциальной информации (CVE-2017-7529).
-Изменения в nginx 1.13.2 27.06.2017
-
- *) Изменение: теперь при запросе диапазона, начинающегося с 0, из
- пустого файла nginx возвращает ответ 200 вместо 416.
-
- *) Добавление: директива add_trailer.
- Спасибо Piotr Sikora.
-
- *) Исправление: nginx не собирался под Cygwin и NetBSD; ошибка появилась
- в 1.13.0.
-
- *) Исправление: nginx не собирался под MSYS2 / MinGW 64-bit.
- Спасибо Orgad Shaneh.
-
- *) Исправление: при использовании SSI с большим количеством подзапросов
- и proxy_pass с переменными в рабочем процессе мог произойти
- segmentation fault.
-
- *) Исправление: в модуле ngx_http_v2_module.
- Спасибо Piotr Sikora.
-
-
-Изменения в nginx 1.13.1 30.05.2017
-
- *) Добавление: теперь в качестве параметра директивы set_real_ip_from
- можно указывать имя хоста.
-
- *) Добавление: улучшения в скриптах подсветки синтаксиса для vim.
-
- *) Добавление: директива worker_cpu_affinity теперь работает на
- DragonFly BSD.
- Спасибо Sepherosa Ziehau.
-
- *) Исправление: SSL renegotiation в соединениях к бэкендам не работал
- при использовании OpenSSL до 1.1.0.
-
- *) Изменение: nginx не собирался с Oracle Developer Studio 12.5.
-
- *) Изменение: теперь cache manager пропускает заблокированные записи при
- очистке кэша по max_size.
-
- *) Исправление: клиентские SSL-соединения сразу закрывались, если
- использовался отложенный accept и параметр proxy_protocol директивы
- listen.
-
- *) Исправление: в директиве proxy_cache_background_update.
-
- *) Изменение: теперь директива tcp_nodelay устанавливает опцию
- TCP_NODELAY перед SSL handshake.
-
-
-Изменения в nginx 1.13.0 25.04.2017
-
- *) Изменение: теперь SSL renegotiation допускается в соединениях к
- бэкендам.
-
- *) Добавление: параметры rcvbuf и sndbuf директив listen в почтовом
- прокси-сервере и модуле stream.
-
- *) Добавление: директивы return и error_page теперь могут использоваться
- для возврата перенаправлений с кодом 308.
- Спасибо Simon Leblanc.
-
- *) Добавление: параметр TLSv1.3 в директиве ssl_protocols.
-
- *) Добавление: при логгировании сигналов теперь указывается PID
- отправившего сигнал процесса.
-
- *) Исправление: в обработке ошибок выделения памяти.
+Изменения в nginx 1.12.0 12.04.2017
- *) Исправление: если сервер в модуле stream слушал на wildcard-адресе,
- исходящий адрес ответного UDP-пакета мог отличаться от адреса
- назначения исходного пакета.
+ *) Стабильная ветка 1.12.x.
Изменения в nginx 1.11.13 04.04.2017
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.12.2.tar.gz/auto/cc/bcc
^
|
@@ -62,6 +62,7 @@
ngx_objout="-o"
ngx_binout="-e"
ngx_objext="obj"
+ngx_binext=".exe"
ngx_long_start='@&&|
'
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.12.2.tar.gz/auto/cc/conf
^
|
@@ -178,25 +178,21 @@
fi
- if [ "$NGX_CC_NAME" = "sunc" ]; then
- echo "checking for gcc builtin atomic operations ... disabled"
- else
- ngx_feature="gcc builtin 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;
- if (!__sync_bool_compare_and_swap(&n, 0, 1))
- return 1;
- if (__sync_fetch_and_add(&n, 1) != 1)
- return 1;
- if (n != 2)
- return 1;
- __sync_synchronize();"
- . auto/feature
- fi
+ ngx_feature="gcc builtin 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;
+ if (!__sync_bool_compare_and_swap(&n, 0, 1))
+ return 1;
+ if (__sync_fetch_and_add(&n, 1) != 1)
+ return 1;
+ if (n != 2)
+ return 1;
+ __sync_synchronize();"
+ . auto/feature
if [ "$NGX_CC_NAME" = "ccc" ]; then
@@ -213,7 +209,7 @@
var(0, buf, \"%d\", 1);
if (buf[0] != '1') return 1"
. auto/feature
- fi
+ fi
ngx_feature="gcc variadic macros"
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.12.2.tar.gz/auto/cc/msvc
^
|
@@ -142,6 +142,7 @@
ngx_objout="-Fo"
ngx_binout="-Fe"
ngx_objext="obj"
+ngx_binext=".exe"
ngx_long_start='@<<
'
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.12.2.tar.gz/auto/cc/owc
^
|
@@ -84,6 +84,7 @@
ngx_objout="-fo"
ngx_binout="-fe="
ngx_objext="obj"
+ngx_binext=".exe"
ngx_regex_dirsep='\\'
ngx_dirsep="\\"
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.12.2.tar.gz/auto/cc/sunc
^
|
@@ -8,10 +8,7 @@
# Sun C 5.9 SunOS_i386 2007/05/03 Sun Studio 12
# Sun C 5.9 SunOS_sparc 2007/05/03
# Sun C 5.10 SunOS_i386 2009/06/03 Sun Studio 12.1
-# Sun C 5.11 SunOS_i386 2010/08/13 Oracle Solaris Studio 12.2
-# Sun C 5.12 SunOS_i386 2011/11/16 Oracle Solaris Studio 12.3
-# Sun C 5.13 SunOS_i386 2014/10/20 Oracle Solaris Studio 12.4
-# Sun C 5.14 SunOS_i386 2016/05/31 Oracle Developer Studio 12.5
+# Sun C 5.11 SunOS_i386 2010/08/13 Sun Studio 12.2
NGX_SUNC_VER=`$CC -V 2>&1 | grep 'Sun C' 2>&1 \
| sed -e 's/^.* Sun C \(.*\)/\1/'`
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.12.2.tar.gz/auto/lib/conf
^
|
@@ -7,7 +7,7 @@
. auto/lib/pcre/conf
else
- if [ $USE_PCRE = DISABLED -a $HTTP = YES -a $HTTP_REWRITE = YES ]; then
+ if [ $USE_PCRE = DISABLED -a $HTTP_REWRITE = YES ]; then
cat << END
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.12.2.tar.gz/auto/modules
^
|
@@ -506,28 +506,6 @@
. auto/module
fi
- if [ $HTTP_MIRROR = YES ]; then
- ngx_module_name=ngx_http_mirror_module
- ngx_module_incs=
- ngx_module_deps=
- ngx_module_srcs=src/http/modules/ngx_http_mirror_module.c
- ngx_module_libs=
- ngx_module_link=$HTTP_MIRROR
-
- . auto/module
- fi
-
- if :; then
- ngx_module_name=ngx_http_try_files_module
- ngx_module_incs=
- ngx_module_deps=
- ngx_module_srcs=src/http/modules/ngx_http_try_files_module.c
- ngx_module_libs=
- ngx_module_link=YES
-
- . auto/module
- fi
-
if [ $HTTP_AUTH_REQUEST = YES ]; then
ngx_module_name=ngx_http_auth_request_module
ngx_module_incs=
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.12.2.tar.gz/auto/options
^
|
@@ -70,7 +70,6 @@
HTTP_ACCESS=YES
HTTP_AUTH_BASIC=YES
HTTP_AUTH_REQUEST=NO
-HTTP_MIRROR=YES
HTTP_USERID=YES
HTTP_SLICE=NO
HTTP_AUTOINDEX=YES
@@ -250,7 +249,6 @@
--without-http_userid_module) HTTP_USERID=NO ;;
--without-http_access_module) HTTP_ACCESS=NO ;;
--without-http_auth_basic_module) HTTP_AUTH_BASIC=NO ;;
- --without-http_mirror_module) HTTP_MIRROR=NO ;;
--without-http_autoindex_module) HTTP_AUTOINDEX=NO ;;
--without-http_status_module) HTTP_STATUS=NO ;;
--without-http_geo_module) HTTP_GEO=NO ;;
@@ -460,7 +458,6 @@
--without-http_userid_module disable ngx_http_userid_module
--without-http_access_module disable ngx_http_access_module
--without-http_auth_basic_module disable ngx_http_auth_basic_module
- --without-http_mirror_module disable ngx_http_mirror_module
--without-http_autoindex_module disable ngx_http_autoindex_module
--without-http_geo_module disable ngx_http_geo_module
--without-http_map_module disable ngx_http_map_module
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.12.2.tar.gz/auto/os/conf
^
|
@@ -41,14 +41,6 @@
'
;;
- NetBSD:*)
- CORE_INCS="$UNIX_INCS"
- CORE_DEPS="$UNIX_DEPS $POSIX_DEPS"
- CORE_SRCS="$UNIX_SRCS"
-
- NGX_RPATH=YES
- ;;
-
HP-UX:*)
# HP/UX
have=NGX_HPUX . auto/have_headers
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.12.2.tar.gz/auto/os/darwin
^
|
@@ -17,9 +17,6 @@
MAIN_LINK=
MODULE_LINK="-shared -Wl,-undefined,dynamic_lookup"
-CC_AUX_FLAGS="$CC_AUX_FLAGS -D__APPLE_USE_RFC_3542"
-
-
# kqueue
echo " + kqueue found"
@@ -89,6 +86,7 @@
# sendfile()
+CC_AUX_FLAGS="$CC_AUX_FLAGS"
ngx_feature="sendfile()"
ngx_feature_name="NGX_HAVE_SENDFILE"
ngx_feature_run=yes
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.12.2.tar.gz/auto/os/linux
^
|
@@ -157,6 +157,20 @@
. auto/feature
+# sched_setaffinity()
+
+ngx_feature="sched_setaffinity()"
+ngx_feature_name="NGX_HAVE_SCHED_SETAFFINITY"
+ngx_feature_run=no
+ngx_feature_incs="#include <sched.h>"
+ngx_feature_path=
+ngx_feature_libs=
+ngx_feature_test="cpu_set_t mask;
+ CPU_ZERO(&mask);
+ sched_setaffinity(0, sizeof(cpu_set_t), &mask)"
+. auto/feature
+
+
# crypt_r()
ngx_feature="crypt_r()"
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.12.2.tar.gz/auto/os/win32
^
|
@@ -13,7 +13,6 @@
SELECT_SRCS=$WIN32_SELECT_SRCS
ngx_pic_opt=
-ngx_binext=".exe"
case "$NGX_CC_NAME" in
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.12.2.tar.gz/auto/unix
^
|
@@ -300,18 +300,6 @@
fi
-ngx_feature="sched_setaffinity()"
-ngx_feature_name="NGX_HAVE_SCHED_SETAFFINITY"
-ngx_feature_run=no
-ngx_feature_incs="#include <sched.h>"
-ngx_feature_path=
-ngx_feature_libs=
-ngx_feature_test="cpu_set_t mask;
- CPU_ZERO(&mask);
- sched_setaffinity(0, sizeof(cpu_set_t), &mask)"
-. auto/feature
-
-
ngx_feature="SO_SETFIB"
ngx_feature_name="NGX_HAVE_SETFIB"
ngx_feature_run=no
@@ -406,19 +394,6 @@
. auto/feature
-# BSD way to set IPv4 datagram source address
-
-ngx_feature="IP_SENDSRCADDR"
-ngx_feature_name="NGX_HAVE_IP_SENDSRCADDR"
-ngx_feature_run=no
-ngx_feature_incs="#include <sys/socket.h>
- #include <netinet/in.h>"
-ngx_feature_path=
-ngx_feature_libs=
-ngx_feature_test="setsockopt(0, IPPROTO_IP, IP_SENDSRCADDR, NULL, 0)"
-. auto/feature
-
-
# Linux way to get IPv4 datagram destination address
ngx_feature="IP_PKTINFO"
@@ -428,10 +403,7 @@
#include <netinet/in.h>"
ngx_feature_path=
ngx_feature_libs=
-ngx_feature_test="struct in_pktinfo pkt;
- pkt.ipi_spec_dst.s_addr = INADDR_ANY;
- (void) pkt;
- setsockopt(0, IPPROTO_IP, IP_PKTINFO, NULL, 0)"
+ngx_feature_test="setsockopt(0, IPPROTO_IP, IP_PKTINFO, NULL, 0)"
. auto/feature
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.12.2.tar.gz/conf/mime.types
^
|
@@ -1,95 +1,89 @@
types {
- text/html html htm shtml;
- text/css css;
- text/xml xml;
- image/gif gif;
- image/jpeg jpeg jpg;
- application/javascript js;
- application/atom+xml atom;
- application/rss+xml rss;
-
- text/mathml mml;
- text/plain txt;
- text/vnd.sun.j2me.app-descriptor jad;
- text/vnd.wap.wml wml;
- text/x-component htc;
-
- image/png png;
- image/svg+xml svg svgz;
- image/tiff tif tiff;
- image/vnd.wap.wbmp wbmp;
- image/webp webp;
- image/x-icon ico;
- image/x-jng jng;
- image/x-ms-bmp bmp;
-
- application/font-woff woff;
- application/java-archive jar war ear;
- application/json json;
- application/mac-binhex40 hqx;
- application/msword doc;
- application/pdf pdf;
- application/postscript ps eps ai;
- application/rtf rtf;
- application/vnd.apple.mpegurl m3u8;
- application/vnd.google-earth.kml+xml kml;
- application/vnd.google-earth.kmz kmz;
- application/vnd.ms-excel xls;
- application/vnd.ms-fontobject eot;
- application/vnd.ms-powerpoint ppt;
- application/vnd.oasis.opendocument.graphics odg;
- application/vnd.oasis.opendocument.presentation odp;
- application/vnd.oasis.opendocument.spreadsheet ods;
- application/vnd.oasis.opendocument.text odt;
- application/vnd.openxmlformats-officedocument.presentationml.presentation
- pptx;
- application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
- xlsx;
- application/vnd.openxmlformats-officedocument.wordprocessingml.document
- docx;
- application/vnd.wap.wmlc wmlc;
- application/x-7z-compressed 7z;
- application/x-cocoa cco;
- application/x-java-archive-diff jardiff;
- application/x-java-jnlp-file jnlp;
- application/x-makeself run;
- application/x-perl pl pm;
- application/x-pilot prc pdb;
- application/x-rar-compressed rar;
- application/x-redhat-package-manager rpm;
- application/x-sea sea;
- application/x-shockwave-flash swf;
- application/x-stuffit sit;
- application/x-tcl tcl tk;
- application/x-x509-ca-cert der pem crt;
- application/x-xpinstall xpi;
- application/xhtml+xml xhtml;
- application/xspf+xml xspf;
- application/zip zip;
-
- application/octet-stream bin exe dll;
- application/octet-stream deb;
- application/octet-stream dmg;
- application/octet-stream iso img;
- application/octet-stream msi msp msm;
-
- audio/midi mid midi kar;
- audio/mpeg mp3;
- audio/ogg ogg;
- audio/x-m4a m4a;
- audio/x-realaudio ra;
-
- video/3gpp 3gpp 3gp;
- video/mp2t ts;
- video/mp4 mp4;
- video/mpeg mpeg mpg;
- video/quicktime mov;
- video/webm webm;
- video/x-flv flv;
- video/x-m4v m4v;
- video/x-mng mng;
- video/x-ms-asf asx asf;
- video/x-ms-wmv wmv;
- video/x-msvideo avi;
+ text/html html htm shtml;
+ text/css css;
+ text/xml xml;
+ image/gif gif;
+ image/jpeg jpeg jpg;
+ application/javascript js;
+ application/atom+xml atom;
+ application/rss+xml rss;
+
+ text/mathml mml;
+ text/plain txt;
+ text/vnd.sun.j2me.app-descriptor jad;
+ text/vnd.wap.wml wml;
+ text/x-component htc;
+
+ image/png png;
+ image/tiff tif tiff;
+ image/vnd.wap.wbmp wbmp;
+ image/x-icon ico;
+ image/x-jng jng;
+ image/x-ms-bmp bmp;
+ image/svg+xml svg svgz;
+ image/webp webp;
+
+ application/font-woff woff;
+ application/java-archive jar war ear;
+ application/json json;
+ application/mac-binhex40 hqx;
+ application/msword doc;
+ application/pdf pdf;
+ application/postscript ps eps ai;
+ application/rtf rtf;
+ application/vnd.apple.mpegurl m3u8;
+ application/vnd.ms-excel xls;
+ application/vnd.ms-fontobject eot;
+ application/vnd.ms-powerpoint ppt;
+ application/vnd.wap.wmlc wmlc;
+ application/vnd.google-earth.kml+xml kml;
+ application/vnd.google-earth.kmz kmz;
+ application/x-7z-compressed 7z;
+ application/x-cocoa cco;
+ application/x-java-archive-diff jardiff;
+ application/x-java-jnlp-file jnlp;
+ application/x-makeself run;
+ application/x-perl pl pm;
+ application/x-pilot prc pdb;
+ application/x-rar-compressed rar;
+ application/x-redhat-package-manager rpm;
+ application/x-sea sea;
+ application/x-shockwave-flash swf;
+ application/x-stuffit sit;
+ application/x-tcl tcl tk;
+ application/x-x509-ca-cert der pem crt;
+ application/x-xpinstall xpi;
+ application/xhtml+xml xhtml;
+ application/xspf+xml xspf;
+ application/zip zip;
+
+ application/octet-stream bin exe dll;
+ application/octet-stream deb;
+ application/octet-stream dmg;
+ application/octet-stream iso img;
+ application/octet-stream msi msp msm;
+
+ application/vnd.openxmlformats-officedocument.wordprocessingml.document docx;
+ application/vnd.openxmlformats-officedocument.spreadsheetml.sheet xlsx;
+ application/vnd.openxmlformats-officedocument.presentationml.presentation pptx;
+
+ audio/midi mid midi kar;
+ audio/mpeg mp3;
+ audio/ogg ogg;
+ audio/x-m4a m4a;
+ audio/x-realaudio ra;
+
+ video/3gpp 3gpp 3gp;
+ video/mp2t ts;
+ video/mp4 mp4;
+ video/mpeg mpeg mpg;
+ video/quicktime mov;
+ video/webm webm;
+ video/x-flv flv;
+ video/x-m4v m4v;
+ video/x-mng mng;
+ video/x-ms-asf asx asf;
+ video/x-ms-wmv wmv;
+ video/x-msvideo avi;
}
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.12.2.tar.gz/configure
^
|
@@ -36,7 +36,7 @@
NGX_PLATFORM="$NGX_SYSTEM:$NGX_RELEASE:$NGX_MACHINE";
case "$NGX_SYSTEM" in
- MINGW32_* | MINGW64_* | MSYS_*)
+ MINGW32_*)
NGX_PLATFORM=win32
;;
esac
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.12.2.tar.gz/contrib/vim/syntax/nginx.vim
^
|
@@ -5,2145 +5,2115 @@
finish
end
-" general syntax
+setlocal iskeyword+=.
+setlocal iskeyword+=/
+setlocal iskeyword+=:
-if has("patch-7.4.1142")
- " except control characters, ";", "{", and "}"
- syn iskeyword 33-58,60-122,124,126-255
-endif
-
-syn match ngxName '\([^;{} \t\\]\|\\.\)\+'
- \ contains=@ngxDirectives
- \ nextgroup=@ngxParams skipwhite skipempty
-syn match ngxParam '\([^;{ \t\\]\|\\.\)\+'
- \ contained
- \ contains=ngxVariable
- \ nextgroup=@ngxParams skipwhite skipempty
-syn region ngxString start=+\z(["']\)+ end=+\z1+ skip=+\\\\\|\\\z1+
- \ contains=ngxVariableString
- \ nextgroup=@ngxParams skipwhite skipempty
-syn match ngxParamComment '#.*$'
- \ nextgroup=@ngxParams skipwhite skipempty
-syn match ngxSemicolon ';' contained
-syn region ngxBlock start=+{+ end=+}+ contained
- \ contains=@ngxTopLevel
-syn match ngxComment '#.*$'
-
-syn match ngxVariable '\$\w\+' contained
+syn match ngxVariable '\$\(\w\+\|{\w\+}\)'
+syn match ngxVariableBlock '\$\(\w\+\|{\w\+}\)' contained
syn match ngxVariableString '\$\(\w\+\|{\w\+}\)' contained
-
-syn cluster ngxTopLevel
- \ contains=ngxName,ngxString,ngxComment
-syn cluster ngxDirectives
- \ contains=ngxDirective,ngxDirectiveBlock,ngxDirectiveImportant
- \ add=ngxDirectiveControl,ngxDirectiveError,ngxDirectiveDeprecated
- \ add=ngxDirectiveThirdParty
-syn cluster ngxParams
- \ contains=ngxParam,ngxString,ngxParamComment,ngxSemicolon,ngxBlock
-
-" boolean parameters
-
-syn keyword ngxBoolean contained on off
- \ nextgroup=@ngxParams skipwhite skipempty
-syn cluster ngxParams add=ngxBoolean
-
-" listen directive
-
-syn cluster ngxTopLevel add=ngxDirectiveListen
-syn keyword ngxDirectiveListen listen
- \ nextgroup=@ngxListenParams skipwhite skipempty
-syn match ngxListenParam '\([^;{ \t\\]\|\\.\)\+'
- \ contained
- \ nextgroup=@ngxListenParams skipwhite skipempty
-syn region ngxListenString start=+\z(["']\)+ end=+\z1+ skip=+\\\\\|\\\z1+
- \ contained
- \ nextgroup=@ngxListenParams skipwhite skipempty
-syn match ngxListenComment '#.*$'
- \ contained
- \ nextgroup=@ngxListenParams skipwhite skipempty
-syn keyword ngxListenOptions contained
- \ default_server ssl http2 spdy proxy_protocol
- \ setfib fastopen backlog rcvbuf sndbuf accept_filter deferred bind
- \ ipv6only reuseport so_keepalive keepidle
- \ nextgroup=@ngxListenParams skipwhite skipempty
-syn cluster ngxListenParams
- \ contains=ngxListenParam,ngxListenString,ngxListenComment
- \ add=ngxListenOptions
-
-syn keyword ngxDirectiveBlock contained http
-syn keyword ngxDirectiveBlock contained mail
-syn keyword ngxDirectiveBlock contained events
-syn keyword ngxDirectiveBlock contained server
-syn keyword ngxDirectiveBlock contained types
-syn keyword ngxDirectiveBlock contained location
-syn keyword ngxDirectiveBlock contained upstream
-syn keyword ngxDirectiveBlock contained charset_map
-syn keyword ngxDirectiveBlock contained limit_except
-syn keyword ngxDirectiveBlock contained if
-syn keyword ngxDirectiveBlock contained geo
-syn keyword ngxDirectiveBlock contained map
-syn keyword ngxDirectiveBlock contained split_clients
-
-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
-syn keyword ngxDirectiveImportant contained fastcgi_pass
-syn keyword ngxDirectiveImportant contained scgi_pass
-syn keyword ngxDirectiveImportant contained uwsgi_pass
-syn keyword ngxDirectiveImportant contained try_files
-
-syn keyword ngxDirectiveControl contained break
-syn keyword ngxDirectiveControl contained return
-syn keyword ngxDirectiveControl contained rewrite
-syn keyword ngxDirectiveControl contained set
-
-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 ngxDirective contained absolute_redirect
-syn keyword ngxDirective contained accept_mutex
-syn keyword ngxDirective contained accept_mutex_delay
-syn keyword ngxDirective contained acceptex_read
-syn keyword ngxDirective contained access_log
-syn keyword ngxDirective contained add_after_body
-syn keyword ngxDirective contained add_before_body
-syn keyword ngxDirective contained add_header
-syn keyword ngxDirective contained addition_types
-syn keyword ngxDirective contained aio
-syn keyword ngxDirective contained aio_write
-syn keyword ngxDirective contained alias
-syn keyword ngxDirective contained allow
-syn keyword ngxDirective contained ancient_browser
-syn keyword ngxDirective contained ancient_browser_value
-syn keyword ngxDirective contained auth_basic
-syn keyword ngxDirective contained auth_basic_user_file
-syn keyword ngxDirective contained auth_http
-syn keyword ngxDirective contained auth_http_header
-syn keyword ngxDirective contained auth_http_pass_client_cert
-syn keyword ngxDirective contained auth_http_timeout
-syn keyword ngxDirective contained auth_jwt
-syn keyword ngxDirective contained auth_jwt_key_file
-syn keyword ngxDirective contained auth_request
-syn keyword ngxDirective contained auth_request_set
-syn keyword ngxDirective contained autoindex
-syn keyword ngxDirective contained autoindex_exact_size
-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
-syn keyword ngxDirective contained client_body_in_file_only
-syn keyword ngxDirective contained client_body_in_single_buffer
-syn keyword ngxDirective contained client_body_temp_path
-syn keyword ngxDirective contained client_body_timeout
-syn keyword ngxDirective contained client_header_buffer_size
-syn keyword ngxDirective contained client_header_timeout
-syn keyword ngxDirective contained client_max_body_size
-syn keyword ngxDirective contained connection_pool_size
-syn keyword ngxDirective contained create_full_put_path
-syn keyword ngxDirective contained daemon
-syn keyword ngxDirective contained dav_access
-syn keyword ngxDirective contained dav_methods
-syn keyword ngxDirective contained debug_connection
-syn keyword ngxDirective contained debug_points
-syn keyword ngxDirective contained default_type
-syn keyword ngxDirective contained degradation
-syn keyword ngxDirective contained degrade
-syn keyword ngxDirective contained deny
-syn keyword ngxDirective contained devpoll_changes
-syn keyword ngxDirective contained devpoll_events
-syn keyword ngxDirective contained directio
-syn keyword ngxDirective contained directio_alignment
-syn keyword ngxDirective contained disable_symlinks
-syn keyword ngxDirective contained empty_gif
-syn keyword ngxDirective contained env
-syn keyword ngxDirective contained epoll_events
-syn keyword ngxDirective contained error_log
-syn keyword ngxDirective contained etag
-syn keyword ngxDirective contained eventport_events
-syn keyword ngxDirective contained expires
-syn keyword ngxDirective contained f4f
-syn keyword ngxDirective contained f4f_buffer_size
-syn keyword ngxDirective contained fastcgi_bind
-syn keyword ngxDirective contained fastcgi_buffer_size
-syn keyword ngxDirective contained fastcgi_buffering
-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_bypass
-syn keyword ngxDirective contained fastcgi_cache_key
-syn keyword ngxDirective contained fastcgi_cache_lock
-syn keyword ngxDirective contained fastcgi_cache_lock_age
-syn keyword ngxDirective contained fastcgi_cache_lock_timeout
-syn keyword ngxDirective contained fastcgi_cache_max_range_offset
-syn keyword ngxDirective contained fastcgi_cache_methods
-syn keyword ngxDirective contained fastcgi_cache_min_uses
-syn keyword ngxDirective contained fastcgi_cache_path
-syn keyword ngxDirective contained fastcgi_cache_purge
-syn keyword ngxDirective contained fastcgi_cache_revalidate
-syn keyword ngxDirective contained fastcgi_cache_use_stale
-syn keyword ngxDirective contained fastcgi_cache_valid
-syn keyword ngxDirective contained fastcgi_catch_stderr
-syn keyword ngxDirective contained fastcgi_connect_timeout
-syn keyword ngxDirective contained fastcgi_force_ranges
-syn keyword ngxDirective contained fastcgi_hide_header
-syn keyword ngxDirective contained fastcgi_ignore_client_abort
-syn keyword ngxDirective contained fastcgi_ignore_headers
-syn keyword ngxDirective contained fastcgi_index
-syn keyword ngxDirective contained fastcgi_intercept_errors
-syn keyword ngxDirective contained fastcgi_keep_conn
-syn keyword ngxDirective contained fastcgi_limit_rate
-syn keyword ngxDirective contained fastcgi_max_temp_file_size
-syn keyword ngxDirective contained fastcgi_next_upstream
-syn keyword ngxDirective contained fastcgi_next_upstream_timeout
-syn keyword ngxDirective contained fastcgi_next_upstream_tries
-syn keyword ngxDirective contained fastcgi_no_cache
-syn keyword ngxDirective contained fastcgi_param
-syn keyword ngxDirective contained fastcgi_pass_header
-syn keyword ngxDirective contained fastcgi_pass_request_body
-syn keyword ngxDirective contained fastcgi_pass_request_headers
-syn keyword ngxDirective contained fastcgi_read_timeout
-syn keyword ngxDirective contained fastcgi_request_buffering
-syn keyword ngxDirective contained fastcgi_send_lowat
-syn keyword ngxDirective contained fastcgi_send_timeout
-syn keyword ngxDirective contained fastcgi_split_path_info
-syn keyword ngxDirective contained fastcgi_store
-syn keyword ngxDirective contained fastcgi_store_access
-syn keyword ngxDirective contained fastcgi_temp_file_write_size
-syn keyword ngxDirective contained fastcgi_temp_path
-syn keyword ngxDirective contained flv
-syn keyword ngxDirective contained geoip_city
-syn keyword ngxDirective contained geoip_country
-syn keyword ngxDirective contained geoip_org
-syn keyword ngxDirective contained geoip_proxy
-syn keyword ngxDirective contained geoip_proxy_recursive
-syn keyword ngxDirective contained google_perftools_profiles
-syn keyword ngxDirective contained gunzip
-syn keyword ngxDirective contained gunzip_buffers
-syn keyword ngxDirective contained gzip
-syn keyword ngxDirective contained gzip_buffers
-syn keyword ngxDirective contained gzip_comp_level
-syn keyword ngxDirective contained gzip_disable
-syn keyword ngxDirective contained gzip_hash
-syn keyword ngxDirective contained gzip_http_version
-syn keyword ngxDirective contained gzip_min_length
-syn keyword ngxDirective contained gzip_no_buffer
-syn keyword ngxDirective contained gzip_proxied
-syn keyword ngxDirective contained gzip_static
-syn keyword ngxDirective contained gzip_types
-syn keyword ngxDirective contained gzip_vary
-syn keyword ngxDirective contained gzip_window
-syn keyword ngxDirective contained hash
-syn keyword ngxDirective contained health_check
-syn keyword ngxDirective contained health_check_timeout
-syn keyword ngxDirective contained hls
-syn keyword ngxDirective contained hls_buffers
-syn keyword ngxDirective contained hls_forward_args
-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_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_recv_buffer_size
-syn keyword ngxDirective contained http2_recv_timeout
-syn keyword ngxDirective contained if_modified_since
-syn keyword ngxDirective contained ignore_invalid_headers
-syn keyword ngxDirective contained image_filter
-syn keyword ngxDirective contained image_filter_buffer
-syn keyword ngxDirective contained image_filter_interlace
-syn keyword ngxDirective contained image_filter_jpeg_quality
-syn keyword ngxDirective contained image_filter_sharpen
-syn keyword ngxDirective contained image_filter_transparency
-syn keyword ngxDirective contained image_filter_webp_quality
-syn keyword ngxDirective contained imap_auth
-syn keyword ngxDirective contained imap_capabilities
-syn keyword ngxDirective contained imap_client_buffer
-syn keyword ngxDirective contained index
-syn keyword ngxDirective contained iocp_threads
-syn keyword ngxDirective contained ip_hash
-syn keyword ngxDirective contained js_access
-syn keyword ngxDirective contained js_content
-syn keyword ngxDirective contained js_filter
-syn keyword ngxDirective contained js_include
-syn keyword ngxDirective contained js_preread
-syn keyword ngxDirective contained js_set
-syn keyword ngxDirective contained keepalive
-syn keyword ngxDirective contained keepalive_disable
-syn keyword ngxDirective contained keepalive_requests
-syn keyword ngxDirective contained keepalive_timeout
-syn keyword ngxDirective contained kqueue_changes
-syn keyword ngxDirective contained kqueue_events
-syn keyword ngxDirective contained large_client_header_buffers
-syn keyword ngxDirective contained least_conn
-syn keyword ngxDirective contained least_time
-syn keyword ngxDirective contained limit_conn
-syn keyword ngxDirective contained limit_conn_log_level
-syn keyword ngxDirective contained limit_conn_status
-syn keyword ngxDirective contained limit_conn_zone
-syn keyword ngxDirective contained limit_rate
-syn keyword ngxDirective contained limit_rate_after
-syn keyword ngxDirective contained limit_req
-syn keyword ngxDirective contained limit_req_log_level
-syn keyword ngxDirective contained limit_req_status
-syn keyword ngxDirective contained limit_req_zone
-syn keyword ngxDirective contained lingering_close
-syn keyword ngxDirective contained lingering_time
-syn keyword ngxDirective contained lingering_timeout
-syn keyword ngxDirective contained load_module
-syn keyword ngxDirective contained lock_file
-syn keyword ngxDirective contained log_format
-syn keyword ngxDirective contained log_not_found
-syn keyword ngxDirective contained log_subrequest
-syn keyword ngxDirective contained map_hash_bucket_size
-syn keyword ngxDirective contained map_hash_max_size
-syn keyword ngxDirective contained match
-syn keyword ngxDirective contained master_process
-syn keyword ngxDirective contained max_ranges
-syn keyword ngxDirective contained memcached_bind
-syn keyword ngxDirective contained memcached_buffer_size
-syn keyword ngxDirective contained memcached_connect_timeout
-syn keyword ngxDirective contained memcached_force_ranges
-syn keyword ngxDirective contained memcached_gzip_flag
-syn keyword ngxDirective contained memcached_next_upstream
-syn keyword ngxDirective contained memcached_next_upstream_timeout
-syn keyword ngxDirective contained memcached_next_upstream_tries
-syn keyword ngxDirective contained memcached_read_timeout
-syn keyword ngxDirective contained memcached_send_timeout
-syn keyword ngxDirective contained merge_slashes
-syn keyword ngxDirective contained min_delete_depth
-syn keyword ngxDirective contained modern_browser
-syn keyword ngxDirective contained modern_browser_value
-syn keyword ngxDirective contained mp4
-syn keyword ngxDirective contained mp4_buffer_size
-syn keyword ngxDirective contained mp4_max_buffer_size
-syn keyword ngxDirective contained mp4_limit_rate
-syn keyword ngxDirective contained mp4_limit_rate_after
-syn keyword ngxDirective contained msie_padding
-syn keyword ngxDirective contained msie_refresh
-syn keyword ngxDirective contained multi_accept
-syn keyword ngxDirective contained ntlm
-syn keyword ngxDirective contained open_file_cache
-syn keyword ngxDirective contained open_file_cache_errors
-syn keyword ngxDirective contained open_file_cache_events
-syn keyword ngxDirective contained open_file_cache_min_uses
-syn keyword ngxDirective contained open_file_cache_valid
-syn keyword ngxDirective contained open_log_file_cache
-syn keyword ngxDirective contained output_buffers
-syn keyword ngxDirective contained override_charset
-syn keyword ngxDirective contained pcre_jit
-syn keyword ngxDirective contained perl
-syn keyword ngxDirective contained perl_modules
-syn keyword ngxDirective contained perl_require
-syn keyword ngxDirective contained perl_set
-syn keyword ngxDirective contained pid
-syn keyword ngxDirective contained pop3_auth
-syn keyword ngxDirective contained pop3_capabilities
-syn keyword ngxDirective contained port_in_redirect
-syn keyword ngxDirective contained post_acceptex
-syn keyword ngxDirective contained postpone_gzipping
-syn keyword ngxDirective contained postpone_output
-syn keyword ngxDirective contained preread_buffer_size
-syn keyword ngxDirective contained preread_timeout
-syn keyword ngxDirective contained protocol
-syn keyword ngxDirective contained proxy
-syn keyword ngxDirective contained proxy_bind
-syn keyword ngxDirective contained proxy_buffer
-syn keyword ngxDirective contained proxy_buffer_size
-syn keyword ngxDirective contained proxy_buffering
-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_bypass
-syn keyword ngxDirective contained proxy_cache_convert_head
-syn keyword ngxDirective contained proxy_cache_key
-syn keyword ngxDirective contained proxy_cache_lock
-syn keyword ngxDirective contained proxy_cache_lock_age
-syn keyword ngxDirective contained proxy_cache_lock_timeout
-syn keyword ngxDirective contained proxy_cache_max_range_offset
-syn keyword ngxDirective contained proxy_cache_methods
-syn keyword ngxDirective contained proxy_cache_min_uses
-syn keyword ngxDirective contained proxy_cache_path
-syn keyword ngxDirective contained proxy_cache_purge
-syn keyword ngxDirective contained proxy_cache_revalidate
-syn keyword ngxDirective contained proxy_cache_use_stale
-syn keyword ngxDirective contained proxy_cache_valid
-syn keyword ngxDirective contained proxy_connect_timeout
-syn keyword ngxDirective contained proxy_cookie_domain
-syn keyword ngxDirective contained proxy_cookie_path
-syn keyword ngxDirective contained proxy_download_rate
-syn keyword ngxDirective contained proxy_force_ranges
-syn keyword ngxDirective contained proxy_headers_hash_bucket_size
-syn keyword ngxDirective contained proxy_headers_hash_max_size
-syn keyword ngxDirective contained proxy_hide_header
-syn keyword ngxDirective contained proxy_http_version
-syn keyword ngxDirective contained proxy_ignore_client_abort
-syn keyword ngxDirective contained proxy_ignore_headers
-syn keyword ngxDirective contained proxy_intercept_errors
-syn keyword ngxDirective contained proxy_limit_rate
-syn keyword ngxDirective contained proxy_max_temp_file_size
-syn keyword ngxDirective contained proxy_method
-syn keyword ngxDirective contained proxy_next_upstream
-syn keyword ngxDirective contained proxy_next_upstream_timeout
-syn keyword ngxDirective contained proxy_next_upstream_tries
-syn keyword ngxDirective contained proxy_no_cache
-syn keyword ngxDirective contained proxy_pass_error_message
-syn keyword ngxDirective contained proxy_pass_header
-syn keyword ngxDirective contained proxy_pass_request_body
-syn keyword ngxDirective contained proxy_pass_request_headers
-syn keyword ngxDirective contained proxy_protocol
-syn keyword ngxDirective contained proxy_protocol_timeout
-syn keyword ngxDirective contained proxy_read_timeout
-syn keyword ngxDirective contained proxy_redirect
-syn keyword ngxDirective contained proxy_request_buffering
-syn keyword ngxDirective contained proxy_responses
-syn keyword ngxDirective contained proxy_send_lowat
-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_certificate
-syn keyword ngxDirective contained proxy_ssl_certificate_key
-syn keyword ngxDirective contained proxy_ssl_ciphers
-syn keyword ngxDirective contained proxy_ssl_crl
-syn keyword ngxDirective contained proxy_ssl_name
-syn keyword ngxDirective contained proxy_ssl_password_file
-syn keyword ngxDirective contained proxy_ssl_protocols
-syn keyword ngxDirective contained proxy_ssl_server_name
-syn keyword ngxDirective contained proxy_ssl_session_reuse
-syn keyword ngxDirective contained proxy_ssl_trusted_certificate
-syn keyword ngxDirective contained proxy_ssl_verify
-syn keyword ngxDirective contained proxy_ssl_verify_depth
-syn keyword ngxDirective contained proxy_store
-syn keyword ngxDirective contained proxy_store_access
-syn keyword ngxDirective contained proxy_temp_file_write_size
-syn keyword ngxDirective contained proxy_temp_path
-syn keyword ngxDirective contained proxy_timeout
-syn keyword ngxDirective contained proxy_upload_rate
-syn keyword ngxDirective contained queue
-syn keyword ngxDirective contained random_index
-syn keyword ngxDirective contained read_ahead
-syn keyword ngxDirective contained real_ip_header
-syn keyword ngxDirective contained real_ip_recursive
-syn keyword ngxDirective contained recursive_error_pages
-syn keyword ngxDirective contained referer_hash_bucket_size
-syn keyword ngxDirective contained referer_hash_max_size
-syn keyword ngxDirective contained request_pool_size
-syn keyword ngxDirective contained reset_timedout_connection
-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
-syn keyword ngxDirective contained scgi_buffering
-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_bypass
-syn keyword ngxDirective contained scgi_cache_key
-syn keyword ngxDirective contained scgi_cache_lock
-syn keyword ngxDirective contained scgi_cache_lock_age
-syn keyword ngxDirective contained scgi_cache_lock_timeout
-syn keyword ngxDirective contained scgi_cache_max_range_offset
-syn keyword ngxDirective contained scgi_cache_methods
-syn keyword ngxDirective contained scgi_cache_min_uses
-syn keyword ngxDirective contained scgi_cache_path
-syn keyword ngxDirective contained scgi_cache_purge
-syn keyword ngxDirective contained scgi_cache_revalidate
-syn keyword ngxDirective contained scgi_cache_use_stale
-syn keyword ngxDirective contained scgi_cache_valid
-syn keyword ngxDirective contained scgi_connect_timeout
-syn keyword ngxDirective contained scgi_force_ranges
-syn keyword ngxDirective contained scgi_hide_header
-syn keyword ngxDirective contained scgi_ignore_client_abort
-syn keyword ngxDirective contained scgi_ignore_headers
-syn keyword ngxDirective contained scgi_intercept_errors
-syn keyword ngxDirective contained scgi_limit_rate
-syn keyword ngxDirective contained scgi_max_temp_file_size
-syn keyword ngxDirective contained scgi_next_upstream
-syn keyword ngxDirective contained scgi_next_upstream_timeout
-syn keyword ngxDirective contained scgi_next_upstream_tries
-syn keyword ngxDirective contained scgi_no_cache
-syn keyword ngxDirective contained scgi_param
-syn keyword ngxDirective contained scgi_pass_header
-syn keyword ngxDirective contained scgi_pass_request_body
-syn keyword ngxDirective contained scgi_pass_request_headers
-syn keyword ngxDirective contained scgi_read_timeout
-syn keyword ngxDirective contained scgi_request_buffering
-syn keyword ngxDirective contained scgi_send_timeout
-syn keyword ngxDirective contained scgi_store
-syn keyword ngxDirective contained scgi_store_access
-syn keyword ngxDirective contained scgi_temp_file_write_size
-syn keyword ngxDirective contained scgi_temp_path
-syn keyword ngxDirective contained secure_link
-syn keyword ngxDirective contained secure_link_md5
-syn keyword ngxDirective contained secure_link_secret
-syn keyword ngxDirective contained send_lowat
-syn keyword ngxDirective contained send_timeout
-syn keyword ngxDirective contained sendfile
-syn keyword ngxDirective contained sendfile_max_chunk
-syn keyword ngxDirective contained server_name_in_redirect
-syn keyword ngxDirective contained server_names_hash_bucket_size
-syn keyword ngxDirective contained server_names_hash_max_size
-syn keyword ngxDirective contained server_tokens
-syn keyword ngxDirective contained session_log
-syn keyword ngxDirective contained session_log_format
-syn keyword ngxDirective contained session_log_zone
-syn keyword ngxDirective contained set_real_ip_from
-syn keyword ngxDirective contained slice
-syn keyword ngxDirective contained smtp_auth
-syn keyword ngxDirective contained smtp_capabilities
-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
-syn keyword ngxDirective contained ssi_min_file_chunk
-syn keyword ngxDirective contained ssi_silent_errors
-syn keyword ngxDirective contained ssi_types
-syn keyword ngxDirective contained ssi_value_length
-syn keyword ngxDirective contained ssl
-syn keyword ngxDirective contained ssl_buffer_size
-syn keyword ngxDirective contained ssl_certificate
-syn keyword ngxDirective contained ssl_certificate_key
-syn keyword ngxDirective contained ssl_ciphers
-syn keyword ngxDirective contained ssl_client_certificate
-syn keyword ngxDirective contained ssl_crl
-syn keyword ngxDirective contained ssl_dhparam
-syn keyword ngxDirective contained ssl_ecdh_curve
-syn keyword ngxDirective contained ssl_engine
-syn keyword ngxDirective contained ssl_handshake_timeout
-syn keyword ngxDirective contained ssl_password_file
-syn keyword ngxDirective contained ssl_prefer_server_ciphers
-syn keyword ngxDirective contained ssl_preread
-syn keyword ngxDirective contained ssl_protocols
-syn keyword ngxDirective contained ssl_session_cache
-syn keyword ngxDirective contained ssl_session_ticket_key
-syn keyword ngxDirective contained ssl_session_tickets
-syn keyword ngxDirective contained ssl_session_timeout
-syn keyword ngxDirective contained ssl_stapling
-syn keyword ngxDirective contained ssl_stapling_file
-syn keyword ngxDirective contained ssl_stapling_responder
-syn keyword ngxDirective contained ssl_stapling_verify
-syn keyword ngxDirective contained ssl_trusted_certificate
-syn keyword ngxDirective contained ssl_verify_client
-syn keyword ngxDirective contained ssl_verify_depth
-syn keyword ngxDirective contained starttls
-syn keyword ngxDirective contained state
-syn keyword ngxDirective contained status
-syn keyword ngxDirective contained status_format
-syn keyword ngxDirective contained status_zone
-syn keyword ngxDirective contained sticky
-syn keyword ngxDirective contained sticky_cookie_insert
-syn keyword ngxDirective contained stub_status
-syn keyword ngxDirective contained sub_filter
-syn keyword ngxDirective contained sub_filter_last_modified
-syn keyword ngxDirective contained sub_filter_once
-syn keyword ngxDirective contained sub_filter_types
-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
-syn keyword ngxDirective contained types_hash_max_size
-syn keyword ngxDirective contained underscores_in_headers
-syn keyword ngxDirective contained uninitialized_variable_warn
-syn keyword ngxDirective contained upstream_conf
-syn keyword ngxDirective contained use
-syn keyword ngxDirective contained user
-syn keyword ngxDirective contained userid
-syn keyword ngxDirective contained userid_domain
-syn keyword ngxDirective contained userid_expires
-syn keyword ngxDirective contained userid_mark
-syn keyword ngxDirective contained userid_name
-syn keyword ngxDirective contained userid_p3p
-syn keyword ngxDirective contained userid_path
-syn keyword ngxDirective contained userid_service
-syn keyword ngxDirective contained uwsgi_bind
-syn keyword ngxDirective contained uwsgi_buffer_size
-syn keyword ngxDirective contained uwsgi_buffering
-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_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_methods
-syn keyword ngxDirective contained uwsgi_cache_min_uses
-syn keyword ngxDirective contained uwsgi_cache_path
-syn keyword ngxDirective contained uwsgi_cache_purge
-syn keyword ngxDirective contained uwsgi_cache_revalidate
-syn keyword ngxDirective contained uwsgi_cache_use_stale
-syn keyword ngxDirective contained uwsgi_cache_valid
-syn keyword ngxDirective contained uwsgi_connect_timeout
-syn keyword ngxDirective contained uwsgi_force_ranges
-syn keyword ngxDirective contained uwsgi_hide_header
-syn keyword ngxDirective contained uwsgi_ignore_client_abort
-syn keyword ngxDirective contained uwsgi_ignore_headers
-syn keyword ngxDirective contained uwsgi_intercept_errors
-syn keyword ngxDirective contained uwsgi_limit_rate
-syn keyword ngxDirective contained uwsgi_max_temp_file_size
-syn keyword ngxDirective contained uwsgi_modifier1
-syn keyword ngxDirective contained uwsgi_modifier2
-syn keyword ngxDirective contained uwsgi_next_upstream
-syn keyword ngxDirective contained uwsgi_next_upstream_timeout
-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
-syn keyword ngxDirective contained uwsgi_read_timeout
-syn keyword ngxDirective contained uwsgi_request_buffering
-syn keyword ngxDirective contained uwsgi_send_timeout
-syn keyword ngxDirective contained uwsgi_ssl_certificate
-syn keyword ngxDirective contained uwsgi_ssl_certificate_key
-syn keyword ngxDirective contained uwsgi_ssl_ciphers
-syn keyword ngxDirective contained uwsgi_ssl_crl
-syn keyword ngxDirective contained uwsgi_ssl_name
-syn keyword ngxDirective contained uwsgi_ssl_password_file
-syn keyword ngxDirective contained uwsgi_ssl_protocols
-syn keyword ngxDirective contained uwsgi_ssl_server_name
-syn keyword ngxDirective contained uwsgi_ssl_session_reuse
-syn keyword ngxDirective contained uwsgi_ssl_trusted_certificate
-syn keyword ngxDirective contained uwsgi_ssl_verify
-syn keyword ngxDirective contained uwsgi_ssl_verify_depth
-syn keyword ngxDirective contained uwsgi_store
-syn keyword ngxDirective contained uwsgi_store_access
-syn keyword ngxDirective contained uwsgi_string
-syn keyword ngxDirective contained uwsgi_temp_file_write_size
-syn keyword ngxDirective contained uwsgi_temp_path
-syn keyword ngxDirective contained valid_referers
-syn keyword ngxDirective contained variables_hash_bucket_size
-syn keyword ngxDirective contained variables_hash_max_size
-syn keyword ngxDirective contained worker_aio_requests
-syn keyword ngxDirective contained worker_connections
-syn keyword ngxDirective contained worker_cpu_affinity
-syn keyword ngxDirective contained worker_priority
-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_threads
-syn keyword ngxDirective contained working_directory
-syn keyword ngxDirective contained xclient
-syn keyword ngxDirective contained xml_entities
-syn keyword ngxDirective contained xslt_last_modified
-syn keyword ngxDirective contained xslt_param
-syn keyword ngxDirective contained xslt_string_param
-syn keyword ngxDirective contained xslt_stylesheet
-syn keyword ngxDirective contained xslt_types
-syn keyword ngxDirective contained zone
+syn region ngxBlock start=+^+ end=+{+ skip=+\${+ contains=ngxComment,ngxDirectiveBlock,ngxVariableBlock,ngxString oneline
+syn region ngxString start=+[^:a-zA-Z>!\\@]\z(["']\)+lc=1 end=+\z1+ skip=+\\\\\|\\\z1+ contains=ngxVariableString
+syn match ngxComment ' *#.*$'
+
+syn keyword ngxBoolean on
+syn keyword ngxBoolean off
+
+syn keyword ngxDirectiveBlock http contained
+syn keyword ngxDirectiveBlock mail contained
+syn keyword ngxDirectiveBlock events contained
+syn keyword ngxDirectiveBlock server contained
+syn keyword ngxDirectiveBlock types contained
+syn keyword ngxDirectiveBlock location contained
+syn keyword ngxDirectiveBlock upstream contained
+syn keyword ngxDirectiveBlock charset_map contained
+syn keyword ngxDirectiveBlock limit_except contained
+syn keyword ngxDirectiveBlock if contained
+syn keyword ngxDirectiveBlock geo contained
+syn keyword ngxDirectiveBlock map contained
+syn keyword ngxDirectiveBlock split_clients contained
+
+syn keyword ngxDirectiveImportant include
+syn keyword ngxDirectiveImportant root
+syn keyword ngxDirectiveImportant server
+syn keyword ngxDirectiveImportant server_name
+syn keyword ngxDirectiveImportant listen contained
+syn region ngxDirectiveImportantListen matchgroup=ngxDirectiveImportant start=+listen+ skip=+\\\\\|\\\;+ end=+;+he=e-1 contains=ngxListenOptions,ngxString
+syn keyword ngxDirectiveImportant internal
+syn keyword ngxDirectiveImportant proxy_pass
+syn keyword ngxDirectiveImportant memcached_pass
+syn keyword ngxDirectiveImportant fastcgi_pass
+syn keyword ngxDirectiveImportant scgi_pass
+syn keyword ngxDirectiveImportant uwsgi_pass
+syn keyword ngxDirectiveImportant try_files
+
+syn keyword ngxListenOptions default_server contained
+syn keyword ngxListenOptions ssl contained
+syn keyword ngxListenOptions http2 contained
+syn keyword ngxListenOptions spdy contained
+syn keyword ngxListenOptions proxy_protocol contained
+syn keyword ngxListenOptions setfib contained
+syn keyword ngxListenOptions fastopen contained
+syn keyword ngxListenOptions backlog contained
+syn keyword ngxListenOptions rcvbuf contained
+syn keyword ngxListenOptions sndbuf contained
+syn keyword ngxListenOptions accept_filter contained
+syn keyword ngxListenOptions deferred contained
+syn keyword ngxListenOptions bind contained
+syn keyword ngxListenOptions ipv6only contained
+syn keyword ngxListenOptions reuseport contained
+syn keyword ngxListenOptions so_keepalive contained
+syn keyword ngxListenOptions keepidle contained
+
+syn keyword ngxDirectiveControl break
+syn keyword ngxDirectiveControl return
+syn keyword ngxDirectiveControl rewrite
+syn keyword ngxDirectiveControl set
+
+syn keyword ngxDirectiveError error_page
+syn keyword ngxDirectiveError post_action
+
+syn keyword ngxDirectiveDeprecated connections
+syn keyword ngxDirectiveDeprecated imap
+syn keyword ngxDirectiveDeprecated limit_zone
+syn keyword ngxDirectiveDeprecated mysql_test
+syn keyword ngxDirectiveDeprecated open_file_cache_retest
+syn keyword ngxDirectiveDeprecated optimize_server_names
+syn keyword ngxDirectiveDeprecated satisfy_any
+syn keyword ngxDirectiveDeprecated so_keepalive
+
+syn keyword ngxDirective absolute_redirect
+syn keyword ngxDirective accept_mutex
+syn keyword ngxDirective accept_mutex_delay
+syn keyword ngxDirective acceptex_read
+syn keyword ngxDirective access_log
+syn keyword ngxDirective add_after_body
+syn keyword ngxDirective add_before_body
+syn keyword ngxDirective add_header
+syn keyword ngxDirective addition_types
+syn keyword ngxDirective aio
+syn keyword ngxDirective aio_write
+syn keyword ngxDirective alias
+syn keyword ngxDirective allow
+syn keyword ngxDirective ancient_browser
+syn keyword ngxDirective ancient_browser_value
+syn keyword ngxDirective auth_basic
+syn keyword ngxDirective auth_basic_user_file
+syn keyword ngxDirective auth_http
+syn keyword ngxDirective auth_http_header
+syn keyword ngxDirective auth_http_pass_client_cert
+syn keyword ngxDirective auth_http_timeout
+syn keyword ngxDirective auth_jwt
+syn keyword ngxDirective auth_jwt_key_file
+syn keyword ngxDirective auth_request
+syn keyword ngxDirective auth_request_set
+syn keyword ngxDirective autoindex
+syn keyword ngxDirective autoindex_exact_size
+syn keyword ngxDirective autoindex_format
+syn keyword ngxDirective autoindex_localtime
+syn keyword ngxDirective charset
+syn keyword ngxDirective charset_map
+syn keyword ngxDirective charset_types
+syn keyword ngxDirective chunked_transfer_encoding
+syn keyword ngxDirective client_body_buffer_size
+syn keyword ngxDirective client_body_in_file_only
+syn keyword ngxDirective client_body_in_single_buffer
+syn keyword ngxDirective client_body_temp_path
+syn keyword ngxDirective client_body_timeout
+syn keyword ngxDirective client_header_buffer_size
+syn keyword ngxDirective client_header_timeout
+syn keyword ngxDirective client_max_body_size
+syn keyword ngxDirective connection_pool_size
+syn keyword ngxDirective create_full_put_path
+syn keyword ngxDirective daemon
+syn keyword ngxDirective dav_access
+syn keyword ngxDirective dav_methods
+syn keyword ngxDirective debug_connection
+syn keyword ngxDirective debug_points
+syn keyword ngxDirective default_type
+syn keyword ngxDirective degradation
+syn keyword ngxDirective degrade
+syn keyword ngxDirective deny
+syn keyword ngxDirective devpoll_changes
+syn keyword ngxDirective devpoll_events
+syn keyword ngxDirective directio
+syn keyword ngxDirective directio_alignment
+syn keyword ngxDirective disable_symlinks
+syn keyword ngxDirective empty_gif
+syn keyword ngxDirective env
+syn keyword ngxDirective epoll_events
+syn keyword ngxDirective error_log
+syn keyword ngxDirective etag
+syn keyword ngxDirective eventport_events
+syn keyword ngxDirective expires
+syn keyword ngxDirective f4f
+syn keyword ngxDirective f4f_buffer_size
+syn keyword ngxDirective fastcgi_bind
+syn keyword ngxDirective fastcgi_buffer_size
+syn keyword ngxDirective fastcgi_buffering
+syn keyword ngxDirective fastcgi_buffers
+syn keyword ngxDirective fastcgi_busy_buffers_size
+syn keyword ngxDirective fastcgi_cache
+syn keyword ngxDirective fastcgi_cache_bypass
+syn keyword ngxDirective fastcgi_cache_key
+syn keyword ngxDirective fastcgi_cache_lock
+syn keyword ngxDirective fastcgi_cache_lock_age
+syn keyword ngxDirective fastcgi_cache_lock_timeout
+syn keyword ngxDirective fastcgi_cache_max_range_offset
+syn keyword ngxDirective fastcgi_cache_methods
+syn keyword ngxDirective fastcgi_cache_min_uses
+syn keyword ngxDirective fastcgi_cache_path
+syn keyword ngxDirective fastcgi_cache_purge
+syn keyword ngxDirective fastcgi_cache_revalidate
+syn keyword ngxDirective fastcgi_cache_use_stale
+syn keyword ngxDirective fastcgi_cache_valid
+syn keyword ngxDirective fastcgi_catch_stderr
+syn keyword ngxDirective fastcgi_connect_timeout
+syn keyword ngxDirective fastcgi_force_ranges
+syn keyword ngxDirective fastcgi_hide_header
+syn keyword ngxDirective fastcgi_ignore_client_abort
+syn keyword ngxDirective fastcgi_ignore_headers
+syn keyword ngxDirective fastcgi_index
+syn keyword ngxDirective fastcgi_intercept_errors
+syn keyword ngxDirective fastcgi_keep_conn
+syn keyword ngxDirective fastcgi_limit_rate
+syn keyword ngxDirective fastcgi_max_temp_file_size
+syn keyword ngxDirective fastcgi_next_upstream
+syn keyword ngxDirective fastcgi_next_upstream_timeout
+syn keyword ngxDirective fastcgi_next_upstream_tries
+syn keyword ngxDirective fastcgi_no_cache
+syn keyword ngxDirective fastcgi_param
+syn keyword ngxDirective fastcgi_pass_header
+syn keyword ngxDirective fastcgi_pass_request_body
+syn keyword ngxDirective fastcgi_pass_request_headers
+syn keyword ngxDirective fastcgi_read_timeout
+syn keyword ngxDirective fastcgi_request_buffering
+syn keyword ngxDirective fastcgi_send_lowat
+syn keyword ngxDirective fastcgi_send_timeout
+syn keyword ngxDirective fastcgi_split_path_info
+syn keyword ngxDirective fastcgi_store
+syn keyword ngxDirective fastcgi_store_access
+syn keyword ngxDirective fastcgi_temp_file_write_size
+syn keyword ngxDirective fastcgi_temp_path
+syn keyword ngxDirective flv
+syn keyword ngxDirective geoip_city
+syn keyword ngxDirective geoip_country
+syn keyword ngxDirective geoip_org
+syn keyword ngxDirective geoip_proxy
+syn keyword ngxDirective geoip_proxy_recursive
+syn keyword ngxDirective google_perftools_profiles
+syn keyword ngxDirective gunzip
+syn keyword ngxDirective gunzip_buffers
+syn keyword ngxDirective gzip
+syn keyword ngxDirective gzip_buffers
+syn keyword ngxDirective gzip_comp_level
+syn keyword ngxDirective gzip_disable
+syn keyword ngxDirective gzip_hash
+syn keyword ngxDirective gzip_http_version
+syn keyword ngxDirective gzip_min_length
+syn keyword ngxDirective gzip_no_buffer
+syn keyword ngxDirective gzip_proxied
+syn keyword ngxDirective gzip_static
+syn keyword ngxDirective gzip_types
+syn keyword ngxDirective gzip_vary
+syn keyword ngxDirective gzip_window
+syn keyword ngxDirective hash
+syn keyword ngxDirective health_check
+syn keyword ngxDirective health_check_timeout
+syn keyword ngxDirective hls
+syn keyword ngxDirective hls_buffers
+syn keyword ngxDirective hls_forward_args
+syn keyword ngxDirective hls_fragment
+syn keyword ngxDirective hls_mp4_buffer_size
+syn keyword ngxDirective hls_mp4_max_buffer_size
+syn keyword ngxDirective http2_chunk_size
+syn keyword ngxDirective http2_body_preread_size
+syn keyword ngxDirective http2_idle_timeout
+syn keyword ngxDirective http2_max_concurrent_streams
+syn keyword ngxDirective http2_max_field_size
+syn keyword ngxDirective http2_max_header_size
+syn keyword ngxDirective http2_max_requests
+syn keyword ngxDirective http2_recv_buffer_size
+syn keyword ngxDirective http2_recv_timeout
+syn keyword ngxDirective if_modified_since
+syn keyword ngxDirective ignore_invalid_headers
+syn keyword ngxDirective image_filter
+syn keyword ngxDirective image_filter_buffer
+syn keyword ngxDirective image_filter_interlace
+syn keyword ngxDirective image_filter_jpeg_quality
+syn keyword ngxDirective image_filter_sharpen
+syn keyword ngxDirective image_filter_transparency
+syn keyword ngxDirective image_filter_webp_quality
+syn keyword ngxDirective imap_auth
+syn keyword ngxDirective imap_capabilities
+syn keyword ngxDirective imap_client_buffer
+syn keyword ngxDirective index
+syn keyword ngxDirective iocp_threads
+syn keyword ngxDirective ip_hash
+syn keyword ngxDirective js_access
+syn keyword ngxDirective js_content
+syn keyword ngxDirective js_filter
+syn keyword ngxDirective js_include
+syn keyword ngxDirective js_preread
+syn keyword ngxDirective js_set
+syn keyword ngxDirective keepalive
+syn keyword ngxDirective keepalive_disable
+syn keyword ngxDirective keepalive_requests
+syn keyword ngxDirective keepalive_timeout
+syn keyword ngxDirective kqueue_changes
+syn keyword ngxDirective kqueue_events
+syn keyword ngxDirective large_client_header_buffers
+syn keyword ngxDirective least_conn
+syn keyword ngxDirective least_time
+syn keyword ngxDirective limit_conn
+syn keyword ngxDirective limit_conn_log_level
+syn keyword ngxDirective limit_conn_status
+syn keyword ngxDirective limit_conn_zone
+syn keyword ngxDirective limit_rate
+syn keyword ngxDirective limit_rate_after
+syn keyword ngxDirective limit_req
+syn keyword ngxDirective limit_req_log_level
+syn keyword ngxDirective limit_req_status
+syn keyword ngxDirective limit_req_zone
+syn keyword ngxDirective lingering_close
+syn keyword ngxDirective lingering_time
+syn keyword ngxDirective lingering_timeout
+syn keyword ngxDirective load_module
+syn keyword ngxDirective lock_file
+syn keyword ngxDirective log_format
+syn keyword ngxDirective log_not_found
+syn keyword ngxDirective log_subrequest
+syn keyword ngxDirective map_hash_bucket_size
+syn keyword ngxDirective map_hash_max_size
+syn keyword ngxDirective match
+syn keyword ngxDirective master_process
+syn keyword ngxDirective max_ranges
+syn keyword ngxDirective memcached_bind
+syn keyword ngxDirective memcached_buffer_size
+syn keyword ngxDirective memcached_connect_timeout
+syn keyword ngxDirective memcached_force_ranges
+syn keyword ngxDirective memcached_gzip_flag
+syn keyword ngxDirective memcached_next_upstream
+syn keyword ngxDirective memcached_next_upstream_timeout
+syn keyword ngxDirective memcached_next_upstream_tries
+syn keyword ngxDirective memcached_read_timeout
+syn keyword ngxDirective memcached_send_timeout
+syn keyword ngxDirective merge_slashes
+syn keyword ngxDirective min_delete_depth
+syn keyword ngxDirective modern_browser
+syn keyword ngxDirective modern_browser_value
+syn keyword ngxDirective mp4
+syn keyword ngxDirective mp4_buffer_size
+syn keyword ngxDirective mp4_max_buffer_size
+syn keyword ngxDirective mp4_limit_rate
+syn keyword ngxDirective mp4_limit_rate_after
+syn keyword ngxDirective msie_padding
+syn keyword ngxDirective msie_refresh
+syn keyword ngxDirective multi_accept
+syn keyword ngxDirective ntlm
+syn keyword ngxDirective open_file_cache
+syn keyword ngxDirective open_file_cache_errors
+syn keyword ngxDirective open_file_cache_events
+syn keyword ngxDirective open_file_cache_min_uses
+syn keyword ngxDirective open_file_cache_valid
+syn keyword ngxDirective open_log_file_cache
+syn keyword ngxDirective output_buffers
+syn keyword ngxDirective override_charset
+syn keyword ngxDirective pcre_jit
+syn keyword ngxDirective perl
+syn keyword ngxDirective perl_modules
+syn keyword ngxDirective perl_require
+syn keyword ngxDirective perl_set
+syn keyword ngxDirective pid
+syn keyword ngxDirective pop3_auth
+syn keyword ngxDirective pop3_capabilities
+syn keyword ngxDirective port_in_redirect
+syn keyword ngxDirective post_acceptex
+syn keyword ngxDirective postpone_gzipping
+syn keyword ngxDirective postpone_output
+syn keyword ngxDirective preread_buffer_size
+syn keyword ngxDirective preread_timeout
+syn keyword ngxDirective protocol nextgroup=ngxMailProtocol skipwhite
+syn keyword ngxMailProtocol imap pop3 smtp contained
+syn keyword ngxDirective proxy
+syn keyword ngxDirective proxy_bind
+syn keyword ngxDirective proxy_buffer
+syn keyword ngxDirective proxy_buffer_size
+syn keyword ngxDirective proxy_buffering
+syn keyword ngxDirective proxy_buffers
+syn keyword ngxDirective proxy_busy_buffers_size
+syn keyword ngxDirective proxy_cache
+syn keyword ngxDirective proxy_cache_bypass
+syn keyword ngxDirective proxy_cache_convert_head
+syn keyword ngxDirective proxy_cache_key
+syn keyword ngxDirective proxy_cache_lock
+syn keyword ngxDirective proxy_cache_lock_age
+syn keyword ngxDirective proxy_cache_lock_timeout
+syn keyword ngxDirective proxy_cache_max_range_offset
+syn keyword ngxDirective proxy_cache_methods
+syn keyword ngxDirective proxy_cache_min_uses
+syn keyword ngxDirective proxy_cache_path
+syn keyword ngxDirective proxy_cache_purge
+syn keyword ngxDirective proxy_cache_revalidate
+syn keyword ngxDirective proxy_cache_use_stale
+syn keyword ngxDirective proxy_cache_valid
+syn keyword ngxDirective proxy_connect_timeout
+syn keyword ngxDirective proxy_cookie_domain
+syn keyword ngxDirective proxy_cookie_path
+syn keyword ngxDirective proxy_download_rate
+syn keyword ngxDirective proxy_force_ranges
+syn keyword ngxDirective proxy_headers_hash_bucket_size
+syn keyword ngxDirective proxy_headers_hash_max_size
+syn keyword ngxDirective proxy_hide_header
+syn keyword ngxDirective proxy_http_version
+syn keyword ngxDirective proxy_ignore_client_abort
+syn keyword ngxDirective proxy_ignore_headers
+syn keyword ngxDirective proxy_intercept_errors
+syn keyword ngxDirective proxy_limit_rate
+syn keyword ngxDirective proxy_max_temp_file_size
+syn keyword ngxDirective proxy_method
+syn keyword ngxDirective proxy_next_upstream
+syn keyword ngxDirective proxy_next_upstream_timeout
+syn keyword ngxDirective proxy_next_upstream_tries
+syn keyword ngxDirective proxy_no_cache
+syn keyword ngxDirective proxy_pass_error_message
+syn keyword ngxDirective proxy_pass_header
+syn keyword ngxDirective proxy_pass_request_body
+syn keyword ngxDirective proxy_pass_request_headers
+syn keyword ngxDirective proxy_protocol
+syn keyword ngxDirective proxy_protocol_timeout
+syn keyword ngxDirective proxy_read_timeout
+syn keyword ngxDirective proxy_redirect
+syn keyword ngxDirective proxy_request_buffering
+syn keyword ngxDirective proxy_responses
+syn keyword ngxDirective proxy_send_lowat
+syn keyword ngxDirective proxy_send_timeout
+syn keyword ngxDirective proxy_set_body
+syn keyword ngxDirective proxy_set_header
+syn keyword ngxDirective proxy_ssl_certificate
+syn keyword ngxDirective proxy_ssl_certificate_key
+syn keyword ngxDirective proxy_ssl_ciphers
+syn keyword ngxDirective proxy_ssl_crl
+syn keyword ngxDirective proxy_ssl_name
+syn keyword ngxDirective proxy_ssl_password_file
+syn keyword ngxDirective proxy_ssl_protocols nextgroup=ngxSSLProtocol skipwhite
+syn keyword ngxDirective proxy_ssl_server_name
+syn keyword ngxDirective proxy_ssl_session_reuse
+syn keyword ngxDirective proxy_ssl_trusted_certificate
+syn keyword ngxDirective proxy_ssl_verify
+syn keyword ngxDirective proxy_ssl_verify_depth
+syn keyword ngxDirective proxy_store
+syn keyword ngxDirective proxy_store_access
+syn keyword ngxDirective proxy_temp_file_write_size
+syn keyword ngxDirective proxy_temp_path
+syn keyword ngxDirective proxy_timeout
+syn keyword ngxDirective proxy_upload_rate
+syn keyword ngxDirective queue
+syn keyword ngxDirective random_index
+syn keyword ngxDirective read_ahead
+syn keyword ngxDirective real_ip_header
+syn keyword ngxDirective real_ip_recursive
+syn keyword ngxDirective recursive_error_pages
+syn keyword ngxDirective referer_hash_bucket_size
+syn keyword ngxDirective referer_hash_max_size
+syn keyword ngxDirective request_pool_size
+syn keyword ngxDirective reset_timedout_connection
+syn keyword ngxDirective resolver
+syn keyword ngxDirective resolver_timeout
+syn keyword ngxDirective rewrite_log
+syn keyword ngxDirective rtsig_overflow_events
+syn keyword ngxDirective rtsig_overflow_test
+syn keyword ngxDirective rtsig_overflow_threshold
+syn keyword ngxDirective rtsig_signo
+syn keyword ngxDirective satisfy
+syn keyword ngxDirective scgi_bind
+syn keyword ngxDirective scgi_buffer_size
+syn keyword ngxDirective scgi_buffering
+syn keyword ngxDirective scgi_buffers
+syn keyword ngxDirective scgi_busy_buffers_size
+syn keyword ngxDirective scgi_cache
+syn keyword ngxDirective scgi_cache_bypass
+syn keyword ngxDirective scgi_cache_key
+syn keyword ngxDirective scgi_cache_lock
+syn keyword ngxDirective scgi_cache_lock_age
+syn keyword ngxDirective scgi_cache_lock_timeout
+syn keyword ngxDirective scgi_cache_max_range_offset
+syn keyword ngxDirective scgi_cache_methods
+syn keyword ngxDirective scgi_cache_min_uses
+syn keyword ngxDirective scgi_cache_path
+syn keyword ngxDirective scgi_cache_purge
+syn keyword ngxDirective scgi_cache_revalidate
+syn keyword ngxDirective scgi_cache_use_stale
+syn keyword ngxDirective scgi_cache_valid
+syn keyword ngxDirective scgi_connect_timeout
+syn keyword ngxDirective scgi_force_ranges
+syn keyword ngxDirective scgi_hide_header
+syn keyword ngxDirective scgi_ignore_client_abort
+syn keyword ngxDirective scgi_ignore_headers
+syn keyword ngxDirective scgi_intercept_errors
+syn keyword ngxDirective scgi_limit_rate
+syn keyword ngxDirective scgi_max_temp_file_size
+syn keyword ngxDirective scgi_next_upstream
+syn keyword ngxDirective scgi_next_upstream_timeout
+syn keyword ngxDirective scgi_next_upstream_tries
+syn keyword ngxDirective scgi_no_cache
+syn keyword ngxDirective scgi_param
+syn keyword ngxDirective scgi_pass_header
+syn keyword ngxDirective scgi_pass_request_body
+syn keyword ngxDirective scgi_pass_request_headers
+syn keyword ngxDirective scgi_read_timeout
+syn keyword ngxDirective scgi_request_buffering
+syn keyword ngxDirective scgi_send_timeout
+syn keyword ngxDirective scgi_store
+syn keyword ngxDirective scgi_store_access
+syn keyword ngxDirective scgi_temp_file_write_size
+syn keyword ngxDirective scgi_temp_path
+syn keyword ngxDirective secure_link
+syn keyword ngxDirective secure_link_md5
+syn keyword ngxDirective secure_link_secret
+syn keyword ngxDirective send_lowat
+syn keyword ngxDirective send_timeout
+syn keyword ngxDirective sendfile
+syn keyword ngxDirective sendfile_max_chunk
+syn keyword ngxDirective server_name_in_redirect
+syn keyword ngxDirective server_names_hash_bucket_size
+syn keyword ngxDirective server_names_hash_max_size
+syn keyword ngxDirective server_tokens
+syn keyword ngxDirective session_log
+syn keyword ngxDirective session_log_format
+syn keyword ngxDirective session_log_zone
+syn keyword ngxDirective set_real_ip_from
+syn keyword ngxDirective slice
+syn keyword ngxDirective smtp_auth
+syn keyword ngxDirective smtp_capabilities
+syn keyword ngxDirective smtp_client_buffer
+syn keyword ngxDirective smtp_greeting_delay
+syn keyword ngxDirective source_charset
+syn keyword ngxDirective spdy_chunk_size
+syn keyword ngxDirective spdy_headers_comp
+syn keyword ngxDirective spdy_keepalive_timeout
+syn keyword ngxDirective spdy_max_concurrent_streams
+syn keyword ngxDirective spdy_pool_size
+syn keyword ngxDirective spdy_recv_buffer_size
+syn keyword ngxDirective spdy_recv_timeout
+syn keyword ngxDirective spdy_streams_index_size
+syn keyword ngxDirective ssi
+syn keyword ngxDirective ssi_ignore_recycled_buffers
+syn keyword ngxDirective ssi_last_modified
+syn keyword ngxDirective ssi_min_file_chunk
+syn keyword ngxDirective ssi_silent_errors
+syn keyword ngxDirective ssi_types
+syn keyword ngxDirective ssi_value_length
+syn keyword ngxDirective ssl
+syn keyword ngxDirective ssl_buffer_size
+syn keyword ngxDirective ssl_certificate
+syn keyword ngxDirective ssl_certificate_key
+syn keyword ngxDirective ssl_ciphers
+syn keyword ngxDirective ssl_client_certificate
+syn keyword ngxDirective ssl_crl
+syn keyword ngxDirective ssl_dhparam
+syn keyword ngxDirective ssl_ecdh_curve
+syn keyword ngxDirective ssl_engine
+syn keyword ngxDirective ssl_handshake_timeout
+syn keyword ngxDirective ssl_password_file
+syn keyword ngxDirective ssl_prefer_server_ciphers
+syn keyword ngxDirective ssl_preread
+syn keyword ngxDirective ssl_protocols nextgroup=ngxSSLProtocol skipwhite
+syn keyword ngxSSLProtocol SSLv2 SSLv3 TLSv1 TLSv1.1 TLSv1.2 contained nextgroup=ngxSSLProtocol skipwhite
+syn keyword ngxDirective ssl_session_cache
+syn keyword ngxDirective ssl_session_ticket_key
+syn keyword ngxDirective ssl_session_tickets
+syn keyword ngxDirective ssl_session_timeout
+syn keyword ngxDirective ssl_stapling
+syn keyword ngxDirective ssl_stapling_file
+syn keyword ngxDirective ssl_stapling_responder
+syn keyword ngxDirective ssl_stapling_verify
+syn keyword ngxDirective ssl_trusted_certificate
+syn keyword ngxDirective ssl_verify_client
+syn keyword ngxDirective ssl_verify_depth
+syn keyword ngxDirective starttls
+syn keyword ngxDirective state
+syn keyword ngxDirective status
+syn keyword ngxDirective status_format
+syn keyword ngxDirective status_zone
+syn keyword ngxDirective sticky
+syn keyword ngxDirective sticky_cookie_insert
+syn keyword ngxDirective stub_status
+syn keyword ngxDirective sub_filter
+syn keyword ngxDirective sub_filter_last_modified
+syn keyword ngxDirective sub_filter_once
+syn keyword ngxDirective sub_filter_types
+syn keyword ngxDirective tcp_nodelay
+syn keyword ngxDirective tcp_nopush
+syn keyword ngxDirective thread_pool
+syn keyword ngxDirective thread_stack_size
+syn keyword ngxDirective timeout
+syn keyword ngxDirective timer_resolution
+syn keyword ngxDirective types_hash_bucket_size
+syn keyword ngxDirective types_hash_max_size
+syn keyword ngxDirective underscores_in_headers
+syn keyword ngxDirective uninitialized_variable_warn
+syn keyword ngxDirective upstream_conf
+syn keyword ngxDirective use
+syn keyword ngxDirective user
+syn keyword ngxDirective userid
+syn keyword ngxDirective userid_domain
+syn keyword ngxDirective userid_expires
+syn keyword ngxDirective userid_mark
+syn keyword ngxDirective userid_name
+syn keyword ngxDirective userid_p3p
+syn keyword ngxDirective userid_path
+syn keyword ngxDirective userid_service
+syn keyword ngxDirective uwsgi_bind
+syn keyword ngxDirective uwsgi_buffer_size
+syn keyword ngxDirective uwsgi_buffering
+syn keyword ngxDirective uwsgi_buffers
+syn keyword ngxDirective uwsgi_busy_buffers_size
+syn keyword ngxDirective uwsgi_cache
+syn keyword ngxDirective uwsgi_cache_bypass
+syn keyword ngxDirective uwsgi_cache_key
+syn keyword ngxDirective uwsgi_cache_lock
+syn keyword ngxDirective uwsgi_cache_lock_age
+syn keyword ngxDirective uwsgi_cache_lock_timeout
+syn keyword ngxDirective uwsgi_cache_methods
+syn keyword ngxDirective uwsgi_cache_min_uses
+syn keyword ngxDirective uwsgi_cache_path
+syn keyword ngxDirective uwsgi_cache_purge
+syn keyword ngxDirective uwsgi_cache_revalidate
+syn keyword ngxDirective uwsgi_cache_use_stale
+syn keyword ngxDirective uwsgi_cache_valid
+syn keyword ngxDirective uwsgi_connect_timeout
+syn keyword ngxDirective uwsgi_force_ranges
+syn keyword ngxDirective uwsgi_hide_header
+syn keyword ngxDirective uwsgi_ignore_client_abort
+syn keyword ngxDirective uwsgi_ignore_headers
+syn keyword ngxDirective uwsgi_intercept_errors
+syn keyword ngxDirective uwsgi_limit_rate
+syn keyword ngxDirective uwsgi_max_temp_file_size
+syn keyword ngxDirective uwsgi_modifier1
+syn keyword ngxDirective uwsgi_modifier2
+syn keyword ngxDirective uwsgi_next_upstream
+syn keyword ngxDirective uwsgi_next_upstream_timeout
+syn keyword ngxDirective uwsgi_next_upstream_tries
+syn keyword ngxDirective uwsgi_no_cache
+syn keyword ngxDirective uwsgi_param
+syn keyword ngxDirective uwsgi_pass
+syn keyword ngxDirective uwsgi_pass_header
+syn keyword ngxDirective uwsgi_pass_request_body
+syn keyword ngxDirective uwsgi_pass_request_headers
+syn keyword ngxDirective uwsgi_read_timeout
+syn keyword ngxDirective uwsgi_request_buffering
+syn keyword ngxDirective uwsgi_send_timeout
+syn keyword ngxDirective uwsgi_ssl_certificate
+syn keyword ngxDirective uwsgi_ssl_certificate_key
+syn keyword ngxDirective uwsgi_ssl_ciphers
+syn keyword ngxDirective uwsgi_ssl_crl
+syn keyword ngxDirective uwsgi_ssl_name
+syn keyword ngxDirective uwsgi_ssl_password_file
+syn keyword ngxDirective uwsgi_ssl_protocols nextgroup=ngxSSLProtocol skipwhite
+syn keyword ngxDirective uwsgi_ssl_server_name
+syn keyword ngxDirective uwsgi_ssl_session_reuse
+syn keyword ngxDirective uwsgi_ssl_trusted_certificate
+syn keyword ngxDirective uwsgi_ssl_verify
+syn keyword ngxDirective uwsgi_ssl_verify_depth
+syn keyword ngxDirective uwsgi_store
+syn keyword ngxDirective uwsgi_store_access
+syn keyword ngxDirective uwsgi_string
+syn keyword ngxDirective uwsgi_temp_file_write_size
+syn keyword ngxDirective uwsgi_temp_path
+syn keyword ngxDirective valid_referers
+syn keyword ngxDirective variables_hash_bucket_size
+syn keyword ngxDirective variables_hash_max_size
+syn keyword ngxDirective worker_aio_requests
+syn keyword ngxDirective worker_connections
+syn keyword ngxDirective worker_cpu_affinity
+syn keyword ngxDirective worker_priority
+syn keyword ngxDirective worker_processes
+syn keyword ngxDirective worker_rlimit_core
+syn keyword ngxDirective worker_rlimit_nofile
+syn keyword ngxDirective worker_rlimit_sigpending
+syn keyword ngxDirective worker_threads
+syn keyword ngxDirective working_directory
+syn keyword ngxDirective xclient
+syn keyword ngxDirective xml_entities
+syn keyword ngxDirective xslt_last_modified
+syn keyword ngxDirective xslt_param
+syn keyword ngxDirective xslt_string_param
+syn keyword ngxDirective xslt_stylesheet
+syn keyword ngxDirective xslt_types
+syn keyword ngxDirective zone
" 3rd party module list:
" https://www.nginx.com/resources/wiki/modules/
" Accept Language Module <https://www.nginx.com/resources/wiki/modules/accept_language/>
" Parses the Accept-Language header and gives the most suitable locale from a list of supported locales.
-syn keyword ngxDirectiveThirdParty contained set_from_accept_language
+syn keyword ngxDirectiveThirdParty set_from_accept_language
" Access Key Module (DEPRECATED) <http://wiki.nginx.org/NginxHttpAccessKeyModule>
" 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
+syn keyword ngxDirectiveDeprecated accesskey
+syn keyword ngxDirectiveDeprecated accesskey_arg
+syn keyword ngxDirectiveDeprecated accesskey_hashmethod
+syn keyword ngxDirectiveDeprecated accesskey_signature
" Asynchronous FastCGI Module <https://github.com/rsms/afcgi>
" 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
+" syn keyword ngxDirectiveThirdParty fastcgi_bind
+" syn keyword ngxDirectiveThirdParty fastcgi_buffer_size
+" syn keyword ngxDirectiveThirdParty fastcgi_buffers
+" syn keyword ngxDirectiveThirdParty fastcgi_busy_buffers_size
+" syn keyword ngxDirectiveThirdParty fastcgi_cache
+" syn keyword ngxDirectiveThirdParty fastcgi_cache_key
+" syn keyword ngxDirectiveThirdParty fastcgi_cache_methods
+" syn keyword ngxDirectiveThirdParty fastcgi_cache_min_uses
+" syn keyword ngxDirectiveThirdParty fastcgi_cache_path
+" syn keyword ngxDirectiveThirdParty fastcgi_cache_use_stale
+" syn keyword ngxDirectiveThirdParty fastcgi_cache_valid
+" syn keyword ngxDirectiveThirdParty fastcgi_catch_stderr
+" syn keyword ngxDirectiveThirdParty fastcgi_connect_timeout
+" syn keyword ngxDirectiveThirdParty fastcgi_hide_header
+" syn keyword ngxDirectiveThirdParty fastcgi_ignore_client_abort
+" syn keyword ngxDirectiveThirdParty fastcgi_ignore_headers
+" syn keyword ngxDirectiveThirdParty fastcgi_index
+" syn keyword ngxDirectiveThirdParty fastcgi_intercept_errors
+" syn keyword ngxDirectiveThirdParty fastcgi_max_temp_file_size
+" syn keyword ngxDirectiveThirdParty fastcgi_next_upstream
+" syn keyword ngxDirectiveThirdParty fastcgi_param
+" syn keyword ngxDirectiveThirdParty fastcgi_pass
+" syn keyword ngxDirectiveThirdParty fastcgi_pass_header
+" syn keyword ngxDirectiveThirdParty fastcgi_pass_request_body
+" syn keyword ngxDirectiveThirdParty fastcgi_pass_request_headers
+" syn keyword ngxDirectiveThirdParty fastcgi_read_timeout
+" syn keyword ngxDirectiveThirdParty fastcgi_send_lowat
+" syn keyword ngxDirectiveThirdParty fastcgi_send_timeout
+" syn keyword ngxDirectiveThirdParty fastcgi_split_path_info
+" syn keyword ngxDirectiveThirdParty fastcgi_store
+" syn keyword ngxDirectiveThirdParty fastcgi_store_access
+" syn keyword ngxDirectiveThirdParty fastcgi_temp_file_write_size
+" syn keyword ngxDirectiveThirdParty fastcgi_temp_path
+syn keyword ngxDirectiveDeprecated fastcgi_upstream_fail_timeout
+syn keyword ngxDirectiveDeprecated fastcgi_upstream_max_fails
" Akamai G2O Module <https://github.com/kaltura/nginx_mod_akamai_g2o>
" Nginx Module for Authenticating Akamai G2O requests
-syn keyword ngxDirectiveThirdParty contained g2o
-syn keyword ngxDirectiveThirdParty contained g2o_nonce
-syn keyword ngxDirectiveThirdParty contained g2o_key
+syn keyword ngxDirectiveThirdParty g2o
+syn keyword ngxDirectiveThirdParty g2o_nonce
+syn keyword ngxDirectiveThirdParty g2o_key
" Lua Module <https://github.com/alacner/nginx_lua_module>
" You can be very simple to execute lua code for nginx
-syn keyword ngxDirectiveThirdParty contained lua_file
+syn keyword ngxDirectiveThirdParty lua_file
" Array Variable Module <https://github.com/openresty/array-var-nginx-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
+syn keyword ngxDirectiveThirdParty array_split
+syn keyword ngxDirectiveThirdParty array_join
+syn keyword ngxDirectiveThirdParty array_map
+syn keyword ngxDirectiveThirdParty array_map_op
" Nginx Audio Track for HTTP Live Streaming <https://github.com/flavioribeiro/nginx-audio-track-for-hls-module>
" 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
+syn keyword ngxDirectiveThirdParty ngx_hls_audio_track
+syn keyword ngxDirectiveThirdParty ngx_hls_audio_track_rootpath
+syn keyword ngxDirectiveThirdParty ngx_hls_audio_track_output_format
+syn keyword ngxDirectiveThirdParty ngx_hls_audio_track_output_header
" AWS Proxy Module <https://github.com/anomalizer/ngx_aws_auth>
" Nginx module to proxy to authenticated AWS services
-syn keyword ngxDirectiveThirdParty contained aws_access_key
-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 aws_access_key
+syn keyword ngxDirectiveThirdParty aws_key_scope
+syn keyword ngxDirectiveThirdParty aws_signing_key
+syn keyword ngxDirectiveThirdParty aws_endpoint
+syn keyword ngxDirectiveThirdParty aws_s3_bucket
+syn keyword ngxDirectiveThirdParty aws_sign
" Backtrace module <https://github.com/alibaba/nginx-backtrace>
" 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
+syn keyword ngxDirectiveThirdParty backtrace_log
+syn keyword ngxDirectiveThirdParty backtrace_max_stack_size
" Brotli Module <https://github.com/google/ngx_brotli>
" 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 brotli_static
+syn keyword ngxDirectiveThirdParty brotli
+syn keyword ngxDirectiveThirdParty brotli_types
+syn keyword ngxDirectiveThirdParty brotli_buffers
+syn keyword ngxDirectiveThirdParty brotli_comp_level
+syn keyword ngxDirectiveThirdParty brotli_window
+syn keyword ngxDirectiveThirdParty brotli_min_length
" Cache Purge Module <https://github.com/FRiCKLE/ngx_cache_purge>
" 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
+syn keyword ngxDirectiveThirdParty fastcgi_cache_purge
+syn keyword ngxDirectiveThirdParty proxy_cache_purge
+" syn keyword ngxDirectiveThirdParty scgi_cache_purge
+" syn keyword ngxDirectiveThirdParty uwsgi_cache_purge
" Chunkin Module (DEPRECATED) <http://wiki.nginx.org/NginxHttpChunkinModule>
" 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
+syn keyword ngxDirectiveDeprecated chunkin
+syn keyword ngxDirectiveDeprecated chunkin_keepalive
+syn keyword ngxDirectiveDeprecated chunkin_max_chunks_per_buf
+syn keyword ngxDirectiveDeprecated chunkin_resume
" Circle GIF Module <https://github.com/evanmiller/nginx_circle_gif>
" 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
+syn keyword ngxDirectiveThirdParty circle_gif
+syn keyword ngxDirectiveThirdParty circle_gif_max_radius
+syn keyword ngxDirectiveThirdParty circle_gif_min_radius
+syn keyword ngxDirectiveThirdParty circle_gif_step_radius
" Nginx-Clojure Module <http://nginx-clojure.github.io/index.html>
" Parses the Accept-Language header and gives the most suitable locale from a list of supported locales.
-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 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
+syn keyword ngxDirectiveThirdParty jvm_path
+syn keyword ngxDirectiveThirdParty jvm_var
+syn keyword ngxDirectiveThirdParty jvm_classpath
+syn keyword ngxDirectiveThirdParty jvm_classpath_check
+syn keyword ngxDirectiveThirdParty jvm_workers
+syn keyword ngxDirectiveThirdParty jvm_options
+syn keyword ngxDirectiveThirdParty jvm_handler_type
+syn keyword ngxDirectiveThirdParty jvm_init_handler_name
+syn keyword ngxDirectiveThirdParty jvm_init_handler_code
+syn keyword ngxDirectiveThirdParty jvm_exit_handler_name
+syn keyword ngxDirectiveThirdParty jvm_exit_handler_code
+syn keyword ngxDirectiveThirdParty handlers_lazy_init
+syn keyword ngxDirectiveThirdParty auto_upgrade_ws
+syn keyword ngxDirectiveThirdParty content_handler_type
+syn keyword ngxDirectiveThirdParty content_handler_name
+syn keyword ngxDirectiveThirdParty content_handler_code
+syn keyword ngxDirectiveThirdParty rewrite_handler_type
+syn keyword ngxDirectiveThirdParty rewrite_handler_name
+syn keyword ngxDirectiveThirdParty rewrite_handler_code
+syn keyword ngxDirectiveThirdParty access_handler_type
+syn keyword ngxDirectiveThirdParty access_handler_name
+syn keyword ngxDirectiveThirdParty access_handler_code
+syn keyword ngxDirectiveThirdParty header_filter_type
+syn keyword ngxDirectiveThirdParty header_filter_name
+syn keyword ngxDirectiveThirdParty header_filter_code
+syn keyword ngxDirectiveThirdParty content_handler_property
+syn keyword ngxDirectiveThirdParty rewrite_handler_property
+syn keyword ngxDirectiveThirdParty access_handler_property
+syn keyword ngxDirectiveThirdParty header_filter_property
+syn keyword ngxDirectiveThirdParty always_read_body
+syn keyword ngxDirectiveThirdParty shared_map
+syn keyword ngxDirectiveThirdParty write_page_size
" Upstream Consistent Hash <https://www.nginx.com/resources/wiki/modules/consistent_hash/>
" A load balancer that uses an internal consistent hash ring to select the right backend node.
-syn keyword ngxDirectiveThirdParty contained consistent_hash
+syn keyword ngxDirectiveThirdParty consistent_hash
" Nginx Development Kit <https://github.com/simpl/ngx_devel_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
+syn keyword ngxDirectiveThirdParty upstream_list
" Drizzle Module <https://www.nginx.com/resources/wiki/modules/drizzle/>
" 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
+syn keyword ngxDirectiveThirdParty drizzle_server
+syn keyword ngxDirectiveThirdParty drizzle_keepalive
+syn keyword ngxDirectiveThirdParty drizzle_query
+syn keyword ngxDirectiveThirdParty drizzle_pass
+syn keyword ngxDirectiveThirdParty drizzle_connect_timeout
+syn keyword ngxDirectiveThirdParty drizzle_send_query_timeout
+syn keyword ngxDirectiveThirdParty drizzle_recv_cols_timeout
+syn keyword ngxDirectiveThirdParty drizzle_recv_rows_timeout
+syn keyword ngxDirectiveThirdParty drizzle_buffer_size
+syn keyword ngxDirectiveThirdParty drizzle_module_header
+syn keyword ngxDirectiveThirdParty drizzle_status
" Dynamic ETags Module <https://github.com/kali/nginx-dynamic-etags>
" Attempt at handling ETag / If-None-Match on proxied content.
-syn keyword ngxDirectiveThirdParty contained dynamic_etags
+syn keyword ngxDirectiveThirdParty dynamic_etags
" Echo Module <https://www.nginx.com/resources/wiki/modules/echo/>
" 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
+syn keyword ngxDirectiveThirdParty echo
+syn keyword ngxDirectiveThirdParty echo_duplicate
+syn keyword ngxDirectiveThirdParty echo_flush
+syn keyword ngxDirectiveThirdParty echo_sleep
+syn keyword ngxDirectiveThirdParty echo_blocking_sleep
+syn keyword ngxDirectiveThirdParty echo_reset_timer
+syn keyword ngxDirectiveThirdParty echo_read_request_body
+syn keyword ngxDirectiveThirdParty echo_location_async
+syn keyword ngxDirectiveThirdParty echo_location
+syn keyword ngxDirectiveThirdParty echo_subrequest_async
+syn keyword ngxDirectiveThirdParty echo_subrequest
+syn keyword ngxDirectiveThirdParty echo_foreach_split
+syn keyword ngxDirectiveThirdParty echo_end
+syn keyword ngxDirectiveThirdParty echo_request_body
+syn keyword ngxDirectiveThirdParty echo_exec
+syn keyword ngxDirectiveThirdParty echo_status
+syn keyword ngxDirectiveThirdParty echo_before_body
+syn keyword ngxDirectiveThirdParty echo_after_body
" Encrypted Session Module <https://github.com/openresty/encrypted-session-nginx-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
+syn keyword ngxDirectiveThirdParty encrypted_session_key
+syn keyword ngxDirectiveThirdParty encrypted_session_iv
+syn keyword ngxDirectiveThirdParty encrypted_session_expires
+syn keyword ngxDirectiveThirdParty set_encrypt_session
+syn keyword ngxDirectiveThirdParty set_decrypt_session
" Enhanced Memcached Module <https://github.com/bpaquet/ngx_http_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
+syn keyword ngxDirectiveThirdParty enhanced_memcached_pass
+syn keyword ngxDirectiveThirdParty enhanced_memcached_hash_keys_with_md5
+syn keyword ngxDirectiveThirdParty enhanced_memcached_allow_put
+syn keyword ngxDirectiveThirdParty enhanced_memcached_allow_delete
+syn keyword ngxDirectiveThirdParty enhanced_memcached_stats
+syn keyword ngxDirectiveThirdParty enhanced_memcached_flush
+syn keyword ngxDirectiveThirdParty enhanced_memcached_flush_namespace
+syn keyword ngxDirectiveThirdParty enhanced_memcached_bind
+syn keyword ngxDirectiveThirdParty enhanced_memcached_connect_timeout
+syn keyword ngxDirectiveThirdParty enhanced_memcached_send_timeout
+syn keyword ngxDirectiveThirdParty enhanced_memcached_buffer_size
+syn keyword ngxDirectiveThirdParty enhanced_memcached_read_timeout
" Events Module (DEPRECATED) <http://docs.dutov.org/nginx_modules_events_en.html>
" Provides options for start/stop events.
-syn keyword ngxDirectiveDeprecated contained on_start
-syn keyword ngxDirectiveDeprecated contained on_stop
+syn keyword ngxDirectiveDeprecated on_start
+syn keyword ngxDirectiveDeprecated on_stop
" EY Balancer Module <https://github.com/ezmobius/nginx-ey-balancer>
" 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
+syn keyword ngxDirectiveThirdParty max_connections
+syn keyword ngxDirectiveThirdParty max_connections_max_queue_length
+syn keyword ngxDirectiveThirdParty max_connections_queue_timeout
" Upstream Fair Balancer <https://www.nginx.com/resources/wiki/modules/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
+syn keyword ngxDirectiveThirdParty fair
+syn keyword ngxDirectiveThirdParty upstream_fair_shm_size
" Fancy Indexes Module <https://github.com/aperezdc/ngx-fancyindex>
" 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
+syn keyword ngxDirectiveThirdParty fancyindex
+syn keyword ngxDirectiveThirdParty fancyindex_default_sort
+syn keyword ngxDirectiveThirdParty fancyindex_directories_first
+syn keyword ngxDirectiveThirdParty fancyindex_css_href
+syn keyword ngxDirectiveThirdParty fancyindex_exact_size
+syn keyword ngxDirectiveThirdParty fancyindex_name_length
+syn keyword ngxDirectiveThirdParty fancyindex_footer
+syn keyword ngxDirectiveThirdParty fancyindex_header
+syn keyword ngxDirectiveThirdParty fancyindex_show_path
+syn keyword ngxDirectiveThirdParty fancyindex_ignore
+syn keyword ngxDirectiveThirdParty fancyindex_hide_symlinks
+syn keyword ngxDirectiveThirdParty fancyindex_localtime
+syn keyword ngxDirectiveThirdParty fancyindex_time_format
" Form Auth Module <https://github.com/veruu/ngx_form_auth>
" 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
+syn keyword ngxDirectiveThirdParty form_auth
+syn keyword ngxDirectiveThirdParty form_auth_pam_service
+syn keyword ngxDirectiveThirdParty form_auth_login
+syn keyword ngxDirectiveThirdParty form_auth_password
+syn keyword ngxDirectiveThirdParty form_auth_remote_user
" Form Input Module <https://github.com/calio/form-input-nginx-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
+syn keyword ngxDirectiveThirdParty set_form_input
+syn keyword ngxDirectiveThirdParty set_form_input_multi
" GeoIP Module (DEPRECATED) <http://wiki.nginx.org/NginxHttp3rdPartyGeoIPModule>
" Country code lookups via the MaxMind GeoIP API.
-syn keyword ngxDirectiveDeprecated contained geoip_country_file
+syn keyword ngxDirectiveDeprecated geoip_country_file
" GeoIP 2 Module <https://github.com/leev/ngx_http_geoip2_module>
" Creates variables with values from the maxmind geoip2 databases based on the client IP
-syn keyword ngxDirectiveThirdParty contained geoip2
+syn keyword ngxDirectiveThirdParty geoip2
" GridFS Module <https://github.com/mdirolf/nginx-gridfs>
" Nginx module for serving files from MongoDB's GridFS
-syn keyword ngxDirectiveThirdParty contained gridfs
+syn keyword ngxDirectiveThirdParty gridfs
" Headers More Module <https://github.com/openresty/headers-more-nginx-module>
" Set and clear input and output headers...more than "add"!
-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
+syn keyword ngxDirectiveThirdParty more_clear_headers
+syn keyword ngxDirectiveThirdParty more_clear_input_headers
+syn keyword ngxDirectiveThirdParty more_set_headers
+syn keyword ngxDirectiveThirdParty more_set_input_headers
" Health Checks Upstreams Module <https://www.nginx.com/resources/wiki/modules/healthcheck/>
" 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
+syn keyword ngxDirectiveThirdParty healthcheck_enabled
+syn keyword ngxDirectiveThirdParty healthcheck_delay
+syn keyword ngxDirectiveThirdParty healthcheck_timeout
+syn keyword ngxDirectiveThirdParty healthcheck_failcount
+syn keyword ngxDirectiveThirdParty healthcheck_send
+syn keyword ngxDirectiveThirdParty healthcheck_expected
+syn keyword ngxDirectiveThirdParty healthcheck_buffer
+syn keyword ngxDirectiveThirdParty healthcheck_status
" HTTP Accounting Module <https://github.com/Lax/ngx_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
+syn keyword ngxDirectiveThirdParty http_accounting
+syn keyword ngxDirectiveThirdParty http_accounting_log
+syn keyword ngxDirectiveThirdParty http_accounting_id
+syn keyword ngxDirectiveThirdParty http_accounting_interval
+syn keyword ngxDirectiveThirdParty http_accounting_perturb
" Nginx Digest Authentication module <https://github.com/atomx/nginx-http-auth-digest>
" 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
+syn keyword ngxDirectiveThirdParty auth_digest
+syn keyword ngxDirectiveThirdParty auth_digest_user_file
+syn keyword ngxDirectiveThirdParty auth_digest_timeout
+syn keyword ngxDirectiveThirdParty auth_digest_expires
+syn keyword ngxDirectiveThirdParty auth_digest_replays
+syn keyword ngxDirectiveThirdParty auth_digest_shm_size
" Auth PAM Module <https://github.com/sto/ngx_http_auth_pam_module>
" HTTP Basic Authentication using PAM.
-syn keyword ngxDirectiveThirdParty contained auth_pam
-syn keyword ngxDirectiveThirdParty contained auth_pam_service_name
+syn keyword ngxDirectiveThirdParty auth_pam
+syn keyword ngxDirectiveThirdParty auth_pam_service_name
" HTTP Auth Request Module <http://nginx.org/en/docs/http/ngx_http_auth_request_module.html>
" Implements client authorization based on the result of a subrequest
-" syn keyword ngxDirectiveThirdParty contained auth_request
-" syn keyword ngxDirectiveThirdParty contained auth_request_set
+" syn keyword ngxDirectiveThirdParty auth_request
+" syn keyword ngxDirectiveThirdParty auth_request_set
" HTTP Concatenation module for Nginx <https://github.com/alibaba/nginx-http-concat>
" 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
+syn keyword ngxDirectiveThirdParty concat
+syn keyword ngxDirectiveThirdParty concat_types
+syn keyword ngxDirectiveThirdParty concat_unique
+syn keyword ngxDirectiveThirdParty concat_max_files
+syn keyword ngxDirectiveThirdParty concat_delimiter
+syn keyword ngxDirectiveThirdParty concat_ignore_file_error
" HTTP Dynamic Upstream Module <https://github.com/yzprofile/ngx_http_dyups_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
+syn keyword ngxDirectiveThirdParty dyups_interface
+syn keyword ngxDirectiveThirdParty dyups_read_msg_timeout
+syn keyword ngxDirectiveThirdParty dyups_shm_zone_size
+syn keyword ngxDirectiveThirdParty dyups_upstream_conf
+syn keyword ngxDirectiveThirdParty dyups_trylock
" HTTP Footer If Filter Module <https://github.com/flygoast/ngx_http_footer_if_filter>
" 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
+syn keyword ngxDirectiveThirdParty footer_if
" HTTP Footer Filter Module <https://github.com/alibaba/nginx-http-footer-filter>
" This module implements a body filter that adds a given string to the page footer.
-syn keyword ngxDirectiveThirdParty contained footer
-syn keyword ngxDirectiveThirdParty contained footer_types
+syn keyword ngxDirectiveThirdParty footer
+syn keyword ngxDirectiveThirdParty footer_types
" HTTP Internal Redirect Module <https://github.com/flygoast/ngx_http_internal_redirect>
" 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
+syn keyword ngxDirectiveThirdParty internal_redirect_if
+syn keyword ngxDirectiveThirdParty internal_redirect_if_no_postponed
" HTTP JavaScript Module <https://github.com/peter-leonov/ngx_http_js_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
+syn keyword ngxDirectiveThirdParty js
+syn keyword ngxDirectiveThirdParty js_filter
+syn keyword ngxDirectiveThirdParty js_filter_types
+syn keyword ngxDirectiveThirdParty js_load
+syn keyword ngxDirectiveThirdParty js_maxmem
+syn keyword ngxDirectiveThirdParty js_require
+syn keyword ngxDirectiveThirdParty js_set
+syn keyword ngxDirectiveThirdParty js_utf8
" HTTP Push Module (DEPRECATED) <http://pushmodule.slact.net/>
" 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
+syn keyword ngxDirectiveDeprecated push_buffer_size
+syn keyword ngxDirectiveDeprecated push_listener
+syn keyword ngxDirectiveDeprecated push_message_timeout
+syn keyword ngxDirectiveDeprecated push_queue_messages
+syn keyword ngxDirectiveDeprecated push_sender
" HTTP Redis Module <https://www.nginx.com/resources/wiki/modules/redis/>
" Redis <http://code.google.com/p/redis/> support.
-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_next_upstream
-syn keyword ngxDirectiveThirdParty contained redis_pass
-syn keyword ngxDirectiveThirdParty contained redis_read_timeout
-syn keyword ngxDirectiveThirdParty contained redis_send_timeout
+syn keyword ngxDirectiveThirdParty redis_bind
+syn keyword ngxDirectiveThirdParty redis_buffer_size
+syn keyword ngxDirectiveThirdParty redis_connect_timeout
+syn keyword ngxDirectiveThirdParty redis_next_upstream
+syn keyword ngxDirectiveThirdParty redis_pass
+syn keyword ngxDirectiveThirdParty redis_read_timeout
+syn keyword ngxDirectiveThirdParty redis_send_timeout
" Iconv Module <https://github.com/calio/iconv-nginx-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
+syn keyword ngxDirectiveThirdParty set_iconv
+syn keyword ngxDirectiveThirdParty iconv_buffer_size
+syn keyword ngxDirectiveThirdParty iconv_filter
" IP Blocker Module <https://github.com/tmthrgd/nginx-ip-blocker>
" An efficient shared memory IP blocking system for nginx.
-syn keyword ngxDirectiveThirdParty contained ip_blocker
+syn keyword ngxDirectiveThirdParty ip_blocker
" IP2Location Module <https://github.com/chrislim2888/ip2location-nginx>
" Allows user to lookup for geolocation information using IP2Location database
-syn keyword ngxDirectiveThirdParty contained ip2location_database
+syn keyword ngxDirectiveThirdParty ip2location_database
" JS Module <https://github.com/peter-leonov/ngx_http_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
+syn keyword ngxDirectiveThirdParty js
+syn keyword ngxDirectiveThirdParty js_access
+syn keyword ngxDirectiveThirdParty js_load
+syn keyword ngxDirectiveThirdParty js_set
" Limit Upload Rate Module <https://github.com/cfsego/limit_upload_rate>
" 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
+syn keyword ngxDirectiveThirdParty limit_upload_rate
+syn keyword ngxDirectiveThirdParty limit_upload_rate_after
" Limit Upstream Module <https://github.com/cfsego/nginx-limit-upstream>
" 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
+syn keyword ngxDirectiveThirdParty limit_upstream_zone
+syn keyword ngxDirectiveThirdParty limit_upstream_conn
+syn keyword ngxDirectiveThirdParty limit_upstream_log_level
" Log If Module <https://github.com/cfsego/ngx_log_if>
" Conditional accesslog for nginx
-syn keyword ngxDirectiveThirdParty contained access_log_bypass_if
+syn keyword ngxDirectiveThirdParty access_log_bypass_if
" Log Request Speed (DEPRECATED) <http://wiki.nginx.org/NginxHttpLogRequestSpeed>
" 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
+syn keyword ngxDirectiveDeprecated log_request_speed_filter
+syn keyword ngxDirectiveDeprecated log_request_speed_filter_timeout
" Log ZeroMQ Module <https://github.com/alticelabs/nginx-log-zmq>
" 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
+syn keyword ngxDirectiveThirdParty log_zmq_server
+syn keyword ngxDirectiveThirdParty log_zmq_endpoint
+syn keyword ngxDirectiveThirdParty log_zmq_format
+syn keyword ngxDirectiveThirdParty log_zmq_off
" Lower/UpperCase Module <https://github.com/replay/ngx_http_lower_upper_case>
" 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
+syn keyword ngxDirectiveThirdParty lower
+syn keyword ngxDirectiveThirdParty upper
" Lua Upstream Module <https://github.com/openresty/lua-upstream-nginx-module>
" Nginx C module to expose Lua API to ngx_lua for Nginx upstreams
" Lua Module <https://github.com/openresty/lua-nginx-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
-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 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
+syn keyword ngxDirectiveThirdParty lua_use_default_type
+syn keyword ngxDirectiveThirdParty lua_malloc_trim
+syn keyword ngxDirectiveThirdParty lua_code_cache
+syn keyword ngxDirectiveThirdParty lua_regex_cache_max_entries
+syn keyword ngxDirectiveThirdParty lua_regex_match_limit
+syn keyword ngxDirectiveThirdParty lua_package_path
+syn keyword ngxDirectiveThirdParty lua_package_cpath
+syn keyword ngxDirectiveThirdParty init_by_lua
+syn keyword ngxDirectiveThirdParty init_by_lua_block
+syn keyword ngxDirectiveThirdParty init_by_lua_file
+syn keyword ngxDirectiveThirdParty init_worker_by_lua
+syn keyword ngxDirectiveThirdParty init_worker_by_lua_block
+syn keyword ngxDirectiveThirdParty init_worker_by_lua_file
+syn keyword ngxDirectiveThirdParty set_by_lua
+syn keyword ngxDirectiveThirdParty set_by_lua_block
+syn keyword ngxDirectiveThirdParty set_by_lua_file
+syn keyword ngxDirectiveThirdParty content_by_lua
+syn keyword ngxDirectiveThirdParty content_by_lua_block
+syn keyword ngxDirectiveThirdParty content_by_lua_file
+syn keyword ngxDirectiveThirdParty rewrite_by_lua
+syn keyword ngxDirectiveThirdParty rewrite_by_lua_block
+syn keyword ngxDirectiveThirdParty rewrite_by_lua_file
+syn keyword ngxDirectiveThirdParty access_by_lua
+syn keyword ngxDirectiveThirdParty access_by_lua_block
+syn keyword ngxDirectiveThirdParty access_by_lua_file
+syn keyword ngxDirectiveThirdParty header_filter_by_lua
+syn keyword ngxDirectiveThirdParty header_filter_by_lua_block
+syn keyword ngxDirectiveThirdParty header_filter_by_lua_file
+syn keyword ngxDirectiveThirdParty body_filter_by_lua
+syn keyword ngxDirectiveThirdParty body_filter_by_lua_block
+syn keyword ngxDirectiveThirdParty body_filter_by_lua_file
+syn keyword ngxDirectiveThirdParty log_by_lua
+syn keyword ngxDirectiveThirdParty log_by_lua_block
+syn keyword ngxDirectiveThirdParty log_by_lua_file
+syn keyword ngxDirectiveThirdParty balancer_by_lua_block
+syn keyword ngxDirectiveThirdParty balancer_by_lua_file
+syn keyword ngxDirectiveThirdParty lua_need_request_body
+syn keyword ngxDirectiveThirdParty ssl_certificate_by_lua_block
+syn keyword ngxDirectiveThirdParty ssl_certificate_by_lua_file
+syn keyword ngxDirectiveThirdParty ssl_session_fetch_by_lua_block
+syn keyword ngxDirectiveThirdParty ssl_session_fetch_by_lua_file
+syn keyword ngxDirectiveThirdParty ssl_session_store_by_lua_block
+syn keyword ngxDirectiveThirdParty ssl_session_store_by_lua_file
+syn keyword ngxDirectiveThirdParty lua_shared_dict
+syn keyword ngxDirectiveThirdParty lua_socket_connect_timeout
+syn keyword ngxDirectiveThirdParty lua_socket_send_timeout
+syn keyword ngxDirectiveThirdParty lua_socket_send_lowat
+syn keyword ngxDirectiveThirdParty lua_socket_read_timeout
+syn keyword ngxDirectiveThirdParty lua_socket_buffer_size
+syn keyword ngxDirectiveThirdParty lua_socket_pool_size
+syn keyword ngxDirectiveThirdParty lua_socket_keepalive_timeout
+syn keyword ngxDirectiveThirdParty lua_socket_log_errors
+syn keyword ngxDirectiveThirdParty lua_ssl_ciphers
+syn keyword ngxDirectiveThirdParty lua_ssl_crl
+syn keyword ngxDirectiveThirdParty lua_ssl_protocols
+syn keyword ngxDirectiveThirdParty lua_ssl_trusted_certificate
+syn keyword ngxDirectiveThirdParty lua_ssl_verify_depth
+syn keyword ngxDirectiveThirdParty lua_http10_buffering
+syn keyword ngxDirectiveThirdParty rewrite_by_lua_no_postpone
+syn keyword ngxDirectiveThirdParty access_by_lua_no_postpone
+syn keyword ngxDirectiveThirdParty lua_transform_underscores_in_response_headers
+syn keyword ngxDirectiveThirdParty lua_check_client_abort
+syn keyword ngxDirectiveThirdParty lua_max_pending_timers
+syn keyword ngxDirectiveThirdParty lua_max_running_timers
" MD5 Filter Module <https://github.com/kainswor/nginx_md5_filter>
" A content filter for nginx, which returns the md5 hash of the content otherwise returned.
-syn keyword ngxDirectiveThirdParty contained md5_filter
+syn keyword ngxDirectiveThirdParty md5_filter
" Memc Module <https://github.com/openresty/memc-nginx-module>
" An extended version of the standard memcached module that supports set, add, delete, and many more memcached commands.
-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_next_upstream
-syn keyword ngxDirectiveThirdParty contained memc_pass
-syn keyword ngxDirectiveThirdParty contained memc_read_timeout
-syn keyword ngxDirectiveThirdParty contained memc_send_timeout
-syn keyword ngxDirectiveThirdParty contained memc_upstream_fail_timeout
-syn keyword ngxDirectiveThirdParty contained memc_upstream_max_fails
+syn keyword ngxDirectiveThirdParty memc_buffer_size
+syn keyword ngxDirectiveThirdParty memc_cmds_allowed
+syn keyword ngxDirectiveThirdParty memc_connect_timeout
+syn keyword ngxDirectiveThirdParty memc_flags_to_last_modified
+syn keyword ngxDirectiveThirdParty memc_next_upstream
+syn keyword ngxDirectiveThirdParty memc_pass
+syn keyword ngxDirectiveThirdParty memc_read_timeout
+syn keyword ngxDirectiveThirdParty memc_send_timeout
+syn keyword ngxDirectiveThirdParty memc_upstream_fail_timeout
+syn keyword ngxDirectiveThirdParty memc_upstream_max_fails
" Mod Security Module <https://github.com/SpiderLabs/ModSecurity>
" ModSecurity is an open source, cross platform web application firewall (WAF) engine
-syn keyword ngxDirectiveThirdParty contained ModSecurityConfig
-syn keyword ngxDirectiveThirdParty contained ModSecurityEnabled
-syn keyword ngxDirectiveThirdParty contained pool_context
-syn keyword ngxDirectiveThirdParty contained pool_context_hash_size
+syn keyword ngxDirectiveThirdParty ModSecurityConfig
+syn keyword ngxDirectiveThirdParty ModSecurityEnabled
+syn keyword ngxDirectiveThirdParty pool_context
+syn keyword ngxDirectiveThirdParty pool_context_hash_size
" Mogilefs Module <http://www.grid.net.ru/nginx/mogilefs.en.html>
" 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
+syn keyword ngxDirectiveThirdParty mogilefs_pass
+syn keyword ngxDirectiveThirdParty mogilefs_methods
+syn keyword ngxDirectiveThirdParty mogilefs_domain
+syn keyword ngxDirectiveThirdParty mogilefs_class
+syn keyword ngxDirectiveThirdParty mogilefs_tracker
+syn keyword ngxDirectiveThirdParty mogilefs_noverify
+syn keyword ngxDirectiveThirdParty mogilefs_connect_timeout
+syn keyword ngxDirectiveThirdParty mogilefs_send_timeout
+syn keyword ngxDirectiveThirdParty mogilefs_read_timeout
" Mongo Module <https://github.com/simpl/ngx_mongo>
" 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
+syn keyword ngxDirectiveThirdParty mongo_auth
+syn keyword ngxDirectiveThirdParty mongo_pass
+syn keyword ngxDirectiveThirdParty mongo_query
+syn keyword ngxDirectiveThirdParty mongo_json
+syn keyword ngxDirectiveThirdParty mongo_bind
+syn keyword ngxDirectiveThirdParty mongo_connect_timeout
+syn keyword ngxDirectiveThirdParty mongo_send_timeout
+syn keyword ngxDirectiveThirdParty mongo_read_timeout
+syn keyword ngxDirectiveThirdParty mongo_buffering
+syn keyword ngxDirectiveThirdParty mongo_buffer_size
+syn keyword ngxDirectiveThirdParty mongo_buffers
+syn keyword ngxDirectiveThirdParty mongo_busy_buffers_size
+syn keyword ngxDirectiveThirdParty mongo_next_upstream
" MP4 Streaming Lite Module <https://www.nginx.com/resources/wiki/modules/mp4_streaming/>
" 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
+" syn keyword ngxDirectiveThirdParty mp4
" NAXSI Module <https://github.com/nbs-system/naxsi>
" 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
+syn keyword ngxDirectiveThirdParty DeniedUrl denied_url
+syn keyword ngxDirectiveThirdParty LearningMode learning_mode
+syn keyword ngxDirectiveThirdParty SecRulesEnabled rules_enabled
+syn keyword ngxDirectiveThirdParty SecRulesDisabled rules_disabled
+syn keyword ngxDirectiveThirdParty CheckRule check_rule
+syn keyword ngxDirectiveThirdParty BasicRule basic_rule
+syn keyword ngxDirectiveThirdParty MainRule main_rule
+syn keyword ngxDirectiveThirdParty LibInjectionSql libinjection_sql
+syn keyword ngxDirectiveThirdParty LibInjectionXss libinjection_xss
" Nchan Module <https://nchan.slact.net/>
" 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
+syn keyword ngxDirectiveThirdParty nchan_channel_id
+syn keyword ngxDirectiveThirdParty nchan_channel_id_split_delimiter
+syn keyword ngxDirectiveThirdParty nchan_eventsource_event
+syn keyword ngxDirectiveThirdParty nchan_longpoll_multipart_response
+syn keyword ngxDirectiveThirdParty nchan_publisher
+syn keyword ngxDirectiveThirdParty nchan_publisher_channel_id
+syn keyword ngxDirectiveThirdParty nchan_publisher_upstream_request
+syn keyword ngxDirectiveThirdParty nchan_pubsub
+syn keyword ngxDirectiveThirdParty nchan_subscribe_request
+syn keyword ngxDirectiveThirdParty nchan_subscriber
+syn keyword ngxDirectiveThirdParty nchan_subscriber_channel_id
+syn keyword ngxDirectiveThirdParty nchan_subscriber_compound_etag_message_id
+syn keyword ngxDirectiveThirdParty nchan_subscriber_first_message
+syn keyword ngxDirectiveThirdParty nchan_subscriber_http_raw_stream_separator
+syn keyword ngxDirectiveThirdParty nchan_subscriber_last_message_id
+syn keyword ngxDirectiveThirdParty nchan_subscriber_message_id_custom_etag_header
+syn keyword ngxDirectiveThirdParty nchan_subscriber_timeout
+syn keyword ngxDirectiveThirdParty nchan_unsubscribe_request
+syn keyword ngxDirectiveThirdParty nchan_websocket_ping_interval
+syn keyword ngxDirectiveThirdParty nchan_authorize_request
+syn keyword ngxDirectiveThirdParty nchan_max_reserved_memory
+syn keyword ngxDirectiveThirdParty nchan_message_buffer_length
+syn keyword ngxDirectiveThirdParty nchan_message_timeout
+syn keyword ngxDirectiveThirdParty nchan_redis_idle_channel_cache_timeout
+syn keyword ngxDirectiveThirdParty nchan_redis_namespace
+syn keyword ngxDirectiveThirdParty nchan_redis_pass
+syn keyword ngxDirectiveThirdParty nchan_redis_ping_interval
+syn keyword ngxDirectiveThirdParty nchan_redis_server
+syn keyword ngxDirectiveThirdParty nchan_redis_storage_mode
+syn keyword ngxDirectiveThirdParty nchan_redis_url
+syn keyword ngxDirectiveThirdParty nchan_store_messages
+syn keyword ngxDirectiveThirdParty nchan_use_redis
+syn keyword ngxDirectiveThirdParty nchan_access_control_allow_origin
+syn keyword ngxDirectiveThirdParty nchan_channel_group
+syn keyword ngxDirectiveThirdParty nchan_channel_group_accounting
+syn keyword ngxDirectiveThirdParty nchan_group_location
+syn keyword ngxDirectiveThirdParty nchan_group_max_channels
+syn keyword ngxDirectiveThirdParty nchan_group_max_messages
+syn keyword ngxDirectiveThirdParty nchan_group_max_messages_disk
+syn keyword ngxDirectiveThirdParty nchan_group_max_messages_memory
+syn keyword ngxDirectiveThirdParty nchan_group_max_subscribers
+syn keyword ngxDirectiveThirdParty nchan_subscribe_existing_channels_only
+syn keyword ngxDirectiveThirdParty nchan_channel_event_string
+syn keyword ngxDirectiveThirdParty nchan_channel_events_channel_id
+syn keyword ngxDirectiveThirdParty nchan_stub_status
+syn keyword ngxDirectiveThirdParty nchan_max_channel_id_length
+syn keyword ngxDirectiveThirdParty nchan_max_channel_subscribers
+syn keyword ngxDirectiveThirdParty nchan_channel_timeout
+syn keyword ngxDirectiveThirdParty nchan_storage_engine
" Nginx Notice Module <https://github.com/kr/nginx-notice>
" Serve static file to POST requests.
-syn keyword ngxDirectiveThirdParty contained notice
-syn keyword ngxDirectiveThirdParty contained notice_type
+syn keyword ngxDirectiveThirdParty notice
+syn keyword ngxDirectiveThirdParty notice_type
" OCSP Proxy Module <https://github.com/kyprizel/nginx_ocsp_proxy-module>
" Nginx OCSP processing module designed for response caching
-syn keyword ngxDirectiveThirdParty contained ocsp_proxy
-syn keyword ngxDirectiveThirdParty contained ocsp_cache_timeout
+syn keyword ngxDirectiveThirdParty ocsp_proxy
+syn keyword ngxDirectiveThirdParty ocsp_cache_timeout
" Eval Module <https://github.com/openresty/nginx-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
+syn keyword ngxDirectiveThirdParty eval
+syn keyword ngxDirectiveThirdParty eval_escalate
+syn keyword ngxDirectiveThirdParty eval_buffer_size
+syn keyword ngxDirectiveThirdParty eval_override_content_type
+syn keyword ngxDirectiveThirdParty eval_subrequest_in_memory
" OpenSSL Version Module <https://github.com/apcera/nginx-openssl-version>
" Nginx OpenSSL version check at startup
-syn keyword ngxDirectiveThirdParty contained openssl_version_minimum
-syn keyword ngxDirectiveThirdParty contained openssl_builddate_minimum
+syn keyword ngxDirectiveThirdParty openssl_version_minimum
+syn keyword ngxDirectiveThirdParty openssl_builddate_minimum
" Owner Match Module <https://www.nginx.com/resources/wiki/modules/owner_match/>
" Control access for specific owners and groups of files
-syn keyword ngxDirectiveThirdParty contained omallow
-syn keyword ngxDirectiveThirdParty contained omdeny
+syn keyword ngxDirectiveThirdParty omallow
+syn keyword ngxDirectiveThirdParty omdeny
" Accept Language Module <https://www.nginx.com/resources/wiki/modules/accept_language/>
" Parses the Accept-Language header and gives the most suitable locale from a list of supported locales.
-syn keyword ngxDirectiveThirdParty contained pagespeed
+syn keyword ngxDirectiveThirdParty pagespeed
" PHP Memcache Standard Balancer Module <https://github.com/replay/ngx_http_php_memcache_standard_balancer>
" Loadbalancer that is compatible to the standard loadbalancer in the php-memcache module
-syn keyword ngxDirectiveThirdParty contained hash_key
+syn keyword ngxDirectiveThirdParty hash_key
" PHP Session Module <https://github.com/replay/ngx_http_php_session>
" Nginx module to parse php sessions
-syn keyword ngxDirectiveThirdParty contained php_session_parse
-syn keyword ngxDirectiveThirdParty contained php_session_strip_formatting
+syn keyword ngxDirectiveThirdParty php_session_parse
+syn keyword ngxDirectiveThirdParty php_session_strip_formatting
" Phusion Passenger Module <https://www.phusionpassenger.com/library/config/nginx/>
" Passenger is an open source web application server.
-syn keyword ngxDirectiveThirdParty contained passenger_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_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_max_instances
-syn keyword ngxDirectiveThirdParty contained passenger_max_instances_per_app
-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_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_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 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 passenger_root
+syn keyword ngxDirectiveThirdParty passenger_enabled
+syn keyword ngxDirectiveThirdParty passenger_base_uri
+syn keyword ngxDirectiveThirdParty passenger_document_root
+syn keyword ngxDirectiveThirdParty passenger_ruby
+syn keyword ngxDirectiveThirdParty passenger_python
+syn keyword ngxDirectiveThirdParty passenger_nodejs
+syn keyword ngxDirectiveThirdParty passenger_meteor_app_settings
+syn keyword ngxDirectiveThirdParty passenger_app_env
+syn keyword ngxDirectiveThirdParty passenger_app_root
+syn keyword ngxDirectiveThirdParty passenger_app_group_name
+syn keyword ngxDirectiveThirdParty passenger_app_type
+syn keyword ngxDirectiveThirdParty passenger_startup_file
+syn keyword ngxDirectiveThirdParty passenger_restart_dir
+syn keyword ngxDirectiveThirdParty passenger_spawn_method
+syn keyword ngxDirectiveThirdParty passenger_env_var
+syn keyword ngxDirectiveThirdParty passenger_load_shell_envvars
+syn keyword ngxDirectiveThirdParty passenger_rolling_restarts
+syn keyword ngxDirectiveThirdParty passenger_resist_deployment_errors
+syn keyword ngxDirectiveThirdParty passenger_user_switching
+syn keyword ngxDirectiveThirdParty passenger_user
+syn keyword ngxDirectiveThirdParty passenger_group
+syn keyword ngxDirectiveThirdParty passenger_default_user
+syn keyword ngxDirectiveThirdParty passenger_default_group
+syn keyword ngxDirectiveThirdParty passenger_show_version_in_header
+syn keyword ngxDirectiveThirdParty passenger_friendly_error_pages
+syn keyword ngxDirectiveThirdParty passenger_disable_security_update_check
+syn keyword ngxDirectiveThirdParty passenger_security_update_check_proxy
+syn keyword ngxDirectiveThirdParty passenger_max_pool_size
+syn keyword ngxDirectiveThirdParty passenger_min_instances
+syn keyword ngxDirectiveThirdParty passenger_max_instances
+syn keyword ngxDirectiveThirdParty passenger_max_instances_per_app
+syn keyword ngxDirectiveThirdParty passenger_pool_idle_time
+syn keyword ngxDirectiveThirdParty passenger_max_preloader_idle_time
+syn keyword ngxDirectiveThirdParty passenger_force_max_concurrent_requests_per_process
+syn keyword ngxDirectiveThirdParty passenger_start_timeout
+syn keyword ngxDirectiveThirdParty passenger_concurrency_model
+syn keyword ngxDirectiveThirdParty passenger_thread_count
+syn keyword ngxDirectiveThirdParty passenger_max_requests
+syn keyword ngxDirectiveThirdParty passenger_max_request_time
+syn keyword ngxDirectiveThirdParty passenger_memory_limit
+syn keyword ngxDirectiveThirdParty passenger_stat_throttle_rate
+syn keyword ngxDirectiveThirdParty passenger_core_file_descriptor_ulimit
+syn keyword ngxDirectiveThirdParty passenger_app_file_descriptor_ulimit
+syn keyword ngxDirectiveThirdParty passenger_pre_start
+syn keyword ngxDirectiveThirdParty passenger_set_header
+syn keyword ngxDirectiveThirdParty passenger_max_request_queue_size
+syn keyword ngxDirectiveThirdParty passenger_request_queue_overflow_status_code
+syn keyword ngxDirectiveThirdParty passenger_sticky_sessions
+syn keyword ngxDirectiveThirdParty passenger_sticky_sessions_cookie_name
+syn keyword ngxDirectiveThirdParty passenger_abort_websockets_on_process_shutdown
+syn keyword ngxDirectiveThirdParty passenger_ignore_client_abort
+syn keyword ngxDirectiveThirdParty passenger_intercept_errors
+syn keyword ngxDirectiveThirdParty passenger_pass_header
+syn keyword ngxDirectiveThirdParty passenger_ignore_headers
+syn keyword ngxDirectiveThirdParty passenger_headers_hash_bucket_size
+syn keyword ngxDirectiveThirdParty passenger_headers_hash_max_size
+syn keyword ngxDirectiveThirdParty passenger_buffer_response
+syn keyword ngxDirectiveThirdParty passenger_response_buffer_high_watermark
+syn keyword ngxDirectiveThirdParty passenger_buffer_size, passenger_buffers, passenger_busy_buffers_size
+syn keyword ngxDirectiveThirdParty passenger_socket_backlog
+syn keyword ngxDirectiveThirdParty passenger_log_level
+syn keyword ngxDirectiveThirdParty passenger_log_file
+syn keyword ngxDirectiveThirdParty passenger_file_descriptor_log_file
+syn keyword ngxDirectiveThirdParty passenger_debugger
+syn keyword ngxDirectiveThirdParty passenger_instance_registry_dir
+syn keyword ngxDirectiveThirdParty passenger_data_buffer_dir
+syn keyword ngxDirectiveThirdParty passenger_fly_with
+syn keyword ngxDirectiveThirdParty union_station_support
+syn keyword ngxDirectiveThirdParty union_station_key
+syn keyword ngxDirectiveThirdParty union_station_proxy_address
+syn keyword ngxDirectiveThirdParty union_station_filter
+syn keyword ngxDirectiveThirdParty union_station_gateway_address
+syn keyword ngxDirectiveThirdParty union_station_gateway_port
+syn keyword ngxDirectiveThirdParty union_station_gateway_cert
+syn keyword ngxDirectiveDeprecated rails_spawn_method
+syn keyword ngxDirectiveDeprecated passenger_debug_log_file
" Postgres Module <http://labs.frickle.com/nginx_ngx_postgres/>
" Upstream module that allows nginx to communicate directly with PostgreSQL database.
-syn keyword ngxDirectiveThirdParty contained postgres_server
-syn keyword ngxDirectiveThirdParty contained postgres_keepalive
-syn keyword ngxDirectiveThirdParty contained postgres_pass
-syn keyword ngxDirectiveThirdParty contained postgres_query
-syn keyword ngxDirectiveThirdParty contained postgres_rewrite
-syn keyword ngxDirectiveThirdParty contained postgres_output
-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
+syn keyword ngxDirectiveThirdParty postgres_server
+syn keyword ngxDirectiveThirdParty postgres_keepalive
+syn keyword ngxDirectiveThirdParty postgres_pass
+syn keyword ngxDirectiveThirdParty postgres_query
+syn keyword ngxDirectiveThirdParty postgres_rewrite
+syn keyword ngxDirectiveThirdParty postgres_output
+syn keyword ngxDirectiveThirdParty postgres_set
+syn keyword ngxDirectiveThirdParty postgres_escape
+syn keyword ngxDirectiveThirdParty postgres_connect_timeout
+syn keyword ngxDirectiveThirdParty postgres_result_timeout
" Pubcookie Module <https://www.vanko.me/book/page/pubcookie-module-nginx>
" 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
+syn keyword ngxDirectiveThirdParty pubcookie_inactive_expire
+syn keyword ngxDirectiveThirdParty pubcookie_hard_expire
+syn keyword ngxDirectiveThirdParty pubcookie_app_id
+syn keyword ngxDirectiveThirdParty pubcookie_dir_depth
+syn keyword ngxDirectiveThirdParty pubcookie_catenate_app_ids
+syn keyword ngxDirectiveThirdParty pubcookie_app_srv_id
+syn keyword ngxDirectiveThirdParty pubcookie_login
+syn keyword ngxDirectiveThirdParty pubcookie_login_method
+syn keyword ngxDirectiveThirdParty pubcookie_post
+syn keyword ngxDirectiveThirdParty pubcookie_domain
+syn keyword ngxDirectiveThirdParty pubcookie_granting_cert_file
+syn keyword ngxDirectiveThirdParty pubcookie_session_key_file
+syn keyword ngxDirectiveThirdParty pubcookie_session_cert_file
+syn keyword ngxDirectiveThirdParty pubcookie_crypt_key_file
+syn keyword ngxDirectiveThirdParty pubcookie_end_session
+syn keyword ngxDirectiveThirdParty pubcookie_encryption
+syn keyword ngxDirectiveThirdParty pubcookie_session_reauth
+syn keyword ngxDirectiveThirdParty pubcookie_auth_type_names
+syn keyword ngxDirectiveThirdParty pubcookie_no_prompt
+syn keyword ngxDirectiveThirdParty pubcookie_on_demand
+syn keyword ngxDirectiveThirdParty pubcookie_addl_request
+syn keyword ngxDirectiveThirdParty pubcookie_no_obscure_cookies
+syn keyword ngxDirectiveThirdParty pubcookie_no_clean_creds
+syn keyword ngxDirectiveThirdParty pubcookie_egd_device
+syn keyword ngxDirectiveThirdParty pubcookie_no_blank
+syn keyword ngxDirectiveThirdParty pubcookie_super_debug
+syn keyword ngxDirectiveThirdParty pubcookie_set_remote_user
" Push Stream Module <https://github.com/wandenberg/nginx-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
+syn keyword ngxDirectiveThirdParty push_stream_channels_statistics
+syn keyword ngxDirectiveThirdParty push_stream_publisher
+syn keyword ngxDirectiveThirdParty push_stream_subscriber
+syn keyword ngxDirectiveThirdParty push_stream_shared_memory_size
+syn keyword ngxDirectiveThirdParty push_stream_channel_deleted_message_text
+syn keyword ngxDirectiveThirdParty push_stream_channel_inactivity_time
+syn keyword ngxDirectiveThirdParty push_stream_ping_message_text
+syn keyword ngxDirectiveThirdParty push_stream_timeout_with_body
+syn keyword ngxDirectiveThirdParty push_stream_message_ttl
+syn keyword ngxDirectiveThirdParty push_stream_max_subscribers_per_channel
+syn keyword ngxDirectiveThirdParty push_stream_max_messages_stored_per_channel
+syn keyword ngxDirectiveThirdParty push_stream_max_channel_id_length
+syn keyword ngxDirectiveThirdParty push_stream_max_number_of_channels
+syn keyword ngxDirectiveThirdParty push_stream_max_number_of_wildcard_channels
+syn keyword ngxDirectiveThirdParty push_stream_wildcard_channel_prefix
+syn keyword ngxDirectiveThirdParty push_stream_events_channel_id
+syn keyword ngxDirectiveThirdParty push_stream_channels_path
+syn keyword ngxDirectiveThirdParty push_stream_store_messages
+syn keyword ngxDirectiveThirdParty push_stream_channel_info_on_publish
+syn keyword ngxDirectiveThirdParty push_stream_authorized_channels_only
+syn keyword ngxDirectiveThirdParty push_stream_header_template_file
+syn keyword ngxDirectiveThirdParty push_stream_header_template
+syn keyword ngxDirectiveThirdParty push_stream_message_template
+syn keyword ngxDirectiveThirdParty push_stream_footer_template
+syn keyword ngxDirectiveThirdParty push_stream_wildcard_channel_max_qtd
+syn keyword ngxDirectiveThirdParty push_stream_ping_message_interval
+syn keyword ngxDirectiveThirdParty push_stream_subscriber_connection_ttl
+syn keyword ngxDirectiveThirdParty push_stream_longpolling_connection_ttl
+syn keyword ngxDirectiveThirdParty push_stream_websocket_allow_publish
+syn keyword ngxDirectiveThirdParty push_stream_last_received_message_time
+syn keyword ngxDirectiveThirdParty push_stream_last_received_message_tag
+syn keyword ngxDirectiveThirdParty push_stream_last_event_id
+syn keyword ngxDirectiveThirdParty push_stream_user_agent
+syn keyword ngxDirectiveThirdParty push_stream_padding_by_user_agent
+syn keyword ngxDirectiveThirdParty push_stream_allowed_origins
+syn keyword ngxDirectiveThirdParty push_stream_allow_connections_to_events_channel
" rDNS Module <https://github.com/flant/nginx-http-rdns>
" 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
+syn keyword ngxDirectiveThirdParty rdns
+syn keyword ngxDirectiveThirdParty rdns_allow
+syn keyword ngxDirectiveThirdParty rdns_deny
" RDS CSV Module <https://github.com/openresty/rds-csv-nginx-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
+syn keyword ngxDirectiveThirdParty rds_csv
+syn keyword ngxDirectiveThirdParty rds_csv_row_terminator
+syn keyword ngxDirectiveThirdParty rds_csv_field_separator
+syn keyword ngxDirectiveThirdParty rds_csv_field_name_header
+syn keyword ngxDirectiveThirdParty rds_csv_content_type
+syn keyword ngxDirectiveThirdParty rds_csv_buffer_size
" RDS JSON Module <https://github.com/openresty/rds-json-nginx-module>
" An output filter that formats Resty DBD Streams generated by ngx_drizzle and others to JSON
-syn keyword ngxDirectiveThirdParty contained rds_json
-syn keyword ngxDirectiveThirdParty contained rds_json_buffer_size
-syn keyword ngxDirectiveThirdParty contained rds_json_format
-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
+syn keyword ngxDirectiveThirdParty rds_json
+syn keyword ngxDirectiveThirdParty rds_json_buffer_size
+syn keyword ngxDirectiveThirdParty rds_json_format
+syn keyword ngxDirectiveThirdParty rds_json_root
+syn keyword ngxDirectiveThirdParty rds_json_success_property
+syn keyword ngxDirectiveThirdParty rds_json_user_property
+syn keyword ngxDirectiveThirdParty rds_json_errcode_key
+syn keyword ngxDirectiveThirdParty rds_json_errstr_key
+syn keyword ngxDirectiveThirdParty rds_json_ret
+syn keyword ngxDirectiveThirdParty rds_json_content_type
" Redis Module <https://www.nginx.com/resources/wiki/modules/redis/>
" 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
+syn keyword ngxDirectiveThirdParty redis_pass
+syn keyword ngxDirectiveThirdParty redis_bind
+syn keyword ngxDirectiveThirdParty redis_connect_timeout
+syn keyword ngxDirectiveThirdParty redis_read_timeout
+syn keyword ngxDirectiveThirdParty redis_send_timeout
+syn keyword ngxDirectiveThirdParty redis_buffer_size
+syn keyword ngxDirectiveThirdParty redis_next_upstream
+syn keyword ngxDirectiveThirdParty redis_gzip_flag
" Redis 2 Module <https://github.com/openresty/redis2-nginx-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
+syn keyword ngxDirectiveThirdParty redis2_query
+syn keyword ngxDirectiveThirdParty redis2_raw_query
+syn keyword ngxDirectiveThirdParty redis2_raw_queries
+syn keyword ngxDirectiveThirdParty redis2_literal_raw_query
+syn keyword ngxDirectiveThirdParty redis2_pass
+syn keyword ngxDirectiveThirdParty redis2_connect_timeout
+syn keyword ngxDirectiveThirdParty redis2_send_timeout
+syn keyword ngxDirectiveThirdParty redis2_read_timeout
+syn keyword ngxDirectiveThirdParty redis2_buffer_size
+syn keyword ngxDirectiveThirdParty redis2_next_upstream
" Replace Filter Module <https://github.com/openresty/replace-filter-nginx-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
+syn keyword ngxDirectiveThirdParty replace_filter
+syn keyword ngxDirectiveThirdParty replace_filter_types
+syn keyword ngxDirectiveThirdParty replace_filter_max_buffered_size
+syn keyword ngxDirectiveThirdParty replace_filter_last_modified
+syn keyword ngxDirectiveThirdParty replace_filter_skip
" Roboo Module <https://github.com/yuri-gushin/Roboo>
" HTTP Robot Mitigator
" RRD Graph Module <https://www.nginx.com/resources/wiki/modules/rrd_graph/>
" This module provides an HTTP interface to RRDtool's graphing facilities.
-syn keyword ngxDirectiveThirdParty contained rrd_graph
-syn keyword ngxDirectiveThirdParty contained rrd_graph_root
+syn keyword ngxDirectiveThirdParty rrd_graph
+syn keyword ngxDirectiveThirdParty rrd_graph_root
" RTMP Module <https://github.com/arut/nginx-rtmp-module>
" NGINX-based Media Streaming Server
-syn keyword ngxDirectiveThirdParty contained rtmp
-" syn keyword ngxDirectiveThirdParty contained server
-" syn keyword ngxDirectiveThirdParty contained listen
-syn keyword ngxDirectiveThirdParty contained application
-" syn keyword ngxDirectiveThirdParty contained timeout
-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 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 record
-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 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 rtmp
+" syn keyword ngxDirectiveThirdParty server
+" syn keyword ngxDirectiveThirdParty listen
+syn keyword ngxDirectiveThirdParty application
+" syn keyword ngxDirectiveThirdParty timeout
+syn keyword ngxDirectiveThirdParty ping
+syn keyword ngxDirectiveThirdParty ping_timeout
+syn keyword ngxDirectiveThirdParty max_streams
+syn keyword ngxDirectiveThirdParty ack_window
+syn keyword ngxDirectiveThirdParty chunk_size
+syn keyword ngxDirectiveThirdParty max_queue
+syn keyword ngxDirectiveThirdParty max_message
+syn keyword ngxDirectiveThirdParty out_queue
+syn keyword ngxDirectiveThirdParty out_cork
+" syn keyword ngxDirectiveThirdParty allow
+" syn keyword ngxDirectiveThirdParty deny
+syn keyword ngxDirectiveThirdParty exec_push
+syn keyword ngxDirectiveThirdParty exec_pull
+syn keyword ngxDirectiveThirdParty exec
+syn keyword ngxDirectiveThirdParty exec_options
+syn keyword ngxDirectiveThirdParty exec_static
+syn keyword ngxDirectiveThirdParty exec_kill_signal
+syn keyword ngxDirectiveThirdParty respawn
+syn keyword ngxDirectiveThirdParty respawn_timeout
+syn keyword ngxDirectiveThirdParty exec_publish
+syn keyword ngxDirectiveThirdParty exec_play
+syn keyword ngxDirectiveThirdParty exec_play_done
+syn keyword ngxDirectiveThirdParty exec_publish_done
+syn keyword ngxDirectiveThirdParty exec_record_done
+syn keyword ngxDirectiveThirdParty live
+syn keyword ngxDirectiveThirdParty meta
+syn keyword ngxDirectiveThirdParty interleave
+syn keyword ngxDirectiveThirdParty wait_key
+syn keyword ngxDirectiveThirdParty wait_video
+syn keyword ngxDirectiveThirdParty publish_notify
+syn keyword ngxDirectiveThirdParty drop_idle_publisher
+syn keyword ngxDirectiveThirdParty sync
+syn keyword ngxDirectiveThirdParty play_restart
+syn keyword ngxDirectiveThirdParty idle_streams
+syn keyword ngxDirectiveThirdParty record
+syn keyword ngxDirectiveThirdParty record_path
+syn keyword ngxDirectiveThirdParty record_suffix
+syn keyword ngxDirectiveThirdParty record_unique
+syn keyword ngxDirectiveThirdParty record_append
+syn keyword ngxDirectiveThirdParty record_lock
+syn keyword ngxDirectiveThirdParty record_max_size
+syn keyword ngxDirectiveThirdParty record_max_frames
+syn keyword ngxDirectiveThirdParty record_interval
+syn keyword ngxDirectiveThirdParty recorder
+syn keyword ngxDirectiveThirdParty record_notify
+syn keyword ngxDirectiveThirdParty play
+syn keyword ngxDirectiveThirdParty play_temp_path
+syn keyword ngxDirectiveThirdParty play_local_path
+syn keyword ngxDirectiveThirdParty pull
+syn keyword ngxDirectiveThirdParty push
+syn keyword ngxDirectiveThirdParty push_reconnect
+syn keyword ngxDirectiveThirdParty session_relay
+syn keyword ngxDirectiveThirdParty on_connect
+syn keyword ngxDirectiveThirdParty on_play
+syn keyword ngxDirectiveThirdParty on_publish
+syn keyword ngxDirectiveThirdParty on_done
+syn keyword ngxDirectiveThirdParty on_play_done
+syn keyword ngxDirectiveThirdParty on_publish_done
+syn keyword ngxDirectiveThirdParty on_record_done
+syn keyword ngxDirectiveThirdParty on_update
+syn keyword ngxDirectiveThirdParty notify_update_timeout
+syn keyword ngxDirectiveThirdParty notify_update_strict
+syn keyword ngxDirectiveThirdParty notify_relay_redirect
+syn keyword ngxDirectiveThirdParty notify_method
+syn keyword ngxDirectiveThirdParty hls
+syn keyword ngxDirectiveThirdParty hls_path
+syn keyword ngxDirectiveThirdParty hls_fragment
+syn keyword ngxDirectiveThirdParty hls_playlist_length
+syn keyword ngxDirectiveThirdParty hls_sync
+syn keyword ngxDirectiveThirdParty hls_continuous
+syn keyword ngxDirectiveThirdParty hls_nested
+syn keyword ngxDirectiveThirdParty hls_base_url
+syn keyword ngxDirectiveThirdParty hls_cleanup
+syn keyword ngxDirectiveThirdParty hls_fragment_naming
+syn keyword ngxDirectiveThirdParty hls_fragment_slicing
+syn keyword ngxDirectiveThirdParty hls_variant
+syn keyword ngxDirectiveThirdParty hls_type
+syn keyword ngxDirectiveThirdParty hls_keys
+syn keyword ngxDirectiveThirdParty hls_key_path
+syn keyword ngxDirectiveThirdParty hls_key_url
+syn keyword ngxDirectiveThirdParty hls_fragments_per_key
+syn keyword ngxDirectiveThirdParty dash
+syn keyword ngxDirectiveThirdParty dash_path
+syn keyword ngxDirectiveThirdParty dash_fragment
+syn keyword ngxDirectiveThirdParty dash_playlist_length
+syn keyword ngxDirectiveThirdParty dash_nested
+syn keyword ngxDirectiveThirdParty dash_cleanup
+" syn keyword ngxDirectiveThirdParty access_log
+" syn keyword ngxDirectiveThirdParty log_format
+syn keyword ngxDirectiveThirdParty max_connections
+syn keyword ngxDirectiveThirdParty rtmp_stat
+syn keyword ngxDirectiveThirdParty rtmp_stat_stylesheet
+syn keyword ngxDirectiveThirdParty rtmp_auto_push
+syn keyword ngxDirectiveThirdParty rtmp_auto_push_reconnect
+syn keyword ngxDirectiveThirdParty rtmp_socket_dir
+syn keyword ngxDirectiveThirdParty rtmp_control
" RTMPT Module <https://github.com/kwojtek/nginx-rtmpt-proxy-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
+syn keyword ngxDirectiveThirdParty rtmpt_proxy_target
+syn keyword ngxDirectiveThirdParty rtmpt_proxy_rtmp_timeout
+syn keyword ngxDirectiveThirdParty rtmpt_proxy_http_timeout
+syn keyword ngxDirectiveThirdParty rtmpt_proxy
+syn keyword ngxDirectiveThirdParty rtmpt_proxy_stat
+syn keyword ngxDirectiveThirdParty rtmpt_proxy_stylesheet
" Syntactically Awesome Module <https://github.com/mneudert/sass-nginx-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
+syn keyword ngxDirectiveThirdParty sass_compile
+syn keyword ngxDirectiveThirdParty sass_error_log
+syn keyword ngxDirectiveThirdParty sass_include_path
+syn keyword ngxDirectiveThirdParty sass_indent
+syn keyword ngxDirectiveThirdParty sass_is_indented_syntax
+syn keyword ngxDirectiveThirdParty sass_linefeed
+syn keyword ngxDirectiveThirdParty sass_precision
+syn keyword ngxDirectiveThirdParty sass_output_style
+syn keyword ngxDirectiveThirdParty sass_source_comments
+syn keyword ngxDirectiveThirdParty sass_source_map_embed
" Secure Download Module <https://www.nginx.com/resources/wiki/modules/secure_download/>
" 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
+syn keyword ngxDirectiveThirdParty secure_download
+syn keyword ngxDirectiveThirdParty secure_download_secret
+syn keyword ngxDirectiveThirdParty secure_download_path_mode
" Selective Cache Purge Module <https://github.com/wandenberg/nginx-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
+syn keyword ngxDirectiveThirdParty selective_cache_purge_redis_unix_socket
+syn keyword ngxDirectiveThirdParty selective_cache_purge_redis_host
+syn keyword ngxDirectiveThirdParty selective_cache_purge_redis_port
+syn keyword ngxDirectiveThirdParty selective_cache_purge_redis_database
+syn keyword ngxDirectiveThirdParty selective_cache_purge_query
" Set cconv Module <https://github.com/liseen/set-cconv-nginx-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
+syn keyword ngxDirectiveThirdParty set_cconv_to_simp
+syn keyword ngxDirectiveThirdParty set_cconv_to_trad
+syn keyword ngxDirectiveThirdParty set_pinyin_to_normal
" Set Hash Module <https://github.com/simpl/ngx_http_set_hash>
" 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
+syn keyword ngxDirectiveThirdParty set_md5
+syn keyword ngxDirectiveThirdParty set_md5_upper
+syn keyword ngxDirectiveThirdParty set_murmur2
+syn keyword ngxDirectiveThirdParty set_murmur2_upper
+syn keyword ngxDirectiveThirdParty set_sha1
+syn keyword ngxDirectiveThirdParty set_sha1_upper
" Set Lang Module <https://github.com/simpl/ngx_http_set_lang>
" 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
+syn keyword ngxDirectiveThirdParty set_lang
+syn keyword ngxDirectiveThirdParty set_lang_method
+syn keyword ngxDirectiveThirdParty lang_cookie
+syn keyword ngxDirectiveThirdParty lang_get_var
+syn keyword ngxDirectiveThirdParty lang_list
+syn keyword ngxDirectiveThirdParty lang_post_var
+syn keyword ngxDirectiveThirdParty lang_host
+syn keyword ngxDirectiveThirdParty lang_referer
" Set Misc Module <https://github.com/openresty/set-misc-nginx-module>
" Various set_xxx directives added to nginx's rewrite module
-syn keyword ngxDirectiveThirdParty contained set_if_empty
-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_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 set_if_empty
+syn keyword ngxDirectiveThirdParty set_quote_sql_str
+syn keyword ngxDirectiveThirdParty set_quote_pgsql_str
+syn keyword ngxDirectiveThirdParty set_quote_json_str
+syn keyword ngxDirectiveThirdParty set_unescape_uri
+syn keyword ngxDirectiveThirdParty set_escape_uri
+syn keyword ngxDirectiveThirdParty set_hashed_upstream
+syn keyword ngxDirectiveThirdParty set_encode_base32
+syn keyword ngxDirectiveThirdParty set_base32_padding
+syn keyword ngxDirectiveThirdParty set_misc_base32_padding
+syn keyword ngxDirectiveThirdParty set_base32_alphabet
+syn keyword ngxDirectiveThirdParty set_decode_base32
+syn keyword ngxDirectiveThirdParty set_encode_base64
+syn keyword ngxDirectiveThirdParty set_decode_base64
+syn keyword ngxDirectiveThirdParty set_encode_hex
+syn keyword ngxDirectiveThirdParty set_decode_hex
+syn keyword ngxDirectiveThirdParty set_sha1
+syn keyword ngxDirectiveThirdParty set_md5
+syn keyword ngxDirectiveThirdParty set_hmac_sha1
+syn keyword ngxDirectiveThirdParty set_random
+syn keyword ngxDirectiveThirdParty set_secure_random_alphanum
+syn keyword ngxDirectiveThirdParty set_secure_random_lcalpha
+syn keyword ngxDirectiveThirdParty set_rotate
+syn keyword ngxDirectiveThirdParty set_local_today
+syn keyword ngxDirectiveThirdParty set_formatted_gmt_time
+syn keyword ngxDirectiveThirdParty set_formatted_local_time
" SFlow Module <https://github.com/sflow/nginx-sflow-module>
" A binary, random-sampling nginx module designed for: lightweight, centralized, continuous, real-time monitoring of very large and very busy web farms.
-syn keyword ngxDirectiveThirdParty contained sflow
+syn keyword ngxDirectiveThirdParty sflow
" Shibboleth Module <https://github.com/nginx-shib/nginx-http-shibboleth>
" Shibboleth auth request module for nginx
-syn keyword ngxDirectiveThirdParty contained shib_request
-syn keyword ngxDirectiveThirdParty contained shib_request_set
-syn keyword ngxDirectiveThirdParty contained shib_request_use_headers
+syn keyword ngxDirectiveThirdParty shib_request
+syn keyword ngxDirectiveThirdParty shib_request_set
+syn keyword ngxDirectiveThirdParty shib_request_use_headers
" Slice Module <https://github.com/alibaba/nginx-http-slice>
" 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
+" syn keyword ngxDirectiveThirdParty slice
+syn keyword ngxDirectiveThirdParty slice_arg_begin
+syn keyword ngxDirectiveThirdParty slice_arg_end
+syn keyword ngxDirectiveThirdParty slice_header
+syn keyword ngxDirectiveThirdParty slice_footer
+syn keyword ngxDirectiveThirdParty slice_header_first
+syn keyword ngxDirectiveThirdParty slice_footer_last
" SlowFS Cache Module <https://github.com/FRiCKLE/ngx_slowfs_cache/>
" Module adding ability to cache static files.
-syn keyword ngxDirectiveThirdParty contained slowfs_big_file_size
-syn keyword ngxDirectiveThirdParty contained slowfs_cache
-syn keyword ngxDirectiveThirdParty contained slowfs_cache_key
-syn keyword ngxDirectiveThirdParty contained slowfs_cache_min_uses
-syn keyword ngxDirectiveThirdParty contained slowfs_cache_path
-syn keyword ngxDirectiveThirdParty contained slowfs_cache_purge
-syn keyword ngxDirectiveThirdParty contained slowfs_cache_valid
-syn keyword ngxDirectiveThirdParty contained slowfs_temp_path
+syn keyword ngxDirectiveThirdParty slowfs_big_file_size
+syn keyword ngxDirectiveThirdParty slowfs_cache
+syn keyword ngxDirectiveThirdParty slowfs_cache_key
+syn keyword ngxDirectiveThirdParty slowfs_cache_min_uses
+syn keyword ngxDirectiveThirdParty slowfs_cache_path
+syn keyword ngxDirectiveThirdParty slowfs_cache_purge
+syn keyword ngxDirectiveThirdParty slowfs_cache_valid
+syn keyword ngxDirectiveThirdParty slowfs_temp_path
" Small Light Module <https://github.com/cubicdaiya/ngx_small_light>
" Dynamic Image Transformation Module For nginx.
-syn keyword ngxDirectiveThirdParty contained small_light
-syn keyword ngxDirectiveThirdParty contained small_light_getparam_mode
-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
+syn keyword ngxDirectiveThirdParty small_light
+syn keyword ngxDirectiveThirdParty small_light_getparam_mode
+syn keyword ngxDirectiveThirdParty small_light_material_dir
+syn keyword ngxDirectiveThirdParty small_light_pattern_define
+syn keyword ngxDirectiveThirdParty small_light_radius_max
+syn keyword ngxDirectiveThirdParty small_light_sigma_max
+syn keyword ngxDirectiveThirdParty small_light_imlib2_temp_dir
+syn keyword ngxDirectiveThirdParty small_light_buffer
" Sorted Querystring Filter Module <https://github.com/wandenberg/nginx-sorted-querystring-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
+syn keyword ngxDirectiveThirdParty sorted_querystring_filter_parameter
" Sphinx2 Module <https://github.com/reeteshranjan/sphinx2-nginx-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
+syn keyword ngxDirectiveThirdParty sphinx2_pass
+syn keyword ngxDirectiveThirdParty sphinx2_bind
+syn keyword ngxDirectiveThirdParty sphinx2_connect_timeout
+syn keyword ngxDirectiveThirdParty sphinx2_send_timeout
+syn keyword ngxDirectiveThirdParty sphinx2_buffer_size
+syn keyword ngxDirectiveThirdParty sphinx2_read_timeout
+syn keyword ngxDirectiveThirdParty sphinx2_next_upstream
" HTTP SPNEGO auth Module <https://github.com/stnoonan/spnego-http-auth-nginx-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
+syn keyword ngxDirectiveThirdParty auth_gss
+syn keyword ngxDirectiveThirdParty auth_gss_keytab
+syn keyword ngxDirectiveThirdParty auth_gss_realm
+syn keyword ngxDirectiveThirdParty auth_gss_service_name
+syn keyword ngxDirectiveThirdParty auth_gss_authorized_principal
+syn keyword ngxDirectiveThirdParty auth_gss_allow_basic_fallback
" SR Cache Module <https://github.com/openresty/srcache-nginx-module>
" Transparent subrequest-based caching layout for arbitrary nginx locations
-syn keyword ngxDirectiveThirdParty contained srcache_fetch
-syn keyword ngxDirectiveThirdParty contained srcache_fetch_skip
-syn keyword ngxDirectiveThirdParty contained srcache_store
-syn keyword ngxDirectiveThirdParty contained srcache_store_max_size
-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
+syn keyword ngxDirectiveThirdParty srcache_fetch
+syn keyword ngxDirectiveThirdParty srcache_fetch_skip
+syn keyword ngxDirectiveThirdParty srcache_store
+syn keyword ngxDirectiveThirdParty srcache_store_max_size
+syn keyword ngxDirectiveThirdParty srcache_store_skip
+syn keyword ngxDirectiveThirdParty srcache_store_statuses
+syn keyword ngxDirectiveThirdParty srcache_store_ranges
+syn keyword ngxDirectiveThirdParty srcache_header_buffer_size
+syn keyword ngxDirectiveThirdParty srcache_store_hide_header
+syn keyword ngxDirectiveThirdParty srcache_store_pass_header
+syn keyword ngxDirectiveThirdParty srcache_methods
+syn keyword ngxDirectiveThirdParty srcache_ignore_content_encoding
+syn keyword ngxDirectiveThirdParty srcache_request_cache_control
+syn keyword ngxDirectiveThirdParty srcache_response_cache_control
+syn keyword ngxDirectiveThirdParty srcache_store_no_store
+syn keyword ngxDirectiveThirdParty srcache_store_no_cache
+syn keyword ngxDirectiveThirdParty srcache_store_private
+syn keyword ngxDirectiveThirdParty srcache_default_expire
+syn keyword ngxDirectiveThirdParty srcache_max_expire
" SSSD Info Module <https://github.com/veruu/ngx_sssd_info>
" Retrives additional attributes from SSSD for current authentizated user
-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_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 sssd_info
+syn keyword ngxDirectiveThirdParty sssd_info_output_to
+syn keyword ngxDirectiveThirdParty sssd_info_groups
+syn keyword ngxDirectiveThirdParty sssd_info_group
+syn keyword ngxDirectiveThirdParty sssd_info_group_separator
+syn keyword ngxDirectiveThirdParty sssd_info_attributes
+syn keyword ngxDirectiveThirdParty sssd_info_attribute
+syn keyword ngxDirectiveThirdParty sssd_info_attribute_separator
" Static Etags Module <https://github.com/mikewest/nginx-static-etags>
" Generate etags for static content
-syn keyword ngxDirectiveThirdParty contained FileETag
+syn keyword ngxDirectiveThirdParty FileETag
" Statsd Module <https://github.com/zebrafishlabs/nginx-statsd>
" An nginx module for sending statistics to statsd
-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
+syn keyword ngxDirectiveThirdParty statsd_server
+syn keyword ngxDirectiveThirdParty statsd_sample_rate
+syn keyword ngxDirectiveThirdParty statsd_count
+syn keyword ngxDirectiveThirdParty statsd_timing
" Sticky Module <https://bitbucket.org/nginx-goodies/nginx-sticky-module-ng>
" Add a sticky cookie to be always forwarded to the same upstream server
-" syn keyword ngxDirectiveThirdParty contained sticky
+" syn keyword ngxDirectiveThirdParty sticky
" Stream Echo Module <https://github.com/openresty/stream-echo-nginx-module>
" TCP/stream echo module for NGINX (a port of ngx_http_echo_module)
-syn keyword ngxDirectiveThirdParty contained echo
-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 echo
+syn keyword ngxDirectiveThirdParty echo_duplicate
+syn keyword ngxDirectiveThirdParty echo_flush_wait
+syn keyword ngxDirectiveThirdParty echo_sleep
+syn keyword ngxDirectiveThirdParty echo_send_timeout
+syn keyword ngxDirectiveThirdParty echo_read_bytes
+syn keyword ngxDirectiveThirdParty echo_read_line
+syn keyword ngxDirectiveThirdParty echo_request_data
+syn keyword ngxDirectiveThirdParty echo_discard_request
+syn keyword ngxDirectiveThirdParty echo_read_buffer_size
+syn keyword ngxDirectiveThirdParty echo_read_timeout
+syn keyword ngxDirectiveThirdParty echo_client_error_log_level
+syn keyword ngxDirectiveThirdParty echo_lingering_close
+syn keyword ngxDirectiveThirdParty echo_lingering_time
+syn keyword ngxDirectiveThirdParty echo_lingering_timeout
" Stream Lua Module <https://github.com/openresty/stream-lua-nginx-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
+syn keyword ngxDirectiveThirdParty lua_resolver
+syn keyword ngxDirectiveThirdParty lua_resolver_timeout
+syn keyword ngxDirectiveThirdParty lua_lingering_close
+syn keyword ngxDirectiveThirdParty lua_lingering_time
+syn keyword ngxDirectiveThirdParty lua_lingering_timeout
" Stream Upsync Module <https://github.com/xiaokai-wang/nginx-stream-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 upsync_show
+syn keyword ngxDirectiveThirdParty upsync
+syn keyword ngxDirectiveThirdParty upsync_dump_path
+syn keyword ngxDirectiveThirdParty upsync_lb
+syn keyword ngxDirectiveThirdParty upsync_show
" Strip Module <https://github.com/evanmiller/mod_strip>
" Whitespace remover.
-syn keyword ngxDirectiveThirdParty contained strip
+syn keyword ngxDirectiveThirdParty strip
" Subrange Module <https://github.com/Qihoo360/ngx_http_subrange_module>
" Split one big HTTP/Range request to multiple subrange requesets
-syn keyword ngxDirectiveThirdParty contained subrange
+syn keyword ngxDirectiveThirdParty subrange
" Substitutions Module <https://www.nginx.com/resources/wiki/modules/substitutions/>
" 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
+syn keyword ngxDirectiveThirdParty subs_filter
+syn keyword ngxDirectiveThirdParty subs_filter_types
" Summarizer Module <https://github.com/reeteshranjan/summarizer-nginx-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
+syn keyword ngxDirectiveThirdParty smrzr_filename
+syn keyword ngxDirectiveThirdParty smrzr_ratio
" Supervisord Module <https://github.com/FRiCKLE/ngx_supervisord/>
" Module providing nginx with API to communicate with supervisord and manage (start/stop) backends on-demand.
-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
+syn keyword ngxDirectiveThirdParty supervisord
+syn keyword ngxDirectiveThirdParty supervisord_inherit_backend_status
+syn keyword ngxDirectiveThirdParty supervisord_name
+syn keyword ngxDirectiveThirdParty supervisord_start
+syn keyword ngxDirectiveThirdParty supervisord_stop
" Tarantool Upstream Module <https://github.com/tarantool/nginx_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
+syn keyword ngxDirectiveThirdParty tnt_pass
+syn keyword ngxDirectiveThirdParty tnt_http_methods
+syn keyword ngxDirectiveThirdParty tnt_http_rest_methods
+syn keyword ngxDirectiveThirdParty tnt_pass_http_request
+syn keyword ngxDirectiveThirdParty tnt_pass_http_request_buffer_size
+syn keyword ngxDirectiveThirdParty tnt_method
+syn keyword ngxDirectiveThirdParty tnt_http_allowed_methods - experemental
+syn keyword ngxDirectiveThirdParty tnt_send_timeout
+syn keyword ngxDirectiveThirdParty tnt_read_timeout
+syn keyword ngxDirectiveThirdParty tnt_buffer_size
+syn keyword ngxDirectiveThirdParty tnt_next_upstream
+syn keyword ngxDirectiveThirdParty tnt_connect_timeout
+syn keyword ngxDirectiveThirdParty tnt_next_upstream
+syn keyword ngxDirectiveThirdParty tnt_next_upstream_tries
+syn keyword ngxDirectiveThirdParty tnt_next_upstream_timeout
" TCP Proxy Module <http://yaoweibin.github.io/nginx_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
+syn keyword ngxDirectiveBlock tcp
+" syn keyword ngxDirectiveThirdParty server
+" syn keyword ngxDirectiveThirdParty listen
+" syn keyword ngxDirectiveThirdParty allow
+" syn keyword ngxDirectiveThirdParty deny
+" syn keyword ngxDirectiveThirdParty so_keepalive
+" syn keyword ngxDirectiveThirdParty tcp_nodelay
+" syn keyword ngxDirectiveThirdParty timeout
+" syn keyword ngxDirectiveThirdParty server_name
+" syn keyword ngxDirectiveThirdParty resolver
+" syn keyword ngxDirectiveThirdParty resolver_timeout
+" syn keyword ngxDirectiveThirdParty upstream
+syn keyword ngxDirectiveThirdParty check
+syn keyword ngxDirectiveThirdParty check_http_send
+syn keyword ngxDirectiveThirdParty check_http_expect_alive
+syn keyword ngxDirectiveThirdParty check_smtp_send
+syn keyword ngxDirectiveThirdParty check_smtp_expect_alive
+syn keyword ngxDirectiveThirdParty check_shm_size
+syn keyword ngxDirectiveThirdParty check_status
+" syn keyword ngxDirectiveThirdParty ip_hash
+" syn keyword ngxDirectiveThirdParty proxy_pass
+" syn keyword ngxDirectiveThirdParty proxy_buffer
+" syn keyword ngxDirectiveThirdParty proxy_connect_timeout
+" syn keyword ngxDirectiveThirdParty proxy_read_timeout
+syn keyword ngxDirectiveThirdParty proxy_write_timeout
" Testcookie Module <https://github.com/kyprizel/testcookie-nginx-module>
" NGINX module for L7 DDoS attack mitigation
-syn keyword ngxDirectiveThirdParty contained testcookie
-syn keyword ngxDirectiveThirdParty contained testcookie_name
-syn keyword ngxDirectiveThirdParty contained testcookie_domain
-syn keyword ngxDirectiveThirdParty contained testcookie_expires
-syn keyword ngxDirectiveThirdParty contained testcookie_path
-syn keyword ngxDirectiveThirdParty contained testcookie_secret
-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
+syn keyword ngxDirectiveThirdParty testcookie
+syn keyword ngxDirectiveThirdParty testcookie_name
+syn keyword ngxDirectiveThirdParty testcookie_domain
+syn keyword ngxDirectiveThirdParty testcookie_expires
+syn keyword ngxDirectiveThirdParty testcookie_path
+syn keyword ngxDirectiveThirdParty testcookie_secret
+syn keyword ngxDirectiveThirdParty testcookie_session
+syn keyword ngxDirectiveThirdParty testcookie_arg
+syn keyword ngxDirectiveThirdParty testcookie_max_attempts
+syn keyword ngxDirectiveThirdParty testcookie_p3p
+syn keyword ngxDirectiveThirdParty testcookie_fallback
+syn keyword ngxDirectiveThirdParty testcookie_whitelist
+syn keyword ngxDirectiveThirdParty testcookie_pass
+syn keyword ngxDirectiveThirdParty testcookie_redirect_via_refresh
+syn keyword ngxDirectiveThirdParty testcookie_refresh_template
+syn keyword ngxDirectiveThirdParty testcookie_refresh_status
+syn keyword ngxDirectiveThirdParty testcookie_deny_keepalive
+syn keyword ngxDirectiveThirdParty testcookie_get_only
+syn keyword ngxDirectiveThirdParty testcookie_https_location
+syn keyword ngxDirectiveThirdParty testcookie_refresh_encrypt_cookie
+syn keyword ngxDirectiveThirdParty testcookie_refresh_encrypt_cookie_key
+syn keyword ngxDirectiveThirdParty testcookie_refresh_encrypt_iv
+syn keyword ngxDirectiveThirdParty testcookie_internal
+syn keyword ngxDirectiveThirdParty testcookie_httponly_flag
+syn keyword ngxDirectiveThirdParty testcookie_secure_flag
" Types Filter Module <https://github.com/flygoast/ngx_http_types_filter>
" Change the `Content-Type` output header depending on an extension variable according to a condition specified in the 'if' clause.
-syn keyword ngxDirectiveThirdParty contained types_filter
-syn keyword ngxDirectiveThirdParty contained types_filter_use_default
+syn keyword ngxDirectiveThirdParty types_filter
+syn keyword ngxDirectiveThirdParty types_filter_use_default
" Unzip Module <https://github.com/youzee/nginx-unzip-module>
" Enabling fetching of files that are stored in zipped archives.
-syn keyword ngxDirectiveThirdParty contained file_in_unzip_archivefile
-syn keyword ngxDirectiveThirdParty contained file_in_unzip_extract
-syn keyword ngxDirectiveThirdParty contained file_in_unzip
+syn keyword ngxDirectiveThirdParty file_in_unzip_archivefile
+syn keyword ngxDirectiveThirdParty file_in_unzip_extract
+syn keyword ngxDirectiveThirdParty file_in_unzip
" Upload Progress Module <https://www.nginx.com/resources/wiki/modules/upload_progress/>
" 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
+syn keyword ngxDirectiveThirdParty upload_progress
+syn keyword ngxDirectiveThirdParty track_uploads
+syn keyword ngxDirectiveThirdParty report_uploads
+syn keyword ngxDirectiveThirdParty upload_progress_content_type
+syn keyword ngxDirectiveThirdParty upload_progress_header
+syn keyword ngxDirectiveThirdParty upload_progress_jsonp_parameter
+syn keyword ngxDirectiveThirdParty upload_progress_json_output
+syn keyword ngxDirectiveThirdParty upload_progress_jsonp_output
+syn keyword ngxDirectiveThirdParty upload_progress_template
" Upload Module <https://www.nginx.com/resources/wiki/modules/upload/>
" 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
+syn keyword ngxDirectiveThirdParty upload_pass
+syn keyword ngxDirectiveThirdParty upload_resumable
+syn keyword ngxDirectiveThirdParty upload_store
+syn keyword ngxDirectiveThirdParty upload_state_store
+syn keyword ngxDirectiveThirdParty upload_store_access
+syn keyword ngxDirectiveThirdParty upload_set_form_field
+syn keyword ngxDirectiveThirdParty upload_aggregate_form_field
+syn keyword ngxDirectiveThirdParty upload_pass_form_field
+syn keyword ngxDirectiveThirdParty upload_cleanup
+syn keyword ngxDirectiveThirdParty upload_buffer_size
+syn keyword ngxDirectiveThirdParty upload_max_part_header_len
+syn keyword ngxDirectiveThirdParty upload_max_file_size
+syn keyword ngxDirectiveThirdParty upload_limit_rate
+syn keyword ngxDirectiveThirdParty upload_max_output_body_len
+syn keyword ngxDirectiveThirdParty upload_tame_arrays
+syn keyword ngxDirectiveThirdParty upload_pass_args
" Upstream Fair Module <https://github.com/gnosek/nginx-upstream-fair>
" The fair load balancer module for nginx http://nginx.localdomain.pl
-syn keyword ngxDirectiveThirdParty contained fair
-syn keyword ngxDirectiveThirdParty contained upstream_fair_shm_size
+syn keyword ngxDirectiveThirdParty fair
+syn keyword ngxDirectiveThirdParty upstream_fair_shm_size
" Upstream Hash Module (DEPRECATED) <http://wiki.nginx.org/NginxHttpUpstreamRequestHashModule>
" Provides simple upstream load distribution by hashing a configurable variable.
-" syn keyword ngxDirectiveDeprecated contained hash
-syn keyword ngxDirectiveDeprecated contained hash_again
+" syn keyword ngxDirectiveDeprecated hash
+syn keyword ngxDirectiveDeprecated hash_again
" Upstream Domain Resolve Module <https://www.nginx.com/resources/wiki/modules/domain_resolve/>
" A load-balancer that resolves an upstream domain name asynchronously.
-syn keyword ngxDirectiveThirdParty contained jdomain
+syn keyword ngxDirectiveThirdParty jdomain
" Upsync Module <https://github.com/weibocom/nginx-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
+syn keyword ngxDirectiveThirdParty upsync
+syn keyword ngxDirectiveThirdParty upsync_dump_path
+syn keyword ngxDirectiveThirdParty upsync_lb
+syn keyword ngxDirectiveThirdParty upstream_show
" URL Module <https://github.com/vozlt/nginx-module-url>
" Nginx url encoding converting module
-syn keyword ngxDirectiveThirdParty contained url_encoding_convert
-syn keyword ngxDirectiveThirdParty contained url_encoding_convert_from
-syn keyword ngxDirectiveThirdParty contained url_encoding_convert_to
+syn keyword ngxDirectiveThirdParty url_encoding_convert
+syn keyword ngxDirectiveThirdParty url_encoding_convert_from
+syn keyword ngxDirectiveThirdParty url_encoding_convert_to
" User Agent Module <https://github.com/alibaba/nginx-http-user-agent>
" Match browsers and crawlers
-syn keyword ngxDirectiveThirdParty contained user_agent
+syn keyword ngxDirectiveThirdParty user_agent
" Upstrema Ketama Chash Module <https://github.com/flygoast/ngx_http_upstream_ketama_chash>
" Nginx load-balancer module implementing ketama consistent hashing.
-syn keyword ngxDirectiveThirdParty contained ketama_chash
+syn keyword ngxDirectiveThirdParty ketama_chash
" Video Thumbextractor Module <https://github.com/wandenberg/nginx-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
+syn keyword ngxDirectiveThirdParty video_thumbextractor
+syn keyword ngxDirectiveThirdParty video_thumbextractor_video_filename
+syn keyword ngxDirectiveThirdParty video_thumbextractor_video_second
+syn keyword ngxDirectiveThirdParty video_thumbextractor_image_width
+syn keyword ngxDirectiveThirdParty video_thumbextractor_image_height
+syn keyword ngxDirectiveThirdParty video_thumbextractor_only_keyframe
+syn keyword ngxDirectiveThirdParty video_thumbextractor_next_time
+syn keyword ngxDirectiveThirdParty video_thumbextractor_tile_rows
+syn keyword ngxDirectiveThirdParty video_thumbextractor_tile_cols
+syn keyword ngxDirectiveThirdParty video_thumbextractor_tile_max_rows
+syn keyword ngxDirectiveThirdParty video_thumbextractor_tile_max_cols
+syn keyword ngxDirectiveThirdParty video_thumbextractor_tile_sample_interval
+syn keyword ngxDirectiveThirdParty video_thumbextractor_tile_color
+syn keyword ngxDirectiveThirdParty video_thumbextractor_tile_margin
+syn keyword ngxDirectiveThirdParty video_thumbextractor_tile_padding
+syn keyword ngxDirectiveThirdParty video_thumbextractor_threads
+syn keyword ngxDirectiveThirdParty video_thumbextractor_processes_per_worker
" Eval Module <http://www.grid.net.ru/nginx/eval.en.html>
" 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
+syn keyword ngxDirectiveThirdParty eval
+syn keyword ngxDirectiveThirdParty eval_escalate
+syn keyword ngxDirectiveThirdParty eval_override_content_type
" VTS Module <https://github.com/vozlt/nginx-module-vts>
" 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
+syn keyword ngxDirectiveThirdParty vhost_traffic_status
+syn keyword ngxDirectiveThirdParty vhost_traffic_status_zone
+syn keyword ngxDirectiveThirdParty vhost_traffic_status_display
+syn keyword ngxDirectiveThirdParty vhost_traffic_status_display_format
+syn keyword ngxDirectiveThirdParty vhost_traffic_status_display_jsonp
+syn keyword ngxDirectiveThirdParty vhost_traffic_status_filter
+syn keyword ngxDirectiveThirdParty vhost_traffic_status_filter_by_host
+syn keyword ngxDirectiveThirdParty vhost_traffic_status_filter_by_set_key
+syn keyword ngxDirectiveThirdParty vhost_traffic_status_filter_check_duplicate
+syn keyword ngxDirectiveThirdParty vhost_traffic_status_limit
+syn keyword ngxDirectiveThirdParty vhost_traffic_status_limit_traffic
+syn keyword ngxDirectiveThirdParty vhost_traffic_status_limit_traffic_by_set_key
+syn keyword ngxDirectiveThirdParty vhost_traffic_status_limit_check_duplicate
" XSS Module <https://github.com/openresty/xss-nginx-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
+syn keyword ngxDirectiveThirdParty xss_get
+syn keyword ngxDirectiveThirdParty xss_callback_arg
+syn keyword ngxDirectiveThirdParty xss_override_status
+syn keyword ngxDirectiveThirdParty xss_check_status
+syn keyword ngxDirectiveThirdParty xss_input_types
" ZIP Module <https://www.nginx.com/resources/wiki/modules/zip/>
" ZIP archiver for nginx
@@ -2152,17 +2122,15 @@
" highlight
hi link ngxComment Comment
-hi link ngxParamComment Comment
-hi link ngxListenComment Comment
hi link ngxVariable Identifier
+hi link ngxVariableBlock Identifier
hi link ngxVariableString PreProc
+hi link ngxBlock Normal
hi link ngxString String
-hi link ngxListenString String
hi link ngxBoolean Boolean
hi link ngxDirectiveBlock Statement
hi link ngxDirectiveImportant Type
-hi link ngxDirectiveListen Type
hi link ngxDirectiveControl Keyword
hi link ngxDirectiveError Constant
hi link ngxDirectiveDeprecated Error
@@ -2170,5 +2138,7 @@
hi link ngxDirectiveThirdParty Special
hi link ngxListenOptions Keyword
+hi link ngxMailProtocol Keyword
+hi link ngxSSLProtocol Keyword
let b:current_syntax = "nginx"
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.12.2.tar.gz/src/core/nginx.c
^
|
@@ -273,12 +273,6 @@
return 1;
}
- /*
- * ngx_slab_sizes_init() requires ngx_pagesize set in ngx_os_init()
- */
-
- ngx_slab_sizes_init();
-
if (ngx_add_inherited_sockets(&init_cycle) != NGX_OK) {
return 1;
}
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.12.2.tar.gz/src/core/nginx.h
^
|
@@ -9,8 +9,8 @@
#define _NGINX_H_INCLUDED_
-#define nginx_version 1013007
-#define NGINX_VERSION "1.13.7"
+#define nginx_version 1012002
+#define NGINX_VERSION "1.12.2"
#define NGINX_VER "nginx/" NGINX_VERSION
#ifdef NGX_BUILD
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.12.2.tar.gz/src/core/ngx_conf_file.c
^
|
@@ -178,7 +178,6 @@
/* open configuration file */
fd = ngx_open_file(filename->data, NGX_FILE_RDONLY, NGX_FILE_OPEN, 0);
-
if (fd == NGX_INVALID_FILE) {
ngx_conf_log_error(NGX_LOG_EMERG, cf, ngx_errno,
ngx_open_file_n " \"%s\" failed",
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.12.2.tar.gz/src/core/ngx_conf_file.h
^
|
@@ -128,7 +128,7 @@
ngx_uint_t cmd_type;
ngx_conf_handler_pt handler;
- void *handler_conf;
+ char *handler_conf;
};
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.12.2.tar.gz/src/core/ngx_connection.c
^
|
@@ -1350,49 +1350,6 @@
ngx_int_t
-ngx_tcp_nodelay(ngx_connection_t *c)
-{
- int tcp_nodelay;
-
- if (c->tcp_nodelay != NGX_TCP_NODELAY_UNSET) {
- return NGX_OK;
- }
-
- ngx_log_debug0(NGX_LOG_DEBUG_CORE, c->log, 0, "tcp_nodelay");
-
- tcp_nodelay = 1;
-
- if (setsockopt(c->fd, IPPROTO_TCP, TCP_NODELAY,
- (const void *) &tcp_nodelay, sizeof(int))
- == -1)
- {
-#if (NGX_SOLARIS)
- if (c->log_error == NGX_ERROR_INFO) {
-
- /* Solaris returns EINVAL if a socket has been shut down */
- c->log_error = NGX_ERROR_IGNORE_EINVAL;
-
- ngx_connection_error(c, ngx_socket_errno,
- "setsockopt(TCP_NODELAY) failed");
-
- c->log_error = NGX_ERROR_INFO;
-
- return NGX_ERROR;
- }
-#endif
-
- ngx_connection_error(c, ngx_socket_errno,
- "setsockopt(TCP_NODELAY) failed");
- return NGX_ERROR;
- }
-
- c->tcp_nodelay = NGX_TCP_NODELAY_SET;
-
- return NGX_OK;
-}
-
-
-ngx_int_t
ngx_connection_error(ngx_connection_t *c, ngx_err_t err, char *text)
{
ngx_uint_t level;
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.12.2.tar.gz/src/core/ngx_connection.h
^
|
@@ -214,7 +214,6 @@
void ngx_close_idle_connections(ngx_cycle_t *cycle);
ngx_int_t ngx_connection_local_sockaddr(ngx_connection_t *c, ngx_str_t *s,
ngx_uint_t port);
-ngx_int_t ngx_tcp_nodelay(ngx_connection_t *c);
ngx_int_t ngx_connection_error(ngx_connection_t *c, ngx_err_t err, char *text);
ngx_connection_t *ngx_get_connection(ngx_socket_t s, ngx_log_t *log);
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.12.2.tar.gz/src/core/ngx_cycle.c
^
|
@@ -470,6 +470,8 @@
goto shm_zone_found;
}
+ ngx_shm_free(&oshm_zone[n].shm);
+
break;
}
@@ -660,26 +662,14 @@
n = 0;
}
- if (oshm_zone[i].shm.name.len != shm_zone[n].shm.name.len) {
- continue;
- }
-
- if (ngx_strncmp(oshm_zone[i].shm.name.data,
- shm_zone[n].shm.name.data,
- oshm_zone[i].shm.name.len)
- != 0)
- {
- continue;
- }
-
- if (oshm_zone[i].tag == shm_zone[n].tag
- && oshm_zone[i].shm.size == shm_zone[n].shm.size
- && !oshm_zone[i].noreuse)
+ if (oshm_zone[i].shm.name.len == shm_zone[n].shm.name.len
+ && ngx_strncmp(oshm_zone[i].shm.name.data,
+ shm_zone[n].shm.name.data,
+ oshm_zone[i].shm.name.len)
+ == 0)
{
goto live_shm_zone;
}
-
- break;
}
ngx_shm_free(&oshm_zone[i].shm);
@@ -1134,7 +1124,9 @@
if (user != (ngx_uid_t) NGX_CONF_UNSET_UINT) {
ngx_file_info_t fi;
- if (ngx_file_info(file[i].name.data, &fi) == NGX_FILE_ERROR) {
+ if (ngx_file_info((const char *) file[i].name.data, &fi)
+ == NGX_FILE_ERROR)
+ {
ngx_log_error(NGX_LOG_EMERG, cycle->log, ngx_errno,
ngx_file_info_n " \"%s\" failed",
file[i].name.data);
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.12.2.tar.gz/src/core/ngx_file.c
^
|
@@ -622,7 +622,9 @@
{
ngx_file_info_t fi;
- if (ngx_file_info(path[i]->name.data, &fi) == NGX_FILE_ERROR) {
+ if (ngx_file_info((const char *) path[i]->name.data, &fi)
+ == NGX_FILE_ERROR)
+ {
ngx_log_error(NGX_LOG_EMERG, cycle->log, ngx_errno,
ngx_file_info_n " \"%s\" failed", path[i]->name.data);
return NGX_ERROR;
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.12.2.tar.gz/src/core/ngx_palloc.h
^
|
@@ -72,6 +72,9 @@
} ngx_pool_cleanup_file_t;
+void *ngx_alloc(size_t size, ngx_log_t *log);
+void *ngx_calloc(size_t size, ngx_log_t *log);
+
ngx_pool_t *ngx_create_pool(size_t size, ngx_log_t *log);
void ngx_destroy_pool(ngx_pool_t *pool);
void ngx_reset_pool(ngx_pool_t *pool);
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.12.2.tar.gz/src/core/ngx_parse_time.c
^
|
@@ -44,22 +44,21 @@
}
}
- for (p++; p < end; p++) {
+ for (p++; p < end; p++)
if (*p != ' ') {
break;
}
- }
if (end - p < 18) {
return NGX_ERROR;
- }
+ }
if (fmt != isoc) {
if (*p < '0' || *p > '9' || *(p + 1) < '0' || *(p + 1) > '9') {
return NGX_ERROR;
}
- day = (*p - '0') * 10 + (*(p + 1) - '0');
+ day = (*p - '0') * 10 + *(p + 1) - '0';
p += 2;
if (*p == ' ') {
@@ -133,7 +132,7 @@
}
year = (*p - '0') * 1000 + (*(p + 1) - '0') * 100
- + (*(p + 2) - '0') * 10 + (*(p + 3) - '0');
+ + (*(p + 2) - '0') * 10 + *(p + 3) - '0';
p += 4;
} else if (fmt == rfc850) {
@@ -141,7 +140,7 @@
return NGX_ERROR;
}
- year = (*p - '0') * 10 + (*(p + 1) - '0');
+ year = (*p - '0') * 10 + *(p + 1) - '0';
year += (year < 70) ? 2000 : 1900;
p += 2;
}
@@ -162,7 +161,7 @@
return NGX_ERROR;
}
- day = day * 10 + (*p++ - '0');
+ day = day * 10 + *p++ - '0';
}
if (end - p < 14) {
@@ -178,7 +177,7 @@
return NGX_ERROR;
}
- hour = (*p - '0') * 10 + (*(p + 1) - '0');
+ hour = (*p - '0') * 10 + *(p + 1) - '0';
p += 2;
if (*p++ != ':') {
@@ -189,7 +188,7 @@
return NGX_ERROR;
}
- min = (*p - '0') * 10 + (*(p + 1) - '0');
+ min = (*p - '0') * 10 + *(p + 1) - '0';
p += 2;
if (*p++ != ':') {
@@ -200,7 +199,7 @@
return NGX_ERROR;
}
- sec = (*p - '0') * 10 + (*(p + 1) - '0');
+ sec = (*p - '0') * 10 + *(p + 1) - '0';
if (fmt == isoc) {
p += 2;
@@ -217,7 +216,7 @@
}
year = (*p - '0') * 1000 + (*(p + 1) - '0') * 100
- + (*(p + 2) - '0') * 10 + (*(p + 3) - '0');
+ + (*(p + 2) - '0') * 10 + *(p + 3) - '0';
}
if (hour > 23 || min > 59 || sec > 59) {
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.12.2.tar.gz/src/core/ngx_regex.c
^
|
@@ -262,7 +262,7 @@
part = &studies->part;
elts = part->elts;
- for (i = 0; /* void */ ; i++) {
+ for (i = 0 ; /* void */ ; i++) {
if (i >= part->nelts) {
if (part->next == NULL) {
@@ -326,7 +326,7 @@
part = &ngx_pcre_studies->part;
elts = part->elts;
- for (i = 0; /* void */ ; i++) {
+ for (i = 0 ; /* void */ ; i++) {
if (i >= part->nelts) {
if (part->next == NULL) {
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.12.2.tar.gz/src/core/ngx_resolver.c
^
|
@@ -105,8 +105,6 @@
ngx_rbtree_node_t *node, ngx_rbtree_node_t *sentinel);
static ngx_int_t ngx_resolver_copy(ngx_resolver_t *r, ngx_str_t *name,
u_char *buf, u_char *src, u_char *last);
-static ngx_int_t ngx_resolver_set_timeout(ngx_resolver_t *r,
- ngx_resolver_ctx_t *ctx);
static void ngx_resolver_timeout_handler(ngx_event_t *ev);
static void ngx_resolver_free_node(ngx_resolver_t *r, ngx_resolver_node_t *rn);
static void *ngx_resolver_alloc(ngx_resolver_t *r, size_t size);
@@ -191,7 +189,6 @@
r->event->handler = ngx_resolver_resend_handler;
r->event->data = r;
r->event->log = &cf->cycle->new_log;
- r->event->cancelable = 1;
r->ident = -1;
r->resend_timeout = 5;
@@ -446,7 +443,7 @@
name.data = ngx_resolver_alloc(r, name.len);
if (name.data == NULL) {
- goto failed;
+ return NGX_ERROR;
}
if (slen == ctx->service.len) {
@@ -484,8 +481,6 @@
ngx_resolver_free(r, ctx->event);
}
-failed:
-
ngx_resolver_free(r, ctx);
return NGX_ERROR;
@@ -731,14 +726,24 @@
}
if (rn->waiting) {
- if (ngx_resolver_set_timeout(r, ctx) != NGX_OK) {
- return NGX_ERROR;
+
+ if (ctx->event == NULL && ctx->timeout) {
+ ctx->event = ngx_resolver_calloc(r, sizeof(ngx_event_t));
+ if (ctx->event == NULL) {
+ return NGX_ERROR;
+ }
+
+ ctx->event->handler = ngx_resolver_timeout_handler;
+ ctx->event->data = ctx;
+ ctx->event->log = r->log;
+ ctx->ident = -1;
+
+ ngx_add_timer(ctx->event, ctx->timeout);
}
last->next = rn->waiting;
rn->waiting = ctx;
ctx->state = NGX_AGAIN;
- ctx->async = 1;
do {
ctx->node = rn;
@@ -856,8 +861,18 @@
goto failed;
}
- if (ngx_resolver_set_timeout(r, ctx) != NGX_OK) {
- goto failed;
+ if (ctx->event == NULL && ctx->timeout) {
+ ctx->event = ngx_resolver_calloc(r, sizeof(ngx_event_t));
+ if (ctx->event == NULL) {
+ goto failed;
+ }
+
+ ctx->event->handler = ngx_resolver_timeout_handler;
+ ctx->event->data = ctx;
+ ctx->event->log = r->log;
+ ctx->ident = -1;
+
+ ngx_add_timer(ctx->event, ctx->timeout);
}
if (ngx_resolver_resend_empty(r)) {
@@ -875,7 +890,6 @@
rn->waiting = ctx;
ctx->state = NGX_AGAIN;
- ctx->async = 1;
do {
ctx->node = rn;
@@ -989,14 +1003,24 @@
}
if (rn->waiting) {
- if (ngx_resolver_set_timeout(r, ctx) != NGX_OK) {
- return NGX_ERROR;
+
+ if (ctx->event == NULL && ctx->timeout) {
+ ctx->event = ngx_resolver_calloc(r, sizeof(ngx_event_t));
+ if (ctx->event == NULL) {
+ return NGX_ERROR;
+ }
+
+ ctx->event->handler = ngx_resolver_timeout_handler;
+ ctx->event->data = ctx;
+ ctx->event->log = r->log;
+ ctx->ident = -1;
+
+ ngx_add_timer(ctx->event, ctx->timeout);
}
ctx->next = rn->waiting;
rn->waiting = ctx;
ctx->state = NGX_AGAIN;
- ctx->async = 1;
ctx->node = rn;
/* unlock addr mutex */
@@ -1060,8 +1084,18 @@
goto failed;
}
- if (ngx_resolver_set_timeout(r, ctx) != NGX_OK) {
- goto failed;
+ if (ctx->event == NULL && ctx->timeout) {
+ ctx->event = ngx_resolver_calloc(r, sizeof(ngx_event_t));
+ if (ctx->event == NULL) {
+ goto failed;
+ }
+
+ ctx->event->handler = ngx_resolver_timeout_handler;
+ ctx->event->data = ctx;
+ ctx->event->log = r->log;
+ ctx->ident = -1;
+
+ ngx_add_timer(ctx->event, ctx->timeout);
}
if (ngx_resolver_resend_empty(r)) {
@@ -1083,7 +1117,6 @@
/* unlock addr mutex */
ctx->state = NGX_AGAIN;
- ctx->async = 1;
ctx->node = rn;
return NGX_OK;
@@ -2984,7 +3017,6 @@
srv = cctx->srvs;
ctx->count--;
- ctx->async |= cctx->async;
srv->ctx = NULL;
srv->state = cctx->state;
@@ -2995,15 +3027,25 @@
addrs = ngx_resolver_calloc(r, cctx->naddrs * sizeof(ngx_addr_t));
if (addrs == NULL) {
- srv->state = NGX_ERROR;
- goto done;
+ ngx_resolve_name_done(cctx);
+
+ ctx->state = NGX_ERROR;
+ ctx->valid = ngx_time() + (r->valid ? r->valid : 10);
+
+ ctx->handler(ctx);
+ return;
}
sockaddr = ngx_resolver_alloc(r, cctx->naddrs * sizeof(ngx_sockaddr_t));
if (sockaddr == NULL) {
ngx_resolver_free(r, addrs);
- srv->state = NGX_ERROR;
- goto done;
+ ngx_resolve_name_done(cctx);
+
+ ctx->state = NGX_ERROR;
+ ctx->valid = ngx_time() + (r->valid ? r->valid : 10);
+
+ ctx->handler(ctx);
+ return;
}
for (i = 0; i < cctx->naddrs; i++) {
@@ -3020,8 +3062,6 @@
srv->naddrs = cctx->naddrs;
}
-done:
-
ngx_resolve_name_done(cctx);
if (ctx->count == 0) {
@@ -3994,30 +4034,6 @@
}
-static ngx_int_t
-ngx_resolver_set_timeout(ngx_resolver_t *r, ngx_resolver_ctx_t *ctx)
-{
- if (ctx->event || ctx->timeout == 0) {
- return NGX_OK;
- }
-
- ctx->event = ngx_resolver_calloc(r, sizeof(ngx_event_t));
- if (ctx->event == NULL) {
- return NGX_ERROR;
- }
-
- ctx->event->handler = ngx_resolver_timeout_handler;
- ctx->event->data = ctx;
- ctx->event->log = r->log;
- ctx->event->cancelable = ctx->cancelable;
- ctx->ident = -1;
-
- ngx_add_timer(ctx->event, ctx->timeout);
-
- return NGX_OK;
-}
-
-
static void
ngx_resolver_timeout_handler(ngx_event_t *ev)
{
@@ -4231,21 +4247,10 @@
ngx_resolver_addr_t *addrs;
ngx_resolver_srv_name_t *srvs;
- srvs = ctx->srvs;
- nsrvs = ctx->nsrvs;
-
naddrs = 0;
- for (i = 0; i < nsrvs; i++) {
- if (srvs[i].state == NGX_ERROR) {
- ctx->state = NGX_ERROR;
- ctx->valid = ngx_time() + (r->valid ? r->valid : 10);
-
- ctx->handler(ctx);
- return;
- }
-
- naddrs += srvs[i].naddrs;
+ for (i = 0; i < ctx->nsrvs; i++) {
+ naddrs += ctx->srvs[i].naddrs;
}
if (naddrs == 0) {
@@ -4265,6 +4270,9 @@
return;
}
+ srvs = ctx->srvs;
+ nsrvs = ctx->nsrvs;
+
i = 0;
n = 0;
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.12.2.tar.gz/src/core/ngx_resolver.h
^
|
@@ -218,9 +218,7 @@
void *data;
ngx_msec_t timeout;
- unsigned quick:1;
- unsigned async:1;
- unsigned cancelable:1;
+ ngx_uint_t quick; /* unsigned quick:1; */
ngx_uint_t recursion;
ngx_event_t *event;
};
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.12.2.tar.gz/src/core/ngx_rwlock.c
^
|
@@ -94,7 +94,7 @@
readers = *lock;
if (readers == NGX_RWLOCK_WLOCK) {
- (void) ngx_atomic_cmp_set(lock, NGX_RWLOCK_WLOCK, 0);
+ *lock = 0;
return;
}
@@ -108,15 +108,6 @@
}
}
-
-void
-ngx_rwlock_downgrade(ngx_atomic_t *lock)
-{
- if (*lock == NGX_RWLOCK_WLOCK) {
- *lock = 1;
- }
-}
-
#else
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.12.2.tar.gz/src/core/ngx_rwlock.h
^
|
@@ -16,7 +16,6 @@
void ngx_rwlock_wlock(ngx_atomic_t *lock);
void ngx_rwlock_rlock(ngx_atomic_t *lock);
void ngx_rwlock_unlock(ngx_atomic_t *lock);
-void ngx_rwlock_downgrade(ngx_atomic_t *lock);
#endif /* _NGX_RWLOCK_H_INCLUDED_ */
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.12.2.tar.gz/src/core/ngx_slab.c
^
|
@@ -83,19 +83,6 @@
void
-ngx_slab_sizes_init(void)
-{
- ngx_uint_t n;
-
- ngx_slab_max_size = ngx_pagesize / 2;
- ngx_slab_exact_size = ngx_pagesize / (8 * sizeof(uintptr_t));
- for (n = ngx_slab_exact_size; n >>= 1; ngx_slab_exact_shift++) {
- /* void */
- }
-}
-
-
-void
ngx_slab_init(ngx_slab_pool_t *pool)
{
u_char *p;
@@ -104,6 +91,16 @@
ngx_uint_t i, n, pages;
ngx_slab_page_t *slots, *page;
+ /* STUB */
+ if (ngx_slab_max_size == 0) {
+ ngx_slab_max_size = ngx_pagesize / 2;
+ ngx_slab_exact_size = ngx_pagesize / (8 * sizeof(uintptr_t));
+ for (n = ngx_slab_exact_size; n >>= 1; ngx_slab_exact_shift++) {
+ /* void */
+ }
+ }
+ /**/
+
pool->min_size = (size_t) 1 << pool->min_shift;
slots = ngx_slab_slots(pool);
@@ -184,8 +181,8 @@
ngx_slab_alloc_locked(ngx_slab_pool_t *pool, size_t size)
{
size_t s;
- uintptr_t p, m, mask, *bitmap;
- ngx_uint_t i, n, slot, shift, map;
+ uintptr_t p, n, m, mask, *bitmap;
+ ngx_uint_t i, slot, shift, map;
ngx_slab_page_t *page, *prev, *slots;
if (size > ngx_slab_max_size) {
@@ -229,7 +226,7 @@
bitmap = (uintptr_t *) ngx_slab_page_addr(pool, page);
- map = (ngx_pagesize >> shift) / (8 * sizeof(uintptr_t));
+ map = (ngx_pagesize >> shift) / (sizeof(uintptr_t) * 8);
for (n = 0; n < map; n++) {
@@ -242,7 +239,7 @@
bitmap[n] |= m;
- i = (n * 8 * sizeof(uintptr_t) + i) << shift;
+ i = (n * sizeof(uintptr_t) * 8 + i) << shift;
p = (uintptr_t) bitmap + i;
@@ -342,17 +339,11 @@
}
/* "n" elements for bitmap, plus one requested */
+ bitmap[0] = ((uintptr_t) 2 << n) - 1;
- for (i = 0; i < (n + 1) / (8 * sizeof(uintptr_t)); i++) {
- bitmap[i] = NGX_SLAB_BUSY;
- }
+ map = (ngx_pagesize >> shift) / (sizeof(uintptr_t) * 8);
- m = ((uintptr_t) 1 << ((n + 1) % (8 * sizeof(uintptr_t)))) - 1;
- bitmap[i] = m;
-
- map = (ngx_pagesize >> shift) / (8 * sizeof(uintptr_t));
-
- for (i = i + 1; i < map; i++) {
+ for (i = 1; i < map; i++) {
bitmap[i] = 0;
}
@@ -378,7 +369,7 @@
slots[slot].next = page;
- pool->stats[slot].total += 8 * sizeof(uintptr_t);
+ pool->stats[slot].total += sizeof(uintptr_t) * 8;
p = ngx_slab_page_addr(pool, page);
@@ -489,8 +480,8 @@
}
n = ((uintptr_t) p & (ngx_pagesize - 1)) >> shift;
- m = (uintptr_t) 1 << (n % (8 * sizeof(uintptr_t)));
- n /= 8 * sizeof(uintptr_t);
+ m = (uintptr_t) 1 << (n % (sizeof(uintptr_t) * 8));
+ n /= sizeof(uintptr_t) * 8;
bitmap = (uintptr_t *)
((uintptr_t) p & ~((uintptr_t) ngx_pagesize - 1));
@@ -515,16 +506,13 @@
n = 1;
}
- i = n / (8 * sizeof(uintptr_t));
- m = ((uintptr_t) 1 << (n % (8 * sizeof(uintptr_t)))) - 1;
-
- if (bitmap[i] & ~m) {
+ if (bitmap[0] & ~(((uintptr_t) 1 << n) - 1)) {
goto done;
}
- map = (ngx_pagesize >> shift) / (8 * sizeof(uintptr_t));
+ map = (ngx_pagesize >> shift) / (sizeof(uintptr_t) * 8);
- for (i = i + 1; i < map; i++) {
+ for (i = 1; i < map; i++) {
if (bitmap[i]) {
goto done;
}
@@ -570,7 +558,7 @@
ngx_slab_free_pages(pool, page, 1);
- pool->stats[slot].total -= 8 * sizeof(uintptr_t);
+ pool->stats[slot].total -= sizeof(uintptr_t) * 8;
goto done;
}
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.12.2.tar.gz/src/core/ngx_slab.h
^
|
@@ -59,7 +59,6 @@
} ngx_slab_pool_t;
-void ngx_slab_sizes_init(void);
void ngx_slab_init(ngx_slab_pool_t *pool);
void *ngx_slab_alloc(ngx_slab_pool_t *pool, size_t size);
void *ngx_slab_alloc_locked(ngx_slab_pool_t *pool, size_t size);
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.12.2.tar.gz/src/core/ngx_string.c
^
|
@@ -194,7 +194,7 @@
slen = (size_t) -1;
while (*fmt >= '0' && *fmt <= '9') {
- width = width * 10 + (*fmt++ - '0');
+ width = width * 10 + *fmt++ - '0';
}
@@ -227,7 +227,7 @@
fmt++;
while (*fmt >= '0' && *fmt <= '9') {
- frac_width = frac_width * 10 + (*fmt++ - '0');
+ frac_width = frac_width * 10 + *fmt++ - '0';
}
break;
@@ -1671,7 +1671,7 @@
state = sw_usual;
if (ch >= '0' && ch <= '9') {
- ch = (u_char) ((decoded << 4) + (ch - '0'));
+ ch = (u_char) ((decoded << 4) + ch - '0');
if (type & NGX_UNESCAPE_REDIRECT) {
if (ch > '%' && ch < 0x7f) {
@@ -1691,7 +1691,7 @@
c = (u_char) (ch | 0x20);
if (c >= 'a' && c <= 'f') {
- ch = (u_char) ((decoded << 4) + (c - 'a') + 10);
+ ch = (u_char) ((decoded << 4) + c - 'a' + 10);
if (type & NGX_UNESCAPE_URI) {
if (ch == '?') {
@@ -1824,19 +1824,7 @@
len++;
} else if (ch <= 0x1f) {
-
- switch (ch) {
- case '\n':
- case '\r':
- case '\t':
- case '\b':
- case '\f':
- len++;
- break;
-
- default:
- len += sizeof("\\u001F") - 2;
- }
+ len += sizeof("\\u001F") - 2;
}
size--;
@@ -1857,37 +1845,12 @@
*dst++ = ch;
} else {
- *dst++ = '\\';
-
- switch (ch) {
- case '\n':
- *dst++ = 'n';
- break;
-
- case '\r':
- *dst++ = 'r';
- break;
+ *dst++ = '\\'; *dst++ = 'u'; *dst++ = '0'; *dst++ = '0';
+ *dst++ = '0' + (ch >> 4);
- case '\t':
- *dst++ = 't';
- break;
-
- case '\b':
- *dst++ = 'b';
- break;
-
- case '\f':
- *dst++ = 'f';
- break;
+ ch &= 0xf;
- default:
- *dst++ = 'u'; *dst++ = '0'; *dst++ = '0';
- *dst++ = '0' + (ch >> 4);
-
- ch &= 0xf;
-
- *dst++ = (ch < 10) ? ('0' + ch) : ('A' + ch - 10);
- }
+ *dst++ = (ch < 10) ? ('0' + ch) : ('A' + ch - 10);
}
size--;
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.12.2.tar.gz/src/core/ngx_times.c
^
|
@@ -300,39 +300,27 @@
ngx_gmtime(time_t t, ngx_tm_t *tp)
{
ngx_int_t yday;
- ngx_uint_t sec, min, hour, mday, mon, year, wday, days, leap;
+ ngx_uint_t n, sec, min, hour, mday, mon, year, wday, days, leap;
/* the calculation is valid for positive time_t only */
- if (t < 0) {
- t = 0;
- }
+ n = (ngx_uint_t) t;
- days = t / 86400;
- sec = t % 86400;
-
- /*
- * no more than 4 year digits supported,
- * truncate to December 31, 9999, 23:59:59
- */
-
- if (days > 2932896) {
- days = 2932896;
- sec = 86399;
- }
+ days = n / 86400;
/* January 1, 1970 was Thursday */
wday = (4 + days) % 7;
- hour = sec / 3600;
- sec %= 3600;
- min = sec / 60;
- sec %= 60;
+ n %= 86400;
+ hour = n / 3600;
+ n %= 3600;
+ min = n / 60;
+ sec = n % 60;
/*
* the algorithm based on Gauss' formula,
- * see src/core/ngx_parse_time.c
+ * see src/http/ngx_http_parse_time.c
*/
/* days since March 1, 1 BC */
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.12.2.tar.gz/src/event/ngx_event.h
^
|
@@ -152,12 +152,12 @@
ngx_event_handler_pt handler;
ngx_file_t *file;
- ngx_fd_t fd;
-
#if (NGX_HAVE_AIO_SENDFILE || NGX_COMPAT)
ssize_t (*preload_handler)(ngx_buf_t *file);
#endif
+ ngx_fd_t fd;
+
#if (NGX_HAVE_EVENTFD)
int64_t res;
#endif
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.12.2.tar.gz/src/event/ngx_event_openssl.c
^
|
@@ -323,12 +323,6 @@
SSL_CTX_set_options(ssl->ctx, SSL_OP_NO_TLSv1_2);
}
#endif
-#ifdef SSL_OP_NO_TLSv1_3
- SSL_CTX_clear_options(ssl->ctx, SSL_OP_NO_TLSv1_3);
- if (!(protocols & NGX_SSL_TLSv1_3)) {
- SSL_CTX_set_options(ssl->ctx, SSL_OP_NO_TLSv1_3);
- }
-#endif
#ifdef SSL_OP_NO_COMPRESSION
SSL_CTX_set_options(ssl->ctx, SSL_OP_NO_COMPRESSION);
@@ -837,9 +831,7 @@
BIO *rbio, *wbio;
ngx_connection_t *c;
- if ((where & SSL_CB_HANDSHAKE_START)
- && SSL_is_server((ngx_ssl_conn_t *) ssl_conn))
- {
+ if (where & SSL_CB_HANDSHAKE_START) {
c = ngx_ssl_get_connection((ngx_ssl_conn_t *) ssl_conn);
if (c->ssl->handshaked) {
@@ -924,7 +916,6 @@
cln->data = passwords;
fd = ngx_open_file(file->data, NGX_FILE_RDONLY, NGX_FILE_OPEN, 0);
-
if (fd == NGX_INVALID_FILE) {
ngx_conf_log_error(NGX_LOG_EMERG, cf, ngx_errno,
ngx_open_file_n " \"%s\" failed", file->data);
@@ -1091,7 +1082,7 @@
* maximum interoperability.
*/
-#if (defined SSL_CTX_set1_curves_list || defined SSL_CTRL_SET_CURVES_LIST)
+#ifdef SSL_CTRL_SET_CURVES_LIST
/*
* OpenSSL 1.0.2+ allows configuring a curve list instead of a single
@@ -1301,7 +1292,7 @@
#ifdef SSL3_FLAGS_NO_RENEGOTIATE_CIPHERS
/* initial handshake done, disable renegotiation (CVE-2009-3555) */
- if (c->ssl->connection->s3 && SSL_is_server(c->ssl->connection)) {
+ if (c->ssl->connection->s3) {
c->ssl->connection->s3->flags |= SSL3_FLAGS_NO_RENEGOTIATE_CIPHERS;
}
@@ -2906,9 +2897,7 @@
file.name = path[i];
file.log = cf->log;
- file.fd = ngx_open_file(file.name.data, NGX_FILE_RDONLY,
- NGX_FILE_OPEN, 0);
-
+ file.fd = ngx_open_file(file.name.data, NGX_FILE_RDONLY, 0, 0);
if (file.fd == NGX_INVALID_FILE) {
ngx_conf_log_error(NGX_LOG_EMERG, cf, ngx_errno,
ngx_open_file_n " \"%V\" failed", &file.name);
@@ -3131,7 +3120,7 @@
{
if (paths) {
ngx_log_error(NGX_LOG_WARN, ssl->log, 0,
- "\"ssl_session_ticket_key\" ignored, not supported");
+ "\"ssl_session_ticket_keys\" ignored, not supported");
}
return NGX_OK;
@@ -3551,22 +3540,13 @@
{
#ifdef SSL_CTRL_SET_TLSEXT_HOSTNAME
- size_t len;
- const char *name;
-
- name = SSL_get_servername(c->ssl->connection, TLSEXT_NAMETYPE_host_name);
-
- if (name) {
- len = ngx_strlen(name);
-
- s->len = len;
- s->data = ngx_pnalloc(pool, len);
- if (s->data == NULL) {
- return NGX_ERROR;
- }
-
- ngx_memcpy(s->data, name, len);
+ const char *servername;
+ servername = SSL_get_servername(c->ssl->connection,
+ TLSEXT_NAMETYPE_host_name);
+ if (servername) {
+ s->data = (u_char *) servername;
+ s->len = ngx_strlen(servername);
return NGX_OK;
}
@@ -3669,36 +3649,6 @@
return NGX_OK;
}
-
-
-ngx_int_t
-ngx_ssl_get_escaped_certificate(ngx_connection_t *c, ngx_pool_t *pool,
- ngx_str_t *s)
-{
- ngx_str_t cert;
- uintptr_t n;
-
- if (ngx_ssl_get_raw_certificate(c, pool, &cert) != NGX_OK) {
- return NGX_ERROR;
- }
-
- if (cert.len == 0) {
- s->len = 0;
- return NGX_OK;
- }
-
- n = ngx_escape_uri(NULL, cert.data, cert.len, NGX_ESCAPE_URI_COMPONENT);
-
- s->len = cert.len + n * 2;
- s->data = ngx_pnalloc(pool, s->len);
- if (s->data == NULL) {
- return NGX_ERROR;
- }
-
- ngx_escape_uri(s->data, cert.data, cert.len, NGX_ESCAPE_URI_COMPONENT);
-
- return NGX_OK;
-}
ngx_int_t
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.12.2.tar.gz/src/event/ngx_event_openssl.h
^
|
@@ -22,7 +22,6 @@
#include <openssl/engine.h>
#endif
#include <openssl/evp.h>
-#include <openssl/hmac.h>
#ifndef OPENSSL_NO_OCSP
#include <openssl/ocsp.h>
#endif
@@ -55,11 +54,6 @@
#define ngx_ssl_conn_t SSL
-#if (OPENSSL_VERSION_NUMBER < 0x10002000L)
-#define SSL_is_server(s) (s)->server
-#endif
-
-
struct ngx_ssl_s {
SSL_CTX *ctx;
ngx_log_t *log;
@@ -137,7 +131,6 @@
#define NGX_SSL_TLSv1 0x0008
#define NGX_SSL_TLSv1_1 0x0010
#define NGX_SSL_TLSv1_2 0x0020
-#define NGX_SSL_TLSv1_3 0x0040
#define NGX_SSL_BUFFER 1
@@ -213,8 +206,6 @@
ngx_str_t *s);
ngx_int_t ngx_ssl_get_certificate(ngx_connection_t *c, ngx_pool_t *pool,
ngx_str_t *s);
-ngx_int_t ngx_ssl_get_escaped_certificate(ngx_connection_t *c, ngx_pool_t *pool,
- ngx_str_t *s);
ngx_int_t ngx_ssl_get_subject_dn(ngx_connection_t *c, ngx_pool_t *pool,
ngx_str_t *s);
ngx_int_t ngx_ssl_get_issuer_dn(ngx_connection_t *c, ngx_pool_t *pool,
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.12.2.tar.gz/src/event/ngx_event_openssl_stapling.c
^
|
@@ -1486,7 +1486,7 @@
return NGX_ERROR;
}
- ctx->code = ctx->code * 10 + (ch - '0');
+ ctx->code = ctx->code * 10 + ch - '0';
if (++ctx->count == 3) {
state = sw_space_after_status;
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.12.2.tar.gz/src/http/modules/ngx_http_access_module.c
^
|
@@ -309,21 +309,27 @@
ngx_http_access_rule_un_t *rule_un;
#endif
- all = 0;
ngx_memzero(&cidr, sizeof(ngx_cidr_t));
value = cf->args->elts;
- if (value[1].len == 3 && ngx_strcmp(value[1].data, "all") == 0) {
- all = 1;
+ all = (value[1].len == 3 && ngx_strcmp(value[1].data, "all") == 0);
+
+ if (!all) {
#if (NGX_HAVE_UNIX_DOMAIN)
- } else if (value[1].len == 5 && ngx_strcmp(value[1].data, "unix:") == 0) {
- cidr.family = AF_UNIX;
-#endif
- } else {
+ if (value[1].len == 5 && ngx_strcmp(value[1].data, "unix:") == 0) {
+ cidr.family = AF_UNIX;
+ rc = NGX_OK;
+
+ } else {
+ rc = ngx_ptocidr(&value[1], &cidr);
+ }
+
+#else
rc = ngx_ptocidr(&value[1], &cidr);
+#endif
if (rc == NGX_ERROR) {
ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.12.2.tar.gz/src/http/modules/ngx_http_addition_filter_module.c
^
|
@@ -123,8 +123,6 @@
ngx_http_clear_accept_ranges(r);
ngx_http_weak_etag(r);
- r->preserve_body = 1;
-
return ngx_http_next_header_filter(r);
}
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.12.2.tar.gz/src/http/modules/ngx_http_auth_basic_module.c
^
|
@@ -15,6 +15,11 @@
typedef struct {
+ ngx_str_t passwd;
+} ngx_http_auth_basic_ctx_t;
+
+
+typedef struct {
ngx_http_complex_value_t *realm;
ngx_http_complex_value_t user_file;
} ngx_http_auth_basic_loc_conf_t;
@@ -22,7 +27,7 @@
static ngx_int_t ngx_http_auth_basic_handler(ngx_http_request_t *r);
static ngx_int_t ngx_http_auth_basic_crypt_handler(ngx_http_request_t *r,
- ngx_str_t *passwd, ngx_str_t *realm);
+ ngx_http_auth_basic_ctx_t *ctx, ngx_str_t *passwd, ngx_str_t *realm);
static ngx_int_t ngx_http_auth_basic_set_realm(ngx_http_request_t *r,
ngx_str_t *realm);
static void ngx_http_auth_basic_close(ngx_file_t *file);
@@ -98,6 +103,7 @@
ngx_str_t pwd, realm, user_file;
ngx_uint_t i, level, login, left, passwd;
ngx_file_t file;
+ ngx_http_auth_basic_ctx_t *ctx;
ngx_http_auth_basic_loc_conf_t *alcf;
u_char buf[NGX_HTTP_AUTH_BUF_SIZE];
enum {
@@ -120,6 +126,13 @@
return NGX_DECLINED;
}
+ ctx = ngx_http_get_module_ctx(r, ngx_http_auth_basic_module);
+
+ if (ctx) {
+ return ngx_http_auth_basic_crypt_handler(r, ctx, &ctx->passwd,
+ &realm);
+ }
+
rc = ngx_http_auth_basic_user(r);
if (rc == NGX_DECLINED) {
@@ -224,7 +237,8 @@
pwd.len = i - passwd;
pwd.data = &buf[passwd];
- return ngx_http_auth_basic_crypt_handler(r, &pwd, &realm);
+ return ngx_http_auth_basic_crypt_handler(r, NULL, &pwd,
+ &realm);
}
break;
@@ -262,7 +276,7 @@
ngx_cpystrn(pwd.data, &buf[passwd], pwd.len + 1);
- return ngx_http_auth_basic_crypt_handler(r, &pwd, &realm);
+ return ngx_http_auth_basic_crypt_handler(r, NULL, &pwd, &realm);
}
ngx_log_error(NGX_LOG_ERR, r->connection->log, 0,
@@ -274,8 +288,8 @@
static ngx_int_t
-ngx_http_auth_basic_crypt_handler(ngx_http_request_t *r, ngx_str_t *passwd,
- ngx_str_t *realm)
+ngx_http_auth_basic_crypt_handler(ngx_http_request_t *r,
+ ngx_http_auth_basic_ctx_t *ctx, ngx_str_t *passwd, ngx_str_t *realm)
{
ngx_int_t rc;
u_char *encrypted;
@@ -287,22 +301,48 @@
"rc: %i user: \"%V\" salt: \"%s\"",
rc, &r->headers_in.user, passwd->data);
- if (rc != NGX_OK) {
- return NGX_HTTP_INTERNAL_SERVER_ERROR;
+ if (rc == NGX_OK) {
+ if (ngx_strcmp(encrypted, passwd->data) == 0) {
+ return NGX_OK;
+ }
+
+ ngx_log_debug1(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
+ "encrypted: \"%s\"", encrypted);
+
+ ngx_log_error(NGX_LOG_ERR, r->connection->log, 0,
+ "user \"%V\": password mismatch",
+ &r->headers_in.user);
+
+ return ngx_http_auth_basic_set_realm(r, realm);
}
- if (ngx_strcmp(encrypted, passwd->data) == 0) {
- return NGX_OK;
+ if (rc == NGX_ERROR) {
+ return NGX_HTTP_INTERNAL_SERVER_ERROR;
}
- ngx_log_debug1(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
- "encrypted: \"%s\"", encrypted);
+ /* rc == NGX_AGAIN */
- ngx_log_error(NGX_LOG_ERR, r->connection->log, 0,
- "user \"%V\": password mismatch",
- &r->headers_in.user);
+ if (ctx == NULL) {
+ ctx = ngx_palloc(r->pool, sizeof(ngx_http_auth_basic_ctx_t));
+ if (ctx == NULL) {
+ return NGX_HTTP_INTERNAL_SERVER_ERROR;
+ }
+
+ ngx_http_set_ctx(r, ctx, ngx_http_auth_basic_module);
+
+ ctx->passwd.len = passwd->len;
+ passwd->len++;
+
+ ctx->passwd.data = ngx_pstrdup(r->pool, passwd);
+ if (ctx->passwd.data == NULL) {
+ return NGX_HTTP_INTERNAL_SERVER_ERROR;
+ }
+
+ }
+
+ /* TODO: add mutex event */
- return ngx_http_auth_basic_set_realm(r, realm);
+ return rc;
}
@@ -321,8 +361,6 @@
basic = ngx_pnalloc(r->pool, len);
if (basic == NULL) {
- r->headers_out.www_authenticate->hash = 0;
- r->headers_out.www_authenticate = NULL;
return NGX_HTTP_INTERNAL_SERVER_ERROR;
}
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.12.2.tar.gz/src/http/modules/ngx_http_browser_module.c
^
|
@@ -38,6 +38,13 @@
typedef struct {
+ ngx_str_t name;
+ ngx_http_get_variable_pt handler;
+ uintptr_t data;
+} ngx_http_browser_variable_t;
+
+
+typedef struct {
ngx_array_t *modern_browsers;
ngx_array_t *ancient_browsers;
ngx_http_variable_value_t *modern_browser_value;
@@ -56,7 +63,7 @@
static ngx_uint_t ngx_http_browser(ngx_http_request_t *r,
ngx_http_browser_conf_t *cf);
-static ngx_int_t ngx_http_browser_add_variables(ngx_conf_t *cf);
+static ngx_int_t ngx_http_browser_add_variable(ngx_conf_t *cf);
static void *ngx_http_browser_create_conf(ngx_conf_t *cf);
static char *ngx_http_browser_merge_conf(ngx_conf_t *cf, void *parent,
void *child);
@@ -107,7 +114,7 @@
static ngx_http_module_t ngx_http_browser_module_ctx = {
- ngx_http_browser_add_variables, /* preconfiguration */
+ ngx_http_browser_add_variable, /* preconfiguration */
NULL, /* postconfiguration */
NULL, /* create main configuration */
@@ -211,18 +218,13 @@
};
-static ngx_http_variable_t ngx_http_browser_vars[] = {
-
- { ngx_string("msie"), NULL, ngx_http_msie_variable,
- 0, NGX_HTTP_VAR_CHANGEABLE, 0 },
-
- { ngx_string("modern_browser"), NULL, ngx_http_browser_variable,
- NGX_HTTP_MODERN_BROWSER, NGX_HTTP_VAR_CHANGEABLE, 0 },
-
- { ngx_string("ancient_browser"), NULL, ngx_http_browser_variable,
- NGX_HTTP_ANCIENT_BROWSER, NGX_HTTP_VAR_CHANGEABLE, 0 },
-
- ngx_http_null_variable
+static ngx_http_browser_variable_t ngx_http_browsers[] = {
+ { ngx_string("msie"), ngx_http_msie_variable, 0 },
+ { ngx_string("modern_browser"), ngx_http_browser_variable,
+ NGX_HTTP_MODERN_BROWSER },
+ { ngx_string("ancient_browser"), ngx_http_browser_variable,
+ NGX_HTTP_ANCIENT_BROWSER },
+ { ngx_null_string, NULL, 0 }
};
@@ -395,19 +397,20 @@
static ngx_int_t
-ngx_http_browser_add_variables(ngx_conf_t *cf)
+ngx_http_browser_add_variable(ngx_conf_t *cf)
{
- ngx_http_variable_t *var, *v;
+ ngx_http_browser_variable_t *var;
+ ngx_http_variable_t *v;
- for (v = ngx_http_browser_vars; v->name.len; v++) {
+ for (var = ngx_http_browsers; var->name.len; var++) {
- var = ngx_http_add_variable(cf, &v->name, v->flags);
- if (var == NULL) {
+ v = ngx_http_add_variable(cf, &var->name, NGX_HTTP_VAR_CHANGEABLE);
+ if (v == NULL) {
return NGX_ERROR;
}
- var->get_handler = v->get_handler;
- var->data = v->data;
+ v->get_handler = var->handler;
+ v->data = var->data;
}
return NGX_OK;
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.12.2.tar.gz/src/http/modules/ngx_http_chunked_filter_module.c
^
|
@@ -17,8 +17,6 @@
static ngx_int_t ngx_http_chunked_filter_init(ngx_conf_t *cf);
-static ngx_chain_t *ngx_http_chunked_create_trailers(ngx_http_request_t *r,
- ngx_http_chunked_filter_ctx_t *ctx);
static ngx_http_module_t ngx_http_chunked_filter_module_ctx = {
@@ -71,29 +69,27 @@
return ngx_http_next_header_filter(r);
}
- if (r->headers_out.content_length_n == -1
- || r->expect_trailers)
- {
- clcf = ngx_http_get_module_loc_conf(r, ngx_http_core_module);
+ if (r->headers_out.content_length_n == -1) {
+ if (r->http_version < NGX_HTTP_VERSION_11) {
+ r->keepalive = 0;
- if (r->http_version >= NGX_HTTP_VERSION_11
- && clcf->chunked_transfer_encoding)
- {
- if (r->expect_trailers) {
- ngx_http_clear_content_length(r);
- }
+ } else {
+ clcf = ngx_http_get_module_loc_conf(r, ngx_http_core_module);
- r->chunked = 1;
+ if (clcf->chunked_transfer_encoding) {
+ r->chunked = 1;
- ctx = ngx_pcalloc(r->pool, sizeof(ngx_http_chunked_filter_ctx_t));
- if (ctx == NULL) {
- return NGX_ERROR;
- }
+ ctx = ngx_pcalloc(r->pool,
+ sizeof(ngx_http_chunked_filter_ctx_t));
+ if (ctx == NULL) {
+ return NGX_ERROR;
+ }
- ngx_http_set_ctx(r, ctx, ngx_http_chunked_filter_module);
+ ngx_http_set_ctx(r, ctx, ngx_http_chunked_filter_module);
- } else if (r->headers_out.content_length_n == -1) {
- r->keepalive = 0;
+ } else {
+ r->keepalive = 0;
+ }
}
}
@@ -183,17 +179,26 @@
}
if (cl->buf->last_buf) {
- tl = ngx_http_chunked_create_trailers(r, ctx);
+ tl = ngx_chain_get_free_buf(r->pool, &ctx->free);
if (tl == NULL) {
return NGX_ERROR;
}
+ b = tl->buf;
+
+ b->tag = (ngx_buf_tag_t) &ngx_http_chunked_filter_module;
+ b->temporary = 0;
+ b->memory = 1;
+ b->last_buf = 1;
+ b->pos = (u_char *) CRLF "0" CRLF CRLF;
+ b->last = b->pos + 7;
+
cl->buf->last_buf = 0;
*ll = tl;
if (size == 0) {
- tl->buf->pos += 2;
+ b->pos += 2;
}
} else if (size > 0) {
@@ -225,109 +230,6 @@
}
-static ngx_chain_t *
-ngx_http_chunked_create_trailers(ngx_http_request_t *r,
- ngx_http_chunked_filter_ctx_t *ctx)
-{
- size_t len;
- ngx_buf_t *b;
- ngx_uint_t i;
- ngx_chain_t *cl;
- ngx_list_part_t *part;
- ngx_table_elt_t *header;
-
- len = 0;
-
- part = &r->headers_out.trailers.part;
- header = part->elts;
-
- for (i = 0; /* void */; i++) {
-
- if (i >= part->nelts) {
- if (part->next == NULL) {
- break;
- }
-
- part = part->next;
- header = part->elts;
- i = 0;
- }
-
- if (header[i].hash == 0) {
- continue;
- }
-
- len += header[i].key.len + sizeof(": ") - 1
- + header[i].value.len + sizeof(CRLF) - 1;
- }
-
- cl = ngx_chain_get_free_buf(r->pool, &ctx->free);
- if (cl == NULL) {
- return NULL;
- }
-
- b = cl->buf;
-
- b->tag = (ngx_buf_tag_t) &ngx_http_chunked_filter_module;
- b->temporary = 0;
- b->memory = 1;
- b->last_buf = 1;
-
- if (len == 0) {
- b->pos = (u_char *) CRLF "0" CRLF CRLF;
- b->last = b->pos + sizeof(CRLF "0" CRLF CRLF) - 1;
- return cl;
- }
-
- len += sizeof(CRLF "0" CRLF CRLF) - 1;
-
- b->pos = ngx_palloc(r->pool, len);
- if (b->pos == NULL) {
- return NULL;
- }
-
- b->last = b->pos;
-
- *b->last++ = CR; *b->last++ = LF;
- *b->last++ = '0';
- *b->last++ = CR; *b->last++ = LF;
-
- part = &r->headers_out.trailers.part;
- header = part->elts;
-
- for (i = 0; /* void */; i++) {
-
- if (i >= part->nelts) {
- if (part->next == NULL) {
- break;
- }
-
- part = part->next;
- header = part->elts;
- i = 0;
- }
-
- if (header[i].hash == 0) {
- continue;
- }
-
- ngx_log_debug2(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
- "http trailer: \"%V: %V\"",
- &header[i].key, &header[i].value);
-
- b->last = ngx_copy(b->last, header[i].key.data, header[i].key.len);
- *b->last++ = ':'; *b->last++ = ' ';
-
- b->last = ngx_copy(b->last, header[i].value.data, header[i].value.len);
- *b->last++ = CR; *b->last++ = LF;
- }
-
- *b->last++ = CR; *b->last++ = LF;
-
- return cl;
-}
-
-
static ngx_int_t
ngx_http_chunked_filter_init(ngx_conf_t *cf)
{
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.12.2.tar.gz/src/http/modules/ngx_http_dav_module.c
^
|
@@ -1080,7 +1080,6 @@
} else {
location = ngx_pnalloc(r->pool, r->uri.len);
if (location == NULL) {
- ngx_http_clear_location(r);
return NGX_ERROR;
}
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.12.2.tar.gz/src/http/modules/ngx_http_fastcgi_module.c
^
|
@@ -631,7 +631,7 @@
ngx_http_fastcgi_path_info_variable, 0,
NGX_HTTP_VAR_NOCACHEABLE|NGX_HTTP_VAR_NOHASH, 0 },
- ngx_http_null_variable
+ { ngx_null_string, NULL, NULL, 0, 0, 0 }
};
@@ -1878,7 +1878,6 @@
p = ngx_pnalloc(r->pool, size);
if (p == NULL) {
- h->hash = 0;
return NGX_ERROR;
}
@@ -1901,7 +1900,6 @@
ngx_log_error(NGX_LOG_ALERT, r->connection->log, 0,
"invalid header after joining "
"FastCGI records");
- h->hash = 0;
return NGX_ERROR;
}
@@ -1927,7 +1925,6 @@
h->key.len + 1 + h->value.len + 1
+ h->key.len);
if (h->key.data == NULL) {
- h->hash = 0;
return NGX_ERROR;
}
@@ -2646,7 +2643,6 @@
}
}
- f->pos = p;
f->state = state;
return NGX_AGAIN;
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.12.2.tar.gz/src/http/modules/ngx_http_flv_module.c
^
|
@@ -203,7 +203,7 @@
}
if (i == 0) {
- b = ngx_calloc_buf(r->pool);
+ b = ngx_pcalloc(r->pool, sizeof(ngx_buf_t));
if (b == NULL) {
return NGX_HTTP_INTERNAL_SERVER_ERROR;
}
@@ -217,7 +217,7 @@
}
- b = ngx_calloc_buf(r->pool);
+ b = ngx_pcalloc(r->pool, sizeof(ngx_buf_t));
if (b == NULL) {
return NGX_HTTP_INTERNAL_SERVER_ERROR;
}
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.12.2.tar.gz/src/http/modules/ngx_http_geo_module.c
^
|
@@ -1400,8 +1400,7 @@
file.name = *name;
file.log = cf->log;
- file.fd = ngx_open_file(name->data, NGX_FILE_RDONLY, NGX_FILE_OPEN, 0);
-
+ file.fd = ngx_open_file(name->data, NGX_FILE_RDONLY, 0, 0);
if (file.fd == NGX_INVALID_FILE) {
err = ngx_errno;
if (err != NGX_ENOENT) {
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.12.2.tar.gz/src/http/modules/ngx_http_geoip_module.c
^
|
@@ -232,7 +232,7 @@
ngx_http_geoip_city_int_variable,
offsetof(GeoIPRecord, area_code), 0, 0 },
- ngx_http_null_variable
+ { ngx_null_string, NULL, NULL, 0, 0, 0 }
};
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.12.2.tar.gz/src/http/modules/ngx_http_gzip_filter_module.c
^
|
@@ -57,7 +57,6 @@
unsigned nomem:1;
unsigned gzheader:1;
unsigned buffering:1;
- unsigned intel:1;
size_t zin;
size_t zout;
@@ -234,8 +233,6 @@
static ngx_http_output_header_filter_pt ngx_http_next_header_filter;
static ngx_http_output_body_filter_pt ngx_http_next_body_filter;
-static ngx_uint_t ngx_http_gzip_assume_intel;
-
static ngx_int_t
ngx_http_gzip_header_filter(ngx_http_request_t *r)
@@ -530,27 +527,7 @@
* *) 5920 bytes on amd64 and sparc64
*/
- if (!ngx_http_gzip_assume_intel) {
- ctx->allocated = 8192 + (1 << (wbits + 2)) + (1 << (memlevel + 9));
-
- } else {
- /*
- * A zlib variant from Intel, https://github.com/jtkukunas/zlib.
- * It can force window bits to 13 for fast compression level,
- * on processors with SSE 4.2 it uses 64K hash instead of scaling
- * it from the specified memory level, and also introduces
- * 16-byte padding in one out of the two window-sized buffers.
- */
-
- if (conf->level == 1) {
- wbits = ngx_max(wbits, 13);
- }
-
- ctx->allocated = 8192 + 16 + (1 << (wbits + 2))
- + (1 << (ngx_max(memlevel, 8) + 8))
- + (1 << (memlevel + 8));
- ctx->intel = 1;
- }
+ ctx->allocated = 8192 + (1 << (wbits + 2)) + (1 << (memlevel + 9));
}
@@ -667,7 +644,7 @@
static u_char gzheader[10] =
{ 0x1f, 0x8b, Z_DEFLATED, 0, 0, 0, 0, 0, 0, 3 };
- b = ngx_calloc_buf(r->pool);
+ b = ngx_pcalloc(r->pool, sizeof(ngx_buf_t));
if (b == NULL) {
return NGX_ERROR;
}
@@ -1026,7 +1003,7 @@
alloc = items * size;
- if (items == 1 && alloc % 512 != 0 && alloc < 8192) {
+ if (alloc % 512 != 0 && alloc < 8192) {
/*
* The zlib deflate_state allocation, it takes about 6K,
@@ -1048,14 +1025,9 @@
return p;
}
- if (ctx->intel) {
- ngx_log_error(NGX_LOG_ALERT, ctx->request->connection->log, 0,
- "gzip filter failed to use preallocated memory: "
- "%ud of %ui", items * size, ctx->allocated);
-
- } else {
- ngx_http_gzip_assume_intel = 1;
- }
+ ngx_log_error(NGX_LOG_ALERT, ctx->request->connection->log, 0,
+ "gzip filter failed to use preallocated memory: %ud of %ui",
+ items * size, ctx->allocated);
p = ngx_palloc(ctx->request->pool, items * size);
@@ -1112,6 +1084,10 @@
ngx_uint_t zint, zfrac;
ngx_http_gzip_ctx_t *ctx;
+ v->valid = 1;
+ v->no_cacheable = 0;
+ v->not_found = 0;
+
ctx = ngx_http_get_module_ctx(r, ngx_http_gzip_filter_module);
if (ctx == NULL || ctx->zout == 0) {
@@ -1119,10 +1095,6 @@
return NGX_OK;
}
- v->valid = 1;
- v->no_cacheable = 0;
- v->not_found = 0;
-
v->data = ngx_pnalloc(r->pool, NGX_INT32_LEN + 3);
if (v->data == NULL) {
return NGX_ERROR;
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.12.2.tar.gz/src/http/modules/ngx_http_gzip_static_module.c
^
|
@@ -238,7 +238,7 @@
h = ngx_list_push(&r->headers_out.headers);
if (h == NULL) {
- return NGX_HTTP_INTERNAL_SERVER_ERROR;
+ return NGX_ERROR;
}
h->hash = 1;
@@ -248,7 +248,7 @@
/* we need to allocate all before the header would be sent */
- b = ngx_calloc_buf(r->pool);
+ b = ngx_pcalloc(r->pool, sizeof(ngx_buf_t));
if (b == NULL) {
return NGX_HTTP_INTERNAL_SERVER_ERROR;
}
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.12.2.tar.gz/src/http/modules/ngx_http_image_filter_module.c
^
|
@@ -581,7 +581,7 @@
size_t len;
ngx_buf_t *b;
- b = ngx_calloc_buf(r->pool);
+ b = ngx_pcalloc(r->pool, sizeof(ngx_buf_t));
if (b == NULL) {
return NULL;
}
@@ -633,7 +633,7 @@
{
ngx_buf_t *b;
- b = ngx_calloc_buf(r->pool);
+ b = ngx_pcalloc(r->pool, sizeof(ngx_buf_t));
if (b == NULL) {
return NULL;
}
@@ -1067,7 +1067,7 @@
return NULL;
}
- b = ngx_calloc_buf(r->pool);
+ b = ngx_pcalloc(r->pool, sizeof(ngx_buf_t));
if (b == NULL) {
gdFree(out);
return NULL;
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.12.2.tar.gz/src/http/modules/ngx_http_mp4_module.c
^
|
@@ -636,7 +636,7 @@
}
if (mp4 == NULL) {
- b = ngx_calloc_buf(r->pool);
+ b = ngx_pcalloc(r->pool, sizeof(ngx_buf_t));
if (b == NULL) {
return NGX_HTTP_INTERNAL_SERVER_ERROR;
}
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.12.2.tar.gz/src/http/modules/ngx_http_proxy_module.c
^
|
@@ -235,7 +235,6 @@
{ ngx_string("TLSv1"), NGX_SSL_TLSv1 },
{ ngx_string("TLSv1.1"), NGX_SSL_TLSv1_1 },
{ ngx_string("TLSv1.2"), NGX_SSL_TLSv1_2 },
- { ngx_string("TLSv1.3"), NGX_SSL_TLSv1_3 },
{ ngx_null_string, 0 }
};
@@ -829,7 +828,7 @@
ngx_http_proxy_internal_chunked_variable, 0,
NGX_HTTP_VAR_NOCACHEABLE|NGX_HTTP_VAR_NOHASH, 0 },
- ngx_http_null_variable
+ { ngx_null_string, NULL, NULL, 0, 0, 0 }
};
@@ -1143,8 +1142,7 @@
static ngx_int_t
ngx_http_proxy_create_request(ngx_http_request_t *r)
{
- size_t len, uri_len, loc_len, body_len,
- key_len, val_len;
+ size_t len, uri_len, loc_len, body_len;
uintptr_t escape;
ngx_buf_t *b;
ngx_str_t method;
@@ -1259,20 +1257,11 @@
le.flushed = 1;
while (*(uintptr_t *) le.ip) {
-
- lcode = *(ngx_http_script_len_code_pt *) le.ip;
- key_len = lcode(&le);
-
- for (val_len = 0; *(uintptr_t *) le.ip; val_len += lcode(&le)) {
+ while (*(uintptr_t *) le.ip) {
lcode = *(ngx_http_script_len_code_pt *) le.ip;
+ len += lcode(&le);
}
le.ip += sizeof(uintptr_t);
-
- if (val_len == 0) {
- continue;
- }
-
- len += key_len + sizeof(": ") - 1 + val_len + sizeof(CRLF) - 1;
}
@@ -1372,41 +1361,30 @@
le.ip = headers->lengths->elts;
while (*(uintptr_t *) le.ip) {
-
lcode = *(ngx_http_script_len_code_pt *) le.ip;
- (void) lcode(&le);
- for (val_len = 0; *(uintptr_t *) le.ip; val_len += lcode(&le)) {
- lcode = *(ngx_http_script_len_code_pt *) le.ip;
- }
- le.ip += sizeof(uintptr_t);
+ /* skip the header line name length */
+ (void) lcode(&le);
- if (val_len == 0) {
- e.skip = 1;
+ if (*(ngx_http_script_len_code_pt *) le.ip) {
- while (*(uintptr_t *) e.ip) {
- code = *(ngx_http_script_code_pt *) e.ip;
- code((ngx_http_script_engine_t *) &e);
+ for (len = 0; *(uintptr_t *) le.ip; len += lcode(&le)) {
+ lcode = *(ngx_http_script_len_code_pt *) le.ip;
}
- e.ip += sizeof(uintptr_t);
- e.skip = 0;
+ e.skip = (len == sizeof(CRLF) - 1) ? 1 : 0;
- continue;
+ } else {
+ e.skip = 0;
}
- code = *(ngx_http_script_code_pt *) e.ip;
- code((ngx_http_script_engine_t *) &e);
-
- *e.pos++ = ':'; *e.pos++ = ' ';
+ le.ip += sizeof(uintptr_t);
while (*(uintptr_t *) e.ip) {
code = *(ngx_http_script_code_pt *) e.ip;
code((ngx_http_script_engine_t *) &e);
}
e.ip += sizeof(uintptr_t);
-
- *e.pos++ = CR; *e.pos++ = LF;
}
b->last = e.pos;
@@ -1819,7 +1797,6 @@
h->key.data = ngx_pnalloc(r->pool,
h->key.len + 1 + h->value.len + 1 + h->key.len);
if (h->key.data == NULL) {
- h->hash = 0;
return NGX_ERROR;
}
@@ -3519,40 +3496,108 @@
continue;
}
- copy = ngx_array_push_n(headers->lengths,
- sizeof(ngx_http_script_copy_code_t));
- if (copy == NULL) {
- return NGX_ERROR;
- }
+ if (ngx_http_script_variables_count(&src[i].value) == 0) {
+ copy = ngx_array_push_n(headers->lengths,
+ sizeof(ngx_http_script_copy_code_t));
+ if (copy == NULL) {
+ return NGX_ERROR;
+ }
- copy->code = (ngx_http_script_code_pt) ngx_http_script_copy_len_code;
- copy->len = src[i].key.len;
+ copy->code = (ngx_http_script_code_pt)
+ ngx_http_script_copy_len_code;
+ copy->len = src[i].key.len + sizeof(": ") - 1
+ + src[i].value.len + sizeof(CRLF) - 1;
- size = (sizeof(ngx_http_script_copy_code_t)
- + src[i].key.len + sizeof(uintptr_t) - 1)
- & ~(sizeof(uintptr_t) - 1);
- copy = ngx_array_push_n(headers->values, size);
- if (copy == NULL) {
- return NGX_ERROR;
- }
+ size = (sizeof(ngx_http_script_copy_code_t)
+ + src[i].key.len + sizeof(": ") - 1
+ + src[i].value.len + sizeof(CRLF) - 1
+ + sizeof(uintptr_t) - 1)
+ & ~(sizeof(uintptr_t) - 1);
- copy->code = ngx_http_script_copy_code;
- copy->len = src[i].key.len;
+ copy = ngx_array_push_n(headers->values, size);
+ if (copy == NULL) {
+ return NGX_ERROR;
+ }
- p = (u_char *) copy + sizeof(ngx_http_script_copy_code_t);
- ngx_memcpy(p, src[i].key.data, src[i].key.len);
+ copy->code = ngx_http_script_copy_code;
+ copy->len = src[i].key.len + sizeof(": ") - 1
+ + src[i].value.len + sizeof(CRLF) - 1;
+
+ p = (u_char *) copy + sizeof(ngx_http_script_copy_code_t);
+
+ p = ngx_cpymem(p, src[i].key.data, src[i].key.len);
+ *p++ = ':'; *p++ = ' ';
+ p = ngx_cpymem(p, src[i].value.data, src[i].value.len);
+ *p++ = CR; *p = LF;
- ngx_memzero(&sc, sizeof(ngx_http_script_compile_t));
+ } else {
+ copy = ngx_array_push_n(headers->lengths,
+ sizeof(ngx_http_script_copy_code_t));
+ if (copy == NULL) {
+ return NGX_ERROR;
+ }
- sc.cf = cf;
- sc.source = &src[i].value;
- sc.flushes = &headers->flushes;
- sc.lengths = &headers->lengths;
- sc.values = &headers->values;
+ copy->code = (ngx_http_script_code_pt)
+ ngx_http_script_copy_len_code;
+ copy->len = src[i].key.len + sizeof(": ") - 1;
- if (ngx_http_script_compile(&sc) != NGX_OK) {
- return NGX_ERROR;
+
+ size = (sizeof(ngx_http_script_copy_code_t)
+ + src[i].key.len + sizeof(": ") - 1 + sizeof(uintptr_t) - 1)
+ & ~(sizeof(uintptr_t) - 1);
+
+ copy = ngx_array_push_n(headers->values, size);
+ if (copy == NULL) {
+ return NGX_ERROR;
+ }
+
+ copy->code = ngx_http_script_copy_code;
+ copy->len = src[i].key.len + sizeof(": ") - 1;
+
+ p = (u_char *) copy + sizeof(ngx_http_script_copy_code_t);
+ p = ngx_cpymem(p, src[i].key.data, src[i].key.len);
+ *p++ = ':'; *p = ' ';
+
+
+ ngx_memzero(&sc, sizeof(ngx_http_script_compile_t));
+
+ sc.cf = cf;
+ sc.source = &src[i].value;
+ sc.flushes = &headers->flushes;
+ sc.lengths = &headers->lengths;
+ sc.values = &headers->values;
+
+ if (ngx_http_script_compile(&sc) != NGX_OK) {
+ return NGX_ERROR;
+ }
+
+
+ copy = ngx_array_push_n(headers->lengths,
+ sizeof(ngx_http_script_copy_code_t));
+ if (copy == NULL) {
+ return NGX_ERROR;
+ }
+
+ copy->code = (ngx_http_script_code_pt)
+ ngx_http_script_copy_len_code;
+ copy->len = sizeof(CRLF) - 1;
+
+
+ size = (sizeof(ngx_http_script_copy_code_t)
+ + sizeof(CRLF) - 1 + sizeof(uintptr_t) - 1)
+ & ~(sizeof(uintptr_t) - 1);
+
+ copy = ngx_array_push_n(headers->values, size);
+ if (copy == NULL) {
+ return NGX_ERROR;
+ }
+
+ copy->code = ngx_http_script_copy_code;
+ copy->len = sizeof(CRLF) - 1;
+
+ p = (u_char *) copy + sizeof(ngx_http_script_copy_code_t);
+ *p++ = CR; *p = LF;
}
code = ngx_array_push_n(headers->lengths, sizeof(uintptr_t));
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.12.2.tar.gz/src/http/modules/ngx_http_range_filter_module.c
^
|
@@ -315,7 +315,7 @@
return NGX_HTTP_RANGE_NOT_SATISFIABLE;
}
- start = start * 10 + (*p++ - '0');
+ start = start * 10 + *p++ - '0';
}
while (*p == ' ') { p++; }
@@ -345,7 +345,7 @@
return NGX_HTTP_RANGE_NOT_SATISFIABLE;
}
- end = end * 10 + (*p++ - '0');
+ end = end * 10 + *p++ - '0';
}
while (*p == ' ') { p++; }
@@ -355,7 +355,7 @@
}
if (suffix) {
- start = (end < content_length) ? content_length - end : 0;
+ start = content_length - end;
end = content_length - 1;
}
@@ -386,9 +386,6 @@
if (ranges-- == 0) {
return NGX_DECLINED;
}
-
- } else if (start == 0) {
- return NGX_DECLINED;
}
if (*p++ != ',') {
@@ -432,8 +429,6 @@
content_range->value.data = ngx_pnalloc(r->pool,
sizeof("bytes -/") - 1 + 3 * NGX_OFF_T_LEN);
if (content_range->value.data == NULL) {
- content_range->hash = 0;
- r->headers_out.content_range = NULL;
return NGX_ERROR;
}
@@ -604,8 +599,6 @@
content_range->value.data = ngx_pnalloc(r->pool,
sizeof("bytes */") - 1 + NGX_OFF_T_LEN);
if (content_range->value.data == NULL) {
- content_range->hash = 0;
- r->headers_out.content_range = NULL;
return NGX_ERROR;
}
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.12.2.tar.gz/src/http/modules/ngx_http_realip_module.c
^
|
@@ -122,7 +122,7 @@
{ ngx_string("realip_remote_port"), NULL,
ngx_http_realip_remote_port_variable, 0, 0, 0 },
- ngx_http_null_variable
+ { ngx_null_string, NULL, NULL, 0, 0, 0 }
};
@@ -317,15 +317,9 @@
{
ngx_http_realip_loc_conf_t *rlcf = conf;
- ngx_int_t rc;
- ngx_str_t *value;
- ngx_url_t u;
- ngx_cidr_t c, *cidr;
- ngx_uint_t i;
- struct sockaddr_in *sin;
-#if (NGX_HAVE_INET6)
- struct sockaddr_in6 *sin6;
-#endif
+ ngx_int_t rc;
+ ngx_str_t *value;
+ ngx_cidr_t *cidr;
value = cf->args->elts;
@@ -337,78 +331,31 @@
}
}
+ cidr = ngx_array_push(rlcf->from);
+ if (cidr == NULL) {
+ return NGX_CONF_ERROR;
+ }
+
#if (NGX_HAVE_UNIX_DOMAIN)
if (ngx_strcmp(value[1].data, "unix:") == 0) {
- cidr = ngx_array_push(rlcf->from);
- if (cidr == NULL) {
- return NGX_CONF_ERROR;
- }
-
cidr->family = AF_UNIX;
return NGX_CONF_OK;
}
#endif
- rc = ngx_ptocidr(&value[1], &c);
-
- if (rc != NGX_ERROR) {
- if (rc == NGX_DONE) {
- ngx_conf_log_error(NGX_LOG_WARN, cf, 0,
- "low address bits of %V are meaningless",
- &value[1]);
- }
-
- cidr = ngx_array_push(rlcf->from);
- if (cidr == NULL) {
- return NGX_CONF_ERROR;
- }
-
- *cidr = c;
-
- return NGX_CONF_OK;
- }
-
- ngx_memzero(&u, sizeof(ngx_url_t));
- u.host = value[1];
-
- if (ngx_inet_resolve_host(cf->pool, &u) != NGX_OK) {
- if (u.err) {
- ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
- "%s in set_real_ip_from \"%V\"",
- u.err, &u.host);
- }
+ rc = ngx_ptocidr(&value[1], cidr);
+ if (rc == NGX_ERROR) {
+ ngx_conf_log_error(NGX_LOG_EMERG, cf, 0, "invalid parameter \"%V\"",
+ &value[1]);
return NGX_CONF_ERROR;
}
- cidr = ngx_array_push_n(rlcf->from, u.naddrs);
- if (cidr == NULL) {
- return NGX_CONF_ERROR;
- }
-
- ngx_memzero(cidr, u.naddrs * sizeof(ngx_cidr_t));
-
- for (i = 0; i < u.naddrs; i++) {
- cidr[i].family = u.addrs[i].sockaddr->sa_family;
-
- switch (cidr[i].family) {
-
-#if (NGX_HAVE_INET6)
- case AF_INET6:
- sin6 = (struct sockaddr_in6 *) u.addrs[i].sockaddr;
- cidr[i].u.in6.addr = sin6->sin6_addr;
- ngx_memset(cidr[i].u.in6.mask.s6_addr, 0xff, 16);
- break;
-#endif
-
- default: /* AF_INET */
- sin = (struct sockaddr_in *) u.addrs[i].sockaddr;
- cidr[i].u.in.addr = sin->sin_addr.s_addr;
- cidr[i].u.in.mask = 0xffffffff;
- break;
- }
+ if (rc == NGX_DONE) {
+ ngx_conf_log_error(NGX_LOG_WARN, cf, 0,
+ "low address bits of %V are meaningless", &value[1]);
}
return NGX_CONF_OK;
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.12.2.tar.gz/src/http/modules/ngx_http_referer_module.c
^
|
@@ -32,7 +32,6 @@
} ngx_http_referer_conf_t;
-static ngx_int_t ngx_http_referer_add_variables(ngx_conf_t *cf);
static void * ngx_http_referer_create_conf(ngx_conf_t *cf);
static char * ngx_http_referer_merge_conf(ngx_conf_t *cf, void *parent,
void *child);
@@ -78,7 +77,7 @@
static ngx_http_module_t ngx_http_referer_module_ctx = {
- ngx_http_referer_add_variables, /* preconfiguration */
+ NULL, /* preconfiguration */
NULL, /* postconfiguration */
NULL, /* create main configuration */
@@ -108,9 +107,6 @@
};
-static ngx_str_t ngx_http_invalid_referer_name = ngx_string("invalid_referer");
-
-
static ngx_int_t
ngx_http_referer_variable(ngx_http_request_t *r, ngx_http_variable_value_t *v,
uintptr_t data)
@@ -267,23 +263,6 @@
}
-static ngx_int_t
-ngx_http_referer_add_variables(ngx_conf_t *cf)
-{
- ngx_http_variable_t *var;
-
- var = ngx_http_add_variable(cf, &ngx_http_invalid_referer_name,
- NGX_HTTP_VAR_CHANGEABLE);
- if (var == NULL) {
- return NGX_ERROR;
- }
-
- var->get_handler = ngx_http_referer_variable;
-
- return NGX_OK;
-}
-
-
static void *
ngx_http_referer_create_conf(ngx_conf_t *cf)
{
@@ -473,9 +452,19 @@
{
ngx_http_referer_conf_t *rlcf = conf;
- u_char *p;
- ngx_str_t *value, uri;
- ngx_uint_t i;
+ u_char *p;
+ ngx_str_t *value, uri, name;
+ ngx_uint_t i;
+ ngx_http_variable_t *var;
+
+ ngx_str_set(&name, "invalid_referer");
+
+ var = ngx_http_add_variable(cf, &name, NGX_HTTP_VAR_CHANGEABLE);
+ if (var == NULL) {
+ return NGX_CONF_ERROR;
+ }
+
+ var->get_handler = ngx_http_referer_variable;
if (rlcf->keys == NULL) {
rlcf->keys = ngx_pcalloc(cf->temp_pool, sizeof(ngx_hash_keys_arrays_t));
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.12.2.tar.gz/src/http/modules/ngx_http_scgi_module.c
^
|
@@ -819,7 +819,7 @@
key = e.pos;
#endif
code = *(ngx_http_script_code_pt *) e.ip;
- code((ngx_http_script_engine_t *) &e);
+ code((ngx_http_script_engine_t *) & e);
#if (NGX_DEBUG)
val = e.pos;
@@ -1040,7 +1040,6 @@
h->key.len + 1 + h->value.len + 1
+ h->key.len);
if (h->key.data == NULL) {
- h->hash = 0;
return NGX_ERROR;
}
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.12.2.tar.gz/src/http/modules/ngx_http_secure_link_module.c
^
|
@@ -107,7 +107,7 @@
ngx_md5_t md5;
ngx_http_secure_link_ctx_t *ctx;
ngx_http_secure_link_conf_t *conf;
- u_char hash_buf[18], md5_buf[16];
+ u_char hash_buf[16], md5_buf[16];
conf = ngx_http_get_module_loc_conf(r, ngx_http_secure_link_module);
@@ -154,6 +154,7 @@
goto not_found;
}
+ hash.len = 16;
hash.data = hash_buf;
if (ngx_decode_base64url(&hash, &val) != NGX_OK) {
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.12.2.tar.gz/src/http/modules/ngx_http_slice_filter_module.c
^
|
@@ -190,8 +190,6 @@
return rc;
}
- r->preserve_body = 1;
-
if (r->headers_out.status == NGX_HTTP_PARTIAL_CONTENT) {
if (ctx->start + (off_t) slcf->size <= r->headers_out.content_offset) {
ctx->start = slcf->size
@@ -319,7 +317,7 @@
return NGX_ERROR;
}
- start = start * 10 + (*p++ - '0');
+ start = start * 10 + *p++ - '0';
}
while (*p == ' ') { p++; }
@@ -339,7 +337,7 @@
return NGX_ERROR;
}
- end = end * 10 + (*p++ - '0');
+ end = end * 10 + *p++ - '0';
}
end++;
@@ -364,7 +362,7 @@
return NGX_ERROR;
}
- complete_length = complete_length * 10 + (*p++ - '0');
+ complete_length = complete_length * 10 + *p++ - '0';
}
} else {
@@ -481,7 +479,7 @@
return 0;
}
- start = start * 10 + (*p++ - '0');
+ start = start * 10 + *p++ - '0';
}
return start;
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.12.2.tar.gz/src/http/modules/ngx_http_ssi_filter_module.c
^
|
@@ -321,7 +321,7 @@
{ ngx_string("date_gmt"), NULL, ngx_http_ssi_date_gmt_local_variable, 1,
NGX_HTTP_VAR_NOCACHEABLE, 0 },
- ngx_http_null_variable
+ { ngx_null_string, NULL, NULL, 0, 0, 0 }
};
@@ -370,8 +370,6 @@
ngx_http_clear_content_length(r);
ngx_http_clear_accept_ranges(r);
- r->preserve_body = 1;
-
if (!slcf->last_modified) {
ngx_http_clear_last_modified(r);
ngx_http_clear_etag(r);
@@ -1630,7 +1628,8 @@
u_char ch, *p, **value, *data, *part_data;
size_t *size, len, prefix, part_len;
ngx_str_t var, *val;
- ngx_uint_t i, n, bracket, quoted, key;
+ ngx_int_t key;
+ ngx_uint_t i, n, bracket, quoted;
ngx_array_t lengths, values;
ngx_http_variable_value_t *vv;
@@ -1882,8 +1881,9 @@
int rc, *captures;
u_char *p, errstr[NGX_MAX_CONF_ERRSTR];
size_t size;
+ ngx_int_t key;
ngx_str_t *vv, name, value;
- ngx_uint_t i, n, key;
+ ngx_uint_t i, n;
ngx_http_ssi_ctx_t *ctx;
ngx_http_ssi_var_t *var;
ngx_regex_compile_t rgc;
@@ -1986,10 +1986,10 @@
ngx_http_ssi_include(ngx_http_request_t *r, ngx_http_ssi_ctx_t *ctx,
ngx_str_t **params)
{
- ngx_int_t rc;
+ ngx_int_t rc, key;
ngx_str_t *uri, *file, *wait, *set, *stub, args;
ngx_buf_t *b;
- ngx_uint_t flags, i, key;
+ ngx_uint_t flags, i;
ngx_chain_t *cl, *tl, **ll, *out;
ngx_http_request_t *sr;
ngx_http_ssi_var_t *var;
@@ -2246,9 +2246,9 @@
{
u_char *p;
uintptr_t len;
+ ngx_int_t key;
ngx_buf_t *b;
ngx_str_t *var, *value, *enc, text;
- ngx_uint_t key;
ngx_chain_t *cl;
ngx_http_variable_value_t *vv;
@@ -2388,7 +2388,7 @@
ctx->timefmt.len = value->len;
ctx->timefmt.data = ngx_pnalloc(r->pool, value->len + 1);
if (ctx->timefmt.data == NULL) {
- return NGX_ERROR;
+ return NGX_HTTP_SSI_ERROR;
}
ngx_cpystrn(ctx->timefmt.data, value->data, value->len + 1);
@@ -2408,9 +2408,8 @@
ngx_http_ssi_set(ngx_http_request_t *r, ngx_http_ssi_ctx_t *ctx,
ngx_str_t **params)
{
- ngx_int_t rc;
+ ngx_int_t key, rc;
ngx_str_t *name, *value, *vv;
- ngx_uint_t key;
ngx_http_ssi_var_t *var;
ngx_http_ssi_ctx_t *mctx;
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.12.2.tar.gz/src/http/modules/ngx_http_ssl_module.c
^
|
@@ -57,7 +57,6 @@
{ ngx_string("TLSv1"), NGX_SSL_TLSv1 },
{ ngx_string("TLSv1.1"), NGX_SSL_TLSv1_1 },
{ ngx_string("TLSv1.2"), NGX_SSL_TLSv1_2 },
- { ngx_string("TLSv1.3"), NGX_SSL_TLSv1_3 },
{ ngx_null_string, 0 }
};
@@ -299,10 +298,6 @@
(uintptr_t) ngx_ssl_get_raw_certificate,
NGX_HTTP_VAR_CHANGEABLE, 0 },
- { ngx_string("ssl_client_escaped_cert"), NULL, ngx_http_ssl_variable,
- (uintptr_t) ngx_ssl_get_escaped_certificate,
- NGX_HTTP_VAR_CHANGEABLE, 0 },
-
{ ngx_string("ssl_client_s_dn"), NULL, ngx_http_ssl_variable,
(uintptr_t) ngx_ssl_get_subject_dn, NGX_HTTP_VAR_CHANGEABLE, 0 },
@@ -333,7 +328,7 @@
{ ngx_string("ssl_client_v_remain"), NULL, ngx_http_ssl_variable,
(uintptr_t) ngx_ssl_get_client_v_remain, NGX_HTTP_VAR_CHANGEABLE, 0 },
- ngx_http_null_variable
+ { ngx_null_string, NULL, NULL, 0, 0, 0 }
};
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.12.2.tar.gz/src/http/modules/ngx_http_static_module.c
^
|
@@ -169,7 +169,6 @@
location = ngx_pnalloc(r->pool, len);
if (location == NULL) {
- ngx_http_clear_location(r);
return NGX_HTTP_INTERNAL_SERVER_ERROR;
}
@@ -234,7 +233,7 @@
/* we need to allocate all before the header would be sent */
- b = ngx_calloc_buf(r->pool);
+ b = ngx_pcalloc(r->pool, sizeof(ngx_buf_t));
if (b == NULL) {
return NGX_HTTP_INTERNAL_SERVER_ERROR;
}
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.12.2.tar.gz/src/http/modules/ngx_http_stub_status_module.c
^
|
@@ -76,7 +76,7 @@
{ ngx_string("connections_waiting"), NULL, ngx_http_stub_status_variable,
3, NGX_HTTP_VAR_NOCACHEABLE, 0 },
- ngx_http_null_variable
+ { ngx_null_string, NULL, NULL, 0, 0, 0 }
};
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.12.2.tar.gz/src/http/modules/ngx_http_sub_filter_module.c
^
|
@@ -248,6 +248,8 @@
ctx->matches->nelts);
}
+ ngx_http_set_ctx(r, ctx, ngx_http_sub_filter_module);
+
ctx->saved.data = ngx_pnalloc(r->pool, ctx->tables->max_match_len - 1);
if (ctx->saved.data == NULL) {
return NGX_ERROR;
@@ -258,8 +260,6 @@
return NGX_ERROR;
}
- ngx_http_set_ctx(r, ctx, ngx_http_sub_filter_module);
-
ctx->offset = ctx->tables->min_match_len - 1;
ctx->last_out = &ctx->out;
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.12.2.tar.gz/src/http/modules/ngx_http_upstream_hash_module.c
^
|
@@ -503,11 +503,6 @@
ngx_http_upstream_rr_peers_wlock(hp->rrp.peers);
- if (hp->tries > 20 || hp->rrp.peers->single) {
- ngx_http_upstream_rr_peers_unlock(hp->rrp.peers);
- return hp->get_rr_peer(pc, &hp->rrp);
- }
-
pc->cached = 0;
pc->connection = NULL;
@@ -543,6 +538,13 @@
continue;
}
+ if (peer->server.len != server->len
+ || ngx_strncmp(peer->server.data, server->data, server->len)
+ != 0)
+ {
+ continue;
+ }
+
if (peer->max_fails
&& peer->fails >= peer->max_fails
&& now - peer->checked <= peer->fail_timeout)
@@ -554,13 +556,6 @@
continue;
}
- if (peer->server.len != server->len
- || ngx_strncmp(peer->server.data, server->data, server->len)
- != 0)
- {
- continue;
- }
-
peer->current_weight += peer->effective_weight;
total += peer->effective_weight;
@@ -582,9 +577,10 @@
hp->hash++;
hp->tries++;
- if (hp->tries > 20) {
+ if (hp->tries >= points->number) {
+ pc->name = hp->rrp.peers->name;
ngx_http_upstream_rr_peers_unlock(hp->rrp.peers);
- return hp->get_rr_peer(pc, &hp->rrp);
+ return NGX_BUSY;
}
}
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.12.2.tar.gz/src/http/modules/ngx_http_upstream_zone_module.c
^
|
@@ -16,8 +16,6 @@
void *data);
static ngx_http_upstream_rr_peers_t *ngx_http_upstream_zone_copy_peers(
ngx_slab_pool_t *shpool, ngx_http_upstream_srv_conf_t *uscf);
-static ngx_http_upstream_rr_peer_t *ngx_http_upstream_zone_copy_peer(
- ngx_http_upstream_rr_peers_t *peers, ngx_http_upstream_rr_peer_t *src);
static ngx_command_t ngx_http_upstream_zone_commands[] = {
@@ -187,7 +185,6 @@
ngx_http_upstream_zone_copy_peers(ngx_slab_pool_t *shpool,
ngx_http_upstream_srv_conf_t *uscf)
{
- ngx_str_t *name;
ngx_http_upstream_rr_peer_t *peer, **peerp;
ngx_http_upstream_rr_peers_t *peers, *backup;
@@ -198,30 +195,18 @@
ngx_memcpy(peers, uscf->peer.data, sizeof(ngx_http_upstream_rr_peers_t));
- name = ngx_slab_alloc(shpool, sizeof(ngx_str_t));
- if (name == NULL) {
- return NULL;
- }
-
- name->data = ngx_slab_alloc(shpool, peers->name->len);
- if (name->data == NULL) {
- return NULL;
- }
-
- ngx_memcpy(name->data, peers->name->data, peers->name->len);
- name->len = peers->name->len;
-
- peers->name = name;
-
peers->shpool = shpool;
for (peerp = &peers->peer; *peerp; peerp = &peer->next) {
/* pool is unlocked */
- peer = ngx_http_upstream_zone_copy_peer(peers, *peerp);
+ peer = ngx_slab_calloc_locked(shpool,
+ sizeof(ngx_http_upstream_rr_peer_t));
if (peer == NULL) {
return NULL;
}
+ ngx_memcpy(peer, *peerp, sizeof(ngx_http_upstream_rr_peer_t));
+
*peerp = peer;
}
@@ -236,17 +221,18 @@
ngx_memcpy(backup, peers->next, sizeof(ngx_http_upstream_rr_peers_t));
- backup->name = name;
-
backup->shpool = shpool;
for (peerp = &backup->peer; *peerp; peerp = &peer->next) {
/* pool is unlocked */
- peer = ngx_http_upstream_zone_copy_peer(backup, *peerp);
+ peer = ngx_slab_calloc_locked(shpool,
+ sizeof(ngx_http_upstream_rr_peer_t));
if (peer == NULL) {
return NULL;
}
+ ngx_memcpy(peer, *peerp, sizeof(ngx_http_upstream_rr_peer_t));
+
*peerp = peer;
}
@@ -258,68 +244,3 @@
return peers;
}
-
-
-static ngx_http_upstream_rr_peer_t *
-ngx_http_upstream_zone_copy_peer(ngx_http_upstream_rr_peers_t *peers,
- ngx_http_upstream_rr_peer_t *src)
-{
- ngx_slab_pool_t *pool;
- ngx_http_upstream_rr_peer_t *dst;
-
- pool = peers->shpool;
-
- dst = ngx_slab_calloc_locked(pool, sizeof(ngx_http_upstream_rr_peer_t));
- if (dst == NULL) {
- return NULL;
- }
-
- if (src) {
- ngx_memcpy(dst, src, sizeof(ngx_http_upstream_rr_peer_t));
- dst->sockaddr = NULL;
- dst->name.data = NULL;
- dst->server.data = NULL;
- }
-
- dst->sockaddr = ngx_slab_calloc_locked(pool, sizeof(ngx_sockaddr_t));
- if (dst->sockaddr == NULL) {
- goto failed;
- }
-
- dst->name.data = ngx_slab_calloc_locked(pool, NGX_SOCKADDR_STRLEN);
- if (dst->name.data == NULL) {
- goto failed;
- }
-
- if (src) {
- ngx_memcpy(dst->sockaddr, src->sockaddr, src->socklen);
- ngx_memcpy(dst->name.data, src->name.data, src->name.len);
-
- dst->server.data = ngx_slab_alloc_locked(pool, src->server.len);
- if (dst->server.data == NULL) {
- goto failed;
- }
-
- ngx_memcpy(dst->server.data, src->server.data, src->server.len);
- }
-
- return dst;
-
-failed:
-
- if (dst->server.data) {
- ngx_slab_free_locked(pool, dst->server.data);
- }
-
- if (dst->name.data) {
- ngx_slab_free_locked(pool, dst->name.data);
- }
-
- if (dst->sockaddr) {
- ngx_slab_free_locked(pool, dst->sockaddr);
- }
-
- ngx_slab_free_locked(pool, dst);
-
- return NULL;
-}
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.12.2.tar.gz/src/http/modules/ngx_http_userid_filter_module.c
^
|
@@ -472,10 +472,6 @@
vv = ngx_http_get_indexed_variable(r, ngx_http_userid_reset_index);
- if (vv == NULL || vv->not_found) {
- return NGX_ERROR;
- }
-
if (vv->len == 0 || (vv->len == 1 && vv->data[0] == '0')) {
if (conf->mark == '\0'
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.12.2.tar.gz/src/http/modules/ngx_http_uwsgi_module.c
^
|
@@ -129,7 +129,6 @@
{ ngx_string("TLSv1"), NGX_SSL_TLSv1 },
{ ngx_string("TLSv1.1"), NGX_SSL_TLSv1_1 },
{ ngx_string("TLSv1.2"), NGX_SSL_TLSv1_2 },
- { ngx_string("TLSv1.3"), NGX_SSL_TLSv1_3 },
{ ngx_null_string, 0 }
};
@@ -865,7 +864,7 @@
lcode = *(ngx_http_script_len_code_pt *) le.ip;
skip_empty = lcode(&le);
- for (val_len = 0; *(uintptr_t *) le.ip; val_len += lcode(&le)) {
+ for (val_len = 0; *(uintptr_t *) le.ip; val_len += lcode (&le)) {
lcode = *(ngx_http_script_len_code_pt *) le.ip;
}
le.ip += sizeof(uintptr_t);
@@ -990,7 +989,7 @@
while (*(uintptr_t *) le.ip) {
lcode = *(ngx_http_script_len_code_pt *) le.ip;
- key_len = (u_char) lcode(&le);
+ key_len = (u_char) lcode (&le);
lcode = *(ngx_http_script_len_code_pt *) le.ip;
skip_empty = lcode(&le);
@@ -1018,14 +1017,14 @@
*e.pos++ = (u_char) ((key_len >> 8) & 0xff);
code = *(ngx_http_script_code_pt *) e.ip;
- code((ngx_http_script_engine_t *) &e);
+ code((ngx_http_script_engine_t *) & e);
*e.pos++ = (u_char) (val_len & 0xff);
*e.pos++ = (u_char) ((val_len >> 8) & 0xff);
while (*(uintptr_t *) e.ip) {
code = *(ngx_http_script_code_pt *) e.ip;
- code((ngx_http_script_engine_t *) &e);
+ code((ngx_http_script_engine_t *) & e);
}
e.ip += sizeof(uintptr_t);
@@ -1244,7 +1243,6 @@
h->key.len + 1 + h->value.len + 1
+ h->key.len);
if (h->key.data == NULL) {
- h->hash = 0;
return NGX_ERROR;
}
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.12.2.tar.gz/src/http/modules/ngx_http_xslt_filter_module.c
^
|
@@ -584,7 +584,7 @@
return NULL;
}
- b = ngx_calloc_buf(r->pool);
+ b = ngx_pcalloc(r->pool, sizeof(ngx_buf_t));
if (b == NULL) {
ngx_free(buf);
return NULL;
@@ -686,19 +686,8 @@
* specified in xslt_stylesheet directives
*/
- if (param[i].value.lengths) {
- p = string.data;
-
- } else {
- p = ngx_pnalloc(r->pool, string.len + 1);
- if (p == NULL) {
- return NGX_ERROR;
- }
-
- ngx_memcpy(p, string.data, string.len + 1);
- }
-
- last = p + string.len;
+ p = string.data;
+ last = string.data + string.len;
while (p && *p) {
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.12.2.tar.gz/src/http/modules/perl/nginx.pm
^
|
@@ -24,7 +24,6 @@
HTTP_SEE_OTHER
HTTP_NOT_MODIFIED
HTTP_TEMPORARY_REDIRECT
- HTTP_PERMANENT_REDIRECT
HTTP_BAD_REQUEST
HTTP_UNAUTHORIZED
@@ -73,7 +72,6 @@
use constant HTTP_SEE_OTHER => 303;
use constant HTTP_NOT_MODIFIED => 304;
use constant HTTP_TEMPORARY_REDIRECT => 307;
-use constant HTTP_PERMANENT_REDIRECT => 308;
use constant HTTP_BAD_REQUEST => 400;
use constant HTTP_UNAUTHORIZED => 401;
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.12.2.tar.gz/src/http/modules/perl/nginx.xs
^
|
@@ -510,12 +510,10 @@
header->hash = 1;
if (ngx_http_perl_sv2str(aTHX_ r, &header->key, key) != NGX_OK) {
- header->hash = 0;
XSRETURN_EMPTY;
}
if (ngx_http_perl_sv2str(aTHX_ r, &header->value, value) != NGX_OK) {
- header->hash = 0;
XSRETURN_EMPTY;
}
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.12.2.tar.gz/src/http/ngx_http.c
^
|
@@ -382,13 +382,6 @@
return NGX_ERROR;
}
- if (ngx_array_init(&cmcf->phases[NGX_HTTP_PRECONTENT_PHASE].handlers,
- cf->pool, 2, sizeof(ngx_http_handler_pt))
- != NGX_OK)
- {
- return NGX_ERROR;
- }
-
if (ngx_array_init(&cmcf->phases[NGX_HTTP_CONTENT_PHASE].handlers,
cf->pool, 4, sizeof(ngx_http_handler_pt))
!= NGX_OK)
@@ -466,7 +459,8 @@
n = 1 /* find config phase */
+ use_rewrite /* post rewrite phase */
- + use_access; /* post access phase */
+ + use_access /* post access phase */
+ + cmcf->try_files;
for (i = 0; i < NGX_HTTP_LOG_PHASE; i++) {
n += cmcf->phases[i].handlers.nelts;
@@ -535,6 +529,15 @@
continue;
+ case NGX_HTTP_TRY_FILES_PHASE:
+ if (cmcf->try_files) {
+ ph->checker = ngx_http_core_try_files_phase;
+ n++;
+ ph++;
+ }
+
+ continue;
+
case NGX_HTTP_CONTENT_PHASE:
checker = ngx_http_core_content_phase;
break;
@@ -545,7 +548,7 @@
n += cmcf->phases[i].handlers.nelts;
- for (j = cmcf->phases[i].handlers.nelts - 1; j >= 0; j--) {
+ for (j = cmcf->phases[i].handlers.nelts - 1; j >=0; j--) {
ph->checker = checker;
ph->handler = h[j];
ph->next = n;
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.12.2.tar.gz/src/http/ngx_http_core_module.c
^
|
@@ -61,6 +61,8 @@
void *conf);
static char *ngx_http_core_error_page(ngx_conf_t *cf, ngx_command_t *cmd,
void *conf);
+static char *ngx_http_core_try_files(ngx_conf_t *cf, ngx_command_t *cmd,
+ void *conf);
static char *ngx_http_core_open_file_cache(ngx_conf_t *cf, ngx_command_t *cmd,
void *conf);
static char *ngx_http_core_error_log(ngx_conf_t *cf, ngx_command_t *cmd,
@@ -647,6 +649,13 @@
0,
NULL },
+ { ngx_string("try_files"),
+ NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_2MORE,
+ ngx_http_core_try_files,
+ NGX_HTTP_LOC_CONF_OFFSET,
+ 0,
+ NULL },
+
{ ngx_string("post_action"),
NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_HTTP_LIF_CONF
|NGX_CONF_TAKE1,
@@ -993,7 +1002,6 @@
p = ngx_pnalloc(r->pool, len);
if (p == NULL) {
- ngx_http_clear_location(r);
ngx_http_finalize_request(r, NGX_HTTP_INTERNAL_SERVER_ERROR);
return NGX_OK;
}
@@ -1150,6 +1158,222 @@
ngx_int_t
+ngx_http_core_try_files_phase(ngx_http_request_t *r,
+ ngx_http_phase_handler_t *ph)
+{
+ size_t len, root, alias, reserve, allocated;
+ u_char *p, *name;
+ ngx_str_t path, args;
+ ngx_uint_t test_dir;
+ ngx_http_try_file_t *tf;
+ ngx_open_file_info_t of;
+ ngx_http_script_code_pt code;
+ ngx_http_script_engine_t e;
+ ngx_http_core_loc_conf_t *clcf;
+ ngx_http_script_len_code_pt lcode;
+
+ ngx_log_debug1(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
+ "try files phase: %ui", r->phase_handler);
+
+ clcf = ngx_http_get_module_loc_conf(r, ngx_http_core_module);
+
+ if (clcf->try_files == NULL) {
+ r->phase_handler++;
+ return NGX_AGAIN;
+ }
+
+ allocated = 0;
+ root = 0;
+ name = NULL;
+ /* suppress MSVC warning */
+ path.data = NULL;
+
+ tf = clcf->try_files;
+
+ alias = clcf->alias;
+
+ for ( ;; ) {
+
+ if (tf->lengths) {
+ ngx_memzero(&e, sizeof(ngx_http_script_engine_t));
+
+ e.ip = tf->lengths->elts;
+ e.request = r;
+
+ /* 1 is for terminating '\0' as in static names */
+ len = 1;
+
+ while (*(uintptr_t *) e.ip) {
+ lcode = *(ngx_http_script_len_code_pt *) e.ip;
+ len += lcode(&e);
+ }
+
+ } else {
+ len = tf->name.len;
+ }
+
+ if (!alias) {
+ reserve = len > r->uri.len ? len - r->uri.len : 0;
+
+ } else if (alias == NGX_MAX_SIZE_T_VALUE) {
+ reserve = len;
+
+ } else {
+ reserve = len > r->uri.len - alias ? len - (r->uri.len - alias) : 0;
+ }
+
+ if (reserve > allocated || !allocated) {
+
+ /* 16 bytes are preallocation */
+ allocated = reserve + 16;
+
+ if (ngx_http_map_uri_to_path(r, &path, &root, allocated) == NULL) {
+ ngx_http_finalize_request(r, NGX_HTTP_INTERNAL_SERVER_ERROR);
+ return NGX_OK;
+ }
+
+ name = path.data + root;
+ }
+
+ if (tf->values == NULL) {
+
+ /* tf->name.len includes the terminating '\0' */
+
+ ngx_memcpy(name, tf->name.data, tf->name.len);
+
+ path.len = (name + tf->name.len - 1) - path.data;
+
+ } else {
+ e.ip = tf->values->elts;
+ e.pos = name;
+ e.flushed = 1;
+
+ while (*(uintptr_t *) e.ip) {
+ code = *(ngx_http_script_code_pt *) e.ip;
+ code((ngx_http_script_engine_t *) &e);
+ }
+
+ path.len = e.pos - path.data;
+
+ *e.pos = '\0';
+
+ if (alias && alias != NGX_MAX_SIZE_T_VALUE
+ && ngx_strncmp(name, r->uri.data, alias) == 0)
+ {
+ ngx_memmove(name, name + alias, len - alias);
+ path.len -= alias;
+ }
+ }
+
+ test_dir = tf->test_dir;
+
+ tf++;
+
+ ngx_log_debug3(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
+ "trying to use %s: \"%s\" \"%s\"",
+ test_dir ? "dir" : "file", name, path.data);
+
+ if (tf->lengths == NULL && tf->name.len == 0) {
+
+ if (tf->code) {
+ ngx_http_finalize_request(r, tf->code);
+ return NGX_OK;
+ }
+
+ path.len -= root;
+ path.data += root;
+
+ if (path.data[0] == '@') {
+ (void) ngx_http_named_location(r, &path);
+
+ } else {
+ ngx_http_split_args(r, &path, &args);
+
+ (void) ngx_http_internal_redirect(r, &path, &args);
+ }
+
+ ngx_http_finalize_request(r, NGX_DONE);
+ return NGX_OK;
+ }
+
+ ngx_memzero(&of, sizeof(ngx_open_file_info_t));
+
+ of.read_ahead = clcf->read_ahead;
+ of.directio = clcf->directio;
+ of.valid = clcf->open_file_cache_valid;
+ of.min_uses = clcf->open_file_cache_min_uses;
+ of.test_only = 1;
+ of.errors = clcf->open_file_cache_errors;
+ of.events = clcf->open_file_cache_events;
+
+ if (ngx_http_set_disable_symlinks(r, clcf, &path, &of) != NGX_OK) {
+ ngx_http_finalize_request(r, NGX_HTTP_INTERNAL_SERVER_ERROR);
+ return NGX_OK;
+ }
+
+ if (ngx_open_cached_file(clcf->open_file_cache, &path, &of, r->pool)
+ != NGX_OK)
+ {
+ if (of.err == 0) {
+ ngx_http_finalize_request(r, NGX_HTTP_INTERNAL_SERVER_ERROR);
+ return NGX_OK;
+ }
+
+ if (of.err != NGX_ENOENT
+ && of.err != NGX_ENOTDIR
+ && of.err != NGX_ENAMETOOLONG)
+ {
+ ngx_log_error(NGX_LOG_CRIT, r->connection->log, of.err,
+ "%s \"%s\" failed", of.failed, path.data);
+ }
+
+ continue;
+ }
+
+ if (of.is_dir != test_dir) {
+ continue;
+ }
+
+ path.len -= root;
+ path.data += root;
+
+ if (!alias) {
+ r->uri = path;
+
+ } else if (alias == NGX_MAX_SIZE_T_VALUE) {
+ if (!test_dir) {
+ r->uri = path;
+ r->add_uri_to_alias = 1;
+ }
+
+ } else {
+ name = r->uri.data;
+
+ r->uri.len = alias + path.len;
+ r->uri.data = ngx_pnalloc(r->pool, r->uri.len);
+ if (r->uri.data == NULL) {
+ ngx_http_finalize_request(r, NGX_HTTP_INTERNAL_SERVER_ERROR);
+ return NGX_OK;
+ }
+
+ p = ngx_copy(r->uri.data, name, alias);
+ ngx_memcpy(p, path.data, path.len);
+ }
+
+ ngx_http_set_exten(r);
+
+ ngx_log_debug1(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
+ "try file uri: \"%V\"", &r->uri);
+
+ r->phase_handler++;
+ return NGX_AGAIN;
+ }
+
+ /* not reached */
+}
+
+
+ngx_int_t
ngx_http_core_content_phase(ngx_http_request_t *r,
ngx_http_phase_handler_t *ph)
{
@@ -1670,8 +1894,7 @@
if (status == NGX_HTTP_MOVED_PERMANENTLY
|| status == NGX_HTTP_MOVED_TEMPORARILY
|| status == NGX_HTTP_SEE_OTHER
- || status == NGX_HTTP_TEMPORARY_REDIRECT
- || status == NGX_HTTP_PERMANENT_REDIRECT)
+ || status == NGX_HTTP_TEMPORARY_REDIRECT)
{
ngx_http_clear_location(r);
@@ -1703,7 +1926,7 @@
return ngx_http_send_header(r);
}
- b = ngx_calloc_buf(r->pool);
+ b = ngx_pcalloc(r->pool, sizeof(ngx_buf_t));
if (b == NULL) {
return NGX_HTTP_INTERNAL_SERVER_ERROR;
}
@@ -2259,13 +2482,6 @@
return NGX_ERROR;
}
- if (ngx_list_init(&sr->headers_out.trailers, r->pool, 4,
- sizeof(ngx_table_elt_t))
- != NGX_OK)
- {
- return NGX_ERROR;
- }
-
cscf = ngx_http_get_module_srv_conf(r, ngx_http_core_module);
sr->main_conf = cscf->ctx->main_conf;
sr->srv_conf = cscf->ctx->srv_conf;
@@ -2300,7 +2516,6 @@
sr->subrequest_in_memory = (flags & NGX_HTTP_SUBREQUEST_IN_MEMORY) != 0;
sr->waited = (flags & NGX_HTTP_SUBREQUEST_WAITED) != 0;
- sr->background = (flags & NGX_HTTP_SUBREQUEST_BACKGROUND) != 0;
sr->unparsed_uri = r->unparsed_uri;
sr->method_name = ngx_http_core_get_method;
@@ -2314,31 +2529,29 @@
sr->read_event_handler = ngx_http_request_empty_handler;
sr->write_event_handler = ngx_http_handler;
+ if (c->data == r && r->postponed == NULL) {
+ c->data = sr;
+ }
+
sr->variables = r->variables;
sr->log_handler = r->log_handler;
- if (!sr->background) {
- if (c->data == r && r->postponed == NULL) {
- c->data = sr;
- }
-
- pr = ngx_palloc(r->pool, sizeof(ngx_http_postponed_request_t));
- if (pr == NULL) {
- return NGX_ERROR;
- }
+ pr = ngx_palloc(r->pool, sizeof(ngx_http_postponed_request_t));
+ if (pr == NULL) {
+ return NGX_ERROR;
+ }
- pr->request = sr;
- pr->out = NULL;
- pr->next = NULL;
-
- if (r->postponed) {
- for (p = r->postponed; p->next; p = p->next) { /* void */ }
- p->next = pr;
+ pr->request = sr;
+ pr->out = NULL;
+ pr->next = NULL;
+
+ if (r->postponed) {
+ for (p = r->postponed; p->next; p = p->next) { /* void */ }
+ p->next = pr;
- } else {
- r->postponed = pr;
- }
+ } else {
+ r->postponed = pr;
}
sr->internal = 1;
@@ -3335,6 +3548,7 @@
* clcf->default_type = { 0, NULL };
* clcf->error_log = NULL;
* clcf->error_pages = NULL;
+ * clcf->try_files = NULL;
* clcf->client_body_path = NULL;
* clcf->regex = NULL;
* clcf->exact_match = 0;
@@ -4654,6 +4868,89 @@
}
return NGX_CONF_OK;
+}
+
+
+static char *
+ngx_http_core_try_files(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
+{
+ ngx_http_core_loc_conf_t *clcf = conf;
+
+ ngx_str_t *value;
+ ngx_int_t code;
+ ngx_uint_t i, n;
+ ngx_http_try_file_t *tf;
+ ngx_http_script_compile_t sc;
+ ngx_http_core_main_conf_t *cmcf;
+
+ if (clcf->try_files) {
+ return "is duplicate";
+ }
+
+ cmcf = ngx_http_conf_get_module_main_conf(cf, ngx_http_core_module);
+
+ cmcf->try_files = 1;
+
+ tf = ngx_pcalloc(cf->pool, cf->args->nelts * sizeof(ngx_http_try_file_t));
+ if (tf == NULL) {
+ return NGX_CONF_ERROR;
+ }
+
+ clcf->try_files = tf;
+
+ value = cf->args->elts;
+
+ for (i = 0; i < cf->args->nelts - 1; i++) {
+
+ tf[i].name = value[i + 1];
+
+ if (tf[i].name.len > 0
+ && tf[i].name.data[tf[i].name.len - 1] == '/'
+ && i + 2 < cf->args->nelts)
+ {
+ tf[i].test_dir = 1;
+ tf[i].name.len--;
+ tf[i].name.data[tf[i].name.len] = '\0';
+ }
+
+ n = ngx_http_script_variables_count(&tf[i].name);
+
+ if (n) {
+ ngx_memzero(&sc, sizeof(ngx_http_script_compile_t));
+
+ sc.cf = cf;
+ sc.source = &tf[i].name;
+ sc.lengths = &tf[i].lengths;
+ sc.values = &tf[i].values;
+ sc.variables = n;
+ sc.complete_lengths = 1;
+ sc.complete_values = 1;
+
+ if (ngx_http_script_compile(&sc) != NGX_OK) {
+ return NGX_CONF_ERROR;
+ }
+
+ } else {
+ /* add trailing '\0' to length */
+ tf[i].name.len++;
+ }
+ }
+
+ if (tf[i - 1].name.data[0] == '=') {
+
+ code = ngx_atoi(tf[i - 1].name.data + 1, tf[i - 1].name.len - 2);
+
+ if (code == NGX_ERROR || code > 999) {
+ ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
+ "invalid code \"%*s\"",
+ tf[i - 1].name.len - 1, tf[i - 1].name.data);
+ return NGX_CONF_ERROR;
+ }
+
+ tf[i].code = code;
+ }
+
+ return NGX_CONF_OK;
}
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.12.2.tar.gz/src/http/ngx_http_core_module.h
^
|
@@ -119,8 +119,7 @@
NGX_HTTP_ACCESS_PHASE,
NGX_HTTP_POST_ACCESS_PHASE,
- NGX_HTTP_PRECONTENT_PHASE,
-
+ NGX_HTTP_TRY_FILES_PHASE,
NGX_HTTP_CONTENT_PHASE,
NGX_HTTP_LOG_PHASE
@@ -173,6 +172,8 @@
ngx_array_t *ports;
+ ngx_uint_t try_files; /* unsigned try_files:1 */
+
ngx_http_phase_t phases[NGX_HTTP_LOG_PHASE + 1];
} ngx_http_core_main_conf_t;
@@ -295,6 +296,16 @@
} ngx_http_err_page_t;
+typedef struct {
+ ngx_array_t *lengths;
+ ngx_array_t *values;
+ ngx_str_t name;
+
+ unsigned code:10;
+ unsigned test_dir:1;
+} ngx_http_try_file_t;
+
+
struct ngx_http_core_loc_conf_s {
ngx_str_t name; /* location name */
@@ -414,6 +425,7 @@
#endif
ngx_array_t *error_pages; /* error_page */
+ ngx_http_try_file_t *try_files; /* try_files */
ngx_path_t *client_body_temp_path; /* client_body_temp_path */
@@ -474,6 +486,8 @@
ngx_http_phase_handler_t *ph);
ngx_int_t ngx_http_core_post_access_phase(ngx_http_request_t *r,
ngx_http_phase_handler_t *ph);
+ngx_int_t ngx_http_core_try_files_phase(ngx_http_request_t *r,
+ ngx_http_phase_handler_t *ph);
ngx_int_t ngx_http_core_content_phase(ngx_http_request_t *r,
ngx_http_phase_handler_t *ph);
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.12.2.tar.gz/src/http/ngx_http_file_cache.c
^
|
@@ -129,7 +129,6 @@
if (shm_zone->shm.exists) {
cache->sh = cache->shpool->data;
cache->bsize = ngx_fs_bsize(cache->path->name.data);
- cache->max_size /= cache->bsize;
return NGX_OK;
}
@@ -1578,7 +1577,7 @@
/* we need to allocate all before the header would be sent */
- b = ngx_calloc_buf(r->pool);
+ b = ngx_pcalloc(r->pool, sizeof(ngx_buf_t));
if (b == NULL) {
return NGX_HTTP_INTERNAL_SERVER_ERROR;
}
@@ -1701,14 +1700,13 @@
static time_t
ngx_http_file_cache_forced_expire(ngx_http_file_cache_t *cache)
{
- u_char *name, *p;
+ u_char *name;
size_t len;
time_t wait;
ngx_uint_t tries;
ngx_path_t *path;
- ngx_queue_t *q, *sentinel;
+ ngx_queue_t *q;
ngx_http_file_cache_node_t *fcn;
- u_char key[2 * NGX_HTTP_CACHE_KEY_LEN];
ngx_log_debug0(NGX_LOG_DEBUG_HTTP, ngx_cycle->log, 0,
"http file cache forced expire");
@@ -1725,21 +1723,13 @@
wait = 10;
tries = 20;
- sentinel = NULL;
ngx_shmtx_lock(&cache->shpool->mutex);
- for ( ;; ) {
- if (ngx_queue_empty(&cache->sh->queue)) {
- break;
- }
-
- q = ngx_queue_last(&cache->sh->queue);
-
- if (q == sentinel) {
- break;
- }
-
+ for (q = ngx_queue_last(&cache->sh->queue);
+ q != ngx_queue_sentinel(&cache->sh->queue);
+ q = ngx_queue_prev(q))
+ {
fcn = ngx_queue_data(q, ngx_http_file_cache_node_t, queue);
ngx_log_debug6(NGX_LOG_DEBUG_HTTP, ngx_cycle->log, 0,
@@ -1750,37 +1740,15 @@
if (fcn->count == 0) {
ngx_http_file_cache_delete(cache, q, name);
wait = 0;
- break;
- }
- p = ngx_hex_dump(key, (u_char *) &fcn->node.key,
- sizeof(ngx_rbtree_key_t));
- len = NGX_HTTP_CACHE_KEY_LEN - sizeof(ngx_rbtree_key_t);
- (void) ngx_hex_dump(p, fcn->key, len);
-
- /*
- * abnormally exited workers may leave locked cache entries,
- * and although it may be safe to remove them completely,
- * we prefer to just move them to the top of the inactive queue
- */
-
- ngx_queue_remove(q);
- fcn->expire = ngx_time() + cache->inactive;
- ngx_queue_insert_head(&cache->sh->queue, &fcn->queue);
-
- ngx_log_error(NGX_LOG_ALERT, ngx_cycle->log, 0,
- "ignore long locked inactive cache entry %*s, count:%d",
- (size_t) 2 * NGX_HTTP_CACHE_KEY_LEN, key, fcn->count);
-
- if (sentinel == NULL) {
- sentinel = q;
- }
+ } else {
+ if (--tries) {
+ continue;
+ }
- if (--tries) {
- continue;
+ wait = 1;
}
- wait = 1;
break;
}
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.12.2.tar.gz/src/http/ngx_http_parse.c
^
|
@@ -723,11 +723,6 @@
}
r->http_major = ch - '0';
-
- if (r->http_major > 1) {
- return NGX_HTTP_PARSE_INVALID_VERSION;
- }
-
state = sw_major_digit;
break;
@@ -742,12 +737,11 @@
return NGX_HTTP_PARSE_INVALID_REQUEST;
}
- r->http_major = r->http_major * 10 + (ch - '0');
-
- if (r->http_major > 1) {
- return NGX_HTTP_PARSE_INVALID_VERSION;
+ if (r->http_major > 99) {
+ return NGX_HTTP_PARSE_INVALID_REQUEST;
}
+ r->http_major = r->http_major * 10 + ch - '0';
break;
/* first digit of minor HTTP version */
@@ -784,7 +778,7 @@
return NGX_HTTP_PARSE_INVALID_REQUEST;
}
- r->http_minor = r->http_minor * 10 + (ch - '0');
+ r->http_minor = r->http_minor * 10 + ch - '0';
break;
case sw_spaces_after_digit:
@@ -1518,7 +1512,7 @@
case sw_quoted_second:
if (ch >= '0' && ch <= '9') {
- ch = (u_char) ((decoded << 4) + (ch - '0'));
+ ch = (u_char) ((decoded << 4) + ch - '0');
if (ch == '%' || ch == '#') {
state = sw_usual;
@@ -1536,7 +1530,7 @@
c = (u_char) (ch | 0x20);
if (c >= 'a' && c <= 'f') {
- ch = (u_char) ((decoded << 4) + (c - 'a') + 10);
+ ch = (u_char) ((decoded << 4) + c - 'a' + 10);
if (ch == '?') {
state = sw_usual;
@@ -1701,7 +1695,7 @@
return NGX_ERROR;
}
- r->http_major = r->http_major * 10 + (ch - '0');
+ r->http_major = r->http_major * 10 + ch - '0';
break;
/* the first digit of minor HTTP version */
@@ -1729,7 +1723,7 @@
return NGX_ERROR;
}
- r->http_minor = r->http_minor * 10 + (ch - '0');
+ r->http_minor = r->http_minor * 10 + ch - '0';
break;
/* HTTP status code */
@@ -1742,7 +1736,7 @@
return NGX_ERROR;
}
- status->code = status->code * 10 + (ch - '0');
+ status->code = status->code * 10 + ch - '0';
if (++status->count == 3) {
state = sw_space_after_status;
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.12.2.tar.gz/src/http/ngx_http_postpone_filter_module.c
^
|
@@ -63,10 +63,7 @@
if (r != c->data) {
if (in) {
- if (ngx_http_postpone_filter_add(r, in) != NGX_OK) {
- return NGX_ERROR;
- }
-
+ ngx_http_postpone_filter_add(r, in);
return NGX_OK;
}
@@ -89,9 +86,7 @@
}
if (in) {
- if (ngx_http_postpone_filter_add(r, in) != NGX_OK) {
- return NGX_ERROR;
- }
+ ngx_http_postpone_filter_add(r, in);
}
do {
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.12.2.tar.gz/src/http/ngx_http_request.c
^
|
@@ -72,9 +72,6 @@
/* NGX_HTTP_PARSE_INVALID_REQUEST */
"client sent invalid request",
- /* NGX_HTTP_PARSE_INVALID_VERSION */
- "client sent invalid version",
-
/* NGX_HTTP_PARSE_INVALID_09_METHOD */
"client sent invalid method in HTTP/0.9 request"
};
@@ -562,14 +559,6 @@
return NULL;
}
- if (ngx_list_init(&r->headers_out.trailers, r->pool, 4,
- sizeof(ngx_table_elt_t))
- != NGX_OK)
- {
- ngx_destroy_pool(r->pool);
- return NULL;
- }
-
r->ctx = ngx_pcalloc(r->pool, sizeof(void *) * ngx_http_max_module);
if (r->ctx == NULL) {
ngx_destroy_pool(r->pool);
@@ -631,15 +620,14 @@
static void
ngx_http_ssl_handshake(ngx_event_t *rev)
{
- u_char *p, buf[NGX_PROXY_PROTOCOL_MAX_HEADER + 1];
- size_t size;
- ssize_t n;
- ngx_err_t err;
- ngx_int_t rc;
- ngx_connection_t *c;
- ngx_http_connection_t *hc;
- ngx_http_ssl_srv_conf_t *sscf;
- ngx_http_core_loc_conf_t *clcf;
+ u_char *p, buf[NGX_PROXY_PROTOCOL_MAX_HEADER + 1];
+ size_t size;
+ ssize_t n;
+ ngx_err_t err;
+ ngx_int_t rc;
+ ngx_connection_t *c;
+ ngx_http_connection_t *hc;
+ ngx_http_ssl_srv_conf_t *sscf;
c = rev->data;
hc = c->data;
@@ -721,14 +709,6 @@
ngx_log_debug1(NGX_LOG_DEBUG_HTTP, rev->log, 0,
"https ssl handshake: 0x%02Xd", buf[0]);
- clcf = ngx_http_get_module_loc_conf(hc->conf_ctx,
- ngx_http_core_module);
-
- if (clcf->tcp_nodelay && ngx_tcp_nodelay(c) != NGX_OK) {
- ngx_http_close_connection(c);
- return;
- }
-
sscf = ngx_http_get_module_srv_conf(hc->conf_ctx,
ngx_http_ssl_module);
@@ -1056,14 +1036,7 @@
ngx_log_error(NGX_LOG_INFO, c->log, 0,
ngx_http_client_errors[rc - NGX_HTTP_CLIENT_ERROR]);
-
- if (rc == NGX_HTTP_PARSE_INVALID_VERSION) {
- ngx_http_finalize_request(r, NGX_HTTP_VERSION_NOT_SUPPORTED);
-
- } else {
- ngx_http_finalize_request(r, NGX_HTTP_BAD_REQUEST);
- }
-
+ ngx_http_finalize_request(r, NGX_HTTP_BAD_REQUEST);
return;
}
@@ -2225,13 +2198,6 @@
ngx_log_debug2(NGX_LOG_DEBUG_HTTP, c->log, 0,
"http run request: \"%V?%V\"", &r->uri, &r->args);
- if (c->close) {
- r->main->count++;
- ngx_http_terminate_request(r, 0);
- ngx_http_run_posted_requests(c);
- return;
- }
-
if (ev->delayed && ev->timedout) {
ev->delayed = 0;
ev->timedout = 0;
@@ -2346,6 +2312,10 @@
return;
}
+ if (r->main->blocked) {
+ r->write_event_handler = ngx_http_request_finalizer;
+ }
+
ngx_http_terminate_request(r, rc);
return;
}
@@ -2377,26 +2347,6 @@
}
if (r != r->main) {
- clcf = ngx_http_get_module_loc_conf(r, ngx_http_core_module);
-
- if (r->background) {
- if (!r->logged) {
- if (clcf->log_subrequest) {
- ngx_http_log_request(r);
- }
-
- r->logged = 1;
-
- } else {
- ngx_log_error(NGX_LOG_ALERT, c->log, 0,
- "subrequest: \"%V?%V\" logged again",
- &r->uri, &r->args);
- }
-
- r->done = 1;
- ngx_http_finalize_connection(r);
- return;
- }
if (r->buffered || r->postponed) {
@@ -2414,6 +2364,9 @@
r->main->count--;
if (!r->logged) {
+
+ clcf = ngx_http_get_module_loc_conf(r, ngx_http_core_module);
+
if (clcf->log_subrequest) {
ngx_http_log_request(r);
}
@@ -2460,7 +2413,7 @@
return;
}
- if (r->buffered || c->buffered || r->postponed) {
+ if (r->buffered || c->buffered || r->postponed || r->blocked) {
if (ngx_http_set_write_handler(r) != NGX_OK) {
ngx_http_terminate_request(r, 0);
@@ -2477,8 +2430,6 @@
}
r->done = 1;
-
- r->read_event_handler = ngx_http_block_reading;
r->write_event_handler = ngx_http_request_empty_handler;
if (!r->post_action) {
@@ -2541,8 +2492,6 @@
if (mr->write_event_handler) {
if (mr->blocked) {
- r->connection->error = 1;
- r->write_event_handler = ngx_http_request_finalizer;
return;
}
@@ -2599,8 +2548,6 @@
return;
}
- r = r->main;
-
if (r->reading_body) {
r->keepalive = 0;
r->lingering_close = 1;
@@ -3083,9 +3030,30 @@
tcp_nodelay = 1;
}
- if (tcp_nodelay && clcf->tcp_nodelay && ngx_tcp_nodelay(c) != NGX_OK) {
- ngx_http_close_connection(c);
- return;
+ if (tcp_nodelay
+ && clcf->tcp_nodelay
+ && c->tcp_nodelay == NGX_TCP_NODELAY_UNSET)
+ {
+ ngx_log_debug0(NGX_LOG_DEBUG_HTTP, c->log, 0, "tcp_nodelay");
+
+ if (setsockopt(c->fd, IPPROTO_TCP, TCP_NODELAY,
+ (const void *) &tcp_nodelay, sizeof(int))
+ == -1)
+ {
+#if (NGX_SOLARIS)
+ /* Solaris returns EINVAL if a socket has been shut down */
+ c->log_error = NGX_ERROR_IGNORE_EINVAL;
+#endif
+
+ ngx_connection_error(c, ngx_socket_errno,
+ "setsockopt(TCP_NODELAY) failed");
+
+ c->log_error = NGX_ERROR_INFO;
+ ngx_http_close_connection(c);
+ return;
+ }
+
+ c->tcp_nodelay = NGX_TCP_NODELAY_SET;
}
#if 0
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.12.2.tar.gz/src/http/ngx_http_request.h
^
|
@@ -54,17 +54,15 @@
#define NGX_HTTP_CLIENT_ERROR 10
#define NGX_HTTP_PARSE_INVALID_METHOD 10
#define NGX_HTTP_PARSE_INVALID_REQUEST 11
-#define NGX_HTTP_PARSE_INVALID_VERSION 12
-#define NGX_HTTP_PARSE_INVALID_09_METHOD 13
+#define NGX_HTTP_PARSE_INVALID_09_METHOD 12
-#define NGX_HTTP_PARSE_INVALID_HEADER 14
+#define NGX_HTTP_PARSE_INVALID_HEADER 13
/* unused 1 */
#define NGX_HTTP_SUBREQUEST_IN_MEMORY 2
#define NGX_HTTP_SUBREQUEST_WAITED 4
#define NGX_HTTP_SUBREQUEST_CLONE 8
-#define NGX_HTTP_SUBREQUEST_BACKGROUND 16
#define NGX_HTTP_LOG_UNSAFE 1
@@ -85,7 +83,6 @@
#define NGX_HTTP_SEE_OTHER 303
#define NGX_HTTP_NOT_MODIFIED 304
#define NGX_HTTP_TEMPORARY_REDIRECT 307
-#define NGX_HTTP_PERMANENT_REDIRECT 308
#define NGX_HTTP_BAD_REQUEST 400
#define NGX_HTTP_UNAUTHORIZED 401
@@ -138,7 +135,6 @@
#define NGX_HTTP_BAD_GATEWAY 502
#define NGX_HTTP_SERVICE_UNAVAILABLE 503
#define NGX_HTTP_GATEWAY_TIME_OUT 504
-#define NGX_HTTP_VERSION_NOT_SUPPORTED 505
#define NGX_HTTP_INSUFFICIENT_STORAGE 507
@@ -252,7 +248,6 @@
typedef struct {
ngx_list_t headers;
- ngx_list_t trailers;
ngx_uint_t status;
ngx_str_t status_line;
@@ -488,6 +483,7 @@
#if (NGX_HTTP_CACHE)
unsigned cached:1;
+ unsigned cache_updater:1;
#endif
#if (NGX_HTTP_GZIP)
@@ -515,7 +511,6 @@
unsigned pipeline:1;
unsigned chunked:1;
unsigned header_only:1;
- unsigned expect_trailers:1;
unsigned keepalive:1;
unsigned lingering_close:1;
unsigned discard_body:1;
@@ -537,7 +532,6 @@
unsigned main_filter_need_in_memory:1;
unsigned filter_need_in_memory:1;
unsigned filter_need_temporary:1;
- unsigned preserve_body:1;
unsigned allow_ranges:1;
unsigned subrequest_ranges:1;
unsigned single_range:1;
@@ -546,7 +540,6 @@
unsigned stat_writing:1;
unsigned stat_processing:1;
- unsigned background:1;
unsigned health_check:1;
/* used to parse HTTP headers */
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.12.2.tar.gz/src/http/ngx_http_request_body.c
^
|
@@ -46,6 +46,13 @@
return NGX_OK;
}
+#if (NGX_HTTP_V2)
+ if (r->stream) {
+ rc = ngx_http_v2_read_request_body(r, post_handler);
+ goto done;
+ }
+#endif
+
if (ngx_http_test_expect(r) != NGX_OK) {
rc = NGX_HTTP_INTERNAL_SERVER_ERROR;
goto done;
@@ -78,13 +85,6 @@
return NGX_OK;
}
-#if (NGX_HTTP_V2)
- if (r->stream) {
- rc = ngx_http_v2_read_request_body(r);
- goto done;
- }
-#endif
-
preread = r->header_in->last - r->header_in->pos;
if (preread) {
@@ -805,11 +805,7 @@
if (r->expect_tested
|| r->headers_in.expect == NULL
- || r->http_version < NGX_HTTP_VERSION_11
-#if (NGX_HTTP_V2)
- || r->stream != NULL
-#endif
- )
+ || r->http_version < NGX_HTTP_VERSION_11)
{
return NGX_OK;
}
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.12.2.tar.gz/src/http/ngx_http_special_response.c
^
|
@@ -89,14 +89,6 @@
;
-static char ngx_http_error_308_page[] =
-"<html>" CRLF
-"<head><title>308 Permanent Redirect</title></head>" CRLF
-"<body bgcolor=\"white\">" CRLF
-"<center><h1>308 Permanent Redirect</h1></center>" CRLF
-;
-
-
static char ngx_http_error_400_page[] =
"<html>" CRLF
"<head><title>400 Bad Request</title></head>" CRLF
@@ -321,14 +313,6 @@
;
-static char ngx_http_error_505_page[] =
-"<html>" CRLF
-"<head><title>505 HTTP Version Not Supported</title></head>" CRLF
-"<body bgcolor=\"white\">" CRLF
-"<center><h1>505 HTTP Version Not Supported</h1></center>" CRLF
-;
-
-
static char ngx_http_error_507_page[] =
"<html>" CRLF
"<head><title>507 Insufficient Storage</title></head>" CRLF
@@ -352,9 +336,8 @@
ngx_null_string, /* 305 */
ngx_null_string, /* 306 */
ngx_string(ngx_http_error_307_page),
- ngx_string(ngx_http_error_308_page),
-#define NGX_HTTP_LAST_3XX 309
+#define NGX_HTTP_LAST_3XX 308
#define NGX_HTTP_OFF_4XX (NGX_HTTP_LAST_3XX - 301 + NGX_HTTP_OFF_3XX)
ngx_string(ngx_http_error_400_page),
@@ -403,7 +386,7 @@
ngx_string(ngx_http_error_502_page),
ngx_string(ngx_http_error_503_page),
ngx_string(ngx_http_error_504_page),
- ngx_string(ngx_http_error_505_page),
+ ngx_null_string, /* 505 */
ngx_null_string, /* 506 */
ngx_string(ngx_http_error_507_page)
@@ -632,8 +615,7 @@
if (overwrite != NGX_HTTP_MOVED_PERMANENTLY
&& overwrite != NGX_HTTP_MOVED_TEMPORARILY
&& overwrite != NGX_HTTP_SEE_OTHER
- && overwrite != NGX_HTTP_TEMPORARY_REDIRECT
- && overwrite != NGX_HTTP_PERMANENT_REDIRECT)
+ && overwrite != NGX_HTTP_TEMPORARY_REDIRECT)
{
r->err_status = NGX_HTTP_MOVED_TEMPORARILY;
}
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.12.2.tar.gz/src/http/ngx_http_upstream.c
^
|
@@ -182,9 +182,7 @@
#if (NGX_HTTP_SSL)
static void ngx_http_upstream_ssl_init_connection(ngx_http_request_t *,
ngx_http_upstream_t *u, ngx_connection_t *c);
-static void ngx_http_upstream_ssl_handshake_handler(ngx_connection_t *c);
-static void ngx_http_upstream_ssl_handshake(ngx_http_request_t *,
- ngx_http_upstream_t *u, ngx_connection_t *c);
+static void ngx_http_upstream_ssl_handshake(ngx_connection_t *c);
static ngx_int_t ngx_http_upstream_ssl_name(ngx_http_request_t *r,
ngx_http_upstream_t *u, ngx_connection_t *c);
#endif
@@ -427,7 +425,7 @@
{ ngx_string("upstream_cookie_"), NULL, ngx_http_upstream_cookie_variable,
0, NGX_HTTP_VAR_NOCACHEABLE|NGX_HTTP_VAR_PREFIX, 0 },
- ngx_http_null_variable
+ { ngx_null_string, NULL, NULL, 0, 0, 0 }
};
@@ -582,9 +580,6 @@
if (rc == NGX_HTTP_UPSTREAM_INVALID_HEADER) {
rc = NGX_DECLINED;
r->cached = 0;
- u->buffer.start = NULL;
- u->cache_status = NGX_HTTP_CACHE_MISS;
- u->request_sent = 1;
}
if (ngx_http_upstream_cache_background_update(r, u) != NGX_OK) {
@@ -884,7 +879,7 @@
case NGX_HTTP_CACHE_STALE:
if (((u->conf->cache_use_stale & NGX_HTTP_UPSTREAM_FT_UPDATING)
- || c->stale_updating) && !r->background
+ || c->stale_updating) && !r->cache_updater
&& u->conf->cache_background_update)
{
r->cache->background = 1;
@@ -897,7 +892,7 @@
case NGX_HTTP_CACHE_UPDATING:
if (((u->conf->cache_use_stale & NGX_HTTP_UPSTREAM_FT_UPDATING)
- || c->stale_updating) && !r->background)
+ || c->stale_updating) && !r->cache_updater)
{
u->cache_status = rc;
rc = NGX_OK;
@@ -1062,16 +1057,8 @@
return NGX_ERROR;
}
- if (rc == NGX_AGAIN) {
- rc = NGX_HTTP_UPSTREAM_INVALID_HEADER;
- }
-
/* rc == NGX_HTTP_UPSTREAM_INVALID_HEADER */
- ngx_log_error(NGX_LOG_CRIT, r->connection->log, 0,
- "cache file \"%s\" contains invalid header",
- c->file.name.data);
-
/* TODO: delete file */
return rc;
@@ -1088,19 +1075,15 @@
return NGX_OK;
}
- if (r == r->main) {
- r->preserve_body = 1;
- }
-
if (ngx_http_subrequest(r, &r->uri, &r->args, &sr, NULL,
- NGX_HTTP_SUBREQUEST_CLONE
- |NGX_HTTP_SUBREQUEST_BACKGROUND)
+ NGX_HTTP_SUBREQUEST_CLONE)
!= NGX_OK)
{
return NGX_ERROR;
}
sr->header_only = 1;
+ sr->cache_updater = 1;
return NGX_OK;
}
@@ -1160,14 +1143,11 @@
static void
ngx_http_upstream_resolve_handler(ngx_resolver_ctx_t *ctx)
{
- ngx_uint_t run_posted;
ngx_connection_t *c;
ngx_http_request_t *r;
ngx_http_upstream_t *u;
ngx_http_upstream_resolved_t *ur;
- run_posted = ctx->async;
-
r = ctx->data;
c = r->connection;
@@ -1231,9 +1211,7 @@
failed:
- if (run_posted) {
- ngx_http_run_posted_requests(c);
- }
+ ngx_http_run_posted_requests(c);
}
@@ -1628,6 +1606,7 @@
ngx_http_upstream_ssl_init_connection(ngx_http_request_t *r,
ngx_http_upstream_t *u, ngx_connection_t *c)
{
+ int tcp_nodelay;
ngx_int_t rc;
ngx_http_core_loc_conf_t *clcf;
@@ -1667,10 +1646,22 @@
clcf = ngx_http_get_module_loc_conf(r, ngx_http_core_module);
- if (clcf->tcp_nodelay && ngx_tcp_nodelay(c) != NGX_OK) {
- ngx_http_upstream_finalize_request(r, u,
+ if (clcf->tcp_nodelay && c->tcp_nodelay == NGX_TCP_NODELAY_UNSET) {
+ ngx_log_debug0(NGX_LOG_DEBUG_HTTP, c->log, 0, "tcp_nodelay");
+
+ tcp_nodelay = 1;
+
+ if (setsockopt(c->fd, IPPROTO_TCP, TCP_NODELAY,
+ (const void *) &tcp_nodelay, sizeof(int)) == -1)
+ {
+ ngx_connection_error(c, ngx_socket_errno,
+ "setsockopt(TCP_NODELAY) failed");
+ ngx_http_upstream_finalize_request(r, u,
NGX_HTTP_INTERNAL_SERVER_ERROR);
- return;
+ return;
+ }
+
+ c->tcp_nodelay = NGX_TCP_NODELAY_SET;
}
}
@@ -1684,43 +1675,26 @@
ngx_add_timer(c->write, u->conf->connect_timeout);
}
- c->ssl->handler = ngx_http_upstream_ssl_handshake_handler;
+ c->ssl->handler = ngx_http_upstream_ssl_handshake;
return;
}
- ngx_http_upstream_ssl_handshake(r, u, c);
+ ngx_http_upstream_ssl_handshake(c);
}
static void
-ngx_http_upstream_ssl_handshake_handler(ngx_connection_t *c)
+ngx_http_upstream_ssl_handshake(ngx_connection_t *c)
{
+ long rc;
ngx_http_request_t *r;
ngx_http_upstream_t *u;
r = c->data;
-
u = r->upstream;
- c = r->connection;
ngx_http_set_log_request(c->log, r);
- ngx_log_debug2(NGX_LOG_DEBUG_HTTP, c->log, 0,
- "http upstream ssl handshake: \"%V?%V\"",
- &r->uri, &r->args);
-
- ngx_http_upstream_ssl_handshake(r, u, u->peer.connection);
-
- ngx_http_run_posted_requests(c);
-}
-
-
-static void
-ngx_http_upstream_ssl_handshake(ngx_http_request_t *r, ngx_http_upstream_t *u,
- ngx_connection_t *c)
-{
- long rc;
-
if (c->ssl->handshaked) {
if (u->conf->ssl_verify) {
@@ -1748,19 +1722,28 @@
c->write->handler = ngx_http_upstream_handler;
c->read->handler = ngx_http_upstream_handler;
+ c = r->connection;
+
ngx_http_upstream_send_request(r, u, 1);
+ ngx_http_run_posted_requests(c);
return;
}
if (c->write->timedout) {
+ c = r->connection;
ngx_http_upstream_next(r, u, NGX_HTTP_UPSTREAM_FT_TIMEOUT);
+ ngx_http_run_posted_requests(c);
return;
}
failed:
+ c = r->connection;
+
ngx_http_upstream_next(r, u, NGX_HTTP_UPSTREAM_FT_ERROR);
+
+ ngx_http_run_posted_requests(c);
}
@@ -2031,6 +2014,7 @@
ngx_http_upstream_send_request_body(ngx_http_request_t *r,
ngx_http_upstream_t *u, ngx_uint_t do_write)
{
+ int tcp_nodelay;
ngx_int_t rc;
ngx_chain_t *out, *cl, *ln;
ngx_connection_t *c;
@@ -2067,8 +2051,20 @@
c = u->peer.connection;
clcf = ngx_http_get_module_loc_conf(r, ngx_http_core_module);
- if (clcf->tcp_nodelay && ngx_tcp_nodelay(c) != NGX_OK) {
- return NGX_ERROR;
+ if (clcf->tcp_nodelay && c->tcp_nodelay == NGX_TCP_NODELAY_UNSET) {
+ ngx_log_debug0(NGX_LOG_DEBUG_HTTP, c->log, 0, "tcp_nodelay");
+
+ tcp_nodelay = 1;
+
+ if (setsockopt(c->fd, IPPROTO_TCP, TCP_NODELAY,
+ (const void *) &tcp_nodelay, sizeof(int)) == -1)
+ {
+ ngx_connection_error(c, ngx_socket_errno,
+ "setsockopt(TCP_NODELAY) failed");
+ return NGX_ERROR;
+ }
+
+ c->tcp_nodelay = NGX_TCP_NODELAY_SET;
}
r->read_event_handler = ngx_http_upstream_read_request_handler;
@@ -2404,20 +2400,9 @@
rc = u->reinit_request(r);
- if (rc != NGX_OK) {
- ngx_http_upstream_finalize_request(r, u, rc);
- return NGX_OK;
- }
-
- u->cache_status = NGX_HTTP_CACHE_STALE;
- rc = ngx_http_upstream_cache_send(r, u);
-
- if (rc == NGX_DONE) {
- return NGX_OK;
- }
-
- if (rc == NGX_HTTP_UPSTREAM_INVALID_HEADER) {
- rc = NGX_HTTP_INTERNAL_SERVER_ERROR;
+ if (rc == NGX_OK) {
+ u->cache_status = NGX_HTTP_CACHE_STALE;
+ rc = ngx_http_upstream_cache_send(r, u);
}
ngx_http_upstream_finalize_request(r, u, rc);
@@ -2455,14 +2440,6 @@
u->cache_status = NGX_HTTP_CACHE_REVALIDATED;
rc = ngx_http_upstream_cache_send(r, u);
- if (rc == NGX_DONE) {
- return NGX_OK;
- }
-
- if (rc == NGX_HTTP_UPSTREAM_INVALID_HEADER) {
- rc = NGX_HTTP_INTERNAL_SERVER_ERROR;
- }
-
if (valid == 0) {
valid = r->cache->valid_sec;
updating = r->cache->updating_sec;
@@ -2548,23 +2525,13 @@
#if (NGX_HTTP_CACHE)
if (r->cache) {
+ time_t valid;
- if (u->cacheable) {
- time_t valid;
-
- valid = r->cache->valid_sec;
-
- if (valid == 0) {
- valid = ngx_http_file_cache_valid(u->conf->cache_valid,
- status);
- if (valid) {
- r->cache->valid_sec = ngx_time() + valid;
- }
- }
+ valid = ngx_http_file_cache_valid(u->conf->cache_valid, status);
- if (valid) {
- r->cache->error = status;
- }
+ if (valid) {
+ r->cache->valid_sec = ngx_time() + valid;
+ r->cache->error = status;
}
ngx_http_file_cache_free(r->cache, u->pipe->temp_file);
@@ -2788,7 +2755,7 @@
rev = c->read;
ngx_log_debug0(NGX_LOG_DEBUG_HTTP, c->log, 0,
- "http upstream process body in memory");
+ "http upstream process body on memory");
if (rev->timedout) {
ngx_connection_error(c, NGX_ETIMEDOUT, "upstream timed out");
@@ -2855,6 +2822,7 @@
static void
ngx_http_upstream_send_response(ngx_http_request_t *r, ngx_http_upstream_t *u)
{
+ int tcp_nodelay;
ssize_t n;
ngx_int_t rc;
ngx_event_pipe_t *p;
@@ -2901,9 +2869,7 @@
u->pipe->downstream_error = 1;
}
- if (r->request_body && r->request_body->temp_file
- && r == r->main && !r->preserve_body)
- {
+ if (r->request_body && r->request_body->temp_file) {
ngx_pool_run_cleanup_file(r->pool, r->request_body->temp_file->file.fd);
r->request_body->temp_file->file.fd = NGX_INVALID_FILE;
}
@@ -2937,9 +2903,21 @@
return;
}
- if (clcf->tcp_nodelay && ngx_tcp_nodelay(c) != NGX_OK) {
- ngx_http_upstream_finalize_request(r, u, NGX_ERROR);
- return;
+ if (clcf->tcp_nodelay && c->tcp_nodelay == NGX_TCP_NODELAY_UNSET) {
+ ngx_log_debug0(NGX_LOG_DEBUG_HTTP, c->log, 0, "tcp_nodelay");
+
+ tcp_nodelay = 1;
+
+ if (setsockopt(c->fd, IPPROTO_TCP, TCP_NODELAY,
+ (const void *) &tcp_nodelay, sizeof(int)) == -1)
+ {
+ ngx_connection_error(c, ngx_socket_errno,
+ "setsockopt(TCP_NODELAY) failed");
+ ngx_http_upstream_finalize_request(r, u, NGX_ERROR);
+ return;
+ }
+
+ c->tcp_nodelay = NGX_TCP_NODELAY_SET;
}
n = u->buffer.last - u->buffer.pos;
@@ -3198,6 +3176,7 @@
static void
ngx_http_upstream_upgrade(ngx_http_request_t *r, ngx_http_upstream_t *u)
{
+ int tcp_nodelay;
ngx_connection_t *c;
ngx_http_core_loc_conf_t *clcf;
@@ -3206,13 +3185,6 @@
/* TODO: prevent upgrade if not requested or not possible */
- if (r != r->main) {
- ngx_log_error(NGX_LOG_ERR, c->log, 0,
- "connection upgrade in subrequest");
- ngx_http_upstream_finalize_request(r, u, NGX_ERROR);
- return;
- }
-
r->keepalive = 0;
c->log->action = "proxying upgraded connection";
@@ -3222,15 +3194,37 @@
r->write_event_handler = ngx_http_upstream_upgraded_write_downstream;
if (clcf->tcp_nodelay) {
+ tcp_nodelay = 1;
- if (ngx_tcp_nodelay(c) != NGX_OK) {
- ngx_http_upstream_finalize_request(r, u, NGX_ERROR);
- return;
+ if (c->tcp_nodelay == NGX_TCP_NODELAY_UNSET) {
+ ngx_log_debug0(NGX_LOG_DEBUG_HTTP, c->log, 0, "tcp_nodelay");
+
+ if (setsockopt(c->fd, IPPROTO_TCP, TCP_NODELAY,
+ (const void *) &tcp_nodelay, sizeof(int)) == -1)
+ {
+ ngx_connection_error(c, ngx_socket_errno,
+ "setsockopt(TCP_NODELAY) failed");
+ ngx_http_upstream_finalize_request(r, u, NGX_ERROR);
+ return;
+ }
+
+ c->tcp_nodelay = NGX_TCP_NODELAY_SET;
}
- if (ngx_tcp_nodelay(u->peer.connection) != NGX_OK) {
- ngx_http_upstream_finalize_request(r, u, NGX_ERROR);
- return;
+ if (u->peer.connection->tcp_nodelay == NGX_TCP_NODELAY_UNSET) {
+ ngx_log_debug0(NGX_LOG_DEBUG_HTTP, u->peer.connection->log, 0,
+ "tcp_nodelay");
+
+ if (setsockopt(u->peer.connection->fd, IPPROTO_TCP, TCP_NODELAY,
+ (const void *) &tcp_nodelay, sizeof(int)) == -1)
+ {
+ ngx_connection_error(u->peer.connection, ngx_socket_errno,
+ "setsockopt(TCP_NODELAY) failed");
+ ngx_http_upstream_finalize_request(r, u, NGX_ERROR);
+ return;
+ }
+
+ u->peer.connection->tcp_nodelay = NGX_TCP_NODELAY_SET;
}
}
@@ -4118,7 +4112,6 @@
switch (ft_type) {
case NGX_HTTP_UPSTREAM_FT_TIMEOUT:
- case NGX_HTTP_UPSTREAM_FT_HTTP_504:
status = NGX_HTTP_GATEWAY_TIME_OUT;
break;
@@ -4126,10 +4119,6 @@
status = NGX_HTTP_INTERNAL_SERVER_ERROR;
break;
- case NGX_HTTP_UPSTREAM_FT_HTTP_503:
- status = NGX_HTTP_SERVICE_UNAVAILABLE;
- break;
-
case NGX_HTTP_UPSTREAM_FT_HTTP_403:
status = NGX_HTTP_FORBIDDEN;
break;
@@ -4181,20 +4170,9 @@
rc = u->reinit_request(r);
- if (rc != NGX_OK) {
- ngx_http_upstream_finalize_request(r, u, rc);
- return;
- }
-
- u->cache_status = NGX_HTTP_CACHE_STALE;
- rc = ngx_http_upstream_cache_send(r, u);
-
- if (rc == NGX_DONE) {
- return;
- }
-
- if (rc == NGX_HTTP_UPSTREAM_INVALID_HEADER) {
- rc = NGX_HTTP_INTERNAL_SERVER_ERROR;
+ if (rc == NGX_OK) {
+ u->cache_status = NGX_HTTP_CACHE_STALE;
+ rc = ngx_http_upstream_cache_send(r, u);
}
ngx_http_upstream_finalize_request(r, u, rc);
@@ -4453,8 +4431,15 @@
u = r->upstream;
u->headers_in.last_modified = h;
- u->headers_in.last_modified_time = ngx_parse_http_time(h->value.data,
- h->value.len);
+
+#if (NGX_HTTP_CACHE)
+
+ if (u->cacheable) {
+ u->headers_in.last_modified_time = ngx_parse_http_time(h->value.data,
+ h->value.len);
+ }
+
+#endif
return NGX_OK;
}
@@ -4565,7 +4550,7 @@
}
if (*p >= '0' && *p <= '9') {
- n = n * 10 + (*p - '0');
+ n = n * 10 + *p - '0';
continue;
}
@@ -4593,7 +4578,7 @@
}
if (*p >= '0' && *p <= '9') {
- n = n * 10 + (*p - '0');
+ n = n * 10 + *p - '0';
continue;
}
@@ -4616,7 +4601,7 @@
}
if (*p >= '0' && *p <= '9') {
- n = n * 10 + (*p - '0');
+ n = n * 10 + *p - '0';
continue;
}
@@ -4912,18 +4897,17 @@
}
}
- ho = ngx_list_push(&r->headers_out.headers);
- if (ho == NULL) {
+ ph = ngx_array_push(pa);
+ if (ph == NULL) {
return NGX_ERROR;
}
- *ho = *h;
-
- ph = ngx_array_push(pa);
- if (ph == NULL) {
+ ho = ngx_list_push(&r->headers_out.headers);
+ if (ho == NULL) {
return NGX_ERROR;
}
+ *ho = *h;
*ph = ho;
return NGX_OK;
@@ -4996,8 +4980,15 @@
*ho = *h;
r->headers_out.last_modified = ho;
- r->headers_out.last_modified_time =
+
+#if (NGX_HTTP_CACHE)
+
+ if (r->upstream->cacheable) {
+ r->headers_out.last_modified_time =
r->upstream->headers_in.last_modified_time;
+ }
+
+#endif
return NGX_OK;
}
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.12.2.tar.gz/src/http/ngx_http_upstream.h
^
|
@@ -98,8 +98,8 @@
ngx_uint_t max_fails;
time_t fail_timeout;
ngx_msec_t slow_start;
- ngx_uint_t down;
+ unsigned down:1;
unsigned backup:1;
NGX_COMPAT_BEGIN(6)
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.12.2.tar.gz/src/http/ngx_http_variables.c
^
|
@@ -38,8 +38,6 @@
ngx_http_variable_value_t *v, uintptr_t data);
static ngx_int_t ngx_http_variable_unknown_header_out(ngx_http_request_t *r,
ngx_http_variable_value_t *v, uintptr_t data);
-static ngx_int_t ngx_http_variable_unknown_trailer_out(ngx_http_request_t *r,
- ngx_http_variable_value_t *v, uintptr_t data);
static ngx_int_t ngx_http_variable_request_line(ngx_http_request_t *r,
ngx_http_variable_value_t *v, uintptr_t data);
static ngx_int_t ngx_http_variable_cookie(ngx_http_request_t *r,
@@ -367,16 +365,13 @@
{ ngx_string("sent_http_"), NULL, ngx_http_variable_unknown_header_out,
0, NGX_HTTP_VAR_PREFIX, 0 },
- { ngx_string("sent_trailer_"), NULL, ngx_http_variable_unknown_trailer_out,
- 0, NGX_HTTP_VAR_PREFIX, 0 },
-
{ ngx_string("cookie_"), NULL, ngx_http_variable_cookie,
0, NGX_HTTP_VAR_PREFIX, 0 },
{ ngx_string("arg_"), NULL, ngx_http_variable_argument,
0, NGX_HTTP_VAR_NOCACHEABLE|NGX_HTTP_VAR_PREFIX, 0 },
- ngx_http_null_variable
+ { ngx_null_string, NULL, NULL, 0, 0, 0 }
};
@@ -939,16 +934,6 @@
}
-static ngx_int_t
-ngx_http_variable_unknown_trailer_out(ngx_http_request_t *r,
- ngx_http_variable_value_t *v, uintptr_t data)
-{
- return ngx_http_variable_unknown_header(v, (ngx_str_t *) data,
- &r->headers_out.trailers.part,
- sizeof("sent_trailer_") - 1);
-}
-
-
ngx_int_t
ngx_http_variable_unknown_header(ngx_http_variable_value_t *v, ngx_str_t *var,
ngx_list_part_t *part, size_t prefix)
@@ -1475,15 +1460,17 @@
ngx_http_variable_is_args(ngx_http_request_t *r,
ngx_http_variable_value_t *v, uintptr_t data)
{
+ v->valid = 1;
+ v->no_cacheable = 0;
+ v->not_found = 0;
+
if (r->args.len == 0) {
- *v = ngx_http_variable_null_value;
+ v->len = 0;
+ v->data = NULL;
return NGX_OK;
}
v->len = 1;
- v->valid = 1;
- v->no_cacheable = 0;
- v->not_found = 0;
v->data = (u_char *) "?";
return NGX_OK;
@@ -2000,7 +1987,11 @@
return NGX_OK;
}
- *v = ngx_http_variable_null_value;
+ v->len = 0;
+ v->valid = 1;
+ v->no_cacheable = 0;
+ v->not_found = 0;
+ v->data = (u_char *) "";
return NGX_OK;
}
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.12.2.tar.gz/src/http/ngx_http_variables.h
^
|
@@ -43,8 +43,6 @@
ngx_uint_t index;
};
-#define ngx_http_null_variable { ngx_null_string, NULL, NULL, 0, 0, 0 }
-
ngx_http_variable_t *ngx_http_add_variable(ngx_conf_t *cf, ngx_str_t *name,
ngx_uint_t flags);
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.12.2.tar.gz/src/http/v2/ngx_http_v2.c
^
|
@@ -28,7 +28,6 @@
#define NGX_HTTP_V2_HTTP_1_1_REQUIRED 0xd
/* frame sizes */
-#define NGX_HTTP_V2_SETTINGS_ACK_SIZE 0
#define NGX_HTTP_V2_RST_STREAM_SIZE 4
#define NGX_HTTP_V2_PRIORITY_SIZE 5
#define NGX_HTTP_V2_PING_SIZE 8
@@ -129,7 +128,8 @@
#define ngx_http_v2_index_size(h2scf) (h2scf->streams_index_mask + 1)
#define ngx_http_v2_index(h2scf, sid) ((sid >> 1) & h2scf->streams_index_mask)
-static ngx_int_t ngx_http_v2_send_settings(ngx_http_v2_connection_t *h2c);
+static ngx_int_t ngx_http_v2_send_settings(ngx_http_v2_connection_t *h2c,
+ ngx_uint_t ack);
static ngx_int_t ngx_http_v2_settings_frame_handler(
ngx_http_v2_connection_t *h2c, ngx_http_v2_out_frame_t *frame);
static ngx_int_t ngx_http_v2_send_window_update(ngx_http_v2_connection_t *h2c,
@@ -245,8 +245,6 @@
h2c->frame_size = NGX_HTTP_V2_DEFAULT_FRAME_SIZE;
- h2c->table_update = 1;
-
h2scf = ngx_http_get_module_srv_conf(hc->conf_ctx, ngx_http_v2_module);
h2c->pool = ngx_create_pool(h2scf->pool_size, h2c->connection->log);
@@ -271,7 +269,7 @@
return;
}
- if (ngx_http_v2_send_settings(h2c) == NGX_ERROR) {
+ if (ngx_http_v2_send_settings(h2c, 0) == NGX_ERROR) {
ngx_http_close_connection(c);
return;
}
@@ -531,8 +529,29 @@
tcp_nodelay = 1;
}
- if (tcp_nodelay && clcf->tcp_nodelay && ngx_tcp_nodelay(c) != NGX_OK) {
- goto error;
+ if (tcp_nodelay
+ && clcf->tcp_nodelay
+ && c->tcp_nodelay == NGX_TCP_NODELAY_UNSET)
+ {
+ ngx_log_debug0(NGX_LOG_DEBUG_HTTP, c->log, 0, "tcp_nodelay");
+
+ if (setsockopt(c->fd, IPPROTO_TCP, TCP_NODELAY,
+ (const void *) &tcp_nodelay, sizeof(int))
+ == -1)
+ {
+#if (NGX_SOLARIS)
+ /* Solaris returns EINVAL if a socket has been shut down */
+ c->log_error = NGX_ERROR_IGNORE_EINVAL;
+#endif
+
+ ngx_connection_error(c, ngx_socket_errno,
+ "setsockopt(TCP_NODELAY) failed");
+
+ c->log_error = NGX_ERROR_INFO;
+ goto error;
+ }
+
+ c->tcp_nodelay = NGX_TCP_NODELAY_SET;
}
for ( /* void */ ; out; out = fn) {
@@ -748,7 +767,7 @@
type = ngx_http_v2_parse_type(head);
ngx_log_debug4(NGX_LOG_DEBUG_HTTP, h2c->connection->log, 0,
- "http2 frame type:%ui f:%Xd l:%uz sid:%ui",
+ "process http2 frame type:%ui f:%Xd l:%uz sid:%ui",
type, h2c->state.flags, h2c->state.length, h2c->state.sid);
if (type >= NGX_HTTP_V2_FRAME_STATES) {
@@ -1316,7 +1335,7 @@
}
ngx_log_debug2(NGX_LOG_DEBUG_HTTP, h2c->connection->log, 0,
- "http2 %s string, len:%i",
+ "http2 hpack %s string length: %i",
huff ? "encoded" : "raw", len);
h2scf = ngx_http_get_module_srv_conf(h2c->http_connection->conf_ctx,
@@ -1570,10 +1589,6 @@
rc = ngx_http_v2_pseudo_header(r, header);
if (rc == NGX_OK) {
- ngx_log_debug2(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
- "http2 header: \":%V: %V\"",
- &header->name, &header->value);
-
return ngx_http_v2_state_header_complete(h2c, pos, end);
}
@@ -1615,40 +1630,36 @@
NGX_HTTP_V2_INTERNAL_ERROR);
}
- } else {
- h = ngx_list_push(&r->headers_in.headers);
- if (h == NULL) {
- return ngx_http_v2_connection_error(h2c,
- NGX_HTTP_V2_INTERNAL_ERROR);
- }
+ return ngx_http_v2_state_header_complete(h2c, pos, end);
+ }
- h->key.len = header->name.len;
- h->key.data = header->name.data;
+ h = ngx_list_push(&r->headers_in.headers);
+ if (h == NULL) {
+ return ngx_http_v2_connection_error(h2c, NGX_HTTP_V2_INTERNAL_ERROR);
+ }
- /*
- * TODO Optimization: precalculate hash
- * and handler for indexed headers.
- */
- h->hash = ngx_hash_key(h->key.data, h->key.len);
+ h->key.len = header->name.len;
+ h->key.data = header->name.data;
- h->value.len = header->value.len;
- h->value.data = header->value.data;
+ /* TODO Optimization: precalculate hash and handler for indexed headers. */
+ h->hash = ngx_hash_key(h->key.data, h->key.len);
+
+ h->value.len = header->value.len;
+ h->value.data = header->value.data;
- h->lowcase_key = h->key.data;
+ h->lowcase_key = h->key.data;
- cmcf = ngx_http_get_module_main_conf(r, ngx_http_core_module);
+ cmcf = ngx_http_get_module_main_conf(r, ngx_http_core_module);
- hh = ngx_hash_find(&cmcf->headers_in_hash, h->hash,
- h->lowcase_key, h->key.len);
+ hh = ngx_hash_find(&cmcf->headers_in_hash, h->hash,
+ h->lowcase_key, h->key.len);
- if (hh && hh->handler(r, h, hh->offset) != NGX_OK) {
- goto error;
- }
+ if (hh && hh->handler(r, h, hh->offset) != NGX_OK) {
+ goto error;
}
ngx_log_debug2(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
- "http2 header: \"%V: %V\"",
- &header->name, &header->value);
+ "http2 http header: \"%V: %V\"", &h->key, &h->value);
return ngx_http_v2_state_header_complete(h2c, pos, end);
@@ -1961,6 +1972,8 @@
return ngx_http_v2_connection_error(h2c, NGX_HTTP_V2_SIZE_ERROR);
}
+ ngx_http_v2_send_settings(h2c, 1);
+
return ngx_http_v2_state_settings_params(h2c, pos, end);
}
@@ -1969,11 +1982,7 @@
ngx_http_v2_state_settings_params(ngx_http_v2_connection_t *h2c, u_char *pos,
u_char *end)
{
- ssize_t window_delta;
- ngx_uint_t id, value;
- ngx_http_v2_out_frame_t *frame;
-
- window_delta = 0;
+ ngx_uint_t id, value;
while (h2c->state.length) {
if (end - pos < NGX_HTTP_V2_SETTINGS_PARAM_SIZE) {
@@ -1999,7 +2008,12 @@
NGX_HTTP_V2_FLOW_CTRL_ERROR);
}
- window_delta = value - h2c->init_window;
+ if (ngx_http_v2_adjust_windows(h2c, value - h2c->init_window)
+ != NGX_OK)
+ {
+ return ngx_http_v2_connection_error(h2c,
+ NGX_HTTP_V2_INTERNAL_ERROR);
+ }
h2c->init_window = value;
break;
@@ -2027,22 +2041,6 @@
pos += NGX_HTTP_V2_SETTINGS_PARAM_SIZE;
}
- frame = ngx_http_v2_get_frame(h2c, NGX_HTTP_V2_SETTINGS_ACK_SIZE,
- NGX_HTTP_V2_SETTINGS_FRAME,
- NGX_HTTP_V2_ACK_FLAG, 0);
- if (frame == NULL) {
- return ngx_http_v2_connection_error(h2c, NGX_HTTP_V2_INTERNAL_ERROR);
- }
-
- ngx_http_v2_queue_ordered_frame(h2c, frame);
-
- if (window_delta) {
- if (ngx_http_v2_adjust_windows(h2c, window_delta) != NGX_OK) {
- return ngx_http_v2_connection_error(h2c,
- NGX_HTTP_V2_INTERNAL_ERROR);
- }
- }
-
return ngx_http_v2_state_complete(h2c, pos, end);
}
@@ -2168,44 +2166,6 @@
"http2 WINDOW_UPDATE frame sid:%ui window:%uz",
h2c->state.sid, window);
- if (window == 0) {
- if (h2c->state.sid == 0) {
- ngx_log_error(NGX_LOG_INFO, h2c->connection->log, 0,
- "client sent WINDOW_UPDATE frame "
- "with incorrect window increment 0");
-
- return ngx_http_v2_connection_error(h2c,
- NGX_HTTP_V2_PROTOCOL_ERROR);
- }
-
- ngx_log_error(NGX_LOG_INFO, h2c->connection->log, 0,
- "client sent WINDOW_UPDATE frame for stream %ui "
- "with incorrect window increment 0", h2c->state.sid);
-
- node = ngx_http_v2_get_node_by_id(h2c, h2c->state.sid, 0);
-
- if (node && node->stream) {
- if (ngx_http_v2_terminate_stream(h2c, node->stream,
- NGX_HTTP_V2_PROTOCOL_ERROR)
- == NGX_ERROR)
- {
- return ngx_http_v2_connection_error(h2c,
- NGX_HTTP_V2_INTERNAL_ERROR);
- }
-
- } else {
- if (ngx_http_v2_send_rst_stream(h2c, h2c->state.sid,
- NGX_HTTP_V2_PROTOCOL_ERROR)
- == NGX_ERROR)
- {
- return ngx_http_v2_connection_error(h2c,
- NGX_HTTP_V2_INTERNAL_ERROR);
- }
- }
-
- return ngx_http_v2_state_complete(h2c, pos, end);
- }
-
if (h2c->state.sid) {
node = ngx_http_v2_get_node_by_id(h2c, h2c->state.sid, 0);
@@ -2486,7 +2446,7 @@
static ngx_int_t
-ngx_http_v2_send_settings(ngx_http_v2_connection_t *h2c)
+ngx_http_v2_send_settings(ngx_http_v2_connection_t *h2c, ngx_uint_t ack)
{
size_t len;
ngx_buf_t *buf;
@@ -2494,8 +2454,8 @@
ngx_http_v2_srv_conf_t *h2scf;
ngx_http_v2_out_frame_t *frame;
- ngx_log_debug0(NGX_LOG_DEBUG_HTTP, h2c->connection->log, 0,
- "http2 send SETTINGS frame");
+ ngx_log_debug1(NGX_LOG_DEBUG_HTTP, h2c->connection->log, 0,
+ "http2 send SETTINGS frame ack:%ui", ack);
frame = ngx_palloc(h2c->pool, sizeof(ngx_http_v2_out_frame_t));
if (frame == NULL) {
@@ -2507,7 +2467,7 @@
return NGX_ERROR;
}
- len = NGX_HTTP_V2_SETTINGS_PARAM_SIZE * 3;
+ len = ack ? 0 : (sizeof(uint16_t) + sizeof(uint32_t)) * 3;
buf = ngx_create_temp_buf(h2c->pool, NGX_HTTP_V2_FRAME_HEADER_SIZE + len);
if (buf == NULL) {
@@ -2531,26 +2491,28 @@
buf->last = ngx_http_v2_write_len_and_type(buf->last, len,
NGX_HTTP_V2_SETTINGS_FRAME);
- *buf->last++ = NGX_HTTP_V2_NO_FLAG;
+ *buf->last++ = ack ? NGX_HTTP_V2_ACK_FLAG : NGX_HTTP_V2_NO_FLAG;
buf->last = ngx_http_v2_write_sid(buf->last, 0);
- h2scf = ngx_http_get_module_srv_conf(h2c->http_connection->conf_ctx,
- ngx_http_v2_module);
-
- buf->last = ngx_http_v2_write_uint16(buf->last,
- NGX_HTTP_V2_MAX_STREAMS_SETTING);
- buf->last = ngx_http_v2_write_uint32(buf->last,
- h2scf->concurrent_streams);
+ if (!ack) {
+ h2scf = ngx_http_get_module_srv_conf(h2c->http_connection->conf_ctx,
+ ngx_http_v2_module);
+
+ buf->last = ngx_http_v2_write_uint16(buf->last,
+ NGX_HTTP_V2_MAX_STREAMS_SETTING);
+ buf->last = ngx_http_v2_write_uint32(buf->last,
+ h2scf->concurrent_streams);
- buf->last = ngx_http_v2_write_uint16(buf->last,
+ buf->last = ngx_http_v2_write_uint16(buf->last,
NGX_HTTP_V2_INIT_WINDOW_SIZE_SETTING);
- buf->last = ngx_http_v2_write_uint32(buf->last, h2scf->preread_size);
+ buf->last = ngx_http_v2_write_uint32(buf->last, h2scf->preread_size);
- buf->last = ngx_http_v2_write_uint16(buf->last,
- NGX_HTTP_V2_MAX_FRAME_SIZE_SETTING);
- buf->last = ngx_http_v2_write_uint32(buf->last,
- NGX_HTTP_V2_MAX_FRAME_SIZE);
+ buf->last = ngx_http_v2_write_uint16(buf->last,
+ NGX_HTTP_V2_MAX_FRAME_SIZE_SETTING);
+ buf->last = ngx_http_v2_write_uint32(buf->last,
+ NGX_HTTP_V2_MAX_FRAME_SIZE);
+ }
ngx_http_v2_queue_blocked_frame(h2c, frame);
@@ -3334,22 +3296,8 @@
static const u_char ending[] = " HTTP/2.0";
if (r->method_name.len == 0
- || r->schema_start == NULL
|| r->unparsed_uri.len == 0)
{
- if (r->method_name.len == 0) {
- ngx_log_error(NGX_LOG_INFO, r->connection->log, 0,
- "client sent no :method header");
-
- } else if (r->schema_start == NULL) {
- ngx_log_error(NGX_LOG_INFO, r->connection->log, 0,
- "client sent no :schema header");
-
- } else {
- ngx_log_error(NGX_LOG_INFO, r->connection->log, 0,
- "client sent no :path header");
- }
-
ngx_http_finalize_request(r, NGX_HTTP_BAD_REQUEST);
return NGX_ERROR;
}
@@ -3375,7 +3323,7 @@
ngx_memcpy(p, ending, sizeof(ending));
ngx_log_debug1(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
- "http2 request line: \"%V\"", &r->request_line);
+ "http2 http request line: \"%V\"", &r->request_line);
return NGX_OK;
}
@@ -3536,7 +3484,8 @@
ngx_int_t
-ngx_http_v2_read_request_body(ngx_http_request_t *r)
+ngx_http_v2_read_request_body(ngx_http_request_t *r,
+ ngx_http_client_body_handler_pt post_handler)
{
off_t len;
size_t size;
@@ -3549,14 +3498,33 @@
ngx_http_v2_connection_t *h2c;
stream = r->stream;
- rb = r->request_body;
if (stream->skip_data) {
r->request_body_no_buffering = 0;
- rb->post_handler(r);
+ post_handler(r);
return NGX_OK;
}
+ rb = ngx_pcalloc(r->pool, sizeof(ngx_http_request_body_t));
+ if (rb == NULL) {
+ return NGX_HTTP_INTERNAL_SERVER_ERROR;
+ }
+
+ /*
+ * set by ngx_pcalloc():
+ *
+ * rb->bufs = NULL;
+ * rb->buf = NULL;
+ * rb->received = 0;
+ * rb->free = NULL;
+ * rb->busy = NULL;
+ */
+
+ rb->rest = 1;
+ rb->post_handler = post_handler;
+
+ r->request_body = rb;
+
h2scf = ngx_http_get_module_srv_conf(r, ngx_http_v2_module);
clcf = ngx_http_get_module_loc_conf(r, ngx_http_core_module);
@@ -3601,8 +3569,6 @@
return NGX_HTTP_INTERNAL_SERVER_ERROR;
}
- rb->rest = 1;
-
buf = stream->preread;
if (stream->in_closed) {
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.12.2.tar.gz/src/http/v2/ngx_http_v2.h
^
|
@@ -144,7 +144,6 @@
unsigned closed_nodes:8;
unsigned settings_ack:1;
- unsigned table_update:1;
unsigned blocked:1;
unsigned goaway:1;
};
@@ -262,19 +261,11 @@
}
-static ngx_inline void
-ngx_http_v2_queue_ordered_frame(ngx_http_v2_connection_t *h2c,
- ngx_http_v2_out_frame_t *frame)
-{
- frame->next = h2c->last_out;
- h2c->last_out = frame;
-}
-
-
void ngx_http_v2_init(ngx_event_t *rev);
void ngx_http_v2_request_headers_init(void);
-ngx_int_t ngx_http_v2_read_request_body(ngx_http_request_t *r);
+ngx_int_t ngx_http_v2_read_request_body(ngx_http_request_t *r,
+ ngx_http_client_body_handler_pt post_handler);
ngx_int_t ngx_http_v2_read_unbuffered_request_body(ngx_http_request_t *r);
void ngx_http_v2_close_stream(ngx_http_v2_stream_t *stream, ngx_int_t rc);
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.12.2.tar.gz/src/http/v2/ngx_http_v2_filter_module.c
^
|
@@ -50,17 +50,13 @@
#define NGX_HTTP_V2_SERVER_INDEX 54
#define NGX_HTTP_V2_VARY_INDEX 59
-#define NGX_HTTP_V2_NO_TRAILERS (ngx_http_v2_out_frame_t *) -1
-
static u_char *ngx_http_v2_string_encode(u_char *dst, u_char *src, size_t len,
u_char *tmp, ngx_uint_t lower);
static u_char *ngx_http_v2_write_int(u_char *pos, ngx_uint_t prefix,
ngx_uint_t value);
static ngx_http_v2_out_frame_t *ngx_http_v2_create_headers_frame(
- ngx_http_request_t *r, u_char *pos, u_char *end, ngx_uint_t fin);
-static ngx_http_v2_out_frame_t *ngx_http_v2_create_trailers_frame(
- ngx_http_request_t *r);
+ ngx_http_request_t *r, u_char *pos, u_char *end);
static ngx_chain_t *ngx_http_v2_send_chain(ngx_connection_t *fc,
ngx_chain_t *in, off_t limit);
@@ -139,7 +135,6 @@
ngx_connection_t *fc;
ngx_http_cleanup_t *cln;
ngx_http_v2_out_frame_t *frame;
- ngx_http_v2_connection_t *h2c;
ngx_http_core_loc_conf_t *clcf;
ngx_http_core_srv_conf_t *cscf;
u_char addr[NGX_SOCKADDR_STRLEN];
@@ -236,11 +231,7 @@
}
}
- h2c = r->stream->connection;
-
- len = h2c->table_update ? 1 : 0;
-
- len += status ? 1 : 1 + ngx_http_v2_literal_size("418");
+ len = status ? 1 : 1 + ngx_http_v2_literal_size("418");
clcf = ngx_http_get_module_loc_conf(r, ngx_http_core_module);
@@ -428,13 +419,6 @@
start = pos;
- if (h2c->table_update) {
- ngx_log_debug0(NGX_LOG_DEBUG_HTTP, fc->log, 0,
- "http2 table size update: 0");
- *pos++ = (1 << 5) | 0;
- h2c->table_update = 0;
- }
-
ngx_log_debug1(NGX_LOG_DEBUG_HTTP, fc->log, 0,
"http2 output header: \":status: %03ui\"",
r->headers_out.status);
@@ -628,15 +612,13 @@
header[i].value.len, tmp);
}
- frame = ngx_http_v2_create_headers_frame(r, start, pos, r->header_only);
+ frame = ngx_http_v2_create_headers_frame(r, start, pos);
if (frame == NULL) {
return NGX_ERROR;
}
ngx_http_v2_queue_blocked_frame(r->stream->connection, frame);
- r->stream->queued = 1;
-
cln = ngx_http_cleanup_add(r, 0);
if (cln == NULL) {
return NGX_ERROR;
@@ -645,6 +627,8 @@
cln->handler = ngx_http_v2_filter_cleanup;
cln->data = r->stream;
+ r->stream->queued = 1;
+
fc->send_chain = ngx_http_v2_send_chain;
fc->need_last_buf = 1;
@@ -652,118 +636,6 @@
}
-static ngx_http_v2_out_frame_t *
-ngx_http_v2_create_trailers_frame(ngx_http_request_t *r)
-{
- u_char *pos, *start, *tmp;
- size_t len, tmp_len;
- ngx_uint_t i;
- ngx_list_part_t *part;
- ngx_table_elt_t *header;
-
- len = 0;
- tmp_len = 0;
-
- part = &r->headers_out.trailers.part;
- header = part->elts;
-
- for (i = 0; /* void */; i++) {
-
- if (i >= part->nelts) {
- if (part->next == NULL) {
- break;
- }
-
- part = part->next;
- header = part->elts;
- i = 0;
- }
-
- if (header[i].hash == 0) {
- continue;
- }
-
- if (header[i].key.len > NGX_HTTP_V2_MAX_FIELD) {
- ngx_log_error(NGX_LOG_CRIT, r->connection->log, 0,
- "too long response trailer name: \"%V\"",
- &header[i].key);
- return NULL;
- }
-
- if (header[i].value.len > NGX_HTTP_V2_MAX_FIELD) {
- ngx_log_error(NGX_LOG_CRIT, r->connection->log, 0,
- "too long response trailer value: \"%V: %V\"",
- &header[i].key, &header[i].value);
- return NULL;
- }
-
- len += 1 + NGX_HTTP_V2_INT_OCTETS + header[i].key.len
- + NGX_HTTP_V2_INT_OCTETS + header[i].value.len;
-
- if (header[i].key.len > tmp_len) {
- tmp_len = header[i].key.len;
- }
-
- if (header[i].value.len > tmp_len) {
- tmp_len = header[i].value.len;
- }
- }
-
- if (len == 0) {
- return NGX_HTTP_V2_NO_TRAILERS;
- }
-
- tmp = ngx_palloc(r->pool, tmp_len);
- pos = ngx_pnalloc(r->pool, len);
-
- if (pos == NULL || tmp == NULL) {
- return NULL;
- }
-
- start = pos;
-
- part = &r->headers_out.trailers.part;
- header = part->elts;
-
- for (i = 0; /* void */; i++) {
-
- if (i >= part->nelts) {
- if (part->next == NULL) {
- break;
- }
-
- part = part->next;
- header = part->elts;
- i = 0;
- }
-
- if (header[i].hash == 0) {
- continue;
- }
-
-#if (NGX_DEBUG)
- if (r->connection->log->log_level & NGX_LOG_DEBUG_HTTP) {
- ngx_strlow(tmp, header[i].key.data, header[i].key.len);
-
- ngx_log_debug3(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
- "http2 output trailer: \"%*s: %V\"",
- header[i].key.len, tmp, &header[i].value);
- }
-#endif
-
- *pos++ = 0;
-
- pos = ngx_http_v2_write_name(pos, header[i].key.data,
- header[i].key.len, tmp);
-
- pos = ngx_http_v2_write_value(pos, header[i].value.data,
- header[i].value.len, tmp);
- }
-
- return ngx_http_v2_create_headers_frame(r, start, pos, 1);
-}
-
-
static u_char *
ngx_http_v2_string_encode(u_char *dst, u_char *src, size_t len, u_char *tmp,
ngx_uint_t lower)
@@ -814,7 +686,7 @@
static ngx_http_v2_out_frame_t *
ngx_http_v2_create_headers_frame(ngx_http_request_t *r, u_char *pos,
- u_char *end, ngx_uint_t fin)
+ u_char *end)
{
u_char type, flags;
size_t rest, frame_size;
@@ -835,12 +707,12 @@
frame->stream = stream;
frame->length = rest;
frame->blocked = 1;
- frame->fin = fin;
+ frame->fin = r->header_only;
ll = &frame->first;
type = NGX_HTTP_V2_HEADERS_FRAME;
- flags = fin ? NGX_HTTP_V2_END_STREAM_FLAG : NGX_HTTP_V2_NO_FLAG;
+ flags = r->header_only ? NGX_HTTP_V2_END_STREAM_FLAG : NGX_HTTP_V2_NO_FLAG;
frame_size = stream->connection->frame_size;
for ( ;; ) {
@@ -904,7 +776,7 @@
continue;
}
- b->last_buf = fin;
+ b->last_buf = r->header_only;
cl->next = NULL;
frame->last = cl;
@@ -926,7 +798,7 @@
ngx_http_request_t *r;
ngx_http_v2_stream_t *stream;
ngx_http_v2_loc_conf_t *h2lcf;
- ngx_http_v2_out_frame_t *frame, *trailers;
+ ngx_http_v2_out_frame_t *frame;
ngx_http_v2_connection_t *h2c;
r = fc->data;
@@ -1000,8 +872,6 @@
frame_size = (h2lcf->chunk_size < h2c->frame_size)
? h2lcf->chunk_size : h2c->frame_size;
- trailers = NGX_HTTP_V2_NO_TRAILERS;
-
#if (NGX_SUPPRESS_WARN)
cl = NULL;
#endif
@@ -1064,39 +934,19 @@
size -= rest;
}
- if (cl->buf->last_buf) {
- trailers = ngx_http_v2_create_trailers_frame(r);
- if (trailers == NULL) {
- return NGX_CHAIN_ERROR;
- }
-
- if (trailers != NGX_HTTP_V2_NO_TRAILERS) {
- cl->buf->last_buf = 0;
- }
+ frame = ngx_http_v2_filter_get_data_frame(stream, frame_size, out, cl);
+ if (frame == NULL) {
+ return NGX_CHAIN_ERROR;
}
- if (frame_size || cl->buf->last_buf) {
- frame = ngx_http_v2_filter_get_data_frame(stream, frame_size,
- out, cl);
- if (frame == NULL) {
- return NGX_CHAIN_ERROR;
- }
+ ngx_http_v2_queue_frame(h2c, frame);
- ngx_http_v2_queue_frame(h2c, frame);
+ h2c->send_window -= frame_size;
- h2c->send_window -= frame_size;
-
- stream->send_window -= frame_size;
- stream->queued++;
- }
+ stream->send_window -= frame_size;
+ stream->queued++;
if (in == NULL) {
-
- if (trailers != NGX_HTTP_V2_NO_TRAILERS) {
- ngx_http_v2_queue_frame(h2c, trailers);
- stream->queued++;
- }
-
break;
}
@@ -1269,7 +1119,7 @@
ngx_http_v2_stream_t *stream)
{
ngx_log_debug3(NGX_LOG_DEBUG_HTTP, h2c->connection->log, 0,
- "http2:%ui windows: conn:%uz stream:%z",
+ "http2:%ui available windows: conn:%uz stream:%z",
stream->node->id, h2c->send_window, stream->send_window);
if (stream->send_window <= 0) {
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.12.2.tar.gz/src/http/v2/ngx_http_v2_module.c
^
|
@@ -225,7 +225,7 @@
{ ngx_string("http2"), NULL,
ngx_http_v2_variable, 0, 0, 0 },
- ngx_http_null_variable
+ { ngx_null_string, NULL, NULL, 0, 0, 0 }
};
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.12.2.tar.gz/src/http/v2/ngx_http_v2_table.c
^
|
@@ -102,7 +102,7 @@
ngx_log_debug2(NGX_LOG_DEBUG_HTTP, h2c->connection->log, 0,
"http2 get indexed %s: %ui",
- name_only ? "name" : "header", index);
+ name_only ? "header" : "header name", index);
index--;
@@ -180,7 +180,7 @@
ngx_http_v2_header_t *entry, **entries;
ngx_log_debug2(NGX_LOG_DEBUG_HTTP, h2c->connection->log, 0,
- "http2 table add: \"%V: %V\"",
+ "http2 add header to hpack table: \"%V: %V\"",
&header->name, &header->value);
if (h2c->hpack.entries == NULL) {
@@ -293,7 +293,7 @@
size += 32;
ngx_log_debug2(NGX_LOG_DEBUG_HTTP, h2c->connection->log, 0,
- "http2 table account: %uz free:%uz",
+ "http2 hpack table account: %uz free:%uz",
size, h2c->hpack.free);
if (size <= h2c->hpack.free) {
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.12.2.tar.gz/src/mail/ngx_mail.c
^
|
@@ -333,8 +333,6 @@
ls->log.handler = ngx_accept_log_error;
ls->backlog = addr[i].opt.backlog;
- ls->rcvbuf = addr[i].opt.rcvbuf;
- ls->sndbuf = addr[i].opt.sndbuf;
ls->keepalive = addr[i].opt.so_keepalive;
#if (NGX_HAVE_KEEPALIVE_TUNABLE)
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.12.2.tar.gz/src/mail/ngx_mail.h
^
|
@@ -46,8 +46,6 @@
int tcp_keepcnt;
#endif
int backlog;
- int rcvbuf;
- int sndbuf;
} ngx_mail_listen_t;
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.12.2.tar.gz/src/mail/ngx_mail_core_module.c
^
|
@@ -295,7 +295,7 @@
{
ngx_mail_core_srv_conf_t *cscf = conf;
- ngx_str_t *value, size;
+ ngx_str_t *value;
ngx_url_t u;
ngx_uint_t i, m;
ngx_mail_listen_t *ls;
@@ -350,8 +350,6 @@
ls->socklen = u.socklen;
ls->backlog = NGX_LISTEN_BACKLOG;
- ls->rcvbuf = -1;
- ls->sndbuf = -1;
ls->wildcard = u.wildcard;
ls->ctx = cf->ctx;
@@ -397,38 +395,6 @@
return NGX_CONF_ERROR;
}
- continue;
- }
-
- if (ngx_strncmp(value[i].data, "rcvbuf=", 7) == 0) {
- size.len = value[i].len - 7;
- size.data = value[i].data + 7;
-
- ls->rcvbuf = ngx_parse_size(&size);
- ls->bind = 1;
-
- if (ls->rcvbuf == NGX_ERROR) {
- ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
- "invalid rcvbuf \"%V\"", &value[i]);
- return NGX_CONF_ERROR;
- }
-
- continue;
- }
-
- if (ngx_strncmp(value[i].data, "sndbuf=", 7) == 0) {
- size.len = value[i].len - 7;
- size.data = value[i].data + 7;
-
- ls->sndbuf = ngx_parse_size(&size);
- ls->bind = 1;
-
- if (ls->sndbuf == NGX_ERROR) {
- ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
- "invalid sndbuf \"%V\"", &value[i]);
- return NGX_CONF_ERROR;
- }
-
continue;
}
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.12.2.tar.gz/src/mail/ngx_mail_handler.c
^
|
@@ -222,7 +222,7 @@
ngx_mail_session_t *s;
ngx_mail_core_srv_conf_t *cscf;
- if (ngx_ssl_create_connection(ssl, c, 0) != NGX_OK) {
+ if (ngx_ssl_create_connection(ssl, c, 0) == NGX_ERROR) {
ngx_mail_close_connection(c);
return;
}
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.12.2.tar.gz/src/mail/ngx_mail_proxy_module.c
^
|
@@ -882,13 +882,10 @@
c = ev->data;
s = c->data;
- if (ev->timedout || c->close) {
+ if (ev->timedout) {
c->log->action = "proxying";
- if (c->close) {
- ngx_log_error(NGX_LOG_INFO, c->log, 0, "shutdown timeout");
-
- } else if (c == s->connection) {
+ if (c == s->connection) {
ngx_log_error(NGX_LOG_INFO, c->log, NGX_ETIMEDOUT,
"client timed out");
c->timedout = 1;
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.12.2.tar.gz/src/mail/ngx_mail_ssl_module.c
^
|
@@ -42,7 +42,6 @@
{ ngx_string("TLSv1"), NGX_SSL_TLSv1 },
{ ngx_string("TLSv1.1"), NGX_SSL_TLSv1_1 },
{ ngx_string("TLSv1.2"), NGX_SSL_TLSv1_2 },
- { ngx_string("TLSv1.3"), NGX_SSL_TLSv1_3 },
{ ngx_null_string, 0 }
};
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.12.2.tar.gz/src/misc/ngx_google_perftools_module.c
^
|
@@ -36,7 +36,7 @@
offsetof(ngx_google_perftools_conf_t, profiles),
NULL },
- ngx_null_command
+ ngx_null_command
};
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.12.2.tar.gz/src/os/unix/ngx_darwin_config.h
^
|
@@ -9,9 +9,6 @@
#define _NGX_DARWIN_CONFIG_H_INCLUDED_
-#define __APPLE_USE_RFC_3542 /* IPV6_PKTINFO */
-
-
#include <sys/types.h>
#include <sys/time.h>
#include <unistd.h>
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.12.2.tar.gz/src/os/unix/ngx_files.c
^
|
@@ -620,7 +620,6 @@
{
fm->fd = ngx_open_file(fm->name, NGX_FILE_RDWR, NGX_FILE_TRUNCATE,
NGX_FILE_DEFAULT_ACCESS);
-
if (fm->fd == NGX_INVALID_FILE) {
ngx_log_error(NGX_LOG_CRIT, fm->log, ngx_errno,
ngx_open_file_n " \"%s\" failed", fm->name);
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.12.2.tar.gz/src/os/unix/ngx_process.c
^
|
@@ -15,13 +15,13 @@
int signo;
char *signame;
char *name;
- void (*handler)(int signo, siginfo_t *siginfo, void *ucontext);
+ void (*handler)(int signo);
} ngx_signal_t;
static void ngx_execute_proc(ngx_cycle_t *cycle, void *data);
-static void ngx_signal_handler(int signo, siginfo_t *siginfo, void *ucontext);
+static void ngx_signal_handler(int signo);
static void ngx_process_get_status(void);
static void ngx_unlock_mutexes(ngx_pid_t pid);
@@ -75,9 +75,9 @@
{ SIGCHLD, "SIGCHLD", "", ngx_signal_handler },
- { SIGSYS, "SIGSYS, SIG_IGN", "", NULL },
+ { SIGSYS, "SIGSYS, SIG_IGN", "", SIG_IGN },
- { SIGPIPE, "SIGPIPE, SIG_IGN", "", NULL },
+ { SIGPIPE, "SIGPIPE, SIG_IGN", "", SIG_IGN },
{ 0, NULL, "", NULL }
};
@@ -288,15 +288,7 @@
for (sig = signals; sig->signo != 0; sig++) {
ngx_memzero(&sa, sizeof(struct sigaction));
-
- if (sig->handler) {
- sa.sa_sigaction = sig->handler;
- sa.sa_flags = SA_SIGINFO;
-
- } else {
- sa.sa_handler = SIG_IGN;
- }
-
+ sa.sa_handler = sig->handler;
sigemptyset(&sa.sa_mask);
if (sigaction(sig->signo, &sa, NULL) == -1) {
#if (NGX_VALGRIND)
@@ -315,7 +307,7 @@
static void
-ngx_signal_handler(int signo, siginfo_t *siginfo, void *ucontext)
+ngx_signal_handler(int signo)
{
char *action;
ngx_int_t ignore;
@@ -440,16 +432,8 @@
break;
}
- if (siginfo && siginfo->si_pid) {
- ngx_log_error(NGX_LOG_NOTICE, ngx_cycle->log, 0,
- "signal %d (%s) received from %P%s",
- signo, sig->signame, siginfo->si_pid, action);
-
- } else {
- ngx_log_error(NGX_LOG_NOTICE, ngx_cycle->log, 0,
- "signal %d (%s) received%s",
- signo, sig->signame, action);
- }
+ ngx_log_error(NGX_LOG_NOTICE, ngx_cycle->log, 0,
+ "signal %d (%s) received%s", signo, sig->signame, action);
if (ignore) {
ngx_log_error(NGX_LOG_CRIT, ngx_cycle->log, 0,
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.12.2.tar.gz/src/os/unix/ngx_udp_sendmsg_chain.c
^
|
@@ -203,20 +203,6 @@
ngx_err_t err;
struct msghdr msg;
-#if (NGX_HAVE_MSGHDR_MSG_CONTROL)
-
-#if (NGX_HAVE_IP_SENDSRCADDR)
- u_char msg_control[CMSG_SPACE(sizeof(struct in_addr))];
-#elif (NGX_HAVE_IP_PKTINFO)
- u_char msg_control[CMSG_SPACE(sizeof(struct in_pktinfo))];
-#endif
-
-#if (NGX_HAVE_INET6 && NGX_HAVE_IPV6_RECVPKTINFO)
- u_char msg_control6[CMSG_SPACE(sizeof(struct in6_pktinfo))];
-#endif
-
-#endif
-
ngx_memzero(&msg, sizeof(struct msghdr));
if (c->socklen) {
@@ -227,82 +213,6 @@
msg.msg_iov = vec->iovs;
msg.msg_iovlen = vec->count;
-#if (NGX_HAVE_MSGHDR_MSG_CONTROL)
-
- if (c->listening && c->listening->wildcard && c->local_sockaddr) {
-
-#if (NGX_HAVE_IP_SENDSRCADDR)
-
- if (c->local_sockaddr->sa_family == AF_INET) {
- struct cmsghdr *cmsg;
- struct in_addr *addr;
- struct sockaddr_in *sin;
-
- msg.msg_control = &msg_control;
- msg.msg_controllen = sizeof(msg_control);
-
- cmsg = CMSG_FIRSTHDR(&msg);
- cmsg->cmsg_level = IPPROTO_IP;
- cmsg->cmsg_type = IP_SENDSRCADDR;
- cmsg->cmsg_len = CMSG_LEN(sizeof(struct in_addr));
-
- sin = (struct sockaddr_in *) c->local_sockaddr;
-
- addr = (struct in_addr *) CMSG_DATA(cmsg);
- *addr = sin->sin_addr;
- }
-
-#elif (NGX_HAVE_IP_PKTINFO)
-
- if (c->local_sockaddr->sa_family == AF_INET) {
- struct cmsghdr *cmsg;
- struct in_pktinfo *pkt;
- struct sockaddr_in *sin;
-
- msg.msg_control = &msg_control;
- msg.msg_controllen = sizeof(msg_control);
-
- cmsg = CMSG_FIRSTHDR(&msg);
- cmsg->cmsg_level = IPPROTO_IP;
- cmsg->cmsg_type = IP_PKTINFO;
- cmsg->cmsg_len = CMSG_LEN(sizeof(struct in_pktinfo));
-
- sin = (struct sockaddr_in *) c->local_sockaddr;
-
- pkt = (struct in_pktinfo *) CMSG_DATA(cmsg);
- ngx_memzero(pkt, sizeof(struct in_pktinfo));
- pkt->ipi_spec_dst = sin->sin_addr;
- }
-
-#endif
-
-#if (NGX_HAVE_INET6 && NGX_HAVE_IPV6_RECVPKTINFO)
-
- if (c->local_sockaddr->sa_family == AF_INET6) {
- struct cmsghdr *cmsg;
- struct in6_pktinfo *pkt6;
- struct sockaddr_in6 *sin6;
-
- msg.msg_control = &msg_control6;
- msg.msg_controllen = sizeof(msg_control6);
-
- cmsg = CMSG_FIRSTHDR(&msg);
- cmsg->cmsg_level = IPPROTO_IPV6;
- cmsg->cmsg_type = IPV6_PKTINFO;
- cmsg->cmsg_len = CMSG_LEN(sizeof(struct in6_pktinfo));
-
- sin6 = (struct sockaddr_in6 *) c->local_sockaddr;
-
- pkt6 = (struct in6_pktinfo *) CMSG_DATA(cmsg);
- ngx_memzero(pkt6, sizeof(struct in6_pktinfo));
- pkt6->ipi6_addr = sin6->sin6_addr;
- }
-
-#endif
- }
-
-#endif
-
eintr:
n = sendmsg(c->fd, &msg, 0);
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.12.2.tar.gz/src/os/unix/ngx_user.c
^
|
@@ -9,6 +9,16 @@
#include <ngx_core.h>
+/*
+ * Solaris has thread-safe crypt()
+ * Linux has crypt_r(); "struct crypt_data" is more than 128K
+ * FreeBSD needs the mutex to protect crypt()
+ *
+ * TODO:
+ * ngx_crypt_init() to init mutex
+ */
+
+
#if (NGX_CRYPT)
#if (NGX_HAVE_GNU_CRYPT_R)
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.12.2.tar.gz/src/stream/ngx_stream.c
^
|
@@ -494,8 +494,6 @@
ls->log.handler = ngx_accept_log_error;
ls->backlog = addr[i].opt.backlog;
- ls->rcvbuf = addr[i].opt.rcvbuf;
- ls->sndbuf = addr[i].opt.sndbuf;
ls->wildcard = addr[i].opt.wildcard;
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.12.2.tar.gz/src/stream/ngx_stream.h
^
|
@@ -62,8 +62,6 @@
int tcp_keepcnt;
#endif
int backlog;
- int rcvbuf;
- int sndbuf;
int type;
} ngx_stream_listen_t;
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.12.2.tar.gz/src/stream/ngx_stream_access_module.c
^
|
@@ -299,21 +299,27 @@
ngx_stream_access_rule_un_t *rule_un;
#endif
- all = 0;
ngx_memzero(&cidr, sizeof(ngx_cidr_t));
value = cf->args->elts;
- if (value[1].len == 3 && ngx_strcmp(value[1].data, "all") == 0) {
- all = 1;
+ all = (value[1].len == 3 && ngx_strcmp(value[1].data, "all") == 0);
+
+ if (!all) {
#if (NGX_HAVE_UNIX_DOMAIN)
- } else if (value[1].len == 5 && ngx_strcmp(value[1].data, "unix:") == 0) {
- cidr.family = AF_UNIX;
-#endif
- } else {
+ if (value[1].len == 5 && ngx_strcmp(value[1].data, "unix:") == 0) {
+ cidr.family = AF_UNIX;
+ rc = NGX_OK;
+
+ } else {
+ rc = ngx_ptocidr(&value[1], &cidr);
+ }
+
+#else
rc = ngx_ptocidr(&value[1], &cidr);
+#endif
if (rc == NGX_ERROR) {
ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.12.2.tar.gz/src/stream/ngx_stream_core_module.c
^
|
@@ -309,6 +309,7 @@
ngx_stream_core_content_phase(ngx_stream_session_t *s,
ngx_stream_phase_handler_t *ph)
{
+ int tcp_nodelay;
ngx_connection_t *c;
ngx_stream_core_srv_conf_t *cscf;
@@ -320,10 +321,22 @@
if (c->type == SOCK_STREAM
&& cscf->tcp_nodelay
- && ngx_tcp_nodelay(c) != NGX_OK)
+ && c->tcp_nodelay == NGX_TCP_NODELAY_UNSET)
{
- ngx_stream_finalize_session(s, NGX_STREAM_INTERNAL_SERVER_ERROR);
- return NGX_OK;
+ ngx_log_debug0(NGX_LOG_DEBUG_STREAM, c->log, 0, "tcp_nodelay");
+
+ tcp_nodelay = 1;
+
+ if (setsockopt(c->fd, IPPROTO_TCP, TCP_NODELAY,
+ (const void *) &tcp_nodelay, sizeof(int)) == -1)
+ {
+ ngx_connection_error(c, ngx_socket_errno,
+ "setsockopt(TCP_NODELAY) failed");
+ ngx_stream_finalize_session(s, NGX_STREAM_INTERNAL_SERVER_ERROR);
+ return NGX_OK;
+ }
+
+ c->tcp_nodelay = NGX_TCP_NODELAY_SET;
}
cscf->handler(s);
@@ -569,7 +582,7 @@
{
ngx_stream_core_srv_conf_t *cscf = conf;
- ngx_str_t *value, size;
+ ngx_str_t *value;
ngx_url_t u;
ngx_uint_t i, backlog;
ngx_stream_listen_t *ls, *als;
@@ -607,8 +620,6 @@
ls->socklen = u.socklen;
ls->backlog = NGX_LISTEN_BACKLOG;
- ls->rcvbuf = -1;
- ls->sndbuf = -1;
ls->type = SOCK_STREAM;
ls->wildcard = u.wildcard;
ls->ctx = cf->ctx;
@@ -647,38 +658,6 @@
continue;
}
-
- if (ngx_strncmp(value[i].data, "rcvbuf=", 7) == 0) {
- size.len = value[i].len - 7;
- size.data = value[i].data + 7;
-
- ls->rcvbuf = ngx_parse_size(&size);
- ls->bind = 1;
-
- if (ls->rcvbuf == NGX_ERROR) {
- ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
- "invalid rcvbuf \"%V\"", &value[i]);
- return NGX_CONF_ERROR;
- }
-
- continue;
- }
-
- if (ngx_strncmp(value[i].data, "sndbuf=", 7) == 0) {
- size.len = value[i].len - 7;
- size.data = value[i].data + 7;
-
- ls->sndbuf = ngx_parse_size(&size);
- ls->bind = 1;
-
- if (ls->sndbuf == NGX_ERROR) {
- ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
- "invalid sndbuf \"%V\"", &value[i]);
- return NGX_CONF_ERROR;
- }
-
- continue;
- }
if (ngx_strncmp(value[i].data, "ipv6only=o", 10) == 0) {
#if (NGX_HAVE_INET6 && defined IPV6_V6ONLY)
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.12.2.tar.gz/src/stream/ngx_stream_geo_module.c
^
|
@@ -1326,8 +1326,7 @@
file.name = *name;
file.log = cf->log;
- file.fd = ngx_open_file(name->data, NGX_FILE_RDONLY, NGX_FILE_OPEN, 0);
-
+ file.fd = ngx_open_file(name->data, NGX_FILE_RDONLY, 0, 0);
if (file.fd == NGX_INVALID_FILE) {
err = ngx_errno;
if (err != NGX_ENOENT) {
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.12.2.tar.gz/src/stream/ngx_stream_geoip_module.c
^
|
@@ -210,7 +210,7 @@
ngx_stream_geoip_city_int_variable,
offsetof(GeoIPRecord, area_code), 0, 0 },
- ngx_stream_null_variable
+ { ngx_null_string, NULL, NULL, 0, 0, 0 }
};
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.12.2.tar.gz/src/stream/ngx_stream_proxy_module.c
^
|
@@ -103,7 +103,6 @@
{ ngx_string("TLSv1"), NGX_SSL_TLSv1 },
{ ngx_string("TLSv1.1"), NGX_SSL_TLSv1_1 },
{ ngx_string("TLSv1.2"), NGX_SSL_TLSv1_2 },
- { ngx_string("TLSv1.3"), NGX_SSL_TLSv1_3 },
{ ngx_null_string, 0 }
};
@@ -729,6 +728,7 @@
static void
ngx_stream_proxy_init_upstream(ngx_stream_session_t *s)
{
+ int tcp_nodelay;
u_char *p;
ngx_chain_t *cl;
ngx_connection_t *c, *pc;
@@ -744,10 +744,22 @@
if (pc->type == SOCK_STREAM
&& cscf->tcp_nodelay
- && ngx_tcp_nodelay(pc) != NGX_OK)
+ && pc->tcp_nodelay == NGX_TCP_NODELAY_UNSET)
{
- ngx_stream_proxy_next_upstream(s);
- return;
+ ngx_log_debug0(NGX_LOG_DEBUG_STREAM, pc->log, 0, "tcp_nodelay");
+
+ tcp_nodelay = 1;
+
+ if (setsockopt(pc->fd, IPPROTO_TCP, TCP_NODELAY,
+ (const void *) &tcp_nodelay, sizeof(int)) == -1)
+ {
+ ngx_connection_error(pc, ngx_socket_errno,
+ "setsockopt(TCP_NODELAY) failed");
+ ngx_stream_proxy_next_upstream(s);
+ return;
+ }
+
+ pc->tcp_nodelay = NGX_TCP_NODELAY_SET;
}
pscf = ngx_stream_get_module_srv_conf(s, ngx_stream_proxy_module);
@@ -1290,12 +1302,6 @@
s = c->data;
u = s->upstream;
- if (c->close) {
- ngx_log_error(NGX_LOG_INFO, c->log, 0, "shutdown timeout");
- ngx_stream_proxy_finalize(s, NGX_STREAM_OK);
- return;
- }
-
c = s->connection;
pc = u->peer.connection;
@@ -1337,17 +1343,13 @@
return;
}
- ngx_connection_error(pc, NGX_ETIMEDOUT, "upstream timed out");
-
if (u->received == 0) {
ngx_stream_proxy_next_upstream(s);
return;
}
-
- } else {
- ngx_connection_error(c, NGX_ETIMEDOUT, "connection timed out");
}
+ ngx_connection_error(c, NGX_ETIMEDOUT, "connection timed out");
ngx_stream_proxy_finalize(s, NGX_STREAM_OK);
return;
}
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.12.2.tar.gz/src/stream/ngx_stream_realip_module.c
^
|
@@ -89,7 +89,7 @@
{ ngx_string("realip_remote_port"), NULL,
ngx_stream_realip_remote_port_variable, 0, 0, 0 },
- ngx_stream_null_variable
+ { ngx_null_string, NULL, NULL, 0, 0, 0 }
};
@@ -178,15 +178,9 @@
{
ngx_stream_realip_srv_conf_t *rscf = conf;
- ngx_int_t rc;
- ngx_str_t *value;
- ngx_url_t u;
- ngx_cidr_t c, *cidr;
- ngx_uint_t i;
- struct sockaddr_in *sin;
-#if (NGX_HAVE_INET6)
- struct sockaddr_in6 *sin6;
-#endif
+ ngx_int_t rc;
+ ngx_str_t *value;
+ ngx_cidr_t *cidr;
value = cf->args->elts;
@@ -198,78 +192,31 @@
}
}
+ cidr = ngx_array_push(rscf->from);
+ if (cidr == NULL) {
+ return NGX_CONF_ERROR;
+ }
+
#if (NGX_HAVE_UNIX_DOMAIN)
if (ngx_strcmp(value[1].data, "unix:") == 0) {
- cidr = ngx_array_push(rscf->from);
- if (cidr == NULL) {
- return NGX_CONF_ERROR;
- }
-
cidr->family = AF_UNIX;
return NGX_CONF_OK;
}
#endif
- rc = ngx_ptocidr(&value[1], &c);
-
- if (rc != NGX_ERROR) {
- if (rc == NGX_DONE) {
- ngx_conf_log_error(NGX_LOG_WARN, cf, 0,
- "low address bits of %V are meaningless",
- &value[1]);
- }
-
- cidr = ngx_array_push(rscf->from);
- if (cidr == NULL) {
- return NGX_CONF_ERROR;
- }
-
- *cidr = c;
-
- return NGX_CONF_OK;
- }
-
- ngx_memzero(&u, sizeof(ngx_url_t));
- u.host = value[1];
-
- if (ngx_inet_resolve_host(cf->pool, &u) != NGX_OK) {
- if (u.err) {
- ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
- "%s in set_real_ip_from \"%V\"",
- u.err, &u.host);
- }
+ rc = ngx_ptocidr(&value[1], cidr);
+ if (rc == NGX_ERROR) {
+ ngx_conf_log_error(NGX_LOG_EMERG, cf, 0, "invalid parameter \"%V\"",
+ &value[1]);
return NGX_CONF_ERROR;
}
- cidr = ngx_array_push_n(rscf->from, u.naddrs);
- if (cidr == NULL) {
- return NGX_CONF_ERROR;
- }
-
- ngx_memzero(cidr, u.naddrs * sizeof(ngx_cidr_t));
-
- for (i = 0; i < u.naddrs; i++) {
- cidr[i].family = u.addrs[i].sockaddr->sa_family;
-
- switch (cidr[i].family) {
-
-#if (NGX_HAVE_INET6)
- case AF_INET6:
- sin6 = (struct sockaddr_in6 *) u.addrs[i].sockaddr;
- cidr[i].u.in6.addr = sin6->sin6_addr;
- ngx_memset(cidr[i].u.in6.mask.s6_addr, 0xff, 16);
- break;
-#endif
-
- default: /* AF_INET */
- sin = (struct sockaddr_in *) u.addrs[i].sockaddr;
- cidr[i].u.in.addr = sin->sin_addr.s_addr;
- cidr[i].u.in.mask = 0xffffffff;
- break;
- }
+ if (rc == NGX_DONE) {
+ ngx_conf_log_error(NGX_LOG_WARN, cf, 0,
+ "low address bits of %V are meaningless", &value[1]);
}
return NGX_CONF_OK;
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.12.2.tar.gz/src/stream/ngx_stream_ssl_module.c
^
|
@@ -45,7 +45,6 @@
{ ngx_string("TLSv1"), NGX_SSL_TLSv1 },
{ ngx_string("TLSv1.1"), NGX_SSL_TLSv1_1 },
{ ngx_string("TLSv1.2"), NGX_SSL_TLSv1_2 },
- { ngx_string("TLSv1.3"), NGX_SSL_TLSv1_3 },
{ ngx_null_string, 0 }
};
@@ -249,10 +248,6 @@
(uintptr_t) ngx_ssl_get_raw_certificate,
NGX_STREAM_VAR_CHANGEABLE, 0 },
- { ngx_string("ssl_client_escaped_cert"), NULL, ngx_stream_ssl_variable,
- (uintptr_t) ngx_ssl_get_escaped_certificate,
- NGX_STREAM_VAR_CHANGEABLE, 0 },
-
{ ngx_string("ssl_client_s_dn"), NULL, ngx_stream_ssl_variable,
(uintptr_t) ngx_ssl_get_subject_dn, NGX_STREAM_VAR_CHANGEABLE, 0 },
@@ -277,7 +272,7 @@
{ ngx_string("ssl_client_v_remain"), NULL, ngx_stream_ssl_variable,
(uintptr_t) ngx_ssl_get_client_v_remain, NGX_STREAM_VAR_CHANGEABLE, 0 },
- ngx_stream_null_variable
+ { ngx_null_string, NULL, NULL, 0, 0, 0 }
};
@@ -356,20 +351,13 @@
static ngx_int_t
ngx_stream_ssl_init_connection(ngx_ssl_t *ssl, ngx_connection_t *c)
{
- ngx_int_t rc;
- ngx_stream_session_t *s;
- ngx_stream_ssl_conf_t *sslcf;
- ngx_stream_core_srv_conf_t *cscf;
+ ngx_int_t rc;
+ ngx_stream_session_t *s;
+ ngx_stream_ssl_conf_t *sslcf;
s = c->data;
- cscf = ngx_stream_get_module_srv_conf(s, ngx_stream_core_module);
-
- if (cscf->tcp_nodelay && ngx_tcp_nodelay(c) != NGX_OK) {
- return NGX_ERROR;
- }
-
- if (ngx_ssl_create_connection(ssl, c, 0) != NGX_OK) {
+ if (ngx_ssl_create_connection(ssl, c, 0) == NGX_ERROR) {
return NGX_ERROR;
}
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.12.2.tar.gz/src/stream/ngx_stream_ssl_preread_module.c
^
|
@@ -85,7 +85,7 @@
{ ngx_string("ssl_preread_server_name"), NULL,
ngx_stream_ssl_preread_server_name_variable, 0, 0, 0 },
- ngx_stream_null_variable
+ { ngx_null_string, NULL, NULL, 0, 0, 0 }
};
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.12.2.tar.gz/src/stream/ngx_stream_upstream.c
^
|
@@ -100,7 +100,7 @@
ngx_stream_upstream_bytes_variable, 1,
NGX_STREAM_VAR_NOCACHEABLE, 0 },
- ngx_stream_null_variable
+ { ngx_null_string, NULL, NULL, 0, 0, 0 }
};
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.12.2.tar.gz/src/stream/ngx_stream_upstream.h
^
|
@@ -58,8 +58,8 @@
ngx_uint_t max_fails;
time_t fail_timeout;
ngx_msec_t slow_start;
- ngx_uint_t down;
+ unsigned down:1;
unsigned backup:1;
NGX_COMPAT_BEGIN(4)
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.12.2.tar.gz/src/stream/ngx_stream_upstream_hash_module.c
^
|
@@ -505,11 +505,6 @@
ngx_stream_upstream_rr_peers_wlock(hp->rrp.peers);
- if (hp->tries > 20 || hp->rrp.peers->single) {
- ngx_stream_upstream_rr_peers_unlock(hp->rrp.peers);
- return hp->get_rr_peer(pc, &hp->rrp);
- }
-
pc->connection = NULL;
now = ngx_time();
@@ -544,6 +539,13 @@
continue;
}
+ if (peer->server.len != server->len
+ || ngx_strncmp(peer->server.data, server->data, server->len)
+ != 0)
+ {
+ continue;
+ }
+
if (peer->max_fails
&& peer->fails >= peer->max_fails
&& now - peer->checked <= peer->fail_timeout)
@@ -555,13 +557,6 @@
continue;
}
- if (peer->server.len != server->len
- || ngx_strncmp(peer->server.data, server->data, server->len)
- != 0)
- {
- continue;
- }
-
peer->current_weight += peer->effective_weight;
total += peer->effective_weight;
@@ -583,9 +578,10 @@
hp->hash++;
hp->tries++;
- if (hp->tries > 20) {
+ if (hp->tries >= points->number) {
+ pc->name = hp->rrp.peers->name;
ngx_stream_upstream_rr_peers_unlock(hp->rrp.peers);
- return hp->get_rr_peer(pc, &hp->rrp);
+ return NGX_BUSY;
}
}
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.12.2.tar.gz/src/stream/ngx_stream_upstream_zone_module.c
^
|
@@ -16,8 +16,6 @@
void *data);
static ngx_stream_upstream_rr_peers_t *ngx_stream_upstream_zone_copy_peers(
ngx_slab_pool_t *shpool, ngx_stream_upstream_srv_conf_t *uscf);
-static ngx_stream_upstream_rr_peer_t *ngx_stream_upstream_zone_copy_peer(
- ngx_stream_upstream_rr_peers_t *peers, ngx_stream_upstream_rr_peer_t *src);
static ngx_command_t ngx_stream_upstream_zone_commands[] = {
@@ -184,7 +182,6 @@
ngx_stream_upstream_zone_copy_peers(ngx_slab_pool_t *shpool,
ngx_stream_upstream_srv_conf_t *uscf)
{
- ngx_str_t *name;
ngx_stream_upstream_rr_peer_t *peer, **peerp;
ngx_stream_upstream_rr_peers_t *peers, *backup;
@@ -195,30 +192,18 @@
ngx_memcpy(peers, uscf->peer.data, sizeof(ngx_stream_upstream_rr_peers_t));
- name = ngx_slab_alloc(shpool, sizeof(ngx_str_t));
- if (name == NULL) {
- return NULL;
- }
-
- name->data = ngx_slab_alloc(shpool, peers->name->len);
- if (name->data == NULL) {
- return NULL;
- }
-
- ngx_memcpy(name->data, peers->name->data, peers->name->len);
- name->len = peers->name->len;
-
- peers->name = name;
-
peers->shpool = shpool;
for (peerp = &peers->peer; *peerp; peerp = &peer->next) {
/* pool is unlocked */
- peer = ngx_stream_upstream_zone_copy_peer(peers, *peerp);
+ peer = ngx_slab_calloc_locked(shpool,
+ sizeof(ngx_stream_upstream_rr_peer_t));
if (peer == NULL) {
return NULL;
}
+ ngx_memcpy(peer, *peerp, sizeof(ngx_stream_upstream_rr_peer_t));
+
*peerp = peer;
}
@@ -233,17 +218,18 @@
ngx_memcpy(backup, peers->next, sizeof(ngx_stream_upstream_rr_peers_t));
- backup->name = name;
-
backup->shpool = shpool;
for (peerp = &backup->peer; *peerp; peerp = &peer->next) {
/* pool is unlocked */
- peer = ngx_stream_upstream_zone_copy_peer(backup, *peerp);
+ peer = ngx_slab_calloc_locked(shpool,
+ sizeof(ngx_stream_upstream_rr_peer_t));
if (peer == NULL) {
return NULL;
}
+ ngx_memcpy(peer, *peerp, sizeof(ngx_stream_upstream_rr_peer_t));
+
*peerp = peer;
}
@@ -255,68 +241,3 @@
return peers;
}
-
-
-static ngx_stream_upstream_rr_peer_t *
-ngx_stream_upstream_zone_copy_peer(ngx_stream_upstream_rr_peers_t *peers,
- ngx_stream_upstream_rr_peer_t *src)
-{
- ngx_slab_pool_t *pool;
- ngx_stream_upstream_rr_peer_t *dst;
-
- pool = peers->shpool;
-
- dst = ngx_slab_calloc_locked(pool, sizeof(ngx_stream_upstream_rr_peer_t));
- if (dst == NULL) {
- return NULL;
- }
-
- if (src) {
- ngx_memcpy(dst, src, sizeof(ngx_stream_upstream_rr_peer_t));
- dst->sockaddr = NULL;
- dst->name.data = NULL;
- dst->server.data = NULL;
- }
-
- dst->sockaddr = ngx_slab_calloc_locked(pool, sizeof(ngx_sockaddr_t));
- if (dst->sockaddr == NULL) {
- goto failed;
- }
-
- dst->name.data = ngx_slab_calloc_locked(pool, NGX_SOCKADDR_STRLEN);
- if (dst->name.data == NULL) {
- goto failed;
- }
-
- if (src) {
- ngx_memcpy(dst->sockaddr, src->sockaddr, src->socklen);
- ngx_memcpy(dst->name.data, src->name.data, src->name.len);
-
- dst->server.data = ngx_slab_alloc_locked(pool, src->server.len);
- if (dst->server.data == NULL) {
- goto failed;
- }
-
- ngx_memcpy(dst->server.data, src->server.data, src->server.len);
- }
-
- return dst;
-
-failed:
-
- if (dst->server.data) {
- ngx_slab_free_locked(pool, dst->server.data);
- }
-
- if (dst->name.data) {
- ngx_slab_free_locked(pool, dst->name.data);
- }
-
- if (dst->sockaddr) {
- ngx_slab_free_locked(pool, dst->sockaddr);
- }
-
- ngx_slab_free_locked(pool, dst);
-
- return NULL;
-}
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.12.2.tar.gz/src/stream/ngx_stream_variables.c
^
|
@@ -111,7 +111,7 @@
{ ngx_string("protocol"), NULL,
ngx_stream_variable_protocol, 0, 0, 0 },
- ngx_stream_null_variable
+ { ngx_null_string, NULL, NULL, 0, 0, 0 }
};
@@ -460,7 +460,7 @@
static ngx_int_t
ngx_stream_variable_binary_remote_addr(ngx_stream_session_t *s,
ngx_stream_variable_value_t *v, uintptr_t data)
-{
+ {
struct sockaddr_in *sin;
#if (NGX_HAVE_INET6)
struct sockaddr_in6 *sin6;
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.12.2.tar.gz/src/stream/ngx_stream_variables.h
^
|
@@ -43,8 +43,6 @@
ngx_uint_t index;
};
-#define ngx_stream_null_variable { ngx_null_string, NULL, NULL, 0, 0, 0 }
-
ngx_stream_variable_t *ngx_stream_add_variable(ngx_conf_t *cf, ngx_str_t *name,
ngx_uint_t flags);
|
[-]
[+]
|
Deleted |
_service:download_url:nginx-1.13.7.tar.gz/src/http/modules/ngx_http_mirror_module.c
^
|
@@ -1,264 +0,0 @@
-
-/*
- * Copyright (C) Roman Arutyunyan
- * Copyright (C) Nginx, Inc.
- */
-
-
-#include <ngx_config.h>
-#include <ngx_core.h>
-#include <ngx_http.h>
-
-
-typedef struct {
- ngx_array_t *mirror;
- ngx_flag_t request_body;
-} ngx_http_mirror_loc_conf_t;
-
-
-typedef struct {
- ngx_int_t status;
-} ngx_http_mirror_ctx_t;
-
-
-static ngx_int_t ngx_http_mirror_handler(ngx_http_request_t *r);
-static void ngx_http_mirror_body_handler(ngx_http_request_t *r);
-static ngx_int_t ngx_http_mirror_handler_internal(ngx_http_request_t *r);
-static void *ngx_http_mirror_create_loc_conf(ngx_conf_t *cf);
-static char *ngx_http_mirror_merge_loc_conf(ngx_conf_t *cf, void *parent,
- void *child);
-static char *ngx_http_mirror(ngx_conf_t *cf, ngx_command_t *cmd, void *conf);
-static ngx_int_t ngx_http_mirror_init(ngx_conf_t *cf);
-
-
-static ngx_command_t ngx_http_mirror_commands[] = {
-
- { ngx_string("mirror"),
- NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,
- ngx_http_mirror,
- NGX_HTTP_LOC_CONF_OFFSET,
- 0,
- NULL },
-
- { ngx_string("mirror_request_body"),
- NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_FLAG,
- ngx_conf_set_flag_slot,
- NGX_HTTP_LOC_CONF_OFFSET,
- offsetof(ngx_http_mirror_loc_conf_t, request_body),
- NULL },
-
- ngx_null_command
-};
-
-
-static ngx_http_module_t ngx_http_mirror_module_ctx = {
- NULL, /* preconfiguration */
- ngx_http_mirror_init, /* postconfiguration */
-
- NULL, /* create main configuration */
- NULL, /* init main configuration */
-
- NULL, /* create server configuration */
- NULL, /* merge server configuration */
-
- ngx_http_mirror_create_loc_conf, /* create location configuration */
- ngx_http_mirror_merge_loc_conf /* merge location configuration */
-};
-
-
-ngx_module_t ngx_http_mirror_module = {
- NGX_MODULE_V1,
- &ngx_http_mirror_module_ctx, /* module context */
- ngx_http_mirror_commands, /* module directives */
- NGX_HTTP_MODULE, /* module type */
- NULL, /* init master */
- NULL, /* init module */
- NULL, /* init process */
- NULL, /* init thread */
- NULL, /* exit thread */
- NULL, /* exit process */
- NULL, /* exit master */
- NGX_MODULE_V1_PADDING
-};
-
-
-static ngx_int_t
-ngx_http_mirror_handler(ngx_http_request_t *r)
-{
- ngx_int_t rc;
- ngx_http_mirror_ctx_t *ctx;
- ngx_http_mirror_loc_conf_t *mlcf;
-
- if (r != r->main) {
- return NGX_DECLINED;
- }
-
- mlcf = ngx_http_get_module_loc_conf(r, ngx_http_mirror_module);
-
- if (mlcf->mirror == NULL) {
- return NGX_DECLINED;
- }
-
- ngx_log_debug0(NGX_LOG_DEBUG_HTTP, r->connection->log, 0, "mirror handler");
-
- if (mlcf->request_body) {
- ctx = ngx_http_get_module_ctx(r, ngx_http_mirror_module);
-
- if (ctx) {
- return ctx->status;
- }
-
- ctx = ngx_pcalloc(r->pool, sizeof(ngx_http_mirror_ctx_t));
- if (ctx == NULL) {
- return NGX_ERROR;
- }
-
- ctx->status = NGX_DONE;
-
- ngx_http_set_ctx(r, ctx, ngx_http_mirror_module);
-
- rc = ngx_http_read_client_request_body(r, ngx_http_mirror_body_handler);
- if (rc >= NGX_HTTP_SPECIAL_RESPONSE) {
- return rc;
- }
-
- ngx_http_finalize_request(r, NGX_DONE);
- return NGX_DONE;
- }
-
- return ngx_http_mirror_handler_internal(r);
-}
-
-
-static void
-ngx_http_mirror_body_handler(ngx_http_request_t *r)
-{
- ngx_http_mirror_ctx_t *ctx;
-
- ctx = ngx_http_get_module_ctx(r, ngx_http_mirror_module);
-
- ctx->status = ngx_http_mirror_handler_internal(r);
-
- r->preserve_body = 1;
-
- r->write_event_handler = ngx_http_core_run_phases;
- ngx_http_core_run_phases(r);
-}
-
-
-static ngx_int_t
-ngx_http_mirror_handler_internal(ngx_http_request_t *r)
-{
- ngx_str_t *name;
- ngx_uint_t i;
- ngx_http_request_t *sr;
- ngx_http_mirror_loc_conf_t *mlcf;
-
- mlcf = ngx_http_get_module_loc_conf(r, ngx_http_mirror_module);
-
- name = mlcf->mirror->elts;
-
- for (i = 0; i < mlcf->mirror->nelts; i++) {
- if (ngx_http_subrequest(r, &name[i], &r->args, &sr, NULL,
- NGX_HTTP_SUBREQUEST_BACKGROUND)
- != NGX_OK)
- {
- return NGX_HTTP_INTERNAL_SERVER_ERROR;
- }
-
- sr->header_only = 1;
- sr->method = r->method;
- sr->method_name = r->method_name;
- }
-
- return NGX_DECLINED;
-}
-
-
-static void *
-ngx_http_mirror_create_loc_conf(ngx_conf_t *cf)
-{
- ngx_http_mirror_loc_conf_t *mlcf;
-
- mlcf = ngx_pcalloc(cf->pool, sizeof(ngx_http_mirror_loc_conf_t));
- if (mlcf == NULL) {
- return NULL;
- }
-
- mlcf->mirror = NGX_CONF_UNSET_PTR;
- mlcf->request_body = NGX_CONF_UNSET;
-
- return mlcf;
-}
-
-
-static char *
-ngx_http_mirror_merge_loc_conf(ngx_conf_t *cf, void *parent, void *child)
-{
- ngx_http_mirror_loc_conf_t *prev = parent;
- ngx_http_mirror_loc_conf_t *conf = child;
-
- ngx_conf_merge_ptr_value(conf->mirror, prev->mirror, NULL);
- ngx_conf_merge_value(conf->request_body, prev->request_body, 1);
-
- return NGX_CONF_OK;
-}
-
-
-static char *
-ngx_http_mirror(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
-{
- ngx_http_mirror_loc_conf_t *mlcf = conf;
-
- ngx_str_t *value, *s;
-
- value = cf->args->elts;
-
- if (ngx_strcmp(value[1].data, "off") == 0) {
- if (mlcf->mirror != NGX_CONF_UNSET_PTR) {
- return "is duplicate";
- }
-
- mlcf->mirror = NULL;
- return NGX_CONF_OK;
- }
-
- if (mlcf->mirror == NULL) {
- return "is duplicate";
- }
-
- if (mlcf->mirror == NGX_CONF_UNSET_PTR) {
- mlcf->mirror = ngx_array_create(cf->pool, 4, sizeof(ngx_str_t));
- if (mlcf->mirror == NULL) {
- return NGX_CONF_ERROR;
- }
- }
-
- s = ngx_array_push(mlcf->mirror);
- if (s == NULL) {
- return NGX_CONF_ERROR;
- }
-
- *s = value[1];
-
- return NGX_CONF_OK;
-}
-
-
-static ngx_int_t
-ngx_http_mirror_init(ngx_conf_t *cf)
-{
- ngx_http_handler_pt *h;
- ngx_http_core_main_conf_t *cmcf;
-
- cmcf = ngx_http_conf_get_module_main_conf(cf, ngx_http_core_module);
-
- h = ngx_array_push(&cmcf->phases[NGX_HTTP_PRECONTENT_PHASE].handlers);
- if (h == NULL) {
- return NGX_ERROR;
- }
-
- *h = ngx_http_mirror_handler;
-
- return NGX_OK;
-}
|
[-]
[+]
|
Deleted |
_service:download_url:nginx-1.13.7.tar.gz/src/http/modules/ngx_http_try_files_module.c
^
|
@@ -1,404 +0,0 @@
-
-/*
- * Copyright (C) Igor Sysoev
- * Copyright (C) Nginx, Inc.
- */
-
-
-#include <ngx_config.h>
-#include <ngx_core.h>
-#include <ngx_http.h>
-
-
-typedef struct {
- ngx_array_t *lengths;
- ngx_array_t *values;
- ngx_str_t name;
-
- unsigned code:10;
- unsigned test_dir:1;
-} ngx_http_try_file_t;
-
-
-typedef struct {
- ngx_http_try_file_t *try_files;
-} ngx_http_try_files_loc_conf_t;
-
-
-static ngx_int_t ngx_http_try_files_handler(ngx_http_request_t *r);
-static char *ngx_http_try_files(ngx_conf_t *cf, ngx_command_t *cmd, void *conf);
-static void *ngx_http_try_files_create_loc_conf(ngx_conf_t *cf);
-static ngx_int_t ngx_http_try_files_init(ngx_conf_t *cf);
-
-
-static ngx_command_t ngx_http_try_files_commands[] = {
-
- { ngx_string("try_files"),
- NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_2MORE,
- ngx_http_try_files,
- NGX_HTTP_LOC_CONF_OFFSET,
- 0,
- NULL },
-
- ngx_null_command
-};
-
-
-static ngx_http_module_t ngx_http_try_files_module_ctx = {
- NULL, /* preconfiguration */
- ngx_http_try_files_init, /* postconfiguration */
-
- NULL, /* create main configuration */
- NULL, /* init main configuration */
-
- NULL, /* create server configuration */
- NULL, /* merge server configuration */
-
- ngx_http_try_files_create_loc_conf, /* create location configuration */
- NULL /* merge location configuration */
-};
-
-
-ngx_module_t ngx_http_try_files_module = {
- NGX_MODULE_V1,
- &ngx_http_try_files_module_ctx, /* module context */
- ngx_http_try_files_commands, /* module directives */
- NGX_HTTP_MODULE, /* module type */
- NULL, /* init master */
- NULL, /* init module */
- NULL, /* init process */
- NULL, /* init thread */
- NULL, /* exit thread */
- NULL, /* exit process */
- NULL, /* exit master */
- NGX_MODULE_V1_PADDING
-};
-
-
-static ngx_int_t
-ngx_http_try_files_handler(ngx_http_request_t *r)
-{
- size_t len, root, alias, reserve, allocated;
- u_char *p, *name;
- ngx_str_t path, args;
- ngx_uint_t test_dir;
- ngx_http_try_file_t *tf;
- ngx_open_file_info_t of;
- ngx_http_script_code_pt code;
- ngx_http_script_engine_t e;
- ngx_http_core_loc_conf_t *clcf;
- ngx_http_script_len_code_pt lcode;
- ngx_http_try_files_loc_conf_t *tlcf;
-
- tlcf = ngx_http_get_module_loc_conf(r, ngx_http_try_files_module);
-
- if (tlcf->try_files == NULL) {
- return NGX_DECLINED;
- }
-
- ngx_log_debug0(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
- "try files handler");
-
- allocated = 0;
- root = 0;
- name = NULL;
- /* suppress MSVC warning */
- path.data = NULL;
-
- tf = tlcf->try_files;
-
- clcf = ngx_http_get_module_loc_conf(r, ngx_http_core_module);
-
- alias = clcf->alias;
-
- for ( ;; ) {
-
- if (tf->lengths) {
- ngx_memzero(&e, sizeof(ngx_http_script_engine_t));
-
- e.ip = tf->lengths->elts;
- e.request = r;
-
- /* 1 is for terminating '\0' as in static names */
- len = 1;
-
- while (*(uintptr_t *) e.ip) {
- lcode = *(ngx_http_script_len_code_pt *) e.ip;
- len += lcode(&e);
- }
-
- } else {
- len = tf->name.len;
- }
-
- if (!alias) {
- reserve = len > r->uri.len ? len - r->uri.len : 0;
-
- } else if (alias == NGX_MAX_SIZE_T_VALUE) {
- reserve = len;
-
- } else {
- reserve = len > r->uri.len - alias ? len - (r->uri.len - alias) : 0;
- }
-
- if (reserve > allocated || !allocated) {
-
- /* 16 bytes are preallocation */
- allocated = reserve + 16;
-
- if (ngx_http_map_uri_to_path(r, &path, &root, allocated) == NULL) {
- return NGX_HTTP_INTERNAL_SERVER_ERROR;
- }
-
- name = path.data + root;
- }
-
- if (tf->values == NULL) {
-
- /* tf->name.len includes the terminating '\0' */
-
- ngx_memcpy(name, tf->name.data, tf->name.len);
-
- path.len = (name + tf->name.len - 1) - path.data;
-
- } else {
- e.ip = tf->values->elts;
- e.pos = name;
- e.flushed = 1;
-
- while (*(uintptr_t *) e.ip) {
- code = *(ngx_http_script_code_pt *) e.ip;
- code((ngx_http_script_engine_t *) &e);
- }
-
- path.len = e.pos - path.data;
-
- *e.pos = '\0';
-
- if (alias && alias != NGX_MAX_SIZE_T_VALUE
- && ngx_strncmp(name, r->uri.data, alias) == 0)
- {
- ngx_memmove(name, name + alias, len - alias);
- path.len -= alias;
- }
- }
-
- test_dir = tf->test_dir;
-
- tf++;
-
- ngx_log_debug3(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
- "trying to use %s: \"%s\" \"%s\"",
- test_dir ? "dir" : "file", name, path.data);
-
- if (tf->lengths == NULL && tf->name.len == 0) {
-
- if (tf->code) {
- return tf->code;
- }
-
- path.len -= root;
- path.data += root;
-
- if (path.data[0] == '@') {
- (void) ngx_http_named_location(r, &path);
-
- } else {
- ngx_http_split_args(r, &path, &args);
-
- (void) ngx_http_internal_redirect(r, &path, &args);
- }
-
- ngx_http_finalize_request(r, NGX_DONE);
- return NGX_DONE;
- }
-
- ngx_memzero(&of, sizeof(ngx_open_file_info_t));
-
- of.read_ahead = clcf->read_ahead;
- of.directio = clcf->directio;
- of.valid = clcf->open_file_cache_valid;
- of.min_uses = clcf->open_file_cache_min_uses;
- of.test_only = 1;
- of.errors = clcf->open_file_cache_errors;
- of.events = clcf->open_file_cache_events;
-
- if (ngx_http_set_disable_symlinks(r, clcf, &path, &of) != NGX_OK) {
- return NGX_HTTP_INTERNAL_SERVER_ERROR;
- }
-
- if (ngx_open_cached_file(clcf->open_file_cache, &path, &of, r->pool)
- != NGX_OK)
- {
- if (of.err == 0) {
- return NGX_HTTP_INTERNAL_SERVER_ERROR;
- }
-
- if (of.err != NGX_ENOENT
- && of.err != NGX_ENOTDIR
- && of.err != NGX_ENAMETOOLONG)
- {
- ngx_log_error(NGX_LOG_CRIT, r->connection->log, of.err,
- "%s \"%s\" failed", of.failed, path.data);
- }
-
- continue;
- }
-
- if (of.is_dir != test_dir) {
- continue;
- }
-
- path.len -= root;
- path.data += root;
-
- if (!alias) {
- r->uri = path;
-
- } else if (alias == NGX_MAX_SIZE_T_VALUE) {
- if (!test_dir) {
- r->uri = path;
- r->add_uri_to_alias = 1;
- }
-
- } else {
- name = r->uri.data;
-
- r->uri.len = alias + path.len;
- r->uri.data = ngx_pnalloc(r->pool, r->uri.len);
- if (r->uri.data == NULL) {
- r->uri.len = 0;
- return NGX_HTTP_INTERNAL_SERVER_ERROR;
- }
-
- p = ngx_copy(r->uri.data, name, alias);
- ngx_memcpy(p, path.data, path.len);
- }
-
- ngx_http_set_exten(r);
-
- ngx_log_debug1(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
- "try file uri: \"%V\"", &r->uri);
-
- return NGX_DECLINED;
- }
-
- /* not reached */
-}
-
-
-static char *
-ngx_http_try_files(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
-{
- ngx_http_try_files_loc_conf_t *tlcf = conf;
-
- ngx_str_t *value;
- ngx_int_t code;
- ngx_uint_t i, n;
- ngx_http_try_file_t *tf;
- ngx_http_script_compile_t sc;
-
- if (tlcf->try_files) {
- return "is duplicate";
- }
-
- tf = ngx_pcalloc(cf->pool, cf->args->nelts * sizeof(ngx_http_try_file_t));
- if (tf == NULL) {
- return NGX_CONF_ERROR;
- }
-
- tlcf->try_files = tf;
-
- value = cf->args->elts;
-
- for (i = 0; i < cf->args->nelts - 1; i++) {
-
- tf[i].name = value[i + 1];
-
- if (tf[i].name.len > 0
- && tf[i].name.data[tf[i].name.len - 1] == '/'
- && i + 2 < cf->args->nelts)
- {
- tf[i].test_dir = 1;
- tf[i].name.len--;
- tf[i].name.data[tf[i].name.len] = '\0';
- }
-
- n = ngx_http_script_variables_count(&tf[i].name);
-
- if (n) {
- ngx_memzero(&sc, sizeof(ngx_http_script_compile_t));
-
- sc.cf = cf;
- sc.source = &tf[i].name;
- sc.lengths = &tf[i].lengths;
- sc.values = &tf[i].values;
- sc.variables = n;
- sc.complete_lengths = 1;
- sc.complete_values = 1;
-
- if (ngx_http_script_compile(&sc) != NGX_OK) {
- return NGX_CONF_ERROR;
- }
-
- } else {
- /* add trailing '\0' to length */
- tf[i].name.len++;
- }
- }
-
- if (tf[i - 1].name.data[0] == '=') {
-
- code = ngx_atoi(tf[i - 1].name.data + 1, tf[i - 1].name.len - 2);
-
- if (code == NGX_ERROR || code > 999) {
- ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
- "invalid code \"%*s\"",
- tf[i - 1].name.len - 1, tf[i - 1].name.data);
- return NGX_CONF_ERROR;
- }
-
- tf[i].code = code;
- }
-
- return NGX_CONF_OK;
-}
-
-
-static void *
-ngx_http_try_files_create_loc_conf(ngx_conf_t *cf)
-{
- ngx_http_try_files_loc_conf_t *tlcf;
-
- tlcf = ngx_pcalloc(cf->pool, sizeof(ngx_http_try_files_loc_conf_t));
- if (tlcf == NULL) {
- return NULL;
- }
-
- /*
- * set by ngx_pcalloc():
- *
- * tlcf->try_files = NULL;
- */
-
- return tlcf;
-}
-
-
-static ngx_int_t
-ngx_http_try_files_init(ngx_conf_t *cf)
-{
- ngx_http_handler_pt *h;
- ngx_http_core_main_conf_t *cmcf;
-
- cmcf = ngx_http_conf_get_module_main_conf(cf, ngx_http_core_module);
-
- h = ngx_array_push(&cmcf->phases[NGX_HTTP_PRECONTENT_PHASE].handlers);
- if (h == NULL) {
- return NGX_ERROR;
- }
-
- *h = ngx_http_try_files_handler;
-
- return NGX_OK;
-}
|
|
Added |
naxsi-0.56rc1.tar.gz
^
|
|
Deleted |
ngx_pagespeed-1.12.34.2-stable.zip
^
|
|
Deleted |
openssl-1.1.0c.tar.gz
^
|
|
Deleted |
openssl-1.1.0e.tar.gz
^
|
|
Deleted |
release-1.11.33.2-beta.zip
^
|
|
Deleted |
v1.10.33.6-beta.zip
^
|