[-]
[+]
|
Changed |
nginx.changes
|
|
[-]
[+]
|
Changed |
nginx.spec
^
|
|
[-]
[+]
|
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.11.8.tar.gz</param>
+ <param name="path">/download/nginx-1.11.13.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.11.8.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.11.9.tar.gz</param></service></services>
\ No newline at end of file
+</services>
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.11.13.tar.gz/CHANGES
^
|
@@ -1,4 +1,120 @@
+Changes with nginx 1.11.13 04 Apr 2017
+
+ *) Feature: the "http_429" parameter of the "proxy_next_upstream",
+ "fastcgi_next_upstream", "scgi_next_upstream", and
+ "uwsgi_next_upstream" directives.
+ Thanks to Piotr Sikora.
+
+ *) Bugfix: in memory allocation error handling.
+
+ *) Bugfix: requests might hang when using the "sendfile" and
+ "timer_resolution" directives on Linux.
+
+ *) Bugfix: requests might hang when using the "sendfile" and "aio_write"
+ directives with subrequests.
+
+ *) Bugfix: in the ngx_http_v2_module.
+ Thanks to Piotr Sikora.
+
+ *) Bugfix: a segmentation fault might occur in a worker process when
+ using HTTP/2.
+
+ *) Bugfix: requests might hang when using the "limit_rate",
+ "sendfile_max_chunk", "limit_req" directives, or the $r->sleep()
+ embedded perl method with subrequests.
+
+ *) Bugfix: in the ngx_http_slice_module.
+
+
+Changes with nginx 1.11.12 24 Mar 2017
+
+ *) Bugfix: nginx might hog CPU; the bug had appeared in 1.11.11.
+
+
+Changes with nginx 1.11.11 21 Mar 2017
+
+ *) Feature: the "worker_shutdown_timeout" directive.
+
+ *) Feature: vim syntax highlighting scripts improvements.
+ Thanks to Wei-Ko Kao.
+
+ *) Bugfix: a segmentation fault might occur in a worker process if the
+ $limit_rate variable was set to an empty string.
+
+ *) Bugfix: the "proxy_cache_background_update",
+ "fastcgi_cache_background_update", "scgi_cache_background_update",
+ and "uwsgi_cache_background_update" directives might work incorrectly
+ if the "if" directive was used.
+
+ *) Bugfix: a segmentation fault might occur in a worker process if
+ number of large_client_header_buffers in a virtual server was
+ different from the one in the default server.
+
+ *) Bugfix: in the mail proxy server.
+
+
+Changes with nginx 1.11.10 14 Feb 2017
+
+ *) Change: cache header format has been changed, previously cached
+ responses will be invalidated.
+
+ *) Feature: support of "stale-while-revalidate" and "stale-if-error"
+ extensions in the "Cache-Control" backend response header line.
+
+ *) Feature: the "proxy_cache_background_update",
+ "fastcgi_cache_background_update", "scgi_cache_background_update",
+ and "uwsgi_cache_background_update" directives.
+
+ *) Feature: nginx is now able to cache responses with the "Vary" header
+ line up to 128 characters long (instead of 42 characters in previous
+ versions).
+
+ *) Feature: the "build" parameter of the "server_tokens" directive.
+ Thanks to Tom Thorogood.
+
+ *) Bugfix: "[crit] SSL_write() failed" messages might appear in logs
+ when handling requests with the "Expect: 100-continue" request header
+ line.
+
+ *) Bugfix: the ngx_http_slice_module did not work in named locations.
+
+ *) Bugfix: a segmentation fault might occur in a worker process when
+ using AIO after an "X-Accel-Redirect" redirection.
+
+ *) Bugfix: reduced memory consumption for long-lived requests using
+ gzipping.
+
+
+Changes with nginx 1.11.9 24 Jan 2017
+
+ *) Bugfix: nginx might hog CPU when using the stream module; the bug had
+ appeared in 1.11.5.
+
+ *) Bugfix: EXTERNAL authentication mechanism in mail proxy was accepted
+ even if it was not enabled in the configuration.
+
+ *) Bugfix: a segmentation fault might occur in a worker process if the
+ "ssl_verify_client" directive of the stream module was used.
+
+ *) Bugfix: the "ssl_verify_client" directive of the stream module might
+ not work.
+
+ *) Bugfix: closing keepalive connections due to no free worker
+ connections might be too aggressive.
+ Thanks to Joel Cunningham.
+
+ *) Bugfix: an incorrect response might be returned when using the
+ "sendfile" directive on FreeBSD and macOS; the bug had appeared in
+ 1.7.8.
+
+ *) Bugfix: a truncated response might be stored in cache when using the
+ "aio_write" directive.
+
+ *) Bugfix: a socket leak might occur when using the "aio_write"
+ directive.
+
+
Changes with nginx 1.11.8 27 Dec 2016
*) Feature: the "absolute_redirect" directive.
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.11.13.tar.gz/CHANGES.ru
^
|
@@ -1,4 +1,121 @@
+Изменения в nginx 1.11.13 04.04.2017
+
+ *) Добавление: параметр http_429 в директивах proxy_next_upstream,
+ fastcgi_next_upstream, scgi_next_upstream и uwsgi_next_upstream.
+ Спасибо Piotr Sikora.
+
+ *) Исправление: в обработке ошибок выделения памяти.
+
+ *) Исправление: при использовании директив sendfile и timer_resolution
+ на Linux запросы могли зависать.
+
+ *) Исправление: при использовании с подзапросами директив sendfile и
+ aio_write запросы могли зависать.
+
+ *) Исправление: в модуле ngx_http_v2_module.
+ Спасибо Piotr Sikora.
+
+ *) Исправление: при использовании HTTP/2 в рабочем процессе мог
+ произойти segmentation fault.
+
+ *) Исправление: запросы могли зависать при использовании с подзапросами
+ директив limit_rate, sendfile_max_chunk, limit_req или метода
+ $r->sleep() встроенного перла.
+
+ *) Исправление: в модуле ngx_http_slice_module.
+
+
+Изменения в nginx 1.11.12 24.03.2017
+
+ *) Исправление: nginx мог нагружать процессор; ошибка появилась в
+ 1.11.11.
+
+
+Изменения в nginx 1.11.11 21.03.2017
+
+ *) Добавление: директива worker_shutdown_timeout.
+
+ *) Добавление: улучшения в скриптах подсветки синтаксиса для vim.
+ Спасибо Wei-Ko Kao.
+
+ *) Исправление: при попытке установить переменную $limit_rate в пустую
+ строку в рабочем процессе мог произойти segmentation fault.
+
+ *) Исправление: директивы proxy_cache_background_update,
+ fastcgi_cache_background_update, scgi_cache_background_update и
+ uwsgi_cache_background_update могли работать некорректно, если
+ использовалась директива if.
+
+ *) Исправление: в рабочем процессе мог произойти segmentation fault,
+ если количество large_client_header_buffers в виртуальном сервере
+ отличалось от такового в сервере по умолчанию.
+
+ *) Исправление: в почтовом прокси-сервере.
+
+
+Изменения в nginx 1.11.10 14.02.2017
+
+ *) Изменение: формат заголовка кэша был изменен, ранее закэшированные
+ ответы будут загружены заново.
+
+ *) Добавление: поддержка расширений stale-while-revalidate и
+ stale-if-error в строке "Cache-Control" в заголовке ответа бэкенда.
+
+ *) Добавление: директивы proxy_cache_background_update,
+ fastcgi_cache_background_update, scgi_cache_background_update и
+ uwsgi_cache_background_update.
+
+ *) Добавление: теперь nginx может кэшировать ответы со строкой Vary
+ заголовка длиной до 128 символов (вместо 42 символов в предыдущих
+ версиях).
+
+ *) Добавление: параметр build директивы server_tokens.
+ Спасибо Tom Thorogood.
+
+ *) Исправление: при обработке запросов со строкой "Expect: 100-continue"
+ в заголовке запроса в логах могли появляться сообщения "[crit]
+ SSL_write() failed".
+
+ *) Исправление: модуль ngx_http_slice_module не работал в именованных
+ location'ах.
+
+ *) Исправление: при использовании AIO после перенаправления запроса с
+ помощью X-Accel-Redirect в рабочем процессе мог произойти
+ segmentation fault.
+
+ *) Исправление: уменьшено потребление памяти для долгоживущих запросов,
+ использующих сжатие.
+
+
+Изменения в nginx 1.11.9 24.01.2017
+
+ *) Исправление: при использовании модуля stream nginx мог нагружать
+ процессор; ошибка появилась в 1.11.5.
+
+ *) Исправление: метод аутентификации EXTERNAL в почтовом прокси-сервере
+ можно было использовать, даже если он не был разрешён в конфигурации.
+
+ *) Исправление: при использовании директивы ssl_verify_client модуля
+ stream в рабочем процессе мог произойти segmentation fault.
+
+ *) Исправление: директива ssl_verify_client модуля stream могла не
+ работать.
+
+ *) Исправление: при исчерпании рабочим процессом свободных соединений
+ keepalive-соединения могли закрываться излишне агрессивно.
+ Спасибо Joel Cunningham.
+
+ *) Исправление: при использовании директивы sendfile на FreeBSD и macOS
+ мог возвращаться некорректный ответ; ошибка появилась в 1.7.8.
+
+ *) Исправление: при использовании директивы aio_write ответ мог
+ сохраняться в кэш не полностью.
+
+ *) Исправление: при использовании директивы aio_write могла происходить
+ утечка сокетов.
+
+
Изменения в nginx 1.11.8 27.12.2016
*) Добавление: директива absolute_redirect.
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.11.13.tar.gz/LICENSE
^
|
@@ -1,6 +1,6 @@
/*
- * Copyright (C) 2002-2016 Igor Sysoev
- * Copyright (C) 2011-2016 Nginx, Inc.
+ * Copyright (C) 2002-2017 Igor Sysoev
+ * Copyright (C) 2011-2017 Nginx, Inc.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.11.13.tar.gz/auto/modules
^
|
@@ -56,832 +56,829 @@
fi
-HTTP_MODULES=
-HTTP_DEPS=
-HTTP_INCS=
-
-ngx_module_type=HTTP
-
-if :; then
- ngx_module_name="ngx_http_module \
- ngx_http_core_module \
- ngx_http_log_module \
- ngx_http_upstream_module"
- ngx_module_incs="src/http src/http/modules"
- ngx_module_deps="src/http/ngx_http.h \
- src/http/ngx_http_request.h \
- src/http/ngx_http_config.h \
- src/http/ngx_http_core_module.h \
- src/http/ngx_http_cache.h \
- src/http/ngx_http_variables.h \
- src/http/ngx_http_script.h \
- src/http/ngx_http_upstream.h \
- src/http/ngx_http_upstream_round_robin.h"
- ngx_module_srcs="src/http/ngx_http.c \
- src/http/ngx_http_core_module.c \
- src/http/ngx_http_special_response.c \
- src/http/ngx_http_request.c \
- src/http/ngx_http_parse.c \
- src/http/modules/ngx_http_log_module.c \
- src/http/ngx_http_request_body.c \
- src/http/ngx_http_variables.c \
- src/http/ngx_http_script.c \
- src/http/ngx_http_upstream.c \
- src/http/ngx_http_upstream_round_robin.c"
- ngx_module_libs=
- ngx_module_link=YES
-
- . auto/module
-fi
-
-
-if [ $HTTP != YES ]; then
- have=NGX_CRYPT . auto/nohave
- CRYPT_LIB=
-fi
-
+if [ $HTTP = YES ]; then
+ HTTP_MODULES=
+ HTTP_DEPS=
+ HTTP_INCS=
+
+ ngx_module_type=HTTP
+
+ if :; then
+ ngx_module_name="ngx_http_module \
+ ngx_http_core_module \
+ ngx_http_log_module \
+ ngx_http_upstream_module"
+ ngx_module_incs="src/http src/http/modules"
+ ngx_module_deps="src/http/ngx_http.h \
+ src/http/ngx_http_request.h \
+ src/http/ngx_http_config.h \
+ src/http/ngx_http_core_module.h \
+ src/http/ngx_http_cache.h \
+ src/http/ngx_http_variables.h \
+ src/http/ngx_http_script.h \
+ src/http/ngx_http_upstream.h \
+ src/http/ngx_http_upstream_round_robin.h"
+ ngx_module_srcs="src/http/ngx_http.c \
+ src/http/ngx_http_core_module.c \
+ src/http/ngx_http_special_response.c \
+ src/http/ngx_http_request.c \
+ src/http/ngx_http_parse.c \
+ src/http/modules/ngx_http_log_module.c \
+ src/http/ngx_http_request_body.c \
+ src/http/ngx_http_variables.c \
+ src/http/ngx_http_script.c \
+ src/http/ngx_http_upstream.c \
+ src/http/ngx_http_upstream_round_robin.c"
+ ngx_module_libs=
+ ngx_module_link=YES
-if [ $HTTP_CACHE = YES ]; then
- have=NGX_HTTP_CACHE . auto/have
- HTTP_SRCS="$HTTP_SRCS $HTTP_FILE_CACHE_SRCS"
-fi
+ . auto/module
+ fi
-if [ $HTTP_SSI = YES ]; then
- HTTP_POSTPONE=YES
-fi
+ if [ $HTTP_CACHE = YES ]; then
+ have=NGX_HTTP_CACHE . auto/have
+ HTTP_SRCS="$HTTP_SRCS $HTTP_FILE_CACHE_SRCS"
+ fi
-if [ $HTTP_SLICE = YES ]; then
- HTTP_POSTPONE=YES
-fi
+ if [ $HTTP_SSI = YES ]; then
+ HTTP_POSTPONE=YES
+ fi
-if [ $HTTP_ADDITION = YES ]; then
- HTTP_POSTPONE=YES
-fi
+ if [ $HTTP_SLICE = YES ]; then
+ HTTP_POSTPONE=YES
+ fi
-# the module order is important
-# ngx_http_static_module
-# ngx_http_gzip_static_module
-# ngx_http_dav_module
-# ngx_http_autoindex_module
-# ngx_http_index_module
-# ngx_http_random_index_module
-#
-# ngx_http_access_module
-# ngx_http_realip_module
-#
-#
-# the filter order is important
-# ngx_http_write_filter
-# ngx_http_header_filter
-# ngx_http_chunked_filter
-# ngx_http_v2_filter
-# ngx_http_range_header_filter
-# ngx_http_gzip_filter
-# ngx_http_postpone_filter
-# ngx_http_ssi_filter
-# ngx_http_charset_filter
-# ngx_http_xslt_filter
-# ngx_http_image_filter
-# ngx_http_sub_filter
-# ngx_http_addition_filter
-# ngx_http_gunzip_filter
-# ngx_http_userid_filter
-# ngx_http_headers_filter
-# ngx_http_copy_filter
-# ngx_http_range_body_filter
-# ngx_http_not_modified_filter
-# ngx_http_slice_filter
-
-ngx_module_type=HTTP_FILTER
-HTTP_FILTER_MODULES=
-
-ngx_module_order="ngx_http_static_module \
- ngx_http_gzip_static_module \
- ngx_http_dav_module \
- ngx_http_autoindex_module \
- ngx_http_index_module \
- ngx_http_random_index_module \
- ngx_http_access_module \
- ngx_http_realip_module \
- ngx_http_write_filter_module \
- ngx_http_header_filter_module \
- ngx_http_chunked_filter_module \
- ngx_http_v2_filter_module \
- ngx_http_range_header_filter_module \
- ngx_http_gzip_filter_module \
- ngx_http_postpone_filter_module \
- ngx_http_ssi_filter_module \
- ngx_http_charset_filter_module \
- ngx_http_xslt_filter_module \
- ngx_http_image_filter_module \
- ngx_http_sub_filter_module \
- ngx_http_addition_filter_module \
- ngx_http_gunzip_filter_module \
- ngx_http_userid_filter_module \
- ngx_http_headers_filter_module \
- ngx_http_copy_filter_module \
- ngx_http_range_body_filter_module \
- ngx_http_not_modified_filter_module \
- ngx_http_slice_filter_module"
+ if [ $HTTP_ADDITION = YES ]; then
+ HTTP_POSTPONE=YES
+ fi
-if :; then
- ngx_module_name=ngx_http_write_filter_module
- ngx_module_incs=
- ngx_module_deps=
- ngx_module_srcs=src/http/ngx_http_write_filter_module.c
- ngx_module_libs=
- ngx_module_link=YES
- . auto/module
-fi
+ # the module order is important
+ # ngx_http_static_module
+ # ngx_http_gzip_static_module
+ # ngx_http_dav_module
+ # ngx_http_autoindex_module
+ # ngx_http_index_module
+ # ngx_http_random_index_module
+ #
+ # ngx_http_access_module
+ # ngx_http_realip_module
+ #
+ #
+ # the filter order is important
+ # ngx_http_write_filter
+ # ngx_http_header_filter
+ # ngx_http_chunked_filter
+ # ngx_http_v2_filter
+ # ngx_http_range_header_filter
+ # ngx_http_gzip_filter
+ # ngx_http_postpone_filter
+ # ngx_http_ssi_filter
+ # ngx_http_charset_filter
+ # ngx_http_xslt_filter
+ # ngx_http_image_filter
+ # ngx_http_sub_filter
+ # ngx_http_addition_filter
+ # ngx_http_gunzip_filter
+ # ngx_http_userid_filter
+ # ngx_http_headers_filter
+ # ngx_http_copy_filter
+ # ngx_http_range_body_filter
+ # ngx_http_not_modified_filter
+ # ngx_http_slice_filter
+
+ ngx_module_type=HTTP_FILTER
+ HTTP_FILTER_MODULES=
+
+ ngx_module_order="ngx_http_static_module \
+ ngx_http_gzip_static_module \
+ ngx_http_dav_module \
+ ngx_http_autoindex_module \
+ ngx_http_index_module \
+ ngx_http_random_index_module \
+ ngx_http_access_module \
+ ngx_http_realip_module \
+ ngx_http_write_filter_module \
+ ngx_http_header_filter_module \
+ ngx_http_chunked_filter_module \
+ ngx_http_v2_filter_module \
+ ngx_http_range_header_filter_module \
+ ngx_http_gzip_filter_module \
+ ngx_http_postpone_filter_module \
+ ngx_http_ssi_filter_module \
+ ngx_http_charset_filter_module \
+ ngx_http_xslt_filter_module \
+ ngx_http_image_filter_module \
+ ngx_http_sub_filter_module \
+ ngx_http_addition_filter_module \
+ ngx_http_gunzip_filter_module \
+ ngx_http_userid_filter_module \
+ ngx_http_headers_filter_module \
+ ngx_http_copy_filter_module \
+ ngx_http_range_body_filter_module \
+ ngx_http_not_modified_filter_module \
+ ngx_http_slice_filter_module"
+
+ if :; then
+ ngx_module_name=ngx_http_write_filter_module
+ ngx_module_incs=
+ ngx_module_deps=
+ ngx_module_srcs=src/http/ngx_http_write_filter_module.c
+ ngx_module_libs=
+ ngx_module_link=YES
-if :; then
- ngx_module_name=ngx_http_header_filter_module
- ngx_module_incs=
- ngx_module_deps=
- ngx_module_srcs=src/http/ngx_http_header_filter_module.c
- ngx_module_libs=
- ngx_module_link=YES
+ . auto/module
+ fi
- . auto/module
-fi
+ if :; then
+ ngx_module_name=ngx_http_header_filter_module
+ ngx_module_incs=
+ ngx_module_deps=
+ ngx_module_srcs=src/http/ngx_http_header_filter_module.c
+ ngx_module_libs=
+ ngx_module_link=YES
-if :; then
- ngx_module_name=ngx_http_chunked_filter_module
- ngx_module_incs=
- ngx_module_deps=
- ngx_module_srcs=src/http/modules/ngx_http_chunked_filter_module.c
- ngx_module_libs=
- ngx_module_link=YES
+ . auto/module
+ fi
- . auto/module
-fi
+ if :; then
+ ngx_module_name=ngx_http_chunked_filter_module
+ ngx_module_incs=
+ ngx_module_deps=
+ ngx_module_srcs=src/http/modules/ngx_http_chunked_filter_module.c
+ ngx_module_libs=
+ ngx_module_link=YES
-if [ $HTTP_V2 = YES ]; then
- ngx_module_name=ngx_http_v2_filter_module
- ngx_module_incs=
- ngx_module_deps=
- ngx_module_srcs=src/http/v2/ngx_http_v2_filter_module.c
- ngx_module_libs=
- ngx_module_link=$HTTP_V2
+ . auto/module
+ fi
- . auto/module
-fi
+ if [ $HTTP_V2 = YES ]; then
+ ngx_module_name=ngx_http_v2_filter_module
+ ngx_module_incs=
+ ngx_module_deps=
+ ngx_module_srcs=src/http/v2/ngx_http_v2_filter_module.c
+ ngx_module_libs=
+ ngx_module_link=$HTTP_V2
-if :; then
- ngx_module_name=ngx_http_range_header_filter_module
- ngx_module_incs=
- ngx_module_deps=
- ngx_module_srcs=src/http/modules/ngx_http_range_filter_module.c
- ngx_module_libs=
- ngx_module_link=YES
-
- . auto/module
-fi
+ . auto/module
+ fi
-if [ $HTTP_GZIP = YES ]; then
- have=NGX_HTTP_GZIP . auto/have
- USE_ZLIB=YES
+ if :; then
+ ngx_module_name=ngx_http_range_header_filter_module
+ ngx_module_incs=
+ ngx_module_deps=
+ ngx_module_srcs=src/http/modules/ngx_http_range_filter_module.c
+ ngx_module_libs=
+ ngx_module_link=YES
- ngx_module_name=ngx_http_gzip_filter_module
- ngx_module_incs=
- ngx_module_deps=
- ngx_module_srcs=src/http/modules/ngx_http_gzip_filter_module.c
- ngx_module_libs=
- ngx_module_link=$HTTP_GZIP
+ . auto/module
+ fi
- . auto/module
-fi
+ if [ $HTTP_GZIP = YES ]; then
+ have=NGX_HTTP_GZIP . auto/have
+ USE_ZLIB=YES
+
+ ngx_module_name=ngx_http_gzip_filter_module
+ ngx_module_incs=
+ ngx_module_deps=
+ ngx_module_srcs=src/http/modules/ngx_http_gzip_filter_module.c
+ ngx_module_libs=
+ ngx_module_link=$HTTP_GZIP
-if [ $HTTP_POSTPONE = YES ]; then
- ngx_module_name=ngx_http_postpone_filter_module
- ngx_module_incs=
- ngx_module_deps=
- ngx_module_srcs=src/http/ngx_http_postpone_filter_module.c
- ngx_module_libs=
- ngx_module_link=$HTTP_POSTPONE
+ . auto/module
+ fi
- . auto/module
-fi
+ if [ $HTTP_POSTPONE = YES ]; then
+ ngx_module_name=ngx_http_postpone_filter_module
+ ngx_module_incs=
+ ngx_module_deps=
+ ngx_module_srcs=src/http/ngx_http_postpone_filter_module.c
+ ngx_module_libs=
+ ngx_module_link=$HTTP_POSTPONE
-if [ $HTTP_SSI = YES ]; then
- have=NGX_HTTP_SSI . auto/have
+ . auto/module
+ fi
- ngx_module_name=ngx_http_ssi_filter_module
- ngx_module_incs=
- ngx_module_deps=src/http/modules/ngx_http_ssi_filter_module.h
- ngx_module_srcs=src/http/modules/ngx_http_ssi_filter_module.c
- ngx_module_libs=
- ngx_module_link=$HTTP_SSI
+ if [ $HTTP_SSI = YES ]; then
+ have=NGX_HTTP_SSI . auto/have
- . auto/module
-fi
+ ngx_module_name=ngx_http_ssi_filter_module
+ ngx_module_incs=
+ ngx_module_deps=src/http/modules/ngx_http_ssi_filter_module.h
+ ngx_module_srcs=src/http/modules/ngx_http_ssi_filter_module.c
+ ngx_module_libs=
+ ngx_module_link=$HTTP_SSI
-if [ $HTTP_CHARSET = YES ]; then
- ngx_module_name=ngx_http_charset_filter_module
- ngx_module_incs=
- ngx_module_deps=
- ngx_module_srcs=src/http/modules/ngx_http_charset_filter_module.c
- ngx_module_libs=
- ngx_module_link=$HTTP_CHARSET
+ . auto/module
+ fi
- . auto/module
-fi
+ if [ $HTTP_CHARSET = YES ]; then
+ ngx_module_name=ngx_http_charset_filter_module
+ ngx_module_incs=
+ ngx_module_deps=
+ ngx_module_srcs=src/http/modules/ngx_http_charset_filter_module.c
+ ngx_module_libs=
+ ngx_module_link=$HTTP_CHARSET
-if [ $HTTP_XSLT != NO ]; then
- ngx_module_name=ngx_http_xslt_filter_module
- ngx_module_incs=
- ngx_module_deps=
- ngx_module_srcs=src/http/modules/ngx_http_xslt_filter_module.c
- ngx_module_libs=LIBXSLT
- ngx_module_link=$HTTP_XSLT
+ . auto/module
+ fi
- . auto/module
-fi
+ if [ $HTTP_XSLT != NO ]; then
+ ngx_module_name=ngx_http_xslt_filter_module
+ ngx_module_incs=
+ ngx_module_deps=
+ ngx_module_srcs=src/http/modules/ngx_http_xslt_filter_module.c
+ ngx_module_libs=LIBXSLT
+ ngx_module_link=$HTTP_XSLT
-if [ $HTTP_IMAGE_FILTER != NO ]; then
- ngx_module_name=ngx_http_image_filter_module
- ngx_module_incs=
- ngx_module_deps=
- ngx_module_srcs=src/http/modules/ngx_http_image_filter_module.c
- ngx_module_libs=LIBGD
- ngx_module_link=$HTTP_IMAGE_FILTER
+ . auto/module
+ fi
- . auto/module
-fi
+ if [ $HTTP_IMAGE_FILTER != NO ]; then
+ ngx_module_name=ngx_http_image_filter_module
+ ngx_module_incs=
+ ngx_module_deps=
+ ngx_module_srcs=src/http/modules/ngx_http_image_filter_module.c
+ ngx_module_libs=LIBGD
+ ngx_module_link=$HTTP_IMAGE_FILTER
-if [ $HTTP_SUB = YES ]; then
- ngx_module_name=ngx_http_sub_filter_module
- ngx_module_incs=
- ngx_module_deps=
- ngx_module_srcs=src/http/modules/ngx_http_sub_filter_module.c
- ngx_module_libs=
- ngx_module_link=$HTTP_SUB
+ . auto/module
+ fi
- . auto/module
-fi
+ if [ $HTTP_SUB = YES ]; then
+ ngx_module_name=ngx_http_sub_filter_module
+ ngx_module_incs=
+ ngx_module_deps=
+ ngx_module_srcs=src/http/modules/ngx_http_sub_filter_module.c
+ ngx_module_libs=
+ ngx_module_link=$HTTP_SUB
-if [ $HTTP_ADDITION = YES ]; then
- ngx_module_name=ngx_http_addition_filter_module
- ngx_module_incs=
- ngx_module_deps=
- ngx_module_srcs=src/http/modules/ngx_http_addition_filter_module.c
- ngx_module_libs=
- ngx_module_link=$HTTP_ADDITION
+ . auto/module
+ fi
- . auto/module
-fi
+ if [ $HTTP_ADDITION = YES ]; then
+ ngx_module_name=ngx_http_addition_filter_module
+ ngx_module_incs=
+ ngx_module_deps=
+ ngx_module_srcs=src/http/modules/ngx_http_addition_filter_module.c
+ ngx_module_libs=
+ ngx_module_link=$HTTP_ADDITION
-if [ $HTTP_GUNZIP = YES ]; then
- have=NGX_HTTP_GZIP . auto/have
- USE_ZLIB=YES
+ . auto/module
+ fi
- ngx_module_name=ngx_http_gunzip_filter_module
- ngx_module_incs=
- ngx_module_deps=
- ngx_module_srcs=src/http/modules/ngx_http_gunzip_filter_module.c
- ngx_module_libs=
- ngx_module_link=$HTTP_GUNZIP
+ if [ $HTTP_GUNZIP = YES ]; then
+ have=NGX_HTTP_GZIP . auto/have
+ USE_ZLIB=YES
+
+ ngx_module_name=ngx_http_gunzip_filter_module
+ ngx_module_incs=
+ ngx_module_deps=
+ ngx_module_srcs=src/http/modules/ngx_http_gunzip_filter_module.c
+ ngx_module_libs=
+ ngx_module_link=$HTTP_GUNZIP
- . auto/module
-fi
+ . auto/module
+ fi
-if [ $HTTP_USERID = YES ]; then
- ngx_module_name=ngx_http_userid_filter_module
- ngx_module_incs=
- ngx_module_deps=
- ngx_module_srcs=src/http/modules/ngx_http_userid_filter_module.c
- ngx_module_libs=
- ngx_module_link=$HTTP_USERID
+ if [ $HTTP_USERID = YES ]; then
+ ngx_module_name=ngx_http_userid_filter_module
+ ngx_module_incs=
+ ngx_module_deps=
+ ngx_module_srcs=src/http/modules/ngx_http_userid_filter_module.c
+ ngx_module_libs=
+ ngx_module_link=$HTTP_USERID
- . auto/module
-fi
+ . auto/module
+ fi
-if :; then
- ngx_module_name=ngx_http_headers_filter_module
- ngx_module_incs=
- ngx_module_deps=
- ngx_module_srcs=src/http/modules/ngx_http_headers_filter_module.c
- ngx_module_libs=
- ngx_module_link=YES
+ if :; then
+ ngx_module_name=ngx_http_headers_filter_module
+ ngx_module_incs=
+ ngx_module_deps=
+ ngx_module_srcs=src/http/modules/ngx_http_headers_filter_module.c
+ ngx_module_libs=
+ ngx_module_link=YES
- . auto/module
-fi
+ . auto/module
+ fi
-ngx_module_type=HTTP_INIT_FILTER
-HTTP_INIT_FILTER_MODULES=
+ ngx_module_type=HTTP_INIT_FILTER
+ HTTP_INIT_FILTER_MODULES=
-if :; then
- ngx_module_name=ngx_http_copy_filter_module
- ngx_module_incs=
- ngx_module_deps=
- ngx_module_srcs=src/http/ngx_http_copy_filter_module.c
- ngx_module_libs=
- ngx_module_link=YES
+ if :; then
+ ngx_module_name=ngx_http_copy_filter_module
+ ngx_module_incs=
+ ngx_module_deps=
+ ngx_module_srcs=src/http/ngx_http_copy_filter_module.c
+ ngx_module_libs=
+ ngx_module_link=YES
- . auto/module
-fi
+ . auto/module
+ fi
-if :; then
- ngx_module_name=ngx_http_range_body_filter_module
- ngx_module_incs=
- ngx_module_deps=
- ngx_module_srcs=
- ngx_module_libs=
- ngx_module_link=YES
+ if :; then
+ ngx_module_name=ngx_http_range_body_filter_module
+ ngx_module_incs=
+ ngx_module_deps=
+ ngx_module_srcs=
+ ngx_module_libs=
+ ngx_module_link=YES
- . auto/module
-fi
+ . auto/module
+ fi
-if :; then
- ngx_module_name=ngx_http_not_modified_filter_module
- ngx_module_incs=
- ngx_module_deps=
- ngx_module_srcs=src/http/modules/ngx_http_not_modified_filter_module.c
- ngx_module_libs=
- ngx_module_link=YES
+ if :; then
+ ngx_module_name=ngx_http_not_modified_filter_module
+ ngx_module_incs=
+ ngx_module_deps=
+ ngx_module_srcs=src/http/modules/ngx_http_not_modified_filter_module.c
+ ngx_module_libs=
+ ngx_module_link=YES
- . auto/module
-fi
+ . auto/module
+ fi
-if [ $HTTP_SLICE = YES ]; then
- ngx_module_name=ngx_http_slice_filter_module
- ngx_module_incs=
- ngx_module_deps=
- ngx_module_srcs=src/http/modules/ngx_http_slice_filter_module.c
- ngx_module_libs=
- ngx_module_link=$HTTP_SLICE
+ if [ $HTTP_SLICE = YES ]; then
+ ngx_module_name=ngx_http_slice_filter_module
+ ngx_module_incs=
+ ngx_module_deps=
+ ngx_module_srcs=src/http/modules/ngx_http_slice_filter_module.c
+ ngx_module_libs=
+ ngx_module_link=$HTTP_SLICE
- . auto/module
-fi
+ . auto/module
+ fi
-ngx_module_type=HTTP
+ ngx_module_type=HTTP
-if [ $HTTP_V2 = YES ]; then
- have=NGX_HTTP_V2 . auto/have
+ if [ $HTTP_V2 = YES ]; then
+ have=NGX_HTTP_V2 . auto/have
- ngx_module_name=ngx_http_v2_module
- ngx_module_incs=src/http/v2
- ngx_module_deps="src/http/v2/ngx_http_v2.h src/http/v2/ngx_http_v2_module.h"
- ngx_module_srcs="src/http/v2/ngx_http_v2.c \
- src/http/v2/ngx_http_v2_table.c \
- src/http/v2/ngx_http_v2_huff_decode.c \
- src/http/v2/ngx_http_v2_huff_encode.c \
- src/http/v2/ngx_http_v2_module.c"
- ngx_module_libs=
- ngx_module_link=$HTTP_V2
+ ngx_module_name=ngx_http_v2_module
+ ngx_module_incs=src/http/v2
+ ngx_module_deps="src/http/v2/ngx_http_v2.h \
+ src/http/v2/ngx_http_v2_module.h"
+ ngx_module_srcs="src/http/v2/ngx_http_v2.c \
+ src/http/v2/ngx_http_v2_table.c \
+ src/http/v2/ngx_http_v2_huff_decode.c \
+ src/http/v2/ngx_http_v2_huff_encode.c \
+ src/http/v2/ngx_http_v2_module.c"
+ ngx_module_libs=
+ ngx_module_link=$HTTP_V2
- . auto/module
-fi
+ . auto/module
+ fi
-if :; then
- ngx_module_name=ngx_http_static_module
- ngx_module_incs=
- ngx_module_deps=
- ngx_module_srcs=src/http/modules/ngx_http_static_module.c
- ngx_module_libs=
- ngx_module_link=YES
+ if :; then
+ ngx_module_name=ngx_http_static_module
+ ngx_module_incs=
+ ngx_module_deps=
+ ngx_module_srcs=src/http/modules/ngx_http_static_module.c
+ ngx_module_libs=
+ ngx_module_link=YES
- . auto/module
-fi
+ . auto/module
+ fi
-if [ $HTTP_GZIP_STATIC = YES ]; then
- have=NGX_HTTP_GZIP . auto/have
+ if [ $HTTP_GZIP_STATIC = YES ]; then
+ have=NGX_HTTP_GZIP . auto/have
- ngx_module_name=ngx_http_gzip_static_module
- ngx_module_incs=
- ngx_module_deps=
- ngx_module_srcs=src/http/modules/ngx_http_gzip_static_module.c
- ngx_module_libs=
- ngx_module_link=$HTTP_GZIP_STATIC
+ ngx_module_name=ngx_http_gzip_static_module
+ ngx_module_incs=
+ ngx_module_deps=
+ ngx_module_srcs=src/http/modules/ngx_http_gzip_static_module.c
+ ngx_module_libs=
+ ngx_module_link=$HTTP_GZIP_STATIC
- . auto/module
-fi
+ . auto/module
+ fi
-if [ $HTTP_DAV = YES ]; then
- have=NGX_HTTP_DAV . auto/have
+ if [ $HTTP_DAV = YES ]; then
+ have=NGX_HTTP_DAV . auto/have
- ngx_module_name=ngx_http_dav_module
- ngx_module_incs=
- ngx_module_deps=
- ngx_module_srcs=src/http/modules/ngx_http_dav_module.c
- ngx_module_libs=
- ngx_module_link=$HTTP_DAV
+ ngx_module_name=ngx_http_dav_module
+ ngx_module_incs=
+ ngx_module_deps=
+ ngx_module_srcs=src/http/modules/ngx_http_dav_module.c
+ ngx_module_libs=
+ ngx_module_link=$HTTP_DAV
- . auto/module
-fi
+ . auto/module
+ fi
-if [ $HTTP_AUTOINDEX = YES ]; then
- ngx_module_name=ngx_http_autoindex_module
- ngx_module_incs=
- ngx_module_deps=
- ngx_module_srcs=src/http/modules/ngx_http_autoindex_module.c
- ngx_module_libs=
- ngx_module_link=$HTTP_AUTOINDEX
+ if [ $HTTP_AUTOINDEX = YES ]; then
+ ngx_module_name=ngx_http_autoindex_module
+ ngx_module_incs=
+ ngx_module_deps=
+ ngx_module_srcs=src/http/modules/ngx_http_autoindex_module.c
+ ngx_module_libs=
+ ngx_module_link=$HTTP_AUTOINDEX
- . auto/module
-fi
+ . auto/module
+ fi
-if :; then
- ngx_module_name=ngx_http_index_module
- ngx_module_incs=
- ngx_module_deps=
- ngx_module_srcs=src/http/modules/ngx_http_index_module.c
- ngx_module_libs=
- ngx_module_link=YES
+ if :; then
+ ngx_module_name=ngx_http_index_module
+ ngx_module_incs=
+ ngx_module_deps=
+ ngx_module_srcs=src/http/modules/ngx_http_index_module.c
+ ngx_module_libs=
+ ngx_module_link=YES
- . auto/module
-fi
+ . auto/module
+ fi
-if [ $HTTP_RANDOM_INDEX = YES ]; then
- ngx_module_name=ngx_http_random_index_module
- ngx_module_incs=
- ngx_module_deps=
- ngx_module_srcs=src/http/modules/ngx_http_random_index_module.c
- ngx_module_libs=
- ngx_module_link=$HTTP_RANDOM_INDEX
+ if [ $HTTP_RANDOM_INDEX = YES ]; then
+ ngx_module_name=ngx_http_random_index_module
+ ngx_module_incs=
+ ngx_module_deps=
+ ngx_module_srcs=src/http/modules/ngx_http_random_index_module.c
+ ngx_module_libs=
+ ngx_module_link=$HTTP_RANDOM_INDEX
- . auto/module
-fi
+ . auto/module
+ fi
-if [ $HTTP_AUTH_REQUEST = YES ]; then
- ngx_module_name=ngx_http_auth_request_module
- ngx_module_incs=
- ngx_module_deps=
- ngx_module_srcs=src/http/modules/ngx_http_auth_request_module.c
- ngx_module_libs=
- ngx_module_link=$HTTP_AUTH_REQUEST
+ if [ $HTTP_AUTH_REQUEST = YES ]; then
+ ngx_module_name=ngx_http_auth_request_module
+ ngx_module_incs=
+ ngx_module_deps=
+ ngx_module_srcs=src/http/modules/ngx_http_auth_request_module.c
+ ngx_module_libs=
+ ngx_module_link=$HTTP_AUTH_REQUEST
- . auto/module
-fi
+ . auto/module
+ fi
-if [ $HTTP_AUTH_BASIC = YES ]; then
- have=NGX_CRYPT . auto/have
+ if [ $HTTP_AUTH_BASIC = YES ]; then
+ have=NGX_CRYPT . auto/have
- ngx_module_name=ngx_http_auth_basic_module
- ngx_module_incs=
- ngx_module_deps=
- ngx_module_srcs=src/http/modules/ngx_http_auth_basic_module.c
- ngx_module_libs=$CRYPT_LIB
- ngx_module_link=$HTTP_AUTH_BASIC
+ ngx_module_name=ngx_http_auth_basic_module
+ ngx_module_incs=
+ ngx_module_deps=
+ ngx_module_srcs=src/http/modules/ngx_http_auth_basic_module.c
+ ngx_module_libs=$CRYPT_LIB
+ ngx_module_link=$HTTP_AUTH_BASIC
- . auto/module
-fi
+ . auto/module
+ fi
-if [ $HTTP_ACCESS = YES ]; then
- ngx_module_name=ngx_http_access_module
- ngx_module_incs=
- ngx_module_deps=
- ngx_module_srcs=src/http/modules/ngx_http_access_module.c
- ngx_module_libs=
- ngx_module_link=$HTTP_ACCESS
+ if [ $HTTP_ACCESS = YES ]; then
+ ngx_module_name=ngx_http_access_module
+ ngx_module_incs=
+ ngx_module_deps=
+ ngx_module_srcs=src/http/modules/ngx_http_access_module.c
+ ngx_module_libs=
+ ngx_module_link=$HTTP_ACCESS
- . auto/module
-fi
+ . auto/module
+ fi
-if [ $HTTP_LIMIT_CONN = YES ]; then
- ngx_module_name=ngx_http_limit_conn_module
- ngx_module_incs=
- ngx_module_deps=
- ngx_module_srcs=src/http/modules/ngx_http_limit_conn_module.c
- ngx_module_libs=
- ngx_module_link=$HTTP_LIMIT_CONN
+ if [ $HTTP_LIMIT_CONN = YES ]; then
+ ngx_module_name=ngx_http_limit_conn_module
+ ngx_module_incs=
+ ngx_module_deps=
+ ngx_module_srcs=src/http/modules/ngx_http_limit_conn_module.c
+ ngx_module_libs=
+ ngx_module_link=$HTTP_LIMIT_CONN
- . auto/module
-fi
+ . auto/module
+ fi
-if [ $HTTP_LIMIT_REQ = YES ]; then
- ngx_module_name=ngx_http_limit_req_module
- ngx_module_incs=
- ngx_module_deps=
- ngx_module_srcs=src/http/modules/ngx_http_limit_req_module.c
- ngx_module_libs=
- ngx_module_link=$HTTP_LIMIT_REQ
+ if [ $HTTP_LIMIT_REQ = YES ]; then
+ ngx_module_name=ngx_http_limit_req_module
+ ngx_module_incs=
+ ngx_module_deps=
+ ngx_module_srcs=src/http/modules/ngx_http_limit_req_module.c
+ ngx_module_libs=
+ ngx_module_link=$HTTP_LIMIT_REQ
- . auto/module
-fi
+ . auto/module
+ fi
-if [ $HTTP_REALIP = YES ]; then
- have=NGX_HTTP_REALIP . auto/have
- have=NGX_HTTP_X_FORWARDED_FOR . auto/have
+ if [ $HTTP_REALIP = YES ]; then
+ have=NGX_HTTP_REALIP . auto/have
+ have=NGX_HTTP_X_FORWARDED_FOR . auto/have
+
+ ngx_module_name=ngx_http_realip_module
+ ngx_module_incs=
+ ngx_module_deps=
+ ngx_module_srcs=src/http/modules/ngx_http_realip_module.c
+ ngx_module_libs=
+ ngx_module_link=$HTTP_REALIP
- ngx_module_name=ngx_http_realip_module
- ngx_module_incs=
- ngx_module_deps=
- ngx_module_srcs=src/http/modules/ngx_http_realip_module.c
- ngx_module_libs=
- ngx_module_link=$HTTP_REALIP
+ . auto/module
+ fi
- . auto/module
-fi
+ if [ $HTTP_STATUS = YES ]; then
+ ngx_module_name=ngx_http_status_module
+ ngx_module_incs=
+ ngx_module_deps=
+ ngx_module_srcs=src/http/modules/ngx_http_status_module.c
+ ngx_module_libs=
+ ngx_module_link=$HTTP_STATUS
-if [ $HTTP_STATUS = YES ]; then
- ngx_module_name=ngx_http_status_module
- ngx_module_incs=
- ngx_module_deps=
- ngx_module_srcs=src/http/modules/ngx_http_status_module.c
- ngx_module_libs=
- ngx_module_link=$HTTP_STATUS
+ . auto/module
+ fi
- . auto/module
-fi
+ if [ $HTTP_GEO = YES ]; then
+ have=NGX_HTTP_X_FORWARDED_FOR . auto/have
-if [ $HTTP_GEO = YES ]; then
- have=NGX_HTTP_X_FORWARDED_FOR . auto/have
+ ngx_module_name=ngx_http_geo_module
+ ngx_module_incs=
+ ngx_module_deps=
+ ngx_module_srcs=src/http/modules/ngx_http_geo_module.c
+ ngx_module_libs=
+ ngx_module_link=$HTTP_GEO
- ngx_module_name=ngx_http_geo_module
- ngx_module_incs=
- ngx_module_deps=
- ngx_module_srcs=src/http/modules/ngx_http_geo_module.c
- ngx_module_libs=
- ngx_module_link=$HTTP_GEO
+ . auto/module
+ fi
- . auto/module
-fi
+ if [ $HTTP_GEOIP != NO ]; then
+ have=NGX_HTTP_X_FORWARDED_FOR . auto/have
-if [ $HTTP_GEOIP != NO ]; then
- have=NGX_HTTP_X_FORWARDED_FOR . auto/have
+ ngx_module_name=ngx_http_geoip_module
+ ngx_module_incs=
+ ngx_module_deps=
+ ngx_module_srcs=src/http/modules/ngx_http_geoip_module.c
+ ngx_module_libs=GEOIP
+ ngx_module_link=$HTTP_GEOIP
- ngx_module_name=ngx_http_geoip_module
- ngx_module_incs=
- ngx_module_deps=
- ngx_module_srcs=src/http/modules/ngx_http_geoip_module.c
- ngx_module_libs=GEOIP
- ngx_module_link=$HTTP_GEOIP
+ . auto/module
+ fi
- . auto/module
-fi
+ if [ $HTTP_MAP = YES ]; then
+ ngx_module_name=ngx_http_map_module
+ ngx_module_incs=
+ ngx_module_deps=
+ ngx_module_srcs=src/http/modules/ngx_http_map_module.c
+ ngx_module_libs=
+ ngx_module_link=$HTTP_MAP
-if [ $HTTP_MAP = YES ]; then
- ngx_module_name=ngx_http_map_module
- ngx_module_incs=
- ngx_module_deps=
- ngx_module_srcs=src/http/modules/ngx_http_map_module.c
- ngx_module_libs=
- ngx_module_link=$HTTP_MAP
+ . auto/module
+ fi
- . auto/module
-fi
+ if [ $HTTP_SPLIT_CLIENTS = YES ]; then
+ ngx_module_name=ngx_http_split_clients_module
+ ngx_module_incs=
+ ngx_module_deps=
+ ngx_module_srcs=src/http/modules/ngx_http_split_clients_module.c
+ ngx_module_libs=
+ ngx_module_link=$HTTP_SPLIT_CLIENTS
-if [ $HTTP_SPLIT_CLIENTS = YES ]; then
- ngx_module_name=ngx_http_split_clients_module
- ngx_module_incs=
- ngx_module_deps=
- ngx_module_srcs=src/http/modules/ngx_http_split_clients_module.c
- ngx_module_libs=
- ngx_module_link=$HTTP_SPLIT_CLIENTS
+ . auto/module
+ fi
- . auto/module
-fi
+ if [ $HTTP_REFERER = YES ]; then
+ ngx_module_name=ngx_http_referer_module
+ ngx_module_incs=
+ ngx_module_deps=
+ ngx_module_srcs=src/http/modules/ngx_http_referer_module.c
+ ngx_module_libs=
+ ngx_module_link=$HTTP_REFERER
-if [ $HTTP_REFERER = YES ]; then
- ngx_module_name=ngx_http_referer_module
- ngx_module_incs=
- ngx_module_deps=
- ngx_module_srcs=src/http/modules/ngx_http_referer_module.c
- ngx_module_libs=
- ngx_module_link=$HTTP_REFERER
+ . auto/module
+ fi
- . auto/module
-fi
+ if [ $HTTP_REWRITE = YES -a $USE_PCRE != DISABLED ]; then
+ USE_PCRE=YES
-if [ $HTTP_REWRITE = YES -a $USE_PCRE != DISABLED ]; then
- USE_PCRE=YES
+ ngx_module_name=ngx_http_rewrite_module
+ ngx_module_incs=
+ ngx_module_deps=
+ ngx_module_srcs=src/http/modules/ngx_http_rewrite_module.c
+ ngx_module_libs=
+ ngx_module_link=$HTTP_REWRITE
- ngx_module_name=ngx_http_rewrite_module
- ngx_module_incs=
- ngx_module_deps=
- ngx_module_srcs=src/http/modules/ngx_http_rewrite_module.c
- ngx_module_libs=
- ngx_module_link=$HTTP_REWRITE
+ . auto/module
+ fi
- . auto/module
-fi
+ if [ $HTTP_SSL = YES ]; then
+ USE_OPENSSL=YES
+ have=NGX_HTTP_SSL . auto/have
-if [ $HTTP_SSL = YES ]; then
- USE_OPENSSL=YES
- have=NGX_HTTP_SSL . auto/have
+ ngx_module_name=ngx_http_ssl_module
+ ngx_module_incs=
+ ngx_module_deps=src/http/modules/ngx_http_ssl_module.h
+ ngx_module_srcs=src/http/modules/ngx_http_ssl_module.c
+ ngx_module_libs=
+ ngx_module_link=$HTTP_SSL
- ngx_module_name=ngx_http_ssl_module
- ngx_module_incs=
- ngx_module_deps=src/http/modules/ngx_http_ssl_module.h
- ngx_module_srcs=src/http/modules/ngx_http_ssl_module.c
- ngx_module_libs=
- ngx_module_link=$HTTP_SSL
+ . auto/module
+ fi
- . auto/module
-fi
+ if [ $HTTP_PROXY = YES ]; then
+ have=NGX_HTTP_X_FORWARDED_FOR . auto/have
-if [ $HTTP_PROXY = YES ]; then
- have=NGX_HTTP_X_FORWARDED_FOR . auto/have
+ ngx_module_name=ngx_http_proxy_module
+ ngx_module_incs=
+ ngx_module_deps=
+ ngx_module_srcs=src/http/modules/ngx_http_proxy_module.c
+ ngx_module_libs=
+ ngx_module_link=$HTTP_PROXY
- ngx_module_name=ngx_http_proxy_module
- ngx_module_incs=
- ngx_module_deps=
- ngx_module_srcs=src/http/modules/ngx_http_proxy_module.c
- ngx_module_libs=
- ngx_module_link=$HTTP_PROXY
+ . auto/module
+ fi
- . auto/module
-fi
+ if [ $HTTP_FASTCGI = YES ]; then
+ ngx_module_name=ngx_http_fastcgi_module
+ ngx_module_incs=
+ ngx_module_deps=
+ ngx_module_srcs=src/http/modules/ngx_http_fastcgi_module.c
+ ngx_module_libs=
+ ngx_module_link=$HTTP_FASTCGI
-if [ $HTTP_FASTCGI = YES ]; then
- ngx_module_name=ngx_http_fastcgi_module
- ngx_module_incs=
- ngx_module_deps=
- ngx_module_srcs=src/http/modules/ngx_http_fastcgi_module.c
- ngx_module_libs=
- ngx_module_link=$HTTP_FASTCGI
+ . auto/module
+ fi
- . auto/module
-fi
+ if [ $HTTP_UWSGI = YES ]; then
+ ngx_module_name=ngx_http_uwsgi_module
+ ngx_module_incs=
+ ngx_module_deps=
+ ngx_module_srcs=src/http/modules/ngx_http_uwsgi_module.c
+ ngx_module_libs=
+ ngx_module_link=$HTTP_UWSGI
-if [ $HTTP_UWSGI = YES ]; then
- ngx_module_name=ngx_http_uwsgi_module
- ngx_module_incs=
- ngx_module_deps=
- ngx_module_srcs=src/http/modules/ngx_http_uwsgi_module.c
- ngx_module_libs=
- ngx_module_link=$HTTP_UWSGI
-
- . auto/module
-fi
+ . auto/module
+ fi
-if [ $HTTP_SCGI = YES ]; then
- ngx_module_name=ngx_http_scgi_module
- ngx_module_incs=
- ngx_module_deps=
- ngx_module_srcs=src/http/modules/ngx_http_scgi_module.c
- ngx_module_libs=
- ngx_module_link=$HTTP_SCGI
+ if [ $HTTP_SCGI = YES ]; then
+ ngx_module_name=ngx_http_scgi_module
+ ngx_module_incs=
+ ngx_module_deps=
+ ngx_module_srcs=src/http/modules/ngx_http_scgi_module.c
+ ngx_module_libs=
+ ngx_module_link=$HTTP_SCGI
- . auto/module
-fi
+ . auto/module
+ fi
-if [ $HTTP_PERL != NO ]; then
- ngx_module_name=ngx_http_perl_module
- ngx_module_incs=src/http/modules/perl
- ngx_module_deps=src/http/modules/perl/ngx_http_perl_module.h
- ngx_module_srcs=src/http/modules/perl/ngx_http_perl_module.c
- ngx_module_libs=PERL
- ngx_module_link=$HTTP_PERL
+ if [ $HTTP_PERL != NO ]; then
+ ngx_module_name=ngx_http_perl_module
+ ngx_module_incs=src/http/modules/perl
+ ngx_module_deps=src/http/modules/perl/ngx_http_perl_module.h
+ ngx_module_srcs=src/http/modules/perl/ngx_http_perl_module.c
+ ngx_module_libs=PERL
+ ngx_module_link=$HTTP_PERL
- . auto/module
-fi
+ . auto/module
+ fi
-if [ $HTTP_MEMCACHED = YES ]; then
- ngx_module_name=ngx_http_memcached_module
- ngx_module_incs=
- ngx_module_deps=
- ngx_module_srcs=src/http/modules/ngx_http_memcached_module.c
- ngx_module_libs=
- ngx_module_link=$HTTP_MEMCACHED
+ if [ $HTTP_MEMCACHED = YES ]; then
+ ngx_module_name=ngx_http_memcached_module
+ ngx_module_incs=
+ ngx_module_deps=
+ ngx_module_srcs=src/http/modules/ngx_http_memcached_module.c
+ ngx_module_libs=
+ ngx_module_link=$HTTP_MEMCACHED
- . auto/module
-fi
+ . auto/module
+ fi
-if [ $HTTP_EMPTY_GIF = YES ]; then
- ngx_module_name=ngx_http_empty_gif_module
- ngx_module_incs=
- ngx_module_deps=
- ngx_module_srcs=src/http/modules/ngx_http_empty_gif_module.c
- ngx_module_libs=
- ngx_module_link=$HTTP_EMPTY_GIF
+ if [ $HTTP_EMPTY_GIF = YES ]; then
+ ngx_module_name=ngx_http_empty_gif_module
+ ngx_module_incs=
+ ngx_module_deps=
+ ngx_module_srcs=src/http/modules/ngx_http_empty_gif_module.c
+ ngx_module_libs=
+ ngx_module_link=$HTTP_EMPTY_GIF
- . auto/module
-fi
+ . auto/module
+ fi
-if [ $HTTP_BROWSER = YES ]; then
- ngx_module_name=ngx_http_browser_module
- ngx_module_incs=
- ngx_module_deps=
- ngx_module_srcs=src/http/modules/ngx_http_browser_module.c
- ngx_module_libs=
- ngx_module_link=$HTTP_BROWSER
+ if [ $HTTP_BROWSER = YES ]; then
+ ngx_module_name=ngx_http_browser_module
+ ngx_module_incs=
+ ngx_module_deps=
+ ngx_module_srcs=src/http/modules/ngx_http_browser_module.c
+ ngx_module_libs=
+ ngx_module_link=$HTTP_BROWSER
- . auto/module
-fi
+ . auto/module
+ fi
-if [ $HTTP_SECURE_LINK = YES ]; then
- ngx_module_name=ngx_http_secure_link_module
- ngx_module_incs=
- ngx_module_deps=
- ngx_module_srcs=src/http/modules/ngx_http_secure_link_module.c
- ngx_module_libs=
- ngx_module_link=$HTTP_SECURE_LINK
+ if [ $HTTP_SECURE_LINK = YES ]; then
+ ngx_module_name=ngx_http_secure_link_module
+ ngx_module_incs=
+ ngx_module_deps=
+ ngx_module_srcs=src/http/modules/ngx_http_secure_link_module.c
+ ngx_module_libs=
+ ngx_module_link=$HTTP_SECURE_LINK
- . auto/module
-fi
+ . auto/module
+ fi
-if [ $HTTP_DEGRADATION = YES ]; then
- have=NGX_HTTP_DEGRADATION . auto/have
+ if [ $HTTP_DEGRADATION = YES ]; then
+ have=NGX_HTTP_DEGRADATION . auto/have
- ngx_module_name=ngx_http_degradation_module
- ngx_module_incs=
- ngx_module_deps=
- ngx_module_srcs=src/http/modules/ngx_http_degradation_module.c
- ngx_module_libs=
- ngx_module_link=$HTTP_DEGRADATION
+ ngx_module_name=ngx_http_degradation_module
+ ngx_module_incs=
+ ngx_module_deps=
+ ngx_module_srcs=src/http/modules/ngx_http_degradation_module.c
+ ngx_module_libs=
+ ngx_module_link=$HTTP_DEGRADATION
- . auto/module
-fi
+ . auto/module
+ fi
-if [ $HTTP_FLV = YES ]; then
- ngx_module_name=ngx_http_flv_module
- ngx_module_incs=
- ngx_module_deps=
- ngx_module_srcs=src/http/modules/ngx_http_flv_module.c
- ngx_module_libs=
- ngx_module_link=$HTTP_FLV
+ if [ $HTTP_FLV = YES ]; then
+ ngx_module_name=ngx_http_flv_module
+ ngx_module_incs=
+ ngx_module_deps=
+ ngx_module_srcs=src/http/modules/ngx_http_flv_module.c
+ ngx_module_libs=
+ ngx_module_link=$HTTP_FLV
- . auto/module
-fi
+ . auto/module
+ fi
-if [ $HTTP_MP4 = YES ]; then
- ngx_module_name=ngx_http_mp4_module
- ngx_module_incs=
- ngx_module_deps=
- ngx_module_srcs=src/http/modules/ngx_http_mp4_module.c
- ngx_module_libs=
- ngx_module_link=$HTTP_MP4
+ if [ $HTTP_MP4 = YES ]; then
+ ngx_module_name=ngx_http_mp4_module
+ ngx_module_incs=
+ ngx_module_deps=
+ ngx_module_srcs=src/http/modules/ngx_http_mp4_module.c
+ ngx_module_libs=
+ ngx_module_link=$HTTP_MP4
- . auto/module
-fi
+ . auto/module
+ fi
-if [ $HTTP_UPSTREAM_HASH = YES ]; then
- ngx_module_name=ngx_http_upstream_hash_module
- ngx_module_incs=
- ngx_module_deps=
- ngx_module_srcs=src/http/modules/ngx_http_upstream_hash_module.c
- ngx_module_libs=
- ngx_module_link=$HTTP_UPSTREAM_HASH
+ if [ $HTTP_UPSTREAM_HASH = YES ]; then
+ ngx_module_name=ngx_http_upstream_hash_module
+ ngx_module_incs=
+ ngx_module_deps=
+ ngx_module_srcs=src/http/modules/ngx_http_upstream_hash_module.c
+ ngx_module_libs=
+ ngx_module_link=$HTTP_UPSTREAM_HASH
- . auto/module
-fi
+ . auto/module
+ fi
-if [ $HTTP_UPSTREAM_IP_HASH = YES ]; then
- ngx_module_name=ngx_http_upstream_ip_hash_module
- ngx_module_incs=
- ngx_module_deps=
- ngx_module_srcs=src/http/modules/ngx_http_upstream_ip_hash_module.c
- ngx_module_libs=
- ngx_module_link=$HTTP_UPSTREAM_IP_HASH
+ if [ $HTTP_UPSTREAM_IP_HASH = YES ]; then
+ ngx_module_name=ngx_http_upstream_ip_hash_module
+ ngx_module_incs=
+ ngx_module_deps=
+ ngx_module_srcs=src/http/modules/ngx_http_upstream_ip_hash_module.c
+ ngx_module_libs=
+ ngx_module_link=$HTTP_UPSTREAM_IP_HASH
- . auto/module
-fi
+ . auto/module
+ fi
-if [ $HTTP_UPSTREAM_LEAST_CONN = YES ]; then
- ngx_module_name=ngx_http_upstream_least_conn_module
- ngx_module_incs=
- ngx_module_deps=
- ngx_module_srcs=src/http/modules/ngx_http_upstream_least_conn_module.c
- ngx_module_libs=
- ngx_module_link=$HTTP_UPSTREAM_LEAST_CONN
+ if [ $HTTP_UPSTREAM_LEAST_CONN = YES ]; then
+ ngx_module_name=ngx_http_upstream_least_conn_module
+ ngx_module_incs=
+ ngx_module_deps=
+ ngx_module_srcs=src/http/modules/ngx_http_upstream_least_conn_module.c
+ ngx_module_libs=
+ ngx_module_link=$HTTP_UPSTREAM_LEAST_CONN
- . auto/module
-fi
+ . auto/module
+ fi
-if [ $HTTP_UPSTREAM_KEEPALIVE = YES ]; then
- ngx_module_name=ngx_http_upstream_keepalive_module
- ngx_module_incs=
- ngx_module_deps=
- ngx_module_srcs=src/http/modules/ngx_http_upstream_keepalive_module.c
- ngx_module_libs=
- ngx_module_link=$HTTP_UPSTREAM_KEEPALIVE
+ if [ $HTTP_UPSTREAM_KEEPALIVE = YES ]; then
+ ngx_module_name=ngx_http_upstream_keepalive_module
+ ngx_module_incs=
+ ngx_module_deps=
+ ngx_module_srcs=src/http/modules/ngx_http_upstream_keepalive_module.c
+ ngx_module_libs=
+ ngx_module_link=$HTTP_UPSTREAM_KEEPALIVE
- . auto/module
-fi
+ . auto/module
+ fi
-if [ $HTTP_UPSTREAM_ZONE = YES ]; then
- have=NGX_HTTP_UPSTREAM_ZONE . auto/have
+ if [ $HTTP_UPSTREAM_ZONE = YES ]; then
+ have=NGX_HTTP_UPSTREAM_ZONE . auto/have
- ngx_module_name=ngx_http_upstream_zone_module
- ngx_module_incs=
- ngx_module_deps=
- ngx_module_srcs=src/http/modules/ngx_http_upstream_zone_module.c
- ngx_module_libs=
- ngx_module_link=$HTTP_UPSTREAM_ZONE
+ ngx_module_name=ngx_http_upstream_zone_module
+ ngx_module_incs=
+ ngx_module_deps=
+ ngx_module_srcs=src/http/modules/ngx_http_upstream_zone_module.c
+ ngx_module_libs=
+ ngx_module_link=$HTTP_UPSTREAM_ZONE
- . auto/module
-fi
+ . auto/module
+ fi
-if [ $HTTP_STUB_STATUS = YES ]; then
- have=NGX_STAT_STUB . auto/have
+ if [ $HTTP_STUB_STATUS = YES ]; then
+ have=NGX_STAT_STUB . auto/have
- ngx_module_name=ngx_http_stub_status_module
- ngx_module_incs=
- ngx_module_deps=
- ngx_module_srcs=src/http/modules/ngx_http_stub_status_module.c
- ngx_module_libs=
- ngx_module_link=$HTTP_STUB_STATUS
+ ngx_module_name=ngx_http_stub_status_module
+ ngx_module_incs=
+ ngx_module_deps=
+ ngx_module_srcs=src/http/modules/ngx_http_stub_status_module.c
+ ngx_module_libs=
+ ngx_module_link=$HTTP_STUB_STATUS
- . auto/module
+ . auto/module
+ fi
fi
@@ -966,6 +963,8 @@
STREAM_INCS=
ngx_module_type=STREAM
+ ngx_module_libs=
+ ngx_module_link=YES
ngx_module_order=
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.11.13.tar.gz/auto/options
^
|
@@ -574,19 +574,6 @@
fi
-if [ $HTTP = NO ]; then
- HTTP_CHARSET=NO
- HTTP_GZIP=NO
- HTTP_SSI=NO
- HTTP_USERID=NO
- HTTP_ACCESS=NO
- HTTP_STATUS=NO
- HTTP_REWRITE=NO
- HTTP_PROXY=NO
- HTTP_FASTCGI=NO
-fi
-
-
if [ ".$NGX_PLATFORM" = ".win32" ]; then
NGX_WINE=$WINE
fi
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.11.13.tar.gz/contrib/vim/syntax/nginx.vim
^
|
@@ -13,7 +13,7 @@
syn match ngxVariableBlock '\$\(\w\+\|{\w\+}\)' contained
syn match ngxVariableString '\$\(\w\+\|{\w\+}\)' contained
syn region ngxBlock start=+^+ end=+{+ skip=+\${+ contains=ngxComment,ngxDirectiveBlock,ngxVariableBlock,ngxString oneline
-syn region ngxString start=+\z(["']\)+ end=+\z1+ skip=+\\\\\|\\\z1+ contains=ngxVariableString
+syn region ngxString start=+[^:a-zA-Z>!\\@]\z(["']\)+lc=1 end=+\z1+ skip=+\\\\\|\\\z1+ contains=ngxVariableString
syn match ngxComment ' *#.*$'
syn keyword ngxBoolean on
@@ -37,7 +37,8 @@
syn keyword ngxDirectiveImportant root
syn keyword ngxDirectiveImportant server
syn keyword ngxDirectiveImportant server_name
-syn keyword ngxDirectiveImportant listen
+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
@@ -46,6 +47,24 @@
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
@@ -63,6 +82,7 @@
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
@@ -72,6 +92,7 @@
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
@@ -80,13 +101,18 @@
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
@@ -120,6 +146,8 @@
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
@@ -129,10 +157,13 @@
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
@@ -145,6 +176,7 @@
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
@@ -155,6 +187,7 @@
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
@@ -185,6 +218,23 @@
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
@@ -193,12 +243,19 @@
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
@@ -207,6 +264,7 @@
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
@@ -220,17 +278,20 @@
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
@@ -244,9 +305,12 @@
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
@@ -267,7 +331,10 @@
syn keyword ngxDirective post_acceptex
syn keyword ngxDirective postpone_gzipping
syn keyword ngxDirective postpone_output
-syn keyword ngxDirective protocol
+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
@@ -277,18 +344,23 @@
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
@@ -297,6 +369,7 @@
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
@@ -307,16 +380,23 @@
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_protocols
+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
@@ -327,6 +407,8 @@
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
@@ -353,10 +435,13 @@
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
@@ -366,6 +451,7 @@
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
@@ -376,6 +462,7 @@
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
@@ -392,7 +479,11 @@
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
@@ -423,9 +514,12 @@
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_protocols
+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
@@ -438,6 +532,12 @@
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
@@ -445,6 +545,7 @@
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
@@ -452,6 +553,7 @@
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
@@ -471,10 +573,12 @@
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
@@ -484,6 +588,7 @@
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
@@ -492,15 +597,20 @@
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_protocols
+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
@@ -531,120 +641,390 @@
syn keyword ngxDirective xslt_string_param
syn keyword ngxDirective xslt_stylesheet
syn keyword ngxDirective xslt_types
+syn keyword ngxDirective zone
" 3rd party module list:
-" http://wiki.nginx.org/Nginx3rdPartyModules
+" https://www.nginx.com/resources/wiki/modules/
-" Accept Language Module <http://wiki.nginx.org/NginxAcceptLanguageModule>
+" 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 set_from_accept_language
-" Access Key Module <http://wiki.nginx.org/NginxHttpAccessKeyModule>
+" Access Key Module (DEPRECATED) <http://wiki.nginx.org/NginxHttpAccessKeyModule>
" Denies access unless the request URL contains an access key.
-syn keyword ngxDirectiveThirdParty accesskey
-syn keyword ngxDirectiveThirdParty accesskey_arg
-syn keyword ngxDirectiveThirdParty accesskey_hashmethod
-syn keyword ngxDirectiveThirdParty accesskey_signature
-
-" Auth PAM Module <http://web.iti.upv.es/~sto/nginx/>
-" HTTP Basic Authentication using PAM.
-syn keyword ngxDirectiveThirdParty auth_pam
-syn keyword ngxDirectiveThirdParty auth_pam_service_name
+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 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 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 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 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 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 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 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 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 <http://labs.frickle.com/nginx_ngx_cache_purge/>
-" Module adding ability to purge content from FastCGI and proxy caches.
+" 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 fastcgi_cache_purge
syn keyword ngxDirectiveThirdParty proxy_cache_purge
+" syn keyword ngxDirectiveThirdParty scgi_cache_purge
+" syn keyword ngxDirectiveThirdParty uwsgi_cache_purge
-" Chunkin Module <http://wiki.nginx.org/NginxHttpChunkinModule>
+" Chunkin Module (DEPRECATED) <http://wiki.nginx.org/NginxHttpChunkinModule>
" HTTP 1.1 chunked-encoding request body support for Nginx.
-syn keyword ngxDirectiveThirdParty chunkin
-syn keyword ngxDirectiveThirdParty chunkin_keepalive
-syn keyword ngxDirectiveThirdParty chunkin_max_chunks_per_buf
-syn keyword ngxDirectiveThirdParty 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 <http://wiki.nginx.org/NginxHttpCircleGifModule>
+" 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 circle_gif
syn keyword ngxDirectiveThirdParty circle_gif_max_radius
syn keyword ngxDirectiveThirdParty circle_gif_min_radius
syn keyword ngxDirectiveThirdParty circle_gif_step_radius
-" Drizzle Module <http://github.com/chaoslawful/drizzle-nginx-module>
-" Make nginx talk directly to mysql, drizzle, and sqlite3 by libdrizzle.
-syn keyword ngxDirectiveThirdParty drizzle_connect_timeout
-syn keyword ngxDirectiveThirdParty drizzle_dbname
+" 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 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 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 upstream_list
+
+" Drizzle Module <https://www.nginx.com/resources/wiki/modules/drizzle/>
+" Upstream module for talking to MySQL and Drizzle directly
+syn keyword ngxDirectiveThirdParty drizzle_server
syn keyword ngxDirectiveThirdParty drizzle_keepalive
-syn keyword ngxDirectiveThirdParty drizzle_module_header
-syn keyword ngxDirectiveThirdParty drizzle_pass
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_send_query_timeout
-syn keyword ngxDirectiveThirdParty drizzle_server
+syn keyword ngxDirectiveThirdParty drizzle_buffer_size
+syn keyword ngxDirectiveThirdParty drizzle_module_header
+syn keyword ngxDirectiveThirdParty drizzle_status
-" Echo Module <http://wiki.nginx.org/NginxHttpEchoModule>
-" Brings 'echo', 'sleep', 'time', 'exec' and more shell-style goodies to Nginx config file.
+" Dynamic ETags Module <https://github.com/kali/nginx-dynamic-etags>
+" Attempt at handling ETag / If-None-Match on proxied content.
+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 echo
-syn keyword ngxDirectiveThirdParty echo_after_body
-syn keyword ngxDirectiveThirdParty echo_before_body
-syn keyword ngxDirectiveThirdParty echo_blocking_sleep
syn keyword ngxDirectiveThirdParty echo_duplicate
-syn keyword ngxDirectiveThirdParty echo_end
-syn keyword ngxDirectiveThirdParty echo_exec
syn keyword ngxDirectiveThirdParty echo_flush
-syn keyword ngxDirectiveThirdParty echo_foreach_split
-syn keyword ngxDirectiveThirdParty echo_location
-syn keyword ngxDirectiveThirdParty echo_location_async
-syn keyword ngxDirectiveThirdParty echo_read_request_body
-syn keyword ngxDirectiveThirdParty echo_request_body
-syn keyword ngxDirectiveThirdParty echo_reset_timer
syn keyword ngxDirectiveThirdParty echo_sleep
-syn keyword ngxDirectiveThirdParty echo_subrequest
+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 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 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 <http://docs.dutov.org/nginx_modules_events_en.html>
+" Events Module (DEPRECATED) <http://docs.dutov.org/nginx_modules_events_en.html>
" Provides options for start/stop events.
-syn keyword ngxDirectiveThirdParty on_start
-syn keyword ngxDirectiveThirdParty on_stop
+syn keyword ngxDirectiveDeprecated on_start
+syn keyword ngxDirectiveDeprecated on_stop
-" EY Balancer Module <http://github.com/ry/nginx-ey-balancer>
+" 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 max_connections
syn keyword ngxDirectiveThirdParty max_connections_max_queue_length
syn keyword ngxDirectiveThirdParty max_connections_queue_timeout
-" Fancy Indexes Module <https://connectical.com/projects/ngx-fancyindex/wiki>
+" 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 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 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_readme
-syn keyword ngxDirectiveThirdParty fancyindex_readme_mode
+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 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 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 ngxDirectiveThirdParty 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 geoip2
-" Headers More Module <http://wiki.nginx.org/NginxHttpHeadersMoreModule>
+" GridFS Module <https://github.com/mdirolf/nginx-gridfs>
+" Nginx module for serving files from MongoDB's 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 more_clear_headers
syn keyword ngxDirectiveThirdParty more_clear_input_headers
syn keyword ngxDirectiveThirdParty more_set_headers
syn keyword ngxDirectiveThirdParty more_set_input_headers
-" HTTP Push Module <http://pushmodule.slact.net/>
+" 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 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 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 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 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 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 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 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 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 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 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 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 ngxDirectiveThirdParty push_buffer_size
-syn keyword ngxDirectiveThirdParty push_listener
-syn keyword ngxDirectiveThirdParty push_message_timeout
-syn keyword ngxDirectiveThirdParty push_queue_messages
-syn keyword ngxDirectiveThirdParty 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 <http://people.FreeBSD.ORG/~osa/ngx_http_redis-0.3.1.tar.gz>>
-" Redis <http://code.google.com/p/redis/> support.>
+" HTTP Redis Module <https://www.nginx.com/resources/wiki/modules/redis/>
+" Redis <http://code.google.com/p/redis/> support.
syn keyword ngxDirectiveThirdParty redis_bind
syn keyword ngxDirectiveThirdParty redis_buffer_size
syn keyword ngxDirectiveThirdParty redis_connect_timeout
@@ -653,23 +1033,134 @@
syn keyword ngxDirectiveThirdParty redis_read_timeout
syn keyword ngxDirectiveThirdParty redis_send_timeout
-" HTTP JavaScript Module <http://wiki.github.com/kung-fu-tzu/ngx_http_js_module>
-" Embedding SpiderMonkey. Nearly full port on Perl module.
+" Iconv Module <https://github.com/calio/iconv-nginx-module>
+" A character conversion nginx module using libiconv
+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 ip_blocker
+
+" IP2Location Module <https://github.com/chrislim2888/ip2location-nginx>
+" Allows user to lookup for geolocation information using 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 js
-syn keyword ngxDirectiveThirdParty js_filter
-syn keyword ngxDirectiveThirdParty js_filter_types
+syn keyword ngxDirectiveThirdParty js_access
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
-" Log Request Speed <http://wiki.nginx.org/NginxHttpLogRequestSpeed>
+" 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 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 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 access_log_bypass_if
+
+" Log Request Speed (DEPRECATED) <http://wiki.nginx.org/NginxHttpLogRequestSpeed>
" Log the time it took to process each request.
-syn keyword ngxDirectiveThirdParty log_request_speed_filter
-syn keyword ngxDirectiveThirdParty 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 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 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 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 md5_filter
-" Memc Module <http://wiki.nginx.org/NginxHttpMemcModule>
+" 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 memc_buffer_size
syn keyword ngxDirectiveThirdParty memc_cmds_allowed
@@ -682,65 +1173,596 @@
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 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>
-" Implements a MogileFS client, provides a replace to the Perlbal reverse proxy of the original MogileFS.
-syn keyword ngxDirectiveThirdParty mogilefs_connect_timeout
-syn keyword ngxDirectiveThirdParty mogilefs_domain
+" MogileFS client for nginx web server.
+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_pass
-syn keyword ngxDirectiveThirdParty mogilefs_read_timeout
+syn keyword ngxDirectiveThirdParty mogilefs_connect_timeout
syn keyword ngxDirectiveThirdParty mogilefs_send_timeout
-syn keyword ngxDirectiveThirdParty mogilefs_tracker
+syn keyword ngxDirectiveThirdParty mogilefs_read_timeout
-" MP4 Streaming Lite Module <http://wiki.nginx.org/NginxMP4StreamingLite>
+" Mongo Module <https://github.com/simpl/ngx_mongo>
+" Upstream module that allows nginx to communicate directly with MongoDB database.
+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 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 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 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 <http://xph.us/software/nginx-notice/>
+" Nginx Notice Module <https://github.com/kr/nginx-notice>
" Serve static file to POST requests.
syn keyword ngxDirectiveThirdParty notice
syn keyword ngxDirectiveThirdParty notice_type
-" Phusion Passenger <http://www.modrails.com/documentation.html>
-" Easy and robust deployment of Ruby on Rails application on Apache and Nginx webservers.
+" OCSP Proxy Module <https://github.com/kyprizel/nginx_ocsp_proxy-module>
+" Nginx OCSP processing module designed for response caching
+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 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 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 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 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 hash_key
+
+" PHP Session Module <https://github.com/replay/ngx_http_php_session>
+" Nginx module to parse php sessions
+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 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_enabled
-syn keyword ngxDirectiveThirdParty passenger_log_level
-syn keyword ngxDirectiveThirdParty passenger_max_instances_per_app
+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_root
-syn keyword ngxDirectiveThirdParty passenger_ruby
-syn keyword ngxDirectiveThirdParty passenger_use_global_queue
-syn keyword ngxDirectiveThirdParty passenger_user_switching
-syn keyword ngxDirectiveThirdParty rack_env
-syn keyword ngxDirectiveThirdParty rails_app_spawner_idle_time
-syn keyword ngxDirectiveThirdParty rails_env
-syn keyword ngxDirectiveThirdParty rails_framework_spawner_idle_time
-syn keyword ngxDirectiveThirdParty rails_spawn_method
+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 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 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 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 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 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 <http://github.com/agentzh/rds-json-nginx-module>
-" Help ngx_drizzle and other DBD modules emit JSON data.
+" 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 rds_json
-syn keyword ngxDirectiveThirdParty rds_json_content_type
+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 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 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 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 <http://wiki.nginx.org/NginxNgx_rrd_graph>
+" 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 rrd_graph
syn keyword ngxDirectiveThirdParty rrd_graph_root
-" Secure Download <http://wiki.nginx.org/NginxHttpSecureDownload>
-" Create expiring links.
+" RTMP Module <https://github.com/arut/nginx-rtmp-module>
+" NGINX-based Media Streaming Server
+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 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 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 secure_download
-syn keyword ngxDirectiveThirdParty secure_download_fail_location
-syn keyword ngxDirectiveThirdParty secure_download_path_mode
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 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 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 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 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 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 sflow
+
+" Shibboleth Module <https://github.com/nginx-shib/nginx-http-shibboleth>
+" Shibboleth auth request module for nginx
+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 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 <http://labs.frickle.com/nginx_ngx_slowfs_cache/>
+" SlowFS Cache Module <https://github.com/FRiCKLE/ngx_slowfs_cache/>
" Module adding ability to cache static files.
syn keyword ngxDirectiveThirdParty slowfs_big_file_size
syn keyword ngxDirectiveThirdParty slowfs_cache
@@ -751,16 +1773,140 @@
syn keyword ngxDirectiveThirdParty slowfs_cache_valid
syn keyword ngxDirectiveThirdParty slowfs_temp_path
-" Strip Module <http://wiki.nginx.org/NginxHttpStripModule>
+" Small Light Module <https://github.com/cubicdaiya/ngx_small_light>
+" Dynamic Image Transformation Module For nginx.
+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 sorted_querystring_filter_parameter
+
+" Sphinx2 Module <https://github.com/reeteshranjan/sphinx2-nginx-module>
+" Nginx upstream module for Sphinx 2.x
+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 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 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 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 FileETag
+
+" Statsd Module <https://github.com/zebrafishlabs/nginx-statsd>
+" An nginx module for sending statistics to statsd
+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 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 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 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 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 strip
-" Substitutions Module <http://wiki.nginx.org/NginxHttpSubsModule>
+" Subrange Module <https://github.com/Qihoo360/ngx_http_subrange_module>
+" Split one big HTTP/Range request to multiple subrange requesets
+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 subs_filter
syn keyword ngxDirectiveThirdParty subs_filter_types
-" Supervisord Module <http://labs.frickle.com/nginx_ngx_supervisord/>
+" 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 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 supervisord
syn keyword ngxDirectiveThirdParty supervisord_inherit_backend_status
@@ -768,52 +1914,210 @@
syn keyword ngxDirectiveThirdParty supervisord_start
syn keyword ngxDirectiveThirdParty supervisord_stop
-" Upload Module <http://www.grid.net.ru/nginx/upload.en.html>
-" Parses multipart/form-data allowing arbitrary handling of uploaded files.
-syn keyword ngxDirectiveThirdParty upload_aggregate_form_field
-syn keyword ngxDirectiveThirdParty upload_buffer_size
-syn keyword ngxDirectiveThirdParty upload_cleanup
-syn keyword ngxDirectiveThirdParty upload_limit_rate
-syn keyword ngxDirectiveThirdParty upload_max_file_size
-syn keyword ngxDirectiveThirdParty upload_max_output_body_len
-syn keyword ngxDirectiveThirdParty upload_max_part_header_len
-syn keyword ngxDirectiveThirdParty upload_pass
-syn keyword ngxDirectiveThirdParty upload_pass_args
-syn keyword ngxDirectiveThirdParty upload_pass_form_field
-syn keyword ngxDirectiveThirdParty upload_set_form_field
-syn keyword ngxDirectiveThirdParty upload_store
-syn keyword ngxDirectiveThirdParty upload_store_access
+" Tarantool Upstream Module <https://github.com/tarantool/nginx_upstream_module>
+" Tarantool NginX upstream module (REST, JSON API, websockets, load balancing)
+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 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 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 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 file_in_unzip_archivefile
+syn keyword ngxDirectiveThirdParty file_in_unzip_extract
+syn keyword ngxDirectiveThirdParty file_in_unzip
-" Upload Progress Module <http://wiki.nginx.org/NginxHttpUploadProgressModule>
-" Tracks and reports upload progress.
-syn keyword ngxDirectiveThirdParty report_uploads
-syn keyword ngxDirectiveThirdParty track_uploads
+" 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 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
-" Upstream Fair Balancer <http://wiki.nginx.org/NginxHttpUpstreamFairModule>
-" Sends an incoming request to the least-busy backend server, rather than distributing requests round-robin.
+" 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 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 fair
syn keyword ngxDirectiveThirdParty upstream_fair_shm_size
-" Upstream Consistent Hash <http://wiki.nginx.org/NginxHttpUpstreamConsistentHash>
-" Select backend based on Consistent hash ring.
-syn keyword ngxDirectiveThirdParty consistent_hash
-
-" Upstream Hash Module <http://wiki.nginx.org/NginxHttpUpstreamRequestHashModule>
+" Upstream Hash Module (DEPRECATED) <http://wiki.nginx.org/NginxHttpUpstreamRequestHashModule>
" Provides simple upstream load distribution by hashing a configurable variable.
-syn keyword ngxDirectiveThirdParty hash
-syn keyword ngxDirectiveThirdParty 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 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 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 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 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 ketama_chash
+
+" Video Thumbextractor Module <https://github.com/wandenberg/nginx-video-thumbextractor-module>
+" Extract thumbs from a video file
+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 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 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 <http://github.com/agentzh/xss-nginx-module>
+" XSS Module <https://github.com/openresty/xss-nginx-module>
" Native support for cross-site scripting (XSS) in an nginx.
-syn keyword ngxDirectiveThirdParty xss_callback_arg
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
-syn keyword ngxDirectiveThirdParty xss_output_type
+
+" ZIP Module <https://www.nginx.com/resources/wiki/modules/zip/>
+" ZIP archiver for nginx
+
" highlight
@@ -833,4 +2137,8 @@
hi link ngxDirective Identifier
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.11.13.tar.gz/src/core/nginx.c
^
|
@@ -124,6 +124,13 @@
offsetof(ngx_core_conf_t, rlimit_core),
NULL },
+ { ngx_string("worker_shutdown_timeout"),
+ NGX_MAIN_CONF|NGX_DIRECT_CONF|NGX_CONF_TAKE1,
+ ngx_conf_set_msec_slot,
+ 0,
+ offsetof(ngx_core_conf_t, shutdown_timeout),
+ NULL },
+
{ ngx_string("working_directory"),
NGX_MAIN_CONF|NGX_DIRECT_CONF|NGX_CONF_TAKE1,
ngx_conf_set_str_slot,
@@ -1014,6 +1021,7 @@
ccf->daemon = NGX_CONF_UNSET;
ccf->master = NGX_CONF_UNSET;
ccf->timer_resolution = NGX_CONF_UNSET_MSEC;
+ ccf->shutdown_timeout = NGX_CONF_UNSET_MSEC;
ccf->worker_processes = NGX_CONF_UNSET;
ccf->debug_points = NGX_CONF_UNSET;
@@ -1042,6 +1050,7 @@
ngx_conf_init_value(ccf->daemon, 1);
ngx_conf_init_value(ccf->master, 1);
ngx_conf_init_msec_value(ccf->timer_resolution, 0);
+ ngx_conf_init_msec_value(ccf->shutdown_timeout, 0);
ngx_conf_init_value(ccf->worker_processes, 1);
ngx_conf_init_value(ccf->debug_points, 0);
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.11.13.tar.gz/src/core/nginx.h
^
|
@@ -9,8 +9,8 @@
#define _NGINX_H_INCLUDED_
-#define nginx_version 1011008
-#define NGINX_VERSION "1.11.8"
+#define nginx_version 1011013
+#define NGINX_VERSION "1.11.13"
#define NGINX_VER "nginx/" NGINX_VERSION
#ifdef NGX_BUILD
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.11.13.tar.gz/src/core/ngx_buf.c
^
|
@@ -246,6 +246,9 @@
if (aligned <= cl->buf->file_last) {
size = aligned - cl->buf->file_pos;
}
+
+ total += size;
+ break;
}
total += size;
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.11.13.tar.gz/src/core/ngx_connection.c
^
|
@@ -13,7 +13,7 @@
ngx_os_io_t ngx_io;
-static void ngx_drain_connections(void);
+static void ngx_drain_connections(ngx_cycle_t *cycle);
ngx_listening_t *
@@ -1046,7 +1046,7 @@
c = ngx_cycle->free_connections;
if (c == NULL) {
- ngx_drain_connections();
+ ngx_drain_connections((ngx_cycle_t *) ngx_cycle);
c = ngx_cycle->free_connections;
}
@@ -1204,6 +1204,7 @@
if (c->reusable) {
ngx_queue_remove(&c->queue);
+ ngx_cycle->reusable_connections_n--;
#if (NGX_STAT_STUB)
(void) ngx_atomic_fetch_add(ngx_stat_waiting, -1);
@@ -1217,6 +1218,7 @@
ngx_queue_insert_head(
(ngx_queue_t *) &ngx_cycle->reusable_connections_queue, &c->queue);
+ ngx_cycle->reusable_connections_n++;
#if (NGX_STAT_STUB)
(void) ngx_atomic_fetch_add(ngx_stat_waiting, 1);
@@ -1226,18 +1228,20 @@
static void
-ngx_drain_connections(void)
+ngx_drain_connections(ngx_cycle_t *cycle)
{
- ngx_int_t i;
+ ngx_uint_t i, n;
ngx_queue_t *q;
ngx_connection_t *c;
- for (i = 0; i < 32; i++) {
- if (ngx_queue_empty(&ngx_cycle->reusable_connections_queue)) {
+ n = ngx_max(ngx_min(32, cycle->reusable_connections_n / 8), 1);
+
+ for (i = 0; i < n; i++) {
+ if (ngx_queue_empty(&cycle->reusable_connections_queue)) {
break;
}
- q = ngx_queue_last(&ngx_cycle->reusable_connections_queue);
+ q = ngx_queue_last(&cycle->reusable_connections_queue);
c = ngx_queue_data(q, ngx_connection_t, queue);
ngx_log_debug0(NGX_LOG_DEBUG_CORE, c->log, 0,
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.11.13.tar.gz/src/core/ngx_cycle.c
^
|
@@ -15,6 +15,7 @@
ngx_shm_zone_t *shm_zone);
static ngx_int_t ngx_test_lockfile(u_char *file, ngx_log_t *log);
static void ngx_clean_old_cycles(ngx_event_t *ev);
+static void ngx_shutdown_timer_handler(ngx_event_t *ev);
volatile ngx_cycle_t *ngx_cycle;
@@ -22,6 +23,7 @@
static ngx_pool_t *ngx_temp_pool;
static ngx_event_t ngx_cleaner_event;
+static ngx_event_t ngx_shutdown_event;
ngx_uint_t ngx_test_config;
ngx_uint_t ngx_dump_config;
@@ -113,16 +115,14 @@
n = old_cycle->paths.nelts ? old_cycle->paths.nelts : 10;
- cycle->paths.elts = ngx_pcalloc(pool, n * sizeof(ngx_path_t *));
- if (cycle->paths.elts == NULL) {
+ if (ngx_array_init(&cycle->paths, pool, n, sizeof(ngx_path_t *))
+ != NGX_OK)
+ {
ngx_destroy_pool(pool);
return NULL;
}
- cycle->paths.nelts = 0;
- cycle->paths.size = sizeof(ngx_path_t *);
- cycle->paths.nalloc = n;
- cycle->paths.pool = pool;
+ ngx_memzero(cycle->paths.elts, n * sizeof(ngx_path_t *));
if (ngx_array_init(&cycle->config_dump, pool, 1, sizeof(ngx_conf_dump_t))
@@ -173,16 +173,14 @@
n = old_cycle->listening.nelts ? old_cycle->listening.nelts : 10;
- cycle->listening.elts = ngx_pcalloc(pool, n * sizeof(ngx_listening_t));
- if (cycle->listening.elts == NULL) {
+ if (ngx_array_init(&cycle->listening, pool, n, sizeof(ngx_listening_t))
+ != NGX_OK)
+ {
ngx_destroy_pool(pool);
return NULL;
}
- cycle->listening.nelts = 0;
- cycle->listening.size = sizeof(ngx_listening_t);
- cycle->listening.nalloc = n;
- cycle->listening.pool = pool;
+ ngx_memzero(cycle->listening.elts, n * sizeof(ngx_listening_t));
ngx_queue_init(&cycle->reusable_connections_queue);
@@ -766,15 +764,15 @@
}
n = 10;
- ngx_old_cycles.elts = ngx_pcalloc(ngx_temp_pool,
- n * sizeof(ngx_cycle_t *));
- if (ngx_old_cycles.elts == NULL) {
+
+ if (ngx_array_init(&ngx_old_cycles, ngx_temp_pool, n,
+ sizeof(ngx_cycle_t *))
+ != NGX_OK)
+ {
exit(1);
}
- ngx_old_cycles.nelts = 0;
- ngx_old_cycles.size = sizeof(ngx_cycle_t *);
- ngx_old_cycles.nalloc = n;
- ngx_old_cycles.pool = ngx_temp_pool;
+
+ ngx_memzero(ngx_old_cycles.elts, n * sizeof(ngx_cycle_t *));
ngx_cleaner_event.handler = ngx_clean_old_cycles;
ngx_cleaner_event.log = cycle->log;
@@ -1333,3 +1331,54 @@
ngx_old_cycles.nelts = 0;
}
}
+
+
+void
+ngx_set_shutdown_timer(ngx_cycle_t *cycle)
+{
+ ngx_core_conf_t *ccf;
+
+ ccf = (ngx_core_conf_t *) ngx_get_conf(cycle->conf_ctx, ngx_core_module);
+
+ if (ccf->shutdown_timeout) {
+ ngx_shutdown_event.handler = ngx_shutdown_timer_handler;
+ ngx_shutdown_event.data = cycle;
+ ngx_shutdown_event.log = cycle->log;
+ ngx_shutdown_event.cancelable = 1;
+
+ ngx_add_timer(&ngx_shutdown_event, ccf->shutdown_timeout);
+ }
+}
+
+
+static void
+ngx_shutdown_timer_handler(ngx_event_t *ev)
+{
+ ngx_uint_t i;
+ ngx_cycle_t *cycle;
+ ngx_connection_t *c;
+
+ cycle = ev->data;
+
+ c = cycle->connections;
+
+ for (i = 0; i < cycle->connection_n; i++) {
+
+ if (c[i].fd == (ngx_socket_t) -1
+ || c[i].read == NULL
+ || c[i].read->accept
+ || c[i].read->channel
+ || c[i].read->resolver)
+ {
+ continue;
+ }
+
+ ngx_log_debug1(NGX_LOG_DEBUG_CORE, ev->log, 0,
+ "*%uA shutdown timeout", c[i].number);
+
+ c[i].close = 1;
+ c[i].error = 1;
+
+ c[i].read->handler(c[i].read);
+ }
+}
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.11.13.tar.gz/src/core/ngx_cycle.h
^
|
@@ -53,6 +53,7 @@
ngx_uint_t modules_used; /* unsigned modules_used:1; */
ngx_queue_t reusable_connections_queue;
+ ngx_uint_t reusable_connections_n;
ngx_array_t listening;
ngx_array_t paths;
@@ -87,6 +88,7 @@
ngx_flag_t master;
ngx_msec_t timer_resolution;
+ ngx_msec_t shutdown_timeout;
ngx_int_t worker_processes;
ngx_int_t debug_points;
@@ -128,6 +130,7 @@
ngx_cpuset_t *ngx_get_cpu_affinity(ngx_uint_t n);
ngx_shm_zone_t *ngx_shared_memory_add(ngx_conf_t *cf, ngx_str_t *name,
size_t size, void *tag);
+void ngx_set_shutdown_timer(ngx_cycle_t *cycle);
extern volatile ngx_cycle_t *ngx_cycle;
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.11.13.tar.gz/src/core/ngx_parse.c
^
|
@@ -17,6 +17,11 @@
ssize_t size, scale, max;
len = line->len;
+
+ if (len == 0) {
+ return NGX_ERROR;
+ }
+
unit = line->data[len - 1];
switch (unit) {
@@ -58,6 +63,11 @@
size_t len;
len = line->len;
+
+ if (len == 0) {
+ return NGX_ERROR;
+ }
+
unit = line->data[len - 1];
switch (unit) {
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.11.13.tar.gz/src/core/ngx_rbtree.c
^
|
@@ -28,7 +28,7 @@
/* a binary tree insert */
- root = (ngx_rbtree_node_t **) &tree->root;
+ root = &tree->root;
sentinel = tree->sentinel;
if (*root == sentinel) {
@@ -161,7 +161,7 @@
/* a binary tree delete */
- root = (ngx_rbtree_node_t **) &tree->root;
+ root = &tree->root;
sentinel = tree->sentinel;
if (node->left == sentinel) {
@@ -378,3 +378,32 @@
temp->right = node;
node->parent = temp;
}
+
+
+ngx_rbtree_node_t *
+ngx_rbtree_next(ngx_rbtree_t *tree, ngx_rbtree_node_t *node)
+{
+ ngx_rbtree_node_t *root, *sentinel, *parent;
+
+ sentinel = tree->sentinel;
+
+ if (node->right != sentinel) {
+ return ngx_rbtree_min(node->right, sentinel);
+ }
+
+ root = tree->root;
+
+ for ( ;; ) {
+ parent = node->parent;
+
+ if (node == root) {
+ return NULL;
+ }
+
+ if (node == parent->left) {
+ return parent;
+ }
+
+ node = parent;
+ }
+}
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.11.13.tar.gz/src/core/ngx_rbtree.h
^
|
@@ -54,6 +54,8 @@
ngx_rbtree_node_t *sentinel);
void ngx_rbtree_insert_timer_value(ngx_rbtree_node_t *root,
ngx_rbtree_node_t *node, ngx_rbtree_node_t *sentinel);
+ngx_rbtree_node_t *ngx_rbtree_next(ngx_rbtree_t *tree,
+ ngx_rbtree_node_t *node);
#define ngx_rbt_red(node) ((node)->color = 1)
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.11.13.tar.gz/src/core/ngx_resolver.c
^
|
@@ -56,8 +56,8 @@
((u_char *) (n) - offsetof(ngx_resolver_node_t, node))
-ngx_int_t ngx_udp_connect(ngx_resolver_connection_t *rec);
-ngx_int_t ngx_tcp_connect(ngx_resolver_connection_t *rec);
+static ngx_int_t ngx_udp_connect(ngx_resolver_connection_t *rec);
+static ngx_int_t ngx_tcp_connect(ngx_resolver_connection_t *rec);
static void ngx_resolver_cleanup(void *data);
@@ -4379,7 +4379,7 @@
}
-ngx_int_t
+static ngx_int_t
ngx_udp_connect(ngx_resolver_connection_t *rec)
{
int rc;
@@ -4463,7 +4463,7 @@
}
-ngx_int_t
+static ngx_int_t
ngx_tcp_connect(ngx_resolver_connection_t *rec)
{
int rc;
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.11.13.tar.gz/src/event/modules/ngx_devpoll_module.c
^
|
@@ -78,7 +78,7 @@
};
-ngx_event_module_t ngx_devpoll_module_ctx = {
+static ngx_event_module_t ngx_devpoll_module_ctx = {
&devpoll_name,
ngx_devpoll_create_conf, /* create configuration */
ngx_devpoll_init_conf, /* init configuration */
@@ -336,7 +336,7 @@
}
-ngx_int_t
+static ngx_int_t
ngx_devpoll_process_events(ngx_cycle_t *cycle, ngx_msec_t timer,
ngx_uint_t flags)
{
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.11.13.tar.gz/src/event/modules/ngx_epoll_module.c
^
|
@@ -176,7 +176,7 @@
};
-ngx_event_module_t ngx_epoll_module_ctx = {
+static ngx_event_module_t ngx_epoll_module_ctx = {
&epoll_name,
ngx_epoll_create_conf, /* create configuration */
ngx_epoll_init_conf, /* init configuration */
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.11.13.tar.gz/src/event/modules/ngx_eventport_module.c
^
|
@@ -169,7 +169,7 @@
};
-ngx_event_module_t ngx_eventport_module_ctx = {
+static ngx_event_module_t ngx_eventport_module_ctx = {
&eventport_name,
ngx_eventport_create_conf, /* create configuration */
ngx_eventport_init_conf, /* init configuration */
@@ -432,7 +432,7 @@
}
-ngx_int_t
+static ngx_int_t
ngx_eventport_process_events(ngx_cycle_t *cycle, ngx_msec_t timer,
ngx_uint_t flags)
{
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.11.13.tar.gz/src/event/modules/ngx_kqueue_module.c
^
|
@@ -73,7 +73,7 @@
};
-ngx_event_module_t ngx_kqueue_module_ctx = {
+static ngx_event_module_t ngx_kqueue_module_ctx = {
&kqueue_name,
ngx_kqueue_create_conf, /* create configuration */
ngx_kqueue_init_conf, /* init configuration */
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.11.13.tar.gz/src/event/modules/ngx_poll_module.c
^
|
@@ -25,9 +25,9 @@
static ngx_uint_t nevents;
-static ngx_str_t poll_name = ngx_string("poll");
+static ngx_str_t poll_name = ngx_string("poll");
-ngx_event_module_t ngx_poll_module_ctx = {
+static ngx_event_module_t ngx_poll_module_ctx = {
&poll_name,
NULL, /* create configuration */
ngx_poll_init_conf, /* init configuration */
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.11.13.tar.gz/src/event/modules/ngx_select_module.c
^
|
@@ -33,9 +33,9 @@
static ngx_event_t **event_index;
-static ngx_str_t select_name = ngx_string("select");
+static ngx_str_t select_name = ngx_string("select");
-ngx_event_module_t ngx_select_module_ctx = {
+static ngx_event_module_t ngx_select_module_ctx = {
&select_name,
NULL, /* create configuration */
ngx_select_init_conf, /* init configuration */
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.11.13.tar.gz/src/event/modules/ngx_win32_select_module.c
^
|
@@ -34,9 +34,9 @@
static ngx_event_t **event_index;
-static ngx_str_t select_name = ngx_string("select");
+static ngx_str_t select_name = ngx_string("select");
-ngx_event_module_t ngx_select_module_ctx = {
+static ngx_event_module_t ngx_select_module_ctx = {
&select_name,
NULL, /* create configuration */
ngx_select_init_conf, /* init configuration */
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.11.13.tar.gz/src/event/ngx_event.c
^
|
@@ -59,20 +59,20 @@
#if (NGX_STAT_STUB)
-ngx_atomic_t ngx_stat_accepted0;
-ngx_atomic_t *ngx_stat_accepted = &ngx_stat_accepted0;
-ngx_atomic_t ngx_stat_handled0;
-ngx_atomic_t *ngx_stat_handled = &ngx_stat_handled0;
-ngx_atomic_t ngx_stat_requests0;
-ngx_atomic_t *ngx_stat_requests = &ngx_stat_requests0;
-ngx_atomic_t ngx_stat_active0;
-ngx_atomic_t *ngx_stat_active = &ngx_stat_active0;
-ngx_atomic_t ngx_stat_reading0;
-ngx_atomic_t *ngx_stat_reading = &ngx_stat_reading0;
-ngx_atomic_t ngx_stat_writing0;
-ngx_atomic_t *ngx_stat_writing = &ngx_stat_writing0;
-ngx_atomic_t ngx_stat_waiting0;
-ngx_atomic_t *ngx_stat_waiting = &ngx_stat_waiting0;
+static ngx_atomic_t ngx_stat_accepted0;
+ngx_atomic_t *ngx_stat_accepted = &ngx_stat_accepted0;
+static ngx_atomic_t ngx_stat_handled0;
+ngx_atomic_t *ngx_stat_handled = &ngx_stat_handled0;
+static ngx_atomic_t ngx_stat_requests0;
+ngx_atomic_t *ngx_stat_requests = &ngx_stat_requests0;
+static ngx_atomic_t ngx_stat_active0;
+ngx_atomic_t *ngx_stat_active = &ngx_stat_active0;
+static ngx_atomic_t ngx_stat_reading0;
+ngx_atomic_t *ngx_stat_reading = &ngx_stat_reading0;
+static ngx_atomic_t ngx_stat_writing0;
+ngx_atomic_t *ngx_stat_writing = &ngx_stat_writing0;
+static ngx_atomic_t ngx_stat_waiting0;
+ngx_atomic_t *ngx_stat_waiting = &ngx_stat_waiting0;
#endif
@@ -165,7 +165,7 @@
};
-ngx_event_module_t ngx_event_core_module_ctx = {
+static ngx_event_module_t ngx_event_core_module_ctx = {
&event_core_name,
ngx_event_core_create_conf, /* create configuration */
ngx_event_core_init_conf, /* init configuration */
@@ -500,8 +500,7 @@
#endif
shm.size = size;
- shm.name.len = sizeof("nginx_shared_zone") - 1;
- shm.name.data = (u_char *) "nginx_shared_zone";
+ ngx_str_set(&shm.name, "nginx_shared_zone");
shm.log = cycle->log;
if (ngx_shm_alloc(&shm) != NGX_OK) {
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.11.13.tar.gz/src/event/ngx_event_openssl.c
^
|
@@ -121,7 +121,17 @@
{
#if OPENSSL_VERSION_NUMBER >= 0x10100003L
- OPENSSL_init_ssl(OPENSSL_INIT_LOAD_CONFIG, NULL);
+ if (OPENSSL_init_ssl(OPENSSL_INIT_LOAD_CONFIG, NULL) == 0) {
+ ngx_ssl_error(NGX_LOG_ALERT, log, 0, "OPENSSL_init_ssl() failed");
+ return NGX_ERROR;
+ }
+
+ /*
+ * OPENSSL_init_ssl() may leave errors in the error queue
+ * while returning success
+ */
+
+ ERR_clear_error();
#else
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.11.13.tar.gz/src/event/ngx_event_pipe.c
^
|
@@ -113,11 +113,24 @@
}
#if (NGX_THREADS)
+
if (p->aio) {
ngx_log_debug0(NGX_LOG_DEBUG_EVENT, p->log, 0,
"pipe read upstream: aio");
return NGX_AGAIN;
}
+
+ if (p->writing) {
+ ngx_log_debug0(NGX_LOG_DEBUG_EVENT, p->log, 0,
+ "pipe read upstream: writing");
+
+ rc = ngx_event_pipe_write_chain_to_temp_file(p);
+
+ if (rc != NGX_OK) {
+ return rc;
+ }
+ }
+
#endif
ngx_log_debug1(NGX_LOG_DEBUG_EVENT, p->log, 0,
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.11.13.tar.gz/src/event/ngx_event_timer.c
^
|
@@ -67,7 +67,7 @@
node = ngx_rbtree_min(root, sentinel);
- /* node->key > ngx_current_time */
+ /* node->key > ngx_current_msec */
if ((ngx_msec_int_t) (node->key - ngx_current_msec) > 0) {
return;
@@ -96,43 +96,31 @@
}
-void
-ngx_event_cancel_timers(void)
+ngx_int_t
+ngx_event_no_timers_left(void)
{
ngx_event_t *ev;
ngx_rbtree_node_t *node, *root, *sentinel;
sentinel = ngx_event_timer_rbtree.sentinel;
+ root = ngx_event_timer_rbtree.root;
- for ( ;; ) {
- root = ngx_event_timer_rbtree.root;
-
- if (root == sentinel) {
- return;
- }
-
- node = ngx_rbtree_min(root, sentinel);
+ if (root == sentinel) {
+ return NGX_OK;
+ }
+ for (node = ngx_rbtree_min(root, sentinel);
+ node;
+ node = ngx_rbtree_next(&ngx_event_timer_rbtree, node))
+ {
ev = (ngx_event_t *) ((char *) node - offsetof(ngx_event_t, timer));
if (!ev->cancelable) {
- return;
+ return NGX_AGAIN;
}
+ }
- ngx_log_debug2(NGX_LOG_DEBUG_EVENT, ev->log, 0,
- "event timer cancel: %d: %M",
- ngx_event_ident(ev->data), ev->timer.key);
-
- ngx_rbtree_delete(&ngx_event_timer_rbtree, &ev->timer);
-
-#if (NGX_DEBUG)
- ev->timer.left = NULL;
- ev->timer.right = NULL;
- ev->timer.parent = NULL;
-#endif
-
- ev->timer_set = 0;
+ /* only cancelable timers left */
- ev->handler(ev);
- }
+ return NGX_OK;
}
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.11.13.tar.gz/src/event/ngx_event_timer.h
^
|
@@ -22,7 +22,7 @@
ngx_int_t ngx_event_timer_init(ngx_log_t *log);
ngx_msec_t ngx_event_find_timer(void);
void ngx_event_expire_timers(void);
-void ngx_event_cancel_timers(void);
+ngx_int_t ngx_event_no_timers_left(void);
extern ngx_rbtree_t ngx_event_timer_rbtree;
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.11.13.tar.gz/src/http/modules/ngx_http_charset_filter_module.c
^
|
@@ -123,7 +123,7 @@
static ngx_int_t ngx_http_charset_postconfiguration(ngx_conf_t *cf);
-ngx_str_t ngx_http_charset_default_types[] = {
+static ngx_str_t ngx_http_charset_default_types[] = {
ngx_string("text/html"),
ngx_string("text/xml"),
ngx_string("text/plain"),
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.11.13.tar.gz/src/http/modules/ngx_http_fastcgi_module.c
^
|
@@ -211,6 +211,7 @@
{ ngx_string("http_503"), NGX_HTTP_UPSTREAM_FT_HTTP_503 },
{ ngx_string("http_403"), NGX_HTTP_UPSTREAM_FT_HTTP_403 },
{ ngx_string("http_404"), NGX_HTTP_UPSTREAM_FT_HTTP_404 },
+ { ngx_string("http_429"), NGX_HTTP_UPSTREAM_FT_HTTP_429 },
{ ngx_string("updating"), NGX_HTTP_UPSTREAM_FT_UPDATING },
{ ngx_string("off"), NGX_HTTP_UPSTREAM_FT_OFF },
{ ngx_null_string, 0 }
@@ -469,6 +470,13 @@
offsetof(ngx_http_fastcgi_loc_conf_t, upstream.cache_revalidate),
NULL },
+ { ngx_string("fastcgi_cache_background_update"),
+ 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_fastcgi_loc_conf_t, upstream.cache_background_update),
+ NULL },
+
#endif
{ ngx_string("fastcgi_temp_path"),
@@ -2769,6 +2777,7 @@
conf->upstream.cache_lock_timeout = NGX_CONF_UNSET_MSEC;
conf->upstream.cache_lock_age = NGX_CONF_UNSET_MSEC;
conf->upstream.cache_revalidate = NGX_CONF_UNSET;
+ conf->upstream.cache_background_update = NGX_CONF_UNSET;
#endif
conf->upstream.hide_headers = NGX_CONF_UNSET_PTR;
@@ -3061,6 +3070,9 @@
ngx_conf_merge_value(conf->upstream.cache_revalidate,
prev->upstream.cache_revalidate, 0);
+ ngx_conf_merge_value(conf->upstream.cache_background_update,
+ prev->upstream.cache_background_update, 0);
+
#endif
ngx_conf_merge_value(conf->upstream.pass_request_headers,
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.11.13.tar.gz/src/http/modules/ngx_http_gzip_filter_module.c
^
|
@@ -671,6 +671,8 @@
static ngx_int_t
ngx_http_gzip_filter_add_data(ngx_http_request_t *r, ngx_http_gzip_ctx_t *ctx)
{
+ ngx_chain_t *cl;
+
if (ctx->zstream.avail_in || ctx->flush != Z_NO_FLUSH || ctx->redo) {
return NGX_OK;
}
@@ -694,13 +696,16 @@
ctx->copy_buf = NULL;
}
- ctx->in_buf = ctx->in->buf;
+ cl = ctx->in;
+ ctx->in_buf = cl->buf;
+ ctx->in = cl->next;
if (ctx->in_buf->tag == (ngx_buf_tag_t) &ngx_http_gzip_filter_module) {
- ctx->copy_buf = ctx->in;
- }
+ ctx->copy_buf = cl;
- ctx->in = ctx->in->next;
+ } else {
+ ngx_free_chain(r->pool, cl);
+ }
ctx->zstream.next_in = ctx->in_buf->pos;
ctx->zstream.avail_in = ctx->in_buf->last - ctx->in_buf->pos;
@@ -733,6 +738,7 @@
static ngx_int_t
ngx_http_gzip_filter_get_buf(ngx_http_request_t *r, ngx_http_gzip_ctx_t *ctx)
{
+ ngx_chain_t *cl;
ngx_http_gzip_conf_t *conf;
if (ctx->zstream.avail_out) {
@@ -742,8 +748,12 @@
conf = ngx_http_get_module_loc_conf(r, ngx_http_gzip_filter_module);
if (ctx->free) {
- ctx->out_buf = ctx->free->buf;
- ctx->free = ctx->free->next;
+
+ cl = ctx->free;
+ ctx->out_buf = cl->buf;
+ ctx->free = cl->next;
+
+ ngx_free_chain(r->pool, cl);
} else if (ctx->bufs < conf->bufs.num) {
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.11.13.tar.gz/src/http/modules/ngx_http_gzip_static_module.c
^
|
@@ -48,7 +48,7 @@
};
-ngx_http_module_t ngx_http_gzip_static_module_ctx = {
+static ngx_http_module_t ngx_http_gzip_static_module_ctx = {
NULL, /* preconfiguration */
ngx_http_gzip_static_init, /* postconfiguration */
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.11.13.tar.gz/src/http/modules/ngx_http_index_module.c
^
|
@@ -217,13 +217,13 @@
if (ngx_open_cached_file(clcf->open_file_cache, &path, &of, r->pool)
!= NGX_OK)
{
- ngx_log_debug2(NGX_LOG_DEBUG_HTTP, r->connection->log, of.err,
- "%s \"%s\" failed", of.failed, path.data);
-
if (of.err == 0) {
return NGX_HTTP_INTERNAL_SERVER_ERROR;
}
+ ngx_log_debug2(NGX_LOG_DEBUG_HTTP, r->connection->log, of.err,
+ "%s \"%s\" failed", of.failed, path.data);
+
#if (NGX_HAVE_OPENAT)
if (of.err == NGX_EMLINK
|| of.err == NGX_ELOOP)
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.11.13.tar.gz/src/http/modules/ngx_http_limit_req_module.c
^
|
@@ -276,6 +276,8 @@
r->read_event_handler = ngx_http_test_reading;
r->write_event_handler = ngx_http_limit_req_delay;
+
+ r->connection->write->delayed = 1;
ngx_add_timer(r->connection->write, delay);
return NGX_AGAIN;
@@ -292,7 +294,7 @@
wev = r->connection->write;
- if (!wev->timedout) {
+ if (wev->delayed) {
if (ngx_handle_write_event(wev, 0) != NGX_OK) {
ngx_http_finalize_request(r, NGX_HTTP_INTERNAL_SERVER_ERROR);
@@ -301,8 +303,6 @@
return;
}
- wev->timedout = 0;
-
if (ngx_handle_read_event(r->connection->read, 0) != NGX_OK) {
ngx_http_finalize_request(r, NGX_HTTP_INTERNAL_SERVER_ERROR);
return;
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.11.13.tar.gz/src/http/modules/ngx_http_log_module.c
^
|
@@ -552,6 +552,11 @@
if (ngx_open_cached_file(llcf->open_file_cache, &log, &of, r->pool)
!= NGX_OK)
{
+ if (of.err == 0) {
+ /* simulate successful logging */
+ return len;
+ }
+
ngx_log_error(NGX_LOG_CRIT, r->connection->log, ngx_errno,
"%s \"%s\" failed", of.failed, log.data);
/* simulate successful logging */
@@ -748,23 +753,10 @@
static void
ngx_http_log_flush_handler(ngx_event_t *ev)
{
- ngx_open_file_t *file;
- ngx_http_log_buf_t *buffer;
-
ngx_log_debug0(NGX_LOG_DEBUG_EVENT, ev->log, 0,
"http log buffer flush handler");
- if (ev->timedout) {
- ngx_http_log_flush(ev->data, ev->log);
- return;
- }
-
- /* cancel the flush timer for graceful shutdown */
-
- file = ev->data;
- buffer = file->data;
-
- buffer->event = NULL;
+ ngx_http_log_flush(ev->data, ev->log);
}
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.11.13.tar.gz/src/http/modules/ngx_http_proxy_module.c
^
|
@@ -220,6 +220,7 @@
{ ngx_string("http_504"), NGX_HTTP_UPSTREAM_FT_HTTP_504 },
{ ngx_string("http_403"), NGX_HTTP_UPSTREAM_FT_HTTP_403 },
{ ngx_string("http_404"), NGX_HTTP_UPSTREAM_FT_HTTP_404 },
+ { ngx_string("http_429"), NGX_HTTP_UPSTREAM_FT_HTTP_429 },
{ ngx_string("updating"), NGX_HTTP_UPSTREAM_FT_UPDATING },
{ ngx_string("off"), NGX_HTTP_UPSTREAM_FT_OFF },
{ ngx_null_string, 0 }
@@ -548,6 +549,13 @@
offsetof(ngx_http_proxy_loc_conf_t, upstream.cache_convert_head),
NULL },
+ { ngx_string("proxy_cache_background_update"),
+ 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_proxy_loc_conf_t, upstream.cache_background_update),
+ NULL },
+
#endif
{ ngx_string("proxy_temp_path"),
@@ -2863,6 +2871,7 @@
conf->upstream.cache_lock_age = NGX_CONF_UNSET_MSEC;
conf->upstream.cache_revalidate = NGX_CONF_UNSET;
conf->upstream.cache_convert_head = NGX_CONF_UNSET;
+ conf->upstream.cache_background_update = NGX_CONF_UNSET;
#endif
conf->upstream.hide_headers = NGX_CONF_UNSET_PTR;
@@ -3168,6 +3177,9 @@
ngx_conf_merge_value(conf->upstream.cache_convert_head,
prev->upstream.cache_convert_head, 1);
+ ngx_conf_merge_value(conf->upstream.cache_background_update,
+ prev->upstream.cache_background_update, 0);
+
#endif
if (conf->method == NULL) {
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.11.13.tar.gz/src/http/modules/ngx_http_rewrite_module.c
^
|
@@ -917,7 +917,8 @@
value[1].len--;
value[1].data++;
- v = ngx_http_add_variable(cf, &value[1], NGX_HTTP_VAR_CHANGEABLE);
+ v = ngx_http_add_variable(cf, &value[1],
+ NGX_HTTP_VAR_CHANGEABLE|NGX_HTTP_VAR_WEAK);
if (v == NULL) {
return NGX_CONF_ERROR;
}
@@ -927,15 +928,7 @@
return NGX_CONF_ERROR;
}
- if (v->get_handler == NULL
- && ngx_strncasecmp(value[1].data, (u_char *) "http_", 5) != 0
- && ngx_strncasecmp(value[1].data, (u_char *) "sent_http_", 10) != 0
- && ngx_strncasecmp(value[1].data, (u_char *) "upstream_http_", 14) != 0
- && ngx_strncasecmp(value[1].data, (u_char *) "cookie_", 7) != 0
- && ngx_strncasecmp(value[1].data, (u_char *) "upstream_cookie_", 16)
- != 0
- && ngx_strncasecmp(value[1].data, (u_char *) "arg_", 4) != 0)
- {
+ if (v->get_handler == NULL) {
v->get_handler = ngx_http_rewrite_var;
v->data = index;
}
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.11.13.tar.gz/src/http/modules/ngx_http_scgi_module.c
^
|
@@ -82,6 +82,7 @@
{ ngx_string("http_503"), NGX_HTTP_UPSTREAM_FT_HTTP_503 },
{ ngx_string("http_403"), NGX_HTTP_UPSTREAM_FT_HTTP_403 },
{ ngx_string("http_404"), NGX_HTTP_UPSTREAM_FT_HTTP_404 },
+ { ngx_string("http_429"), NGX_HTTP_UPSTREAM_FT_HTTP_429 },
{ ngx_string("updating"), NGX_HTTP_UPSTREAM_FT_UPDATING },
{ ngx_string("off"), NGX_HTTP_UPSTREAM_FT_OFF },
{ ngx_null_string, 0 }
@@ -319,6 +320,13 @@
offsetof(ngx_http_scgi_loc_conf_t, upstream.cache_revalidate),
NULL },
+ { ngx_string("scgi_cache_background_update"),
+ 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_scgi_loc_conf_t, upstream.cache_background_update),
+ NULL },
+
#endif
{ ngx_string("scgi_temp_path"),
@@ -1219,6 +1227,7 @@
conf->upstream.cache_lock_timeout = NGX_CONF_UNSET_MSEC;
conf->upstream.cache_lock_age = NGX_CONF_UNSET_MSEC;
conf->upstream.cache_revalidate = NGX_CONF_UNSET;
+ conf->upstream.cache_background_update = NGX_CONF_UNSET;
#endif
conf->upstream.hide_headers = NGX_CONF_UNSET_PTR;
@@ -1506,6 +1515,9 @@
ngx_conf_merge_value(conf->upstream.cache_revalidate,
prev->upstream.cache_revalidate, 0);
+ ngx_conf_merge_value(conf->upstream.cache_background_update,
+ prev->upstream.cache_background_update, 0);
+
#endif
ngx_conf_merge_value(conf->upstream.pass_request_headers,
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.11.13.tar.gz/src/http/modules/ngx_http_slice_filter_module.c
^
|
@@ -11,23 +11,25 @@
typedef struct {
- size_t size;
+ size_t size;
} ngx_http_slice_loc_conf_t;
typedef struct {
- off_t start;
- off_t end;
- ngx_str_t range;
- ngx_str_t etag;
- ngx_uint_t last; /* unsigned last:1; */
+ off_t start;
+ off_t end;
+ ngx_str_t range;
+ ngx_str_t etag;
+ unsigned last:1;
+ unsigned active:1;
+ ngx_http_request_t *sr;
} ngx_http_slice_ctx_t;
typedef struct {
- off_t start;
- off_t end;
- off_t complete_length;
+ off_t start;
+ off_t end;
+ off_t complete_length;
} ngx_http_slice_content_range_t;
@@ -169,6 +171,7 @@
}
ctx->start = end;
+ ctx->active = 1;
r->headers_out.status = NGX_HTTP_OK;
r->headers_out.status_line.len = 0;
@@ -209,7 +212,6 @@
{
ngx_int_t rc;
ngx_chain_t *cl;
- ngx_http_request_t *sr;
ngx_http_slice_ctx_t *ctx;
ngx_http_slice_loc_conf_t *slcf;
@@ -234,6 +236,16 @@
return rc;
}
+ if (ctx->sr && !ctx->sr->done) {
+ return rc;
+ }
+
+ if (!ctx->active) {
+ ngx_log_error(NGX_LOG_ERR, r->connection->log, 0,
+ "missing slice response");
+ return NGX_ERROR;
+ }
+
if (ctx->start >= ctx->end) {
ngx_http_set_ctx(r, NULL, ngx_http_slice_filter_module);
ngx_http_send_special(r, NGX_HTTP_LAST);
@@ -244,11 +256,14 @@
return rc;
}
- if (ngx_http_subrequest(r, &r->uri, &r->args, &sr, NULL, 0) != NGX_OK) {
+ if (ngx_http_subrequest(r, &r->uri, &r->args, &ctx->sr, NULL,
+ NGX_HTTP_SUBREQUEST_CLONE)
+ != NGX_OK)
+ {
return NGX_ERROR;
}
- ngx_http_set_ctx(sr, ctx, ngx_http_slice_filter_module);
+ ngx_http_set_ctx(ctx->sr, ctx, ngx_http_slice_filter_module);
slcf = ngx_http_get_module_loc_conf(r, ngx_http_slice_filter_module);
@@ -256,6 +271,8 @@
ctx->start + (off_t) slcf->size - 1)
- ctx->range.data;
+ ctx->active = 0;
+
ngx_log_debug1(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
"http slice subrequest: \"%V\"", &ctx->range);
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.11.13.tar.gz/src/http/modules/ngx_http_static_module.c
^
|
@@ -14,7 +14,7 @@
static ngx_int_t ngx_http_static_init(ngx_conf_t *cf);
-ngx_http_module_t ngx_http_static_module_ctx = {
+static ngx_http_module_t ngx_http_static_module_ctx = {
NULL, /* preconfiguration */
ngx_http_static_init, /* postconfiguration */
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.11.13.tar.gz/src/http/modules/ngx_http_uwsgi_module.c
^
|
@@ -114,6 +114,7 @@
{ ngx_string("http_503"), NGX_HTTP_UPSTREAM_FT_HTTP_503 },
{ ngx_string("http_403"), NGX_HTTP_UPSTREAM_FT_HTTP_403 },
{ ngx_string("http_404"), NGX_HTTP_UPSTREAM_FT_HTTP_404 },
+ { ngx_string("http_429"), NGX_HTTP_UPSTREAM_FT_HTTP_429 },
{ ngx_string("updating"), NGX_HTTP_UPSTREAM_FT_UPDATING },
{ ngx_string("off"), NGX_HTTP_UPSTREAM_FT_OFF },
{ ngx_null_string, 0 }
@@ -379,6 +380,13 @@
offsetof(ngx_http_uwsgi_loc_conf_t, upstream.cache_revalidate),
NULL },
+ { ngx_string("uwsgi_cache_background_update"),
+ NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,
+ ngx_conf_set_flag_slot,
+ NGX_HTTP_LOC_CONF_OFFSET,
+ offsetof(ngx_http_uwsgi_loc_conf_t, upstream.cache_background_update),
+ NULL },
+
#endif
{ ngx_string("uwsgi_temp_path"),
@@ -1425,6 +1433,7 @@
conf->upstream.cache_lock_timeout = NGX_CONF_UNSET_MSEC;
conf->upstream.cache_lock_age = NGX_CONF_UNSET_MSEC;
conf->upstream.cache_revalidate = NGX_CONF_UNSET;
+ conf->upstream.cache_background_update = NGX_CONF_UNSET;
#endif
conf->upstream.hide_headers = NGX_CONF_UNSET_PTR;
@@ -1720,6 +1729,9 @@
ngx_conf_merge_value(conf->upstream.cache_revalidate,
prev->upstream.cache_revalidate, 0);
+ ngx_conf_merge_value(conf->upstream.cache_background_update,
+ prev->upstream.cache_background_update, 0);
+
#endif
ngx_conf_merge_value(conf->upstream.pass_request_headers,
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.11.13.tar.gz/src/http/modules/ngx_http_xslt_filter_module.c
^
|
@@ -109,7 +109,7 @@
static void ngx_http_xslt_filter_exit(ngx_cycle_t *cycle);
-ngx_str_t ngx_http_xslt_default_types[] = {
+static ngx_str_t ngx_http_xslt_default_types[] = {
ngx_string("text/xml"),
ngx_null_string
};
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.11.13.tar.gz/src/http/modules/perl/nginx.xs
^
|
@@ -1001,6 +1001,7 @@
ctx->next = SvRV(ST(2));
+ r->connection->write->delayed = 1;
ngx_add_timer(r->connection->write, sleep);
r->write_event_handler = ngx_http_perl_sleep_handler;
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.11.13.tar.gz/src/http/modules/perl/ngx_http_perl_module.c
^
|
@@ -278,15 +278,16 @@
wev = r->connection->write;
- if (wev->timedout) {
- wev->timedout = 0;
- ngx_http_perl_handle_request(r);
+ if (wev->delayed) {
+
+ if (ngx_handle_write_event(wev, 0) != NGX_OK) {
+ ngx_http_finalize_request(r, NGX_HTTP_INTERNAL_SERVER_ERROR);
+ }
+
return;
}
- if (ngx_handle_write_event(wev, 0) != NGX_OK) {
- ngx_http_finalize_request(r, NGX_HTTP_INTERNAL_SERVER_ERROR);
- }
+ ngx_http_perl_handle_request(r);
}
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.11.13.tar.gz/src/http/ngx_http_cache.h
^
|
@@ -24,10 +24,10 @@
#define NGX_HTTP_CACHE_SCARCE 8
#define NGX_HTTP_CACHE_KEY_LEN 16
-#define NGX_HTTP_CACHE_ETAG_LEN 42
-#define NGX_HTTP_CACHE_VARY_LEN 42
+#define NGX_HTTP_CACHE_ETAG_LEN 128
+#define NGX_HTTP_CACHE_VARY_LEN 128
-#define NGX_HTTP_CACHE_VERSION 3
+#define NGX_HTTP_CACHE_VERSION 5
typedef struct {
@@ -71,6 +71,8 @@
ngx_file_uniq_t uniq;
time_t valid_sec;
+ time_t updating_sec;
+ time_t error_sec;
time_t last_modified;
time_t date;
@@ -114,12 +116,18 @@
unsigned purged:1;
unsigned reading:1;
unsigned secondary:1;
+ unsigned background:1;
+
+ unsigned stale_updating:1;
+ unsigned stale_error:1;
};
typedef struct {
ngx_uint_t version;
time_t valid_sec;
+ time_t updating_sec;
+ time_t error_sec;
time_t last_modified;
time_t date;
uint32_t crc32;
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.11.13.tar.gz/src/http/ngx_http_copy_filter_module.c
^
|
@@ -187,15 +187,24 @@
ngx_http_copy_aio_event_handler(ngx_event_t *ev)
{
ngx_event_aio_t *aio;
+ ngx_connection_t *c;
ngx_http_request_t *r;
aio = ev->data;
r = aio->data;
+ c = r->connection;
+
+ ngx_http_set_log_request(c->log, r);
+
+ ngx_log_debug2(NGX_LOG_DEBUG_HTTP, c->log, 0,
+ "http aio: \"%V?%V\"", &r->uri, &r->args);
r->main->blocked--;
r->aio = 0;
- r->connection->write->handler(r->connection->write);
+ r->write_event_handler(r);
+
+ ngx_http_run_posted_requests(c);
}
@@ -300,14 +309,33 @@
static void
ngx_http_copy_thread_event_handler(ngx_event_t *ev)
{
+ ngx_connection_t *c;
ngx_http_request_t *r;
r = ev->data;
+ c = r->connection;
+
+ ngx_http_set_log_request(c->log, r);
+
+ ngx_log_debug2(NGX_LOG_DEBUG_HTTP, c->log, 0,
+ "http thread: \"%V?%V\"", &r->uri, &r->args);
r->main->blocked--;
r->aio = 0;
- r->connection->write->handler(r->connection->write);
+ if (r->done) {
+ /*
+ * trigger connection event handler if the subrequest was
+ * already finalized; this can happen if the handler is used
+ * for sendfile() in threads
+ */
+
+ c->write->handler(c->write);
+
+ } else {
+ r->write_event_handler(r);
+ ngx_http_run_posted_requests(c);
+ }
}
#endif
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.11.13.tar.gz/src/http/ngx_http_core_module.c
^
|
@@ -120,6 +120,14 @@
};
+static ngx_conf_enum_t ngx_http_core_server_tokens[] = {
+ { ngx_string("off"), NGX_HTTP_SERVER_TOKENS_OFF },
+ { ngx_string("on"), NGX_HTTP_SERVER_TOKENS_ON },
+ { ngx_string("build"), NGX_HTTP_SERVER_TOKENS_BUILD },
+ { ngx_null_string, 0 }
+};
+
+
static ngx_conf_enum_t ngx_http_core_if_modified_since[] = {
{ ngx_string("off"), NGX_HTTP_IMS_OFF },
{ ngx_string("exact"), NGX_HTTP_IMS_EXACT },
@@ -599,11 +607,11 @@
NULL },
{ ngx_string("server_tokens"),
- NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_FLAG,
- ngx_conf_set_flag_slot,
+ NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,
+ ngx_conf_set_enum_slot,
NGX_HTTP_LOC_CONF_OFFSET,
offsetof(ngx_http_core_loc_conf_t, server_tokens),
- NULL },
+ &ngx_http_core_server_tokens },
{ ngx_string("if_modified_since"),
NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,
@@ -1306,6 +1314,11 @@
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)
@@ -2558,6 +2571,18 @@
*psr = sr;
+ if (flags & NGX_HTTP_SUBREQUEST_CLONE) {
+ sr->method = r->method;
+ sr->method_name = r->method_name;
+ sr->loc_conf = r->loc_conf;
+ sr->valid_location = r->valid_location;
+ sr->content_handler = r->content_handler;
+ sr->phase_handler = r->phase_handler;
+ sr->write_event_handler = ngx_http_core_run_phases;
+
+ ngx_http_update_location_config(sr);
+ }
+
return ngx_http_post_request(sr, NULL);
}
@@ -3576,9 +3601,9 @@
clcf->log_not_found = NGX_CONF_UNSET;
clcf->log_subrequest = NGX_CONF_UNSET;
clcf->recursive_error_pages = NGX_CONF_UNSET;
- clcf->server_tokens = NGX_CONF_UNSET;
clcf->chunked_transfer_encoding = NGX_CONF_UNSET;
clcf->etag = NGX_CONF_UNSET;
+ clcf->server_tokens = NGX_CONF_UNSET_UINT;
clcf->types_hash_max_size = NGX_CONF_UNSET_UINT;
clcf->types_hash_bucket_size = NGX_CONF_UNSET_UINT;
@@ -3842,11 +3867,13 @@
ngx_conf_merge_value(conf->log_subrequest, prev->log_subrequest, 0);
ngx_conf_merge_value(conf->recursive_error_pages,
prev->recursive_error_pages, 0);
- ngx_conf_merge_value(conf->server_tokens, prev->server_tokens, 1);
ngx_conf_merge_value(conf->chunked_transfer_encoding,
prev->chunked_transfer_encoding, 1);
ngx_conf_merge_value(conf->etag, prev->etag, 1);
+ ngx_conf_merge_uint_value(conf->server_tokens, prev->server_tokens,
+ NGX_HTTP_SERVER_TOKENS_ON);
+
ngx_conf_merge_ptr_value(conf->open_file_cache,
prev->open_file_cache, NULL);
@@ -4383,16 +4410,14 @@
if (clcf->root.data) {
if ((clcf->alias != 0) == alias) {
- ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
- "\"%V\" directive is duplicate",
- &cmd->name);
- } else {
- ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
- "\"%V\" directive is duplicate, "
- "\"%s\" directive was specified earlier",
- &cmd->name, clcf->alias ? "alias" : "root");
+ return "is duplicate";
}
+ ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
+ "\"%V\" directive is duplicate, "
+ "\"%s\" directive was specified earlier",
+ &cmd->name, clcf->alias ? "alias" : "root");
+
return NGX_CONF_ERROR;
}
@@ -4507,7 +4532,7 @@
ngx_http_core_loc_conf_t *clcf;
if (pclcf->limit_except) {
- return "duplicate";
+ return "is duplicate";
}
pclcf->limit_except = 0xffffffff;
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.11.13.tar.gz/src/http/ngx_http_core_module.h
^
|
@@ -55,6 +55,11 @@
#define NGX_HTTP_KEEPALIVE_DISABLE_SAFARI 0x0008
+#define NGX_HTTP_SERVER_TOKENS_OFF 0
+#define NGX_HTTP_SERVER_TOKENS_ON 1
+#define NGX_HTTP_SERVER_TOKENS_BUILD 2
+
+
typedef struct ngx_http_location_tree_node_s ngx_http_location_tree_node_t;
typedef struct ngx_http_core_loc_conf_s ngx_http_core_loc_conf_t;
@@ -153,7 +158,8 @@
ngx_hash_t variables_hash;
- ngx_array_t variables; /* ngx_http_variable_t */
+ ngx_array_t variables; /* ngx_http_variable_t */
+ ngx_array_t prefix_variables; /* ngx_http_variable_t */
ngx_uint_t ncaptures;
ngx_uint_t server_names_hash_max_size;
@@ -393,7 +399,7 @@
ngx_flag_t log_not_found; /* log_not_found */
ngx_flag_t log_subrequest; /* log_subrequest */
ngx_flag_t recursive_error_pages; /* recursive_error_pages */
- ngx_flag_t server_tokens; /* server_tokens */
+ ngx_uint_t server_tokens; /* server_tokens */
ngx_flag_t chunked_transfer_encoding; /* chunked_transfer_encoding */
ngx_flag_t etag; /* etag */
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.11.13.tar.gz/src/http/ngx_http_file_cache.c
^
|
@@ -601,6 +601,8 @@
c->buf->last += n;
c->valid_sec = h->valid_sec;
+ c->updating_sec = h->updating_sec;
+ c->error_sec = h->error_sec;
c->last_modified = h->last_modified;
c->date = h->date;
c->valid_msec = h->valid_msec;
@@ -632,6 +634,8 @@
now = ngx_time();
if (c->valid_sec < now) {
+ c->stale_updating = c->valid_sec + c->updating_sec >= now;
+ c->stale_error = c->valid_sec + c->error_sec >= now;
ngx_shmtx_lock(&cache->shpool->mutex);
@@ -1252,6 +1256,8 @@
h->version = NGX_HTTP_CACHE_VERSION;
h->valid_sec = c->valid_sec;
+ h->updating_sec = c->updating_sec;
+ h->error_sec = c->error_sec;
h->last_modified = c->last_modified;
h->date = c->date;
h->crc32 = c->crc32;
@@ -1513,6 +1519,8 @@
h.version = NGX_HTTP_CACHE_VERSION;
h.valid_sec = c->valid_sec;
+ h.updating_sec = c->updating_sec;
+ h.error_sec = c->error_sec;
h.last_modified = c->last_modified;
h.date = c->date;
h.crc32 = c->crc32;
@@ -1680,7 +1688,7 @@
ngx_log_debug0(NGX_LOG_DEBUG_HTTP, c->file.log, 0,
"http file cache cleanup");
- if (c->updating) {
+ if (c->updating && !c->background) {
ngx_log_error(NGX_LOG_ALERT, c->file.log, 0,
"stalled cache updating, error:%ui", c->error);
}
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.11.13.tar.gz/src/http/ngx_http_request.c
^
|
@@ -549,7 +549,7 @@
ngx_set_connection_log(r->connection, clcf->error_log);
- r->header_in = hc->nbusy ? hc->busy[0] : c->buffer;
+ r->header_in = hc->busy ? hc->busy->buf : c->buffer;
if (ngx_list_init(&r->headers_out.headers, r->pool, 20,
sizeof(ngx_table_elt_t))
@@ -884,6 +884,8 @@
sscf = ngx_http_get_module_srv_conf(hc->conf_ctx, ngx_http_ssl_module);
+ c->ssl->buffer_size = sscf->buffer_size;
+
if (sscf->ssl.ctx) {
SSL_set_SSL_CTX(ssl_conn, sscf->ssl.ctx);
@@ -1429,6 +1431,7 @@
{
u_char *old, *new;
ngx_buf_t *b;
+ ngx_chain_t *cl;
ngx_http_connection_t *hc;
ngx_http_core_srv_conf_t *cscf;
@@ -1458,8 +1461,11 @@
hc = r->http_connection;
- if (hc->nfree) {
- b = hc->free[--hc->nfree];
+ if (hc->free) {
+ cl = hc->free;
+ hc->free = cl->next;
+
+ b = cl->buf;
ngx_log_debug2(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
"http large header free: %p %uz",
@@ -1467,20 +1473,19 @@
} else if (hc->nbusy < cscf->large_client_header_buffers.num) {
- if (hc->busy == NULL) {
- hc->busy = ngx_palloc(r->connection->pool,
- cscf->large_client_header_buffers.num * sizeof(ngx_buf_t *));
- if (hc->busy == NULL) {
- return NGX_ERROR;
- }
- }
-
b = ngx_create_temp_buf(r->connection->pool,
cscf->large_client_header_buffers.size);
if (b == NULL) {
return NGX_ERROR;
}
+ cl = ngx_alloc_chain_link(r->connection->pool);
+ if (cl == NULL) {
+ return NGX_ERROR;
+ }
+
+ cl->buf = b;
+
ngx_log_debug2(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
"http large header alloc: %p %uz",
b->pos, b->end - b->last);
@@ -1489,7 +1494,9 @@
return NGX_DECLINED;
}
- hc->busy[hc->nbusy++] = b;
+ cl->next = hc->busy;
+ hc->busy = cl;
+ hc->nbusy++;
if (r->state == 0) {
/*
@@ -2191,6 +2198,11 @@
ngx_log_debug2(NGX_LOG_DEBUG_HTTP, c->log, 0,
"http run request: \"%V?%V\"", &r->uri, &r->args);
+ if (ev->delayed && ev->timedout) {
+ ev->delayed = 0;
+ ev->timedout = 0;
+ }
+
if (ev->write) {
r->write_event_handler(r);
@@ -2600,7 +2612,7 @@
static void
ngx_http_writer(ngx_http_request_t *r)
{
- int rc;
+ ngx_int_t rc;
ngx_event_t *wev;
ngx_connection_t *c;
ngx_http_core_loc_conf_t *clcf;
@@ -2614,34 +2626,22 @@
clcf = ngx_http_get_module_loc_conf(r->main, ngx_http_core_module);
if (wev->timedout) {
- if (!wev->delayed) {
- ngx_log_error(NGX_LOG_INFO, c->log, NGX_ETIMEDOUT,
- "client timed out");
- c->timedout = 1;
-
- ngx_http_finalize_request(r, NGX_HTTP_REQUEST_TIME_OUT);
- return;
- }
-
- wev->timedout = 0;
- wev->delayed = 0;
-
- if (!wev->ready) {
- ngx_add_timer(wev, clcf->send_timeout);
-
- if (ngx_handle_write_event(wev, clcf->send_lowat) != NGX_OK) {
- ngx_http_close_request(r, 0);
- }
-
- return;
- }
+ ngx_log_error(NGX_LOG_INFO, c->log, NGX_ETIMEDOUT,
+ "client timed out");
+ c->timedout = 1;
+ ngx_http_finalize_request(r, NGX_HTTP_REQUEST_TIME_OUT);
+ return;
}
if (wev->delayed || r->aio) {
ngx_log_debug0(NGX_LOG_DEBUG_HTTP, wev->log, 0,
"http writer delayed");
+ if (!wev->delayed) {
+ ngx_add_timer(wev, clcf->send_timeout);
+ }
+
if (ngx_handle_write_event(wev, clcf->send_lowat) != NGX_OK) {
ngx_http_close_request(r, 0);
}
@@ -2652,7 +2652,7 @@
rc = ngx_http_output_filter(r, NULL);
ngx_log_debug3(NGX_LOG_DEBUG_HTTP, c->log, 0,
- "http writer output filter: %d, \"%V?%V\"",
+ "http writer output filter: %i, \"%V?%V\"",
rc, &r->uri, &r->args);
if (rc == NGX_ERROR) {
@@ -2833,12 +2833,11 @@
ngx_http_set_keepalive(ngx_http_request_t *r)
{
int tcp_nodelay;
- ngx_int_t i;
ngx_buf_t *b, *f;
+ ngx_chain_t *cl, *ln;
ngx_event_t *rev, *wev;
ngx_connection_t *c;
ngx_http_connection_t *hc;
- ngx_http_core_srv_conf_t *cscf;
ngx_http_core_loc_conf_t *clcf;
c = r->connection;
@@ -2874,26 +2873,33 @@
* Now we would move the large header buffers to the free list.
*/
- cscf = ngx_http_get_module_srv_conf(r, ngx_http_core_module);
-
- if (hc->free == NULL) {
- hc->free = ngx_palloc(c->pool,
- cscf->large_client_header_buffers.num * sizeof(ngx_buf_t *));
+ for (cl = hc->busy; cl; /* void */) {
+ ln = cl;
+ cl = cl->next;
- if (hc->free == NULL) {
- ngx_http_close_request(r, 0);
- return;
+ if (ln->buf == b) {
+ ngx_free_chain(c->pool, ln);
+ continue;
}
- }
- for (i = 0; i < hc->nbusy - 1; i++) {
- f = hc->busy[i];
- hc->free[hc->nfree++] = f;
+ f = ln->buf;
f->pos = f->start;
f->last = f->start;
+
+ ln->next = hc->free;
+ hc->free = ln;
}
- hc->busy[0] = b;
+ cl = ngx_alloc_chain_link(c->pool);
+ if (cl == NULL) {
+ ngx_http_close_request(r, 0);
+ return;
+ }
+
+ cl->buf = b;
+ cl->next = NULL;
+
+ hc->busy = cl;
hc->nbusy = 1;
}
}
@@ -2964,27 +2970,32 @@
b->last = b->start;
}
- ngx_log_debug2(NGX_LOG_DEBUG_HTTP, c->log, 0, "hc free: %p %i",
- hc->free, hc->nfree);
+ ngx_log_debug1(NGX_LOG_DEBUG_HTTP, c->log, 0, "hc free: %p",
+ hc->free);
if (hc->free) {
- for (i = 0; i < hc->nfree; i++) {
- ngx_pfree(c->pool, hc->free[i]->start);
- hc->free[i] = NULL;
+ for (cl = hc->free; cl; /* void */) {
+ ln = cl;
+ cl = cl->next;
+ ngx_pfree(c->pool, ln->buf->start);
+ ngx_free_chain(c->pool, ln);
}
- hc->nfree = 0;
+ hc->free = NULL;
}
ngx_log_debug2(NGX_LOG_DEBUG_HTTP, c->log, 0, "hc busy: %p %i",
hc->busy, hc->nbusy);
if (hc->busy) {
- for (i = 0; i < hc->nbusy; i++) {
- ngx_pfree(c->pool, hc->busy[i]->start);
- hc->busy[i] = NULL;
+ for (cl = hc->busy; cl; /* void */) {
+ ln = cl;
+ cl = cl->next;
+ ngx_pfree(c->pool, ln->buf->start);
+ ngx_free_chain(c->pool, ln);
}
+ hc->busy = NULL;
hc->nbusy = 0;
}
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.11.13.tar.gz/src/http/ngx_http_request.h
^
|
@@ -62,7 +62,9 @@
/* unused 1 */
#define NGX_HTTP_SUBREQUEST_IN_MEMORY 2
#define NGX_HTTP_SUBREQUEST_WAITED 4
-#define NGX_HTTP_LOG_UNSAFE 8
+#define NGX_HTTP_SUBREQUEST_CLONE 8
+
+#define NGX_HTTP_LOG_UNSAFE 1
#define NGX_HTTP_CONTINUE 100
@@ -96,6 +98,7 @@
#define NGX_HTTP_UNSUPPORTED_MEDIA_TYPE 415
#define NGX_HTTP_RANGE_NOT_SATISFIABLE 416
#define NGX_HTTP_MISDIRECTED_REQUEST 421
+#define NGX_HTTP_TOO_MANY_REQUESTS 429
/* Our own HTTP codes */
@@ -307,11 +310,10 @@
#endif
#endif
- ngx_buf_t **busy;
+ ngx_chain_t *busy;
ngx_int_t nbusy;
- ngx_buf_t **free;
- ngx_int_t nfree;
+ ngx_chain_t *free;
unsigned ssl:1;
unsigned proxy_protocol:1;
@@ -481,6 +483,7 @@
#if (NGX_HTTP_CACHE)
unsigned cached:1;
+ unsigned cache_updater:1;
#endif
#if (NGX_HTTP_GZIP)
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.11.13.tar.gz/src/http/ngx_http_request_body.c
^
|
@@ -835,6 +835,8 @@
/* we assume that such small packet should be send successfully */
+ r->connection->error = 1;
+
return NGX_ERROR;
}
@@ -1085,6 +1087,7 @@
#if (NGX_DEBUG)
+#if 0
for (cl = rb->bufs; cl; cl = cl->next) {
ngx_log_debug7(NGX_LOG_DEBUG_EVENT, r->connection->log, 0,
"http body old buf t:%d f:%d %p, pos %p, size: %z "
@@ -1095,6 +1098,7 @@
cl->buf->file_pos,
cl->buf->file_last - cl->buf->file_pos);
}
+#endif
for (cl = in; cl; cl = cl->next) {
ngx_log_debug7(NGX_LOG_DEBUG_EVENT, r->connection->log, 0,
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.11.13.tar.gz/src/http/ngx_http_script.c
^
|
@@ -220,7 +220,7 @@
cv = (ngx_http_complex_value_t **) (p + cmd->offset);
if (*cv != NULL) {
- return "duplicate";
+ return "is duplicate";
}
*cv = ngx_palloc(cf->pool, sizeof(ngx_http_complex_value_t));
@@ -1513,6 +1513,12 @@
if (ngx_open_cached_file(clcf->open_file_cache, &path, &of, r->pool)
!= NGX_OK)
{
+ if (of.err == 0) {
+ e->ip = ngx_http_script_exit;
+ e->status = NGX_HTTP_INTERNAL_SERVER_ERROR;
+ return;
+ }
+
if (of.err != NGX_ENOENT
&& of.err != NGX_ENOTDIR
&& of.err != NGX_ENAMETOOLONG)
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.11.13.tar.gz/src/http/ngx_http_special_response.c
^
|
@@ -25,6 +25,13 @@
;
+static u_char ngx_http_error_build_tail[] =
+"<hr><center>" NGINX_VER_BUILD "</center>" CRLF
+"</body>" CRLF
+"</html>" CRLF
+;
+
+
static u_char ngx_http_error_tail[] =
"<hr><center>nginx</center>" CRLF
"</body>" CRLF
@@ -218,6 +225,14 @@
;
+static char ngx_http_error_429_page[] =
+"<html>" CRLF
+"<head><title>429 Too Many Requests</title></head>" CRLF
+"<body bgcolor=\"white\">" CRLF
+"<center><h1>429 Too Many Requests</h1></center>" CRLF
+;
+
+
static char ngx_http_error_494_page[] =
"<html>" CRLF
"<head><title>400 Request Header Or Cookie Too Large</title></head>"
@@ -347,8 +362,16 @@
ngx_null_string, /* 419 */
ngx_null_string, /* 420 */
ngx_string(ngx_http_error_421_page),
+ ngx_null_string, /* 422 */
+ ngx_null_string, /* 423 */
+ ngx_null_string, /* 424 */
+ ngx_null_string, /* 425 */
+ ngx_null_string, /* 426 */
+ ngx_null_string, /* 427 */
+ ngx_null_string, /* 428 */
+ ngx_string(ngx_http_error_429_page),
-#define NGX_HTTP_LAST_4XX 422
+#define NGX_HTTP_LAST_4XX 430
#define NGX_HTTP_OFF_5XX (NGX_HTTP_LAST_4XX - 400 + NGX_HTTP_OFF_4XX)
ngx_string(ngx_http_error_494_page), /* 494, request header too large */
@@ -628,10 +651,14 @@
ngx_uint_t msie_padding;
ngx_chain_t out[3];
- if (clcf->server_tokens) {
+ if (clcf->server_tokens == NGX_HTTP_SERVER_TOKENS_ON) {
len = sizeof(ngx_http_error_full_tail) - 1;
tail = ngx_http_error_full_tail;
+ } else if (clcf->server_tokens == NGX_HTTP_SERVER_TOKENS_BUILD) {
+ len = sizeof(ngx_http_error_build_tail) - 1;
+ tail = ngx_http_error_build_tail;
+
} else {
len = sizeof(ngx_http_error_tail) - 1;
tail = ngx_http_error_tail;
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.11.13.tar.gz/src/http/ngx_http_upstream.c
^
|
@@ -17,6 +17,8 @@
ngx_http_upstream_t *u, ngx_http_file_cache_t **cache);
static ngx_int_t ngx_http_upstream_cache_send(ngx_http_request_t *r,
ngx_http_upstream_t *u);
+static ngx_int_t ngx_http_upstream_cache_background_update(
+ ngx_http_request_t *r, ngx_http_upstream_t *u);
static ngx_int_t ngx_http_upstream_cache_check_range(ngx_http_request_t *r,
ngx_http_upstream_t *u);
static ngx_int_t ngx_http_upstream_cache_status(ngx_http_request_t *r,
@@ -162,6 +164,10 @@
ngx_http_variable_value_t *v, uintptr_t data);
static ngx_int_t ngx_http_upstream_response_length_variable(
ngx_http_request_t *r, ngx_http_variable_value_t *v, uintptr_t data);
+static ngx_int_t ngx_http_upstream_header_variable(ngx_http_request_t *r,
+ ngx_http_variable_value_t *v, uintptr_t data);
+static ngx_int_t ngx_http_upstream_cookie_variable(ngx_http_request_t *r,
+ ngx_http_variable_value_t *v, uintptr_t data);
static char *ngx_http_upstream(ngx_conf_t *cf, ngx_command_t *cmd, void *dummy);
static char *ngx_http_upstream_server(ngx_conf_t *cf, ngx_command_t *cmd,
@@ -182,7 +188,7 @@
#endif
-ngx_http_upstream_header_t ngx_http_upstream_headers_in[] = {
+static ngx_http_upstream_header_t ngx_http_upstream_headers_in[] = {
{ ngx_string("Status"),
ngx_http_upstream_process_header_line,
@@ -413,6 +419,12 @@
#endif
+ { ngx_string("upstream_http_"), NULL, ngx_http_upstream_header_variable,
+ 0, NGX_HTTP_VAR_NOCACHEABLE|NGX_HTTP_VAR_PREFIX, 0 },
+
+ { ngx_string("upstream_cookie_"), NULL, ngx_http_upstream_cookie_variable,
+ 0, NGX_HTTP_VAR_NOCACHEABLE|NGX_HTTP_VAR_PREFIX, 0 },
+
{ ngx_null_string, NULL, NULL, 0, 0, 0 }
};
@@ -424,6 +436,7 @@
{ 504, NGX_HTTP_UPSTREAM_FT_HTTP_504 },
{ 403, NGX_HTTP_UPSTREAM_FT_HTTP_403 },
{ 404, NGX_HTTP_UPSTREAM_FT_HTTP_404 },
+ { 429, NGX_HTTP_UPSTREAM_FT_HTTP_429 },
{ 0, 0 }
};
@@ -568,6 +581,10 @@
rc = NGX_DECLINED;
r->cached = 0;
}
+
+ if (ngx_http_upstream_cache_background_update(r, u) != NGX_OK) {
+ rc = NGX_ERROR;
+ }
}
if (rc != NGX_DECLINED) {
@@ -859,9 +876,24 @@
switch (rc) {
+ case NGX_HTTP_CACHE_STALE:
+
+ if (((u->conf->cache_use_stale & NGX_HTTP_UPSTREAM_FT_UPDATING)
+ || c->stale_updating) && !r->cache_updater
+ && u->conf->cache_background_update)
+ {
+ r->cache->background = 1;
+ u->cache_status = rc;
+ rc = NGX_OK;
+ }
+
+ break;
+
case NGX_HTTP_CACHE_UPDATING:
- if (u->conf->cache_use_stale & NGX_HTTP_UPSTREAM_FT_UPDATING) {
+ if (((u->conf->cache_use_stale & NGX_HTTP_UPSTREAM_FT_UPDATING)
+ || c->stale_updating) && !r->cache_updater)
+ {
u->cache_status = rc;
rc = NGX_OK;
@@ -884,6 +916,9 @@
case NGX_HTTP_CACHE_STALE:
c->valid_sec = 0;
+ c->updating_sec = 0;
+ c->error_sec = 0;
+
u->buffer.start = NULL;
u->cache_status = NGX_HTTP_CACHE_EXPIRED;
@@ -1031,6 +1066,30 @@
static ngx_int_t
+ngx_http_upstream_cache_background_update(ngx_http_request_t *r,
+ ngx_http_upstream_t *u)
+{
+ ngx_http_request_t *sr;
+
+ if (!r->cached || !r->cache->background) {
+ return NGX_OK;
+ }
+
+ if (ngx_http_subrequest(r, &r->uri, &r->args, &sr, NULL,
+ NGX_HTTP_SUBREQUEST_CLONE)
+ != NGX_OK)
+ {
+ return NGX_ERROR;
+ }
+
+ sr->header_only = 1;
+ sr->cache_updater = 1;
+
+ return NGX_OK;
+}
+
+
+static ngx_int_t
ngx_http_upstream_cache_check_range(ngx_http_request_t *r,
ngx_http_upstream_t *u)
{
@@ -1174,6 +1233,11 @@
ngx_log_debug2(NGX_LOG_DEBUG_HTTP, c->log, 0,
"http upstream request: \"%V?%V\"", &r->uri, &r->args);
+ if (ev->delayed && ev->timedout) {
+ ev->delayed = 0;
+ ev->timedout = 0;
+ }
+
if (ev->write) {
u->write_event_handler(r, u);
@@ -2330,7 +2394,7 @@
#if (NGX_HTTP_CACHE)
if (u->cache_status == NGX_HTTP_CACHE_EXPIRED
- && (u->conf->cache_use_stale & un->mask))
+ && ((u->conf->cache_use_stale & un->mask) || r->cache->stale_error))
{
ngx_int_t rc;
@@ -2354,14 +2418,17 @@
&& u->cache_status == NGX_HTTP_CACHE_EXPIRED
&& u->conf->cache_revalidate)
{
- time_t now, valid;
+ time_t now, valid, updating, error;
ngx_int_t rc;
ngx_log_debug0(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
"http upstream not modified");
now = ngx_time();
+
valid = r->cache->valid_sec;
+ updating = r->cache->updating_sec;
+ error = r->cache->error_sec;
rc = u->reinit_request(r);
@@ -2375,6 +2442,8 @@
if (valid == 0) {
valid = r->cache->valid_sec;
+ updating = r->cache->updating_sec;
+ error = r->cache->error_sec;
}
if (valid == 0) {
@@ -2387,6 +2456,9 @@
if (valid) {
r->cache->valid_sec = valid;
+ r->cache->updating_sec = updating;
+ r->cache->error_sec = error;
+
r->cache->date = now;
ngx_http_file_cache_update_header(r);
@@ -3670,9 +3742,19 @@
r->main->blocked--;
r->aio = 0;
- r->write_event_handler(r);
+ if (r->done) {
+ /*
+ * trigger connection event handler if the subrequest was
+ * already finalized; this can happen if the handler is used
+ * for sendfile() in threads
+ */
- ngx_http_run_posted_requests(c);
+ c->write->handler(c->write);
+
+ } else {
+ r->write_event_handler(r);
+ ngx_http_run_posted_requests(c);
+ }
}
#endif
@@ -3720,31 +3802,9 @@
if (wev->timedout) {
- if (wev->delayed) {
-
- wev->timedout = 0;
- wev->delayed = 0;
-
- if (!wev->ready) {
- ngx_add_timer(wev, p->send_timeout);
-
- if (ngx_handle_write_event(wev, p->send_lowat) != NGX_OK) {
- ngx_http_upstream_finalize_request(r, u, NGX_ERROR);
- }
-
- return;
- }
-
- if (ngx_event_pipe(p, wev->write) == NGX_ABORT) {
- ngx_http_upstream_finalize_request(r, u, NGX_ERROR);
- return;
- }
-
- } else {
- p->downstream_error = 1;
- c->timedout = 1;
- ngx_connection_error(c, NGX_ETIMEDOUT, "client timed out");
- }
+ p->downstream_error = 1;
+ c->timedout = 1;
+ ngx_connection_error(c, NGX_ETIMEDOUT, "client timed out");
} else {
@@ -3789,30 +3849,8 @@
if (rev->timedout) {
- if (rev->delayed) {
-
- rev->timedout = 0;
- rev->delayed = 0;
-
- if (!rev->ready) {
- ngx_add_timer(rev, p->read_timeout);
-
- if (ngx_handle_read_event(rev, 0) != NGX_OK) {
- ngx_http_upstream_finalize_request(r, u, NGX_ERROR);
- }
-
- return;
- }
-
- if (ngx_event_pipe(p, 0) == NGX_ABORT) {
- ngx_http_upstream_finalize_request(r, u, NGX_ERROR);
- return;
- }
-
- } else {
- p->upstream_error = 1;
- ngx_connection_error(c, NGX_ETIMEDOUT, "upstream timed out");
- }
+ p->upstream_error = 1;
+ ngx_connection_error(c, NGX_ETIMEDOUT, "upstream timed out");
} else {
@@ -3848,9 +3886,24 @@
p = u->pipe;
#if (NGX_THREADS)
+
+ if (p->writing && !p->aio) {
+
+ /*
+ * make sure to call ngx_event_pipe()
+ * if there is an incomplete aio write
+ */
+
+ if (ngx_event_pipe(p, 1) == NGX_ABORT) {
+ ngx_http_upstream_finalize_request(r, u, NGX_ERROR);
+ return;
+ }
+ }
+
if (p->writing) {
return;
}
+
#endif
if (u->peer.connection) {
@@ -4074,6 +4127,10 @@
status = NGX_HTTP_NOT_FOUND;
break;
+ case NGX_HTTP_UPSTREAM_FT_HTTP_429:
+ status = NGX_HTTP_TOO_MANY_REQUESTS;
+ break;
+
/*
* NGX_HTTP_UPSTREAM_FT_BUSY_LOCK and NGX_HTTP_UPSTREAM_FT_MAX_WAITING
* never reach here
@@ -4107,7 +4164,7 @@
#if (NGX_HTTP_CACHE)
if (u->cache_status == NGX_HTTP_CACHE_EXPIRED
- && (u->conf->cache_use_stale & ft_type))
+ && ((u->conf->cache_use_stale & ft_type) || r->cache->stale_error))
{
ngx_int_t rc;
@@ -4285,6 +4342,8 @@
u->buffer.last = u->buffer.pos;
}
+ r->read_event_handler = ngx_http_block_reading;
+
if (rc == NGX_DECLINED) {
return;
}
@@ -4482,32 +4541,76 @@
offset = 8;
}
- if (p == NULL) {
- return NGX_OK;
- }
+ if (p) {
+ n = 0;
+
+ for (p += offset; p < last; p++) {
+ if (*p == ',' || *p == ';' || *p == ' ') {
+ break;
+ }
- n = 0;
+ if (*p >= '0' && *p <= '9') {
+ n = n * 10 + *p - '0';
+ continue;
+ }
- for (p += offset; p < last; p++) {
- if (*p == ',' || *p == ';' || *p == ' ') {
- break;
+ u->cacheable = 0;
+ return NGX_OK;
}
- if (*p >= '0' && *p <= '9') {
- n = n * 10 + *p - '0';
- continue;
+ if (n == 0) {
+ u->cacheable = 0;
+ return NGX_OK;
}
- u->cacheable = 0;
- return NGX_OK;
+ r->cache->valid_sec = ngx_time() + n;
}
- if (n == 0) {
- u->cacheable = 0;
- return NGX_OK;
+ p = ngx_strlcasestrn(start, last, (u_char *) "stale-while-revalidate=",
+ 23 - 1);
+
+ if (p) {
+ n = 0;
+
+ for (p += 23; p < last; p++) {
+ if (*p == ',' || *p == ';' || *p == ' ') {
+ break;
+ }
+
+ if (*p >= '0' && *p <= '9') {
+ n = n * 10 + *p - '0';
+ continue;
+ }
+
+ u->cacheable = 0;
+ return NGX_OK;
+ }
+
+ r->cache->updating_sec = n;
+ r->cache->error_sec = n;
}
- r->cache->valid_sec = ngx_time() + n;
+ p = ngx_strlcasestrn(start, last, (u_char *) "stale-if-error=", 15 - 1);
+
+ if (p) {
+ n = 0;
+
+ for (p += 15; p < last; p++) {
+ if (*p == ',' || *p == ';' || *p == ' ') {
+ break;
+ }
+
+ if (*p >= '0' && *p <= '9') {
+ n = n * 10 + *p - '0';
+ continue;
+ }
+
+ u->cacheable = 0;
+ return NGX_OK;
+ }
+
+ r->cache->error_sec = n;
+ }
}
#endif
@@ -5376,7 +5479,7 @@
}
-ngx_int_t
+static ngx_int_t
ngx_http_upstream_header_variable(ngx_http_request_t *r,
ngx_http_variable_value_t *v, uintptr_t data)
{
@@ -5391,7 +5494,7 @@
}
-ngx_int_t
+static ngx_int_t
ngx_http_upstream_cookie_variable(ngx_http_request_t *r,
ngx_http_variable_value_t *v, uintptr_t data)
{
@@ -5427,7 +5530,7 @@
#if (NGX_HTTP_CACHE)
-ngx_int_t
+static ngx_int_t
ngx_http_upstream_cache_status(ngx_http_request_t *r,
ngx_http_variable_value_t *v, uintptr_t data)
{
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.11.13.tar.gz/src/http/ngx_http_upstream.h
^
|
@@ -26,10 +26,11 @@
#define NGX_HTTP_UPSTREAM_FT_HTTP_504 0x00000080
#define NGX_HTTP_UPSTREAM_FT_HTTP_403 0x00000100
#define NGX_HTTP_UPSTREAM_FT_HTTP_404 0x00000200
-#define NGX_HTTP_UPSTREAM_FT_UPDATING 0x00000400
-#define NGX_HTTP_UPSTREAM_FT_BUSY_LOCK 0x00000800
-#define NGX_HTTP_UPSTREAM_FT_MAX_WAITING 0x00001000
-#define NGX_HTTP_UPSTREAM_FT_NON_IDEMPOTENT 0x00002000
+#define NGX_HTTP_UPSTREAM_FT_HTTP_429 0x00000400
+#define NGX_HTTP_UPSTREAM_FT_UPDATING 0x00000800
+#define NGX_HTTP_UPSTREAM_FT_BUSY_LOCK 0x00001000
+#define NGX_HTTP_UPSTREAM_FT_MAX_WAITING 0x00002000
+#define NGX_HTTP_UPSTREAM_FT_NON_IDEMPOTENT 0x00004000
#define NGX_HTTP_UPSTREAM_FT_NOLIVE 0x40000000
#define NGX_HTTP_UPSTREAM_FT_OFF 0x80000000
@@ -38,7 +39,8 @@
|NGX_HTTP_UPSTREAM_FT_HTTP_503 \
|NGX_HTTP_UPSTREAM_FT_HTTP_504 \
|NGX_HTTP_UPSTREAM_FT_HTTP_403 \
- |NGX_HTTP_UPSTREAM_FT_HTTP_404)
+ |NGX_HTTP_UPSTREAM_FT_HTTP_404 \
+ |NGX_HTTP_UPSTREAM_FT_HTTP_429)
#define NGX_HTTP_UPSTREAM_INVALID_HEADER 40
@@ -55,9 +57,6 @@
typedef struct {
- ngx_msec_t bl_time;
- ngx_uint_t bl_state;
-
ngx_uint_t status;
ngx_msec_t response_time;
ngx_msec_t connect_time;
@@ -151,7 +150,6 @@
ngx_msec_t connect_timeout;
ngx_msec_t send_timeout;
ngx_msec_t read_timeout;
- ngx_msec_t timeout;
ngx_msec_t next_upstream_timeout;
size_t send_lowat;
@@ -206,6 +204,7 @@
ngx_flag_t cache_revalidate;
ngx_flag_t cache_convert_head;
+ ngx_flag_t cache_background_update;
ngx_array_t *cache_valid;
ngx_array_t *cache_bypass;
@@ -390,9 +389,6 @@
unsigned request_sent:1;
unsigned request_body_sent:1;
unsigned header_sent:1;
-
- NGX_COMPAT_BEGIN(1)
- NGX_COMPAT_END
};
@@ -409,11 +405,6 @@
} ngx_http_upstream_param_t;
-ngx_int_t ngx_http_upstream_cookie_variable(ngx_http_request_t *r,
- ngx_http_variable_value_t *v, uintptr_t data);
-ngx_int_t ngx_http_upstream_header_variable(ngx_http_request_t *r,
- ngx_http_variable_value_t *v, uintptr_t data);
-
ngx_int_t ngx_http_upstream_create(ngx_http_request_t *r);
void ngx_http_upstream_init(ngx_http_request_t *r);
ngx_http_upstream_srv_conf_t *ngx_http_upstream_add(ngx_conf_t *cf,
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.11.13.tar.gz/src/http/ngx_http_variables.c
^
|
@@ -11,6 +11,9 @@
#include <nginx.h>
+static ngx_http_variable_t *ngx_http_add_prefix_variable(ngx_conf_t *cf,
+ ngx_str_t *name, ngx_uint_t flags);
+
static ngx_int_t ngx_http_variable_request(ngx_http_request_t *r,
ngx_http_variable_value_t *v, uintptr_t data);
#if 0
@@ -356,6 +359,18 @@
3, NGX_HTTP_VAR_NOCACHEABLE, 0 },
#endif
+ { ngx_string("http_"), NULL, ngx_http_variable_unknown_header_in,
+ 0, NGX_HTTP_VAR_PREFIX, 0 },
+
+ { ngx_string("sent_http_"), NULL, ngx_http_variable_unknown_header_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_null_string, NULL, NULL, 0, 0, 0 }
};
@@ -384,6 +399,10 @@
return NULL;
}
+ if (flags & NGX_HTTP_VAR_PREFIX) {
+ return ngx_http_add_prefix_variable(cf, name, flags);
+ }
+
cmcf = ngx_http_conf_get_module_main_conf(cf, ngx_http_core_module);
key = cmcf->variables_keys->keys.elts;
@@ -402,6 +421,8 @@
return NULL;
}
+ v->flags &= flags | ~NGX_HTTP_VAR_WEAK;
+
return v;
}
@@ -440,6 +461,59 @@
}
+static ngx_http_variable_t *
+ngx_http_add_prefix_variable(ngx_conf_t *cf, ngx_str_t *name, ngx_uint_t flags)
+{
+ ngx_uint_t i;
+ ngx_http_variable_t *v;
+ ngx_http_core_main_conf_t *cmcf;
+
+ cmcf = ngx_http_conf_get_module_main_conf(cf, ngx_http_core_module);
+
+ v = cmcf->prefix_variables.elts;
+ for (i = 0; i < cmcf->prefix_variables.nelts; i++) {
+ if (name->len != v[i].name.len
+ || ngx_strncasecmp(name->data, v[i].name.data, name->len) != 0)
+ {
+ continue;
+ }
+
+ v = &v[i];
+
+ if (!(v->flags & NGX_HTTP_VAR_CHANGEABLE)) {
+ ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
+ "the duplicate \"%V\" variable", name);
+ return NULL;
+ }
+
+ v->flags &= flags | ~NGX_HTTP_VAR_WEAK;
+
+ return v;
+ }
+
+ v = ngx_array_push(&cmcf->prefix_variables);
+ if (v == NULL) {
+ return NULL;
+ }
+
+ v->name.len = name->len;
+ v->name.data = ngx_pnalloc(cf->pool, name->len);
+ if (v->name.data == NULL) {
+ return NULL;
+ }
+
+ ngx_strlow(v->name.data, name->data, name->len);
+
+ v->set_handler = NULL;
+ v->get_handler = NULL;
+ v->data = 0;
+ v->flags = flags;
+ v->index = 0;
+
+ return v;
+}
+
+
ngx_int_t
ngx_http_get_variable_index(ngx_conf_t *cf, ngx_str_t *name)
{
@@ -573,6 +647,8 @@
ngx_http_variable_value_t *
ngx_http_get_variable(ngx_http_request_t *r, ngx_str_t *name, ngx_uint_t key)
{
+ size_t len;
+ ngx_uint_t i, n;
ngx_http_variable_t *v;
ngx_http_variable_value_t *vv;
ngx_http_core_main_conf_t *cmcf;
@@ -610,64 +686,22 @@
return NULL;
}
- if (name->len >= 5 && ngx_strncmp(name->data, "http_", 5) == 0) {
-
- if (ngx_http_variable_unknown_header_in(r, vv, (uintptr_t) name)
- == NGX_OK)
- {
- return vv;
- }
-
- return NULL;
- }
-
- if (name->len >= 10 && ngx_strncmp(name->data, "sent_http_", 10) == 0) {
-
- if (ngx_http_variable_unknown_header_out(r, vv, (uintptr_t) name)
- == NGX_OK)
- {
- return vv;
- }
-
- return NULL;
- }
-
- if (name->len >= 14 && ngx_strncmp(name->data, "upstream_http_", 14) == 0) {
-
- if (ngx_http_upstream_header_variable(r, vv, (uintptr_t) name)
- == NGX_OK)
- {
- return vv;
- }
-
- return NULL;
- }
-
- if (name->len >= 7 && ngx_strncmp(name->data, "cookie_", 7) == 0) {
-
- if (ngx_http_variable_cookie(r, vv, (uintptr_t) name) == NGX_OK) {
- return vv;
- }
-
- return NULL;
- }
+ len = 0;
- if (name->len >= 16
- && ngx_strncmp(name->data, "upstream_cookie_", 16) == 0)
- {
+ v = cmcf->prefix_variables.elts;
+ n = cmcf->prefix_variables.nelts;
- if (ngx_http_upstream_cookie_variable(r, vv, (uintptr_t) name)
- == NGX_OK)
+ for (i = 0; i < cmcf->prefix_variables.nelts; i++) {
+ if (name->len >= v[i].name.len && name->len > len
+ && ngx_strncmp(name->data, v[i].name.data, v[i].name.len) == 0)
{
- return vv;
+ len = v[i].name.len;
+ n = i;
}
-
- return NULL;
}
- if (name->len >= 4 && ngx_strncmp(name->data, "arg_", 4) == 0) {
-
- if (ngx_http_variable_argument(r, vv, (uintptr_t) name) == NGX_OK) {
+ if (n != cmcf->prefix_variables.nelts) {
+ if (v[n].get_handler(r, vv, (uintptr_t) name) == NGX_OK) {
return vv;
}
@@ -2502,7 +2536,6 @@
ngx_int_t
ngx_http_variables_add_core_vars(ngx_conf_t *cf)
{
- ngx_int_t rc;
ngx_http_variable_t *cv, *v;
ngx_http_core_main_conf_t *cmcf;
@@ -2523,27 +2556,20 @@
return NGX_ERROR;
}
+ if (ngx_array_init(&cmcf->prefix_variables, cf->pool, 8,
+ sizeof(ngx_http_variable_t))
+ != NGX_OK)
+ {
+ return NGX_ERROR;
+ }
+
for (cv = ngx_http_core_variables; cv->name.len; cv++) {
- v = ngx_palloc(cf->pool, sizeof(ngx_http_variable_t));
+ v = ngx_http_add_variable(cf, &cv->name, cv->flags);
if (v == NULL) {
return NGX_ERROR;
}
*v = *cv;
-
- rc = ngx_hash_add_key(cmcf->variables_keys, &v->name, v,
- NGX_HASH_READONLY_KEY);
-
- if (rc == NGX_OK) {
- continue;
- }
-
- if (rc == NGX_BUSY) {
- ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
- "conflicting variable name \"%V\"", &v->name);
- }
-
- return NGX_ERROR;
}
return NGX_OK;
@@ -2553,10 +2579,11 @@
ngx_int_t
ngx_http_variables_init_vars(ngx_conf_t *cf)
{
+ size_t len;
ngx_uint_t i, n;
ngx_hash_key_t *key;
ngx_hash_init_t hash;
- ngx_http_variable_t *v, *av;
+ ngx_http_variable_t *v, *av, *pv;
ngx_http_core_main_conf_t *cmcf;
/* set the handlers for the indexed http variables */
@@ -2564,6 +2591,7 @@
cmcf = ngx_http_conf_get_module_main_conf(cf, ngx_http_core_module);
v = cmcf->variables.elts;
+ pv = cmcf->prefix_variables.elts;
key = cmcf->variables_keys->keys.elts;
for (i = 0; i < cmcf->variables.nelts; i++) {
@@ -2584,7 +2612,9 @@
av->index = i;
- if (av->get_handler == NULL) {
+ if (av->get_handler == NULL
+ || (av->flags & NGX_HTTP_VAR_WEAK))
+ {
break;
}
@@ -2592,68 +2622,34 @@
}
}
- if (v[i].name.len >= 5
- && ngx_strncmp(v[i].name.data, "http_", 5) == 0)
- {
- v[i].get_handler = ngx_http_variable_unknown_header_in;
- v[i].data = (uintptr_t) &v[i].name;
-
- continue;
- }
-
- if (v[i].name.len >= 10
- && ngx_strncmp(v[i].name.data, "sent_http_", 10) == 0)
- {
- v[i].get_handler = ngx_http_variable_unknown_header_out;
- v[i].data = (uintptr_t) &v[i].name;
-
- continue;
- }
-
- if (v[i].name.len >= 14
- && ngx_strncmp(v[i].name.data, "upstream_http_", 14) == 0)
- {
- v[i].get_handler = ngx_http_upstream_header_variable;
- v[i].data = (uintptr_t) &v[i].name;
- v[i].flags = NGX_HTTP_VAR_NOCACHEABLE;
-
- continue;
- }
-
- if (v[i].name.len >= 7
- && ngx_strncmp(v[i].name.data, "cookie_", 7) == 0)
- {
- v[i].get_handler = ngx_http_variable_cookie;
- v[i].data = (uintptr_t) &v[i].name;
+ len = 0;
+ av = NULL;
- continue;
+ for (n = 0; n < cmcf->prefix_variables.nelts; n++) {
+ if (v[i].name.len >= pv[n].name.len && v[i].name.len > len
+ && ngx_strncmp(v[i].name.data, pv[n].name.data, pv[n].name.len)
+ == 0)
+ {
+ av = &pv[n];
+ len = pv[n].name.len;
+ }
}
- if (v[i].name.len >= 16
- && ngx_strncmp(v[i].name.data, "upstream_cookie_", 16) == 0)
- {
- v[i].get_handler = ngx_http_upstream_cookie_variable;
+ if (av) {
+ v[i].get_handler = av->get_handler;
v[i].data = (uintptr_t) &v[i].name;
- v[i].flags = NGX_HTTP_VAR_NOCACHEABLE;
+ v[i].flags = av->flags;
- continue;
+ goto next;
}
- if (v[i].name.len >= 4
- && ngx_strncmp(v[i].name.data, "arg_", 4) == 0)
- {
- v[i].get_handler = ngx_http_variable_argument;
- v[i].data = (uintptr_t) &v[i].name;
- v[i].flags = NGX_HTTP_VAR_NOCACHEABLE;
+ if (v[i].get_handler == NULL) {
+ ngx_log_error(NGX_LOG_EMERG, cf->log, 0,
+ "unknown \"%V\" variable", &v[i].name);
- continue;
+ return NGX_ERROR;
}
- ngx_log_error(NGX_LOG_EMERG, cf->log, 0,
- "unknown \"%V\" variable", &v[i].name);
-
- return NGX_ERROR;
-
next:
continue;
}
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.11.13.tar.gz/src/http/ngx_http_variables.h
^
|
@@ -30,6 +30,8 @@
#define NGX_HTTP_VAR_NOCACHEABLE 2
#define NGX_HTTP_VAR_INDEXED 4
#define NGX_HTTP_VAR_NOHASH 8
+#define NGX_HTTP_VAR_WEAK 16
+#define NGX_HTTP_VAR_PREFIX 32
struct ngx_http_variable_s {
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.11.13.tar.gz/src/http/v2/ngx_http_v2.c
^
|
@@ -783,9 +783,12 @@
static u_char *
ngx_http_v2_state_data(ngx_http_v2_connection_t *h2c, u_char *pos, u_char *end)
{
+ size_t size;
ngx_http_v2_node_t *node;
ngx_http_v2_stream_t *stream;
+ size = h2c->state.length;
+
if (h2c->state.flags & NGX_HTTP_V2_PADDED_FLAG) {
if (h2c->state.length == 0) {
@@ -802,33 +805,33 @@
}
h2c->state.padding = *pos++;
- h2c->state.length--;
- if (h2c->state.padding > h2c->state.length) {
+ if (h2c->state.padding >= size) {
ngx_log_error(NGX_LOG_INFO, h2c->connection->log, 0,
"client sent padded DATA frame "
"with incorrect length: %uz, padding: %uz",
- h2c->state.length, h2c->state.padding);
+ size, h2c->state.padding);
- return ngx_http_v2_connection_error(h2c, NGX_HTTP_V2_SIZE_ERROR);
+ return ngx_http_v2_connection_error(h2c,
+ NGX_HTTP_V2_PROTOCOL_ERROR);
}
- h2c->state.length -= h2c->state.padding;
+ h2c->state.length -= 1 + h2c->state.padding;
}
ngx_log_debug0(NGX_LOG_DEBUG_HTTP, h2c->connection->log, 0,
"http2 DATA frame");
- if (h2c->state.length > h2c->recv_window) {
+ if (size > h2c->recv_window) {
ngx_log_error(NGX_LOG_INFO, h2c->connection->log, 0,
"client violated connection flow control: "
"received DATA frame length %uz, available window %uz",
- h2c->state.length, h2c->recv_window);
+ size, h2c->recv_window);
return ngx_http_v2_connection_error(h2c, NGX_HTTP_V2_FLOW_CTRL_ERROR);
}
- h2c->recv_window -= h2c->state.length;
+ h2c->recv_window -= size;
if (h2c->recv_window < NGX_HTTP_V2_MAX_WINDOW / 4) {
@@ -854,11 +857,11 @@
stream = node->stream;
- if (h2c->state.length > stream->recv_window) {
+ if (size > stream->recv_window) {
ngx_log_error(NGX_LOG_INFO, h2c->connection->log, 0,
"client violated flow control for stream %ui: "
"received DATA frame length %uz, available window %uz",
- node->id, h2c->state.length, stream->recv_window);
+ node->id, size, stream->recv_window);
if (ngx_http_v2_terminate_stream(h2c, stream,
NGX_HTTP_V2_FLOW_CTRL_ERROR)
@@ -871,7 +874,7 @@
return ngx_http_v2_state_skip_padded(h2c, pos, end);
}
- stream->recv_window -= h2c->state.length;
+ stream->recv_window -= size;
if (stream->no_flow_control
&& stream->recv_window < NGX_HTTP_V2_MAX_WINDOW / 4)
@@ -938,7 +941,7 @@
if (size >= h2c->state.length) {
size = h2c->state.length;
- stream->in_closed = h2c->state.flags & NGX_HTTP_V2_END_STREAM_FLAG;
+ stream->in_closed = h2c->state.flags & NGX_HTTP_V2_END_STREAM_FLAG;
}
r = stream->request;
@@ -1053,7 +1056,8 @@
"with incorrect length: %uz, padding: %uz",
h2c->state.length, h2c->state.padding);
- return ngx_http_v2_connection_error(h2c, NGX_HTTP_V2_SIZE_ERROR);
+ return ngx_http_v2_connection_error(h2c,
+ NGX_HTTP_V2_PROTOCOL_ERROR);
}
h2c->state.length -= h2c->state.padding;
@@ -1901,7 +1905,7 @@
if (node == NULL || node->stream == NULL) {
ngx_log_debug0(NGX_LOG_DEBUG_HTTP, h2c->connection->log, 0,
- "unknown http2 stream");
+ "unknown http2 stream");
return ngx_http_v2_state_complete(h2c, pos, end);
}
@@ -2015,6 +2019,7 @@
break;
case NGX_HTTP_V2_MAX_FRAME_SIZE_SETTING:
+
if (value > NGX_HTTP_V2_MAX_FRAME_SIZE
|| value < NGX_HTTP_V2_DEFAULT_FRAME_SIZE)
{
@@ -3072,7 +3077,7 @@
}
ngx_log_error(NGX_LOG_INFO, r->connection->log, 0,
- "client sent unknown pseudo header \"%V\"",
+ "client sent unknown pseudo-header \":%V\"",
&header->name);
return NGX_DECLINED;
@@ -3219,14 +3224,14 @@
{
if (r->schema_start) {
ngx_log_error(NGX_LOG_INFO, r->connection->log, 0,
- "client sent duplicate :schema header");
+ "client sent duplicate :scheme header");
return NGX_DECLINED;
}
if (header->value.len == 0) {
ngx_log_error(NGX_LOG_INFO, r->connection->log, 0,
- "client sent empty :schema header");
+ "client sent empty :scheme header");
return NGX_DECLINED;
}
@@ -4130,6 +4135,14 @@
ngx_log_debug0(NGX_LOG_DEBUG_HTTP, rev->log, 0,
"http2 handle connection handler");
+ c = rev->data;
+ h2c = c->data;
+
+ if (c->error) {
+ ngx_http_v2_finalize_connection(h2c, 0);
+ return;
+ }
+
rev->handler = ngx_http_v2_read_handler;
if (rev->ready) {
@@ -4137,9 +4150,6 @@
return;
}
- c = rev->data;
- h2c = c->data;
-
if (h2c->last_out && ngx_http_v2_send_output_queue(h2c) == NGX_ERROR) {
ngx_http_v2_finalize_connection(h2c, 0);
return;
@@ -4262,7 +4272,10 @@
if (stream->queued) {
stream->queued = 0;
+
ev = fc->write;
+ ev->active = 0;
+ ev->ready = 1;
} else {
ev = fc->read;
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.11.13.tar.gz/src/http/v2/ngx_http_v2.h
^
|
@@ -249,8 +249,8 @@
{
ngx_http_v2_out_frame_t **out;
- for (out = &h2c->last_out; *out; out = &(*out)->next)
- {
+ for (out = &h2c->last_out; *out; out = &(*out)->next) {
+
if ((*out)->blocked || (*out)->stream == NULL) {
break;
}
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.11.13.tar.gz/src/http/v2/ngx_http_v2_filter_module.c
^
|
@@ -148,6 +148,10 @@
static size_t nginx_ver_len = ngx_http_v2_literal_size(NGINX_VER);
static u_char nginx_ver[ngx_http_v2_literal_size(NGINX_VER)];
+ static size_t nginx_ver_build_len =
+ ngx_http_v2_literal_size(NGINX_VER_BUILD);
+ static u_char nginx_ver_build[ngx_http_v2_literal_size(NGINX_VER_BUILD)];
+
if (!r->stream) {
return ngx_http_next_header_filter(r);
}
@@ -232,7 +236,16 @@
clcf = ngx_http_get_module_loc_conf(r, ngx_http_core_module);
if (r->headers_out.server == NULL) {
- len += 1 + (clcf->server_tokens ? nginx_ver_len : sizeof(nginx));
+
+ if (clcf->server_tokens == NGX_HTTP_SERVER_TOKENS_ON) {
+ len += 1 + nginx_ver_len;
+
+ } else if (clcf->server_tokens == NGX_HTTP_SERVER_TOKENS_BUILD) {
+ len += 1 + nginx_ver_build_len;
+
+ } else {
+ len += 1 + sizeof(nginx);
+ }
}
if (r->headers_out.date == NULL) {
@@ -420,13 +433,25 @@
}
if (r->headers_out.server == NULL) {
- ngx_log_debug1(NGX_LOG_DEBUG_HTTP, fc->log, 0,
- "http2 output header: \"server: %s\"",
- clcf->server_tokens ? NGINX_VER : "nginx");
+
+ if (clcf->server_tokens == NGX_HTTP_SERVER_TOKENS_ON) {
+ ngx_log_debug1(NGX_LOG_DEBUG_HTTP, fc->log, 0,
+ "http2 output header: \"server: %s\"",
+ NGINX_VER);
+
+ } else if (clcf->server_tokens == NGX_HTTP_SERVER_TOKENS_BUILD) {
+ ngx_log_debug1(NGX_LOG_DEBUG_HTTP, fc->log, 0,
+ "http2 output header: \"server: %s\"",
+ NGINX_VER_BUILD);
+
+ } else {
+ ngx_log_debug0(NGX_LOG_DEBUG_HTTP, fc->log, 0,
+ "http2 output header: \"server: nginx\"");
+ }
*pos++ = ngx_http_v2_inc_indexed(NGX_HTTP_V2_SERVER_INDEX);
- if (clcf->server_tokens) {
+ if (clcf->server_tokens == NGX_HTTP_SERVER_TOKENS_ON) {
if (nginx_ver[0] == '\0') {
p = ngx_http_v2_write_value(nginx_ver, (u_char *) NGINX_VER,
sizeof(NGINX_VER) - 1, tmp);
@@ -435,6 +460,16 @@
pos = ngx_cpymem(pos, nginx_ver, nginx_ver_len);
+ } else if (clcf->server_tokens == NGX_HTTP_SERVER_TOKENS_BUILD) {
+ if (nginx_ver_build[0] == '\0') {
+ p = ngx_http_v2_write_value(nginx_ver_build,
+ (u_char *) NGINX_VER_BUILD,
+ sizeof(NGINX_VER_BUILD) - 1, tmp);
+ nginx_ver_build_len = p - nginx_ver_build;
+ }
+
+ pos = ngx_cpymem(pos, nginx_ver_build, nginx_ver_build_len);
+
} else {
pos = ngx_cpymem(pos, nginx, sizeof(nginx));
}
@@ -734,6 +769,8 @@
rest -= frame_size;
if (rest) {
+ frame->length += NGX_HTTP_V2_FRAME_HEADER_SIZE;
+
type = NGX_HTTP_V2_CONTINUATION_FRAME;
flags = NGX_HTTP_V2_NO_FLAG;
continue;
@@ -1174,6 +1211,9 @@
"http2:%ui HEADERS frame %p was sent",
stream->node->id, frame);
+ stream->request->header_size += NGX_HTTP_V2_FRAME_HEADER_SIZE
+ + frame->length;
+
ngx_http_v2_handle_frame(stream, frame);
ngx_http_v2_handle_stream(h2c, stream);
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.11.13.tar.gz/src/mail/ngx_mail_imap_handler.c
^
|
@@ -356,6 +356,8 @@
}
#endif
+ iscf = ngx_mail_get_module_srv_conf(s, ngx_mail_imap_module);
+
rc = ngx_mail_auth_parse(s, c);
switch (rc) {
@@ -383,8 +385,6 @@
case NGX_MAIL_AUTH_CRAM_MD5:
- iscf = ngx_mail_get_module_srv_conf(s, ngx_mail_imap_module);
-
if (!(iscf->auth_methods & NGX_MAIL_AUTH_CRAM_MD5_ENABLED)) {
return NGX_MAIL_PARSE_INVALID_COMMAND;
}
@@ -406,6 +406,10 @@
case NGX_MAIL_AUTH_EXTERNAL:
+ if (!(iscf->auth_methods & NGX_MAIL_AUTH_EXTERNAL_ENABLED)) {
+ return NGX_MAIL_PARSE_INVALID_COMMAND;
+ }
+
ngx_str_set(&s->out, imap_username);
s->mail_state = ngx_imap_auth_external;
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.11.13.tar.gz/src/mail/ngx_mail_pop3_handler.c
^
|
@@ -501,6 +501,10 @@
case NGX_MAIL_AUTH_EXTERNAL:
+ if (!(pscf->auth_methods & NGX_MAIL_AUTH_EXTERNAL_ENABLED)) {
+ return NGX_MAIL_PARSE_INVALID_COMMAND;
+ }
+
ngx_str_set(&s->out, pop3_username);
s->mail_state = ngx_pop3_auth_external;
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.11.13.tar.gz/src/mail/ngx_mail_pop3_module.c
^
|
@@ -185,6 +185,10 @@
m <= NGX_MAIL_AUTH_EXTERNAL_ENABLED;
m <<= 1, i++)
{
+ if (ngx_mail_pop3_auth_methods_names[i].len == 0) {
+ continue;
+ }
+
if (m & conf->auth_methods) {
size += 1 + ngx_mail_pop3_auth_methods_names[i].len;
}
@@ -212,6 +216,10 @@
m <= NGX_MAIL_AUTH_EXTERNAL_ENABLED;
m <<= 1, i++)
{
+ if (ngx_mail_pop3_auth_methods_names[i].len == 0) {
+ continue;
+ }
+
if (m & conf->auth_methods) {
*p++ = ' ';
p = ngx_cpymem(p, ngx_mail_pop3_auth_methods_names[i].data,
@@ -248,6 +256,10 @@
m <= NGX_MAIL_AUTH_EXTERNAL_ENABLED;
m <<= 1, i++)
{
+ if (ngx_mail_pop3_auth_methods_names[i].len == 0) {
+ continue;
+ }
+
if (m & conf->auth_methods) {
size += ngx_mail_pop3_auth_methods_names[i].len
+ sizeof(CRLF) - 1;
@@ -269,6 +281,10 @@
m <= NGX_MAIL_AUTH_EXTERNAL_ENABLED;
m <<= 1, i++)
{
+ if (ngx_mail_pop3_auth_methods_names[i].len == 0) {
+ continue;
+ }
+
if (m & conf->auth_methods) {
p = ngx_cpymem(p, ngx_mail_pop3_auth_methods_names[i].data,
ngx_mail_pop3_auth_methods_names[i].len);
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.11.13.tar.gz/src/mail/ngx_mail_smtp_handler.c
^
|
@@ -609,6 +609,8 @@
return NGX_OK;
}
+ sscf = ngx_mail_get_module_srv_conf(s, ngx_mail_smtp_module);
+
rc = ngx_mail_auth_parse(s, c);
switch (rc) {
@@ -636,8 +638,6 @@
case NGX_MAIL_AUTH_CRAM_MD5:
- sscf = ngx_mail_get_module_srv_conf(s, ngx_mail_smtp_module);
-
if (!(sscf->auth_methods & NGX_MAIL_AUTH_CRAM_MD5_ENABLED)) {
return NGX_MAIL_PARSE_INVALID_COMMAND;
}
@@ -659,6 +659,10 @@
case NGX_MAIL_AUTH_EXTERNAL:
+ if (!(sscf->auth_methods & NGX_MAIL_AUTH_EXTERNAL_ENABLED)) {
+ return NGX_MAIL_PARSE_INVALID_COMMAND;
+ }
+
ngx_str_set(&s->out, smtp_username);
s->mail_state = ngx_smtp_auth_external;
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.11.13.tar.gz/src/os/unix/ngx_darwin_sendfile_chain.c
^
|
@@ -98,7 +98,7 @@
send += file_size;
- if (header.count == 0) {
+ if (header.count == 0 && send < limit) {
/*
* create the trailer iovec and coalesce the neighbouring bufs
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.11.13.tar.gz/src/os/unix/ngx_freebsd_sendfile_chain.c
^
|
@@ -114,15 +114,23 @@
send += file_size;
- /* create the trailer iovec and coalesce the neighbouring bufs */
+ if (send < limit) {
- cl = ngx_output_chain_to_iovec(&trailer, cl, limit - send, c->log);
+ /*
+ * create the trailer iovec and coalesce the neighbouring bufs
+ */
+
+ cl = ngx_output_chain_to_iovec(&trailer, cl, limit - send,
+ c->log);
+ if (cl == NGX_CHAIN_ERROR) {
+ return NGX_CHAIN_ERROR;
+ }
- if (cl == NGX_CHAIN_ERROR) {
- return NGX_CHAIN_ERROR;
- }
+ send += trailer.size;
- send += trailer.size;
+ } else {
+ trailer.count = 0;
+ }
if (ngx_freebsd_use_tcp_nopush
&& c->tcp_nopush == NGX_TCP_NOPUSH_UNSET)
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.11.13.tar.gz/src/os/unix/ngx_linux_sendfile_chain.c
^
|
@@ -20,8 +20,8 @@
#error sendfile64() is required!
#endif
-static ngx_int_t ngx_linux_sendfile_thread(ngx_connection_t *c, ngx_buf_t *file,
- size_t size, size_t *sent);
+static ssize_t ngx_linux_sendfile_thread(ngx_connection_t *c, ngx_buf_t *file,
+ size_t size);
static void ngx_linux_sendfile_thread_handler(void *data, ngx_log_t *log);
#endif
@@ -56,10 +56,6 @@
ngx_chain_t *cl;
ngx_iovec_t header;
struct iovec headers[NGX_IOVS_PREALLOCATE];
-#if (NGX_THREADS)
- ngx_int_t rc;
- ngx_uint_t thread_handled, thread_complete;
-#endif
wev = c->write;
@@ -82,10 +78,6 @@
for ( ;; ) {
prev_send = send;
-#if (NGX_THREADS)
- thread_handled = 0;
- thread_complete = 0;
-#endif
/* create the iovec and coalesce the neighbouring bufs */
@@ -179,38 +171,19 @@
}
#endif
-#if (NGX_THREADS)
- if (file->file->thread_handler) {
- rc = ngx_linux_sendfile_thread(c, file, file_size, &sent);
-
- switch (rc) {
- case NGX_OK:
- thread_handled = 1;
- break;
-
- case NGX_DONE:
- thread_complete = 1;
- break;
+ n = ngx_linux_sendfile(c, file, file_size);
- case NGX_AGAIN:
- break;
-
- default: /* NGX_ERROR */
- return NGX_CHAIN_ERROR;
- }
-
- } else
-#endif
- {
- n = ngx_linux_sendfile(c, file, file_size);
-
- if (n == NGX_ERROR) {
- return NGX_CHAIN_ERROR;
- }
+ if (n == NGX_ERROR) {
+ return NGX_CHAIN_ERROR;
+ }
- sent = (n == NGX_AGAIN) ? 0 : n;
+ if (n == NGX_DONE) {
+ /* thread task posted */
+ return in;
}
+ sent = (n == NGX_AGAIN) ? 0 : n;
+
} else {
n = ngx_writev(c, &header);
@@ -225,21 +198,27 @@
in = ngx_chain_update_sent(in, sent);
- if ((size_t) (send - prev_send) != sent) {
-#if (NGX_THREADS)
- if (thread_handled) {
- return in;
- }
-
- if (thread_complete) {
- send = prev_send + sent;
- continue;
- }
-#endif
+ if (n == NGX_AGAIN) {
wev->ready = 0;
return in;
}
+ if ((size_t) (send - prev_send) != sent) {
+
+ /*
+ * sendfile() on Linux 4.3+ might be interrupted at any time,
+ * and provides no indication if it was interrupted or not,
+ * so we have to retry till an explicit EAGAIN
+ *
+ * sendfile() in threads can also report less bytes written
+ * than we are prepared to send now, since it was started in
+ * some point in the past, so we again have to retry
+ */
+
+ send = prev_send + sent;
+ continue;
+ }
+
if (send >= limit || in == NULL) {
return in;
}
@@ -258,6 +237,14 @@
ssize_t n;
ngx_err_t err;
+#if (NGX_THREADS)
+
+ if (file->file->thread_handler) {
+ return ngx_linux_sendfile_thread(c, file, size);
+ }
+
+#endif
+
#if (NGX_HAVE_SENDFILE64)
offset = file->file_pos;
#else
@@ -324,9 +311,8 @@
} ngx_linux_sendfile_ctx_t;
-static ngx_int_t
-ngx_linux_sendfile_thread(ngx_connection_t *c, ngx_buf_t *file, size_t size,
- size_t *sent)
+static ssize_t
+ngx_linux_sendfile_thread(ngx_connection_t *c, ngx_buf_t *file, size_t size)
{
ngx_event_t *wev;
ngx_thread_task_t *task;
@@ -356,10 +342,14 @@
task->event.complete = 0;
if (ctx->err == NGX_EAGAIN) {
- *sent = 0;
+ /*
+ * if wev->complete is set, this means that a write event
+ * happened while we were waiting for the thread task, so
+ * we have to retry sending even on EAGAIN
+ */
if (wev->complete) {
- return NGX_DONE;
+ return 0;
}
return NGX_AGAIN;
@@ -384,13 +374,7 @@
return NGX_ERROR;
}
- *sent = ctx->sent;
-
- if (ctx->sent == ctx->size || wev->complete) {
- return NGX_DONE;
- }
-
- return NGX_AGAIN;
+ return ctx->sent;
}
if (task->event.active && ctx->file == file) {
@@ -399,9 +383,7 @@
* or multiple calls of the next body filter from a filter
*/
- *sent = 0;
-
- return NGX_OK;
+ return NGX_DONE;
}
ctx->file = file;
@@ -414,9 +396,7 @@
return NGX_ERROR;
}
- *sent = 0;
-
- return NGX_OK;
+ return NGX_DONE;
}
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.11.13.tar.gz/src/os/unix/ngx_process.c
^
|
@@ -306,7 +306,7 @@
}
-void
+static void
ngx_signal_handler(int signo)
{
char *action;
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.11.13.tar.gz/src/os/unix/ngx_process_cycle.c
^
|
@@ -738,12 +738,8 @@
for ( ;; ) {
if (ngx_exiting) {
- ngx_event_cancel_timers();
-
- if (ngx_event_timer_rbtree.root == ngx_event_timer_rbtree.sentinel)
- {
+ if (ngx_event_no_timers_left() == NGX_OK) {
ngx_log_error(NGX_LOG_NOTICE, cycle->log, 0, "exiting");
-
ngx_worker_process_exit(cycle);
}
}
@@ -754,7 +750,6 @@
if (ngx_terminate) {
ngx_log_error(NGX_LOG_NOTICE, cycle->log, 0, "exiting");
-
ngx_worker_process_exit(cycle);
}
@@ -766,6 +761,7 @@
if (!ngx_exiting) {
ngx_exiting = 1;
+ ngx_set_shutdown_timer(cycle);
ngx_close_listening_sockets(cycle);
ngx_close_idle_connections(cycle);
}
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.11.13.tar.gz/src/os/unix/ngx_thread_cond.c
^
|
@@ -16,8 +16,6 @@
err = pthread_cond_init(cond, NULL);
if (err == 0) {
- ngx_log_debug1(NGX_LOG_DEBUG_CORE, log, 0,
- "pthread_cond_init(%p)", cond);
return NGX_OK;
}
@@ -33,8 +31,6 @@
err = pthread_cond_destroy(cond);
if (err == 0) {
- ngx_log_debug1(NGX_LOG_DEBUG_CORE, log, 0,
- "pthread_cond_destroy(%p)", cond);
return NGX_OK;
}
@@ -50,8 +46,6 @@
err = pthread_cond_signal(cond);
if (err == 0) {
- ngx_log_debug1(NGX_LOG_DEBUG_CORE, log, 0,
- "pthread_cond_signal(%p)", cond);
return NGX_OK;
}
@@ -66,9 +60,6 @@
{
ngx_err_t err;
- ngx_log_debug1(NGX_LOG_DEBUG_CORE, log, 0,
- "pthread_cond_wait(%p) enter", cond);
-
err = pthread_cond_wait(cond, mtx);
#if 0
@@ -76,8 +67,6 @@
#endif
if (err == 0) {
- ngx_log_debug1(NGX_LOG_DEBUG_CORE, log, 0,
- "pthread_cond_wait(%p) exit", cond);
return NGX_OK;
}
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.11.13.tar.gz/src/os/unix/ngx_thread_mutex.c
^
|
@@ -108,8 +108,6 @@
"pthread_mutexattr_destroy() failed");
}
- ngx_log_debug1(NGX_LOG_DEBUG_CORE, log, 0,
- "pthread_mutex_init(%p)", mtx);
return NGX_OK;
}
@@ -126,8 +124,6 @@
return NGX_ERROR;
}
- ngx_log_debug1(NGX_LOG_DEBUG_CORE, log, 0,
- "pthread_mutex_destroy(%p)", mtx);
return NGX_OK;
}
@@ -137,9 +133,6 @@
{
ngx_err_t err;
- ngx_log_debug1(NGX_LOG_DEBUG_CORE, log, 0,
- "pthread_mutex_lock(%p) enter", mtx);
-
err = pthread_mutex_lock(mtx);
if (err == 0) {
return NGX_OK;
@@ -163,8 +156,6 @@
#endif
if (err == 0) {
- ngx_log_debug1(NGX_LOG_DEBUG_CORE, log, 0,
- "pthread_mutex_unlock(%p) exit", mtx);
return NGX_OK;
}
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.11.13.tar.gz/src/stream/ngx_stream.h
^
|
@@ -153,7 +153,8 @@
ngx_hash_t variables_hash;
- ngx_array_t variables; /* ngx_stream_variable_t */
+ ngx_array_t variables; /* ngx_stream_variable_t */
+ ngx_array_t prefix_variables; /* ngx_stream_variable_t */
ngx_uint_t ncaptures;
ngx_uint_t variables_hash_max_size;
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.11.13.tar.gz/src/stream/ngx_stream_log_module.c
^
|
@@ -443,6 +443,11 @@
s->connection->pool)
!= NGX_OK)
{
+ if (of.err == 0) {
+ /* simulate successful logging */
+ return len;
+ }
+
ngx_log_error(NGX_LOG_CRIT, s->connection->log, ngx_errno,
"%s \"%s\" failed", of.failed, log.data);
/* simulate successful logging */
@@ -641,23 +646,10 @@
static void
ngx_stream_log_flush_handler(ngx_event_t *ev)
{
- ngx_open_file_t *file;
- ngx_stream_log_buf_t *buffer;
-
ngx_log_debug0(NGX_LOG_DEBUG_EVENT, ev->log, 0,
"stream log buffer flush handler");
- if (ev->timedout) {
- ngx_stream_log_flush(ev->data, ev->log);
- return;
- }
-
- /* cancel the flush timer for graceful shutdown */
-
- file = ev->data;
- buffer = file->data;
-
- buffer->event = NULL;
+ ngx_stream_log_flush(ev->data, ev->log);
}
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.11.13.tar.gz/src/stream/ngx_stream_proxy_module.c
^
|
@@ -1534,8 +1534,9 @@
size = b->end - b->last;
- if (size && src->read->ready && !src->read->delayed) {
-
+ if (size && src->read->ready && !src->read->delayed
+ && !src->read->error)
+ {
if (limit_rate) {
limit = (off_t) limit_rate * (ngx_time() - u->start_sec + 1)
- *received;
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.11.13.tar.gz/src/stream/ngx_stream_script.c
^
|
@@ -222,7 +222,7 @@
cv = (ngx_stream_complex_value_t **) (p + cmd->offset);
if (*cv != NULL) {
- return "duplicate";
+ return "is duplicate";
}
*cv = ngx_palloc(cf->pool, sizeof(ngx_stream_complex_value_t));
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.11.13.tar.gz/src/stream/ngx_stream_ssl_module.c
^
|
@@ -284,14 +284,19 @@
{
long rc;
X509 *cert;
+ ngx_int_t rv;
ngx_connection_t *c;
ngx_stream_ssl_conf_t *sslcf;
+ if (!s->ssl) {
+ return NGX_OK;
+ }
+
c = s->connection;
sslcf = ngx_stream_get_module_srv_conf(s, ngx_stream_ssl_module);
- if (s->ssl && c->ssl == NULL) {
+ if (c->ssl == NULL) {
c->log->action = "SSL handshaking";
if (sslcf->ssl.ctx == NULL) {
@@ -301,7 +306,11 @@
return NGX_ERROR;
}
- return ngx_stream_ssl_init_connection(&sslcf->ssl, c);
+ rv = ngx_stream_ssl_init_connection(&sslcf->ssl, c);
+
+ if (rv != NGX_OK) {
+ return rv;
+ }
}
if (sslcf->verify) {
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.11.13.tar.gz/src/stream/ngx_stream_variables.c
^
|
@@ -10,6 +10,8 @@
#include <ngx_stream.h>
#include <nginx.h>
+static ngx_stream_variable_t *ngx_stream_add_prefix_variable(ngx_conf_t *cf,
+ ngx_str_t *name, ngx_uint_t flags);
static ngx_int_t ngx_stream_variable_binary_remote_addr(
ngx_stream_session_t *s, ngx_stream_variable_value_t *v, uintptr_t data);
@@ -137,6 +139,10 @@
return NULL;
}
+ if (flags & NGX_STREAM_VAR_PREFIX) {
+ return ngx_stream_add_prefix_variable(cf, name, flags);
+ }
+
cmcf = ngx_stream_conf_get_module_main_conf(cf, ngx_stream_core_module);
key = cmcf->variables_keys->keys.elts;
@@ -155,6 +161,8 @@
return NULL;
}
+ v->flags &= flags | ~NGX_STREAM_VAR_WEAK;
+
return v;
}
@@ -193,6 +201,60 @@
}
+static ngx_stream_variable_t *
+ngx_stream_add_prefix_variable(ngx_conf_t *cf, ngx_str_t *name,
+ ngx_uint_t flags)
+{
+ ngx_uint_t i;
+ ngx_stream_variable_t *v;
+ ngx_stream_core_main_conf_t *cmcf;
+
+ cmcf = ngx_stream_conf_get_module_main_conf(cf, ngx_stream_core_module);
+
+ v = cmcf->prefix_variables.elts;
+ for (i = 0; i < cmcf->prefix_variables.nelts; i++) {
+ if (name->len != v[i].name.len
+ || ngx_strncasecmp(name->data, v[i].name.data, name->len) != 0)
+ {
+ continue;
+ }
+
+ v = &v[i];
+
+ if (!(v->flags & NGX_STREAM_VAR_CHANGEABLE)) {
+ ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
+ "the duplicate \"%V\" variable", name);
+ return NULL;
+ }
+
+ v->flags &= flags | ~NGX_STREAM_VAR_WEAK;
+
+ return v;
+ }
+
+ v = ngx_array_push(&cmcf->prefix_variables);
+ if (v == NULL) {
+ return NULL;
+ }
+
+ v->name.len = name->len;
+ v->name.data = ngx_pnalloc(cf->pool, name->len);
+ if (v->name.data == NULL) {
+ return NULL;
+ }
+
+ ngx_strlow(v->name.data, name->data, name->len);
+
+ v->set_handler = NULL;
+ v->get_handler = NULL;
+ v->data = 0;
+ v->flags = flags;
+ v->index = 0;
+
+ return v;
+}
+
+
ngx_int_t
ngx_stream_get_variable_index(ngx_conf_t *cf, ngx_str_t *name)
{
@@ -327,6 +389,8 @@
ngx_stream_get_variable(ngx_stream_session_t *s, ngx_str_t *name,
ngx_uint_t key)
{
+ size_t len;
+ ngx_uint_t i, n;
ngx_stream_variable_t *v;
ngx_stream_variable_value_t *vv;
ngx_stream_core_main_conf_t *cmcf;
@@ -365,6 +429,28 @@
return NULL;
}
+ len = 0;
+
+ v = cmcf->prefix_variables.elts;
+ n = cmcf->prefix_variables.nelts;
+
+ for (i = 0; i < cmcf->prefix_variables.nelts; i++) {
+ if (name->len >= v[i].name.len && name->len > len
+ && ngx_strncmp(name->data, v[i].name.data, v[i].name.len) == 0)
+ {
+ len = v[i].name.len;
+ n = i;
+ }
+ }
+
+ if (n != cmcf->prefix_variables.nelts) {
+ if (v[n].get_handler(s, vv, (uintptr_t) name) == NGX_OK) {
+ return vv;
+ }
+
+ return NULL;
+ }
+
vv->not_found = 1;
return vv;
@@ -1000,7 +1086,6 @@
ngx_int_t
ngx_stream_variables_add_core_vars(ngx_conf_t *cf)
{
- ngx_int_t rc;
ngx_stream_variable_t *cv, *v;
ngx_stream_core_main_conf_t *cmcf;
@@ -1021,27 +1106,20 @@
return NGX_ERROR;
}
+ if (ngx_array_init(&cmcf->prefix_variables, cf->pool, 8,
+ sizeof(ngx_stream_variable_t))
+ != NGX_OK)
+ {
+ return NGX_ERROR;
+ }
+
for (cv = ngx_stream_core_variables; cv->name.len; cv++) {
- v = ngx_palloc(cf->pool, sizeof(ngx_stream_variable_t));
+ v = ngx_stream_add_variable(cf, &cv->name, cv->flags);
if (v == NULL) {
return NGX_ERROR;
}
*v = *cv;
-
- rc = ngx_hash_add_key(cmcf->variables_keys, &v->name, v,
- NGX_HASH_READONLY_KEY);
-
- if (rc == NGX_OK) {
- continue;
- }
-
- if (rc == NGX_BUSY) {
- ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
- "conflicting variable name \"%V\"", &v->name);
- }
-
- return NGX_ERROR;
}
return NGX_OK;
@@ -1051,10 +1129,11 @@
ngx_int_t
ngx_stream_variables_init_vars(ngx_conf_t *cf)
{
+ size_t len;
ngx_uint_t i, n;
ngx_hash_key_t *key;
ngx_hash_init_t hash;
- ngx_stream_variable_t *v, *av;
+ ngx_stream_variable_t *v, *av, *pv;
ngx_stream_core_main_conf_t *cmcf;
/* set the handlers for the indexed stream variables */
@@ -1062,6 +1141,7 @@
cmcf = ngx_stream_conf_get_module_main_conf(cf, ngx_stream_core_module);
v = cmcf->variables.elts;
+ pv = cmcf->prefix_variables.elts;
key = cmcf->variables_keys->keys.elts;
for (i = 0; i < cmcf->variables.nelts; i++) {
@@ -1082,7 +1162,9 @@
av->index = i;
- if (av->get_handler == NULL) {
+ if (av->get_handler == NULL
+ || (av->flags & NGX_STREAM_VAR_WEAK))
+ {
break;
}
@@ -1090,10 +1172,32 @@
}
}
- ngx_log_error(NGX_LOG_EMERG, cf->log, 0,
- "unknown \"%V\" variable", &v[i].name);
+ len = 0;
+ av = NULL;
- return NGX_ERROR;
+ for (n = 0; n < cmcf->prefix_variables.nelts; n++) {
+ if (v[i].name.len >= pv[n].name.len && v[i].name.len > len
+ && ngx_strncmp(v[i].name.data, pv[n].name.data, pv[n].name.len)
+ == 0)
+ {
+ av = &pv[n];
+ len = pv[n].name.len;
+ }
+ }
+
+ if (av) {
+ v[i].get_handler = av->get_handler;
+ v[i].data = (uintptr_t) &v[i].name;
+ v[i].flags = av->flags;
+
+ goto next;
+ }
+
+ if (v[i].get_handler == NULL) {
+ ngx_log_error(NGX_LOG_EMERG, cf->log, 0,
+ "unknown \"%V\" variable", &v[i].name);
+ return NGX_ERROR;
+ }
next:
continue;
|
[-]
[+]
|
Changed |
_service:download_url:nginx-1.11.13.tar.gz/src/stream/ngx_stream_variables.h
^
|
@@ -30,6 +30,8 @@
#define NGX_STREAM_VAR_NOCACHEABLE 2
#define NGX_STREAM_VAR_INDEXED 4
#define NGX_STREAM_VAR_NOHASH 8
+#define NGX_STREAM_VAR_WEAK 16
+#define NGX_STREAM_VAR_PREFIX 32
struct ngx_stream_variable_s {
|
|
Deleted |
_service:download_url:nginx-1.11.9.tar.gz
^
|