Mercurial > hg > nginx
view auto/modules @ 7354:1812f1d79d84
Fixed socket leak with "return 444" in error_page (ticket #274).
Socket leak was observed in the following configuration:
error_page 400 = /close;
location = /close {
return 444;
}
The problem is that "return 444" triggers termination of the request,
and due to error_page termination thinks that it needs to use a posted
request to clear stack. But at the early request processing where 400
errors are generated there are no ngx_http_run_posted_requests() calls,
so the request is only terminated after an external event.
Variants of the problem include "error_page 497" instead (ticket #695)
and various other errors generated during early request processing
(405, 414, 421, 494, 495, 496, 501, 505).
The same problem can be also triggered with "return 499" and "return 408"
as both codes trigger ngx_http_terminate_request(), much like "return 444".
To fix this, the patch adds ngx_http_run_posted_requests() calls to
ngx_http_process_request_line() and ngx_http_process_request_headers()
functions, and to ngx_http_v2_run_request() and ngx_http_v2_push_stream()
functions in HTTP/2.
Since the ngx_http_process_request() function is now only called via
other functions which call ngx_http_run_posted_requests(), the call
there is no longer needed and was removed.
author | Maxim Dounin <mdounin@mdounin.ru> |
---|---|
date | Fri, 21 Sep 2018 15:59:30 +0300 |
parents | f2396ecf608b |
children | ee36940cfb0f |
line wrap: on
line source
# Copyright (C) Igor Sysoev # Copyright (C) Nginx, Inc. if [ $EVENT_SELECT = NO -a $EVENT_FOUND = NO ]; then EVENT_SELECT=YES fi if [ $EVENT_SELECT = YES ]; then have=NGX_HAVE_SELECT . auto/have CORE_SRCS="$CORE_SRCS $SELECT_SRCS" EVENT_MODULES="$EVENT_MODULES $SELECT_MODULE" fi if [ $EVENT_POLL = NO -a $EVENT_FOUND = NO ]; then EVENT_POLL=YES fi if [ $EVENT_POLL = YES ]; then have=NGX_HAVE_POLL . auto/have CORE_SRCS="$CORE_SRCS $POLL_SRCS" EVENT_MODULES="$EVENT_MODULES $POLL_MODULE" fi if [ $NGX_TEST_BUILD_DEVPOLL = YES ]; then have=NGX_HAVE_DEVPOLL . auto/have have=NGX_TEST_BUILD_DEVPOLL . auto/have EVENT_MODULES="$EVENT_MODULES $DEVPOLL_MODULE" CORE_SRCS="$CORE_SRCS $DEVPOLL_SRCS" fi if [ $NGX_TEST_BUILD_EVENTPORT = YES ]; then have=NGX_HAVE_EVENTPORT . auto/have have=NGX_TEST_BUILD_EVENTPORT . auto/have EVENT_MODULES="$EVENT_MODULES $EVENTPORT_MODULE" CORE_SRCS="$CORE_SRCS $EVENTPORT_SRCS" fi if [ $NGX_TEST_BUILD_EPOLL = YES ]; then have=NGX_HAVE_EPOLL . auto/have have=NGX_HAVE_EPOLLRDHUP . auto/have have=NGX_HAVE_EPOLLEXCLUSIVE . auto/have have=NGX_HAVE_EVENTFD . auto/have have=NGX_TEST_BUILD_EPOLL . auto/have EVENT_MODULES="$EVENT_MODULES $EPOLL_MODULE" CORE_SRCS="$CORE_SRCS $EPOLL_SRCS" fi if [ $NGX_TEST_BUILD_SOLARIS_SENDFILEV = YES ]; then have=NGX_TEST_BUILD_SOLARIS_SENDFILEV . auto/have CORE_SRCS="$CORE_SRCS $SOLARIS_SENDFILEV_SRCS" 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 . auto/module fi if [ $HTTP_CACHE = YES ]; then have=NGX_HTTP_CACHE . auto/have HTTP_SRCS="$HTTP_SRCS $HTTP_FILE_CACHE_SRCS" fi if [ $HTTP_SSI = YES ]; then HTTP_POSTPONE=YES fi if [ $HTTP_SLICE = YES ]; then HTTP_POSTPONE=YES fi if [ $HTTP_ADDITION = 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 :; 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 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 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 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 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 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 . 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 . auto/module fi if [ $HTTP_SSI = YES ]; then have=NGX_HTTP_SSI . auto/have 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 . 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 . 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 . 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 . 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 . 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 . auto/module fi 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 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 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 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 . 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 . 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 . 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 . auto/module fi ngx_module_type=HTTP if [ $HTTP_V2 = YES ]; then have=NGX_HTTP_V2 . auto/have have=NGX_HTTP_HEADERS . 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_encode.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 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 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 . auto/module fi 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 . 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 . 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 . 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 . auto/module fi if [ $HTTP_MIRROR = YES ]; then ngx_module_name=ngx_http_mirror_module ngx_module_incs= ngx_module_deps= ngx_module_srcs=src/http/modules/ngx_http_mirror_module.c ngx_module_libs= ngx_module_link=$HTTP_MIRROR . auto/module fi if :; then ngx_module_name=ngx_http_try_files_module ngx_module_incs= ngx_module_deps= ngx_module_srcs=src/http/modules/ngx_http_try_files_module.c ngx_module_libs= ngx_module_link=YES . auto/module fi if [ $HTTP_AUTH_REQUEST = YES ]; then ngx_module_name=ngx_http_auth_request_module ngx_module_incs= 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 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 . 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 . 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 . 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 . auto/module fi 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 . 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 . auto/module fi 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 . auto/module fi 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 . 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 . 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 . 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 . auto/module fi 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 . auto/module fi 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 . auto/module fi 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 . 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 . 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 . 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 . auto/module fi if [ $HTTP_GRPC = YES -a $HTTP_V2 = YES ]; then ngx_module_name=ngx_http_grpc_module ngx_module_incs= ngx_module_deps= ngx_module_srcs=src/http/modules/ngx_http_grpc_module.c ngx_module_libs= ngx_module_link=$HTTP_GRPC . 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 . 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 . 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 . 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 . 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 . auto/module fi 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 . 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 . 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 . 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 . 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 . 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 . auto/module fi if [ $HTTP_UPSTREAM_RANDOM = YES ]; then ngx_module_name=ngx_http_upstream_random_module ngx_module_incs= ngx_module_deps= ngx_module_srcs=src/http/modules/ngx_http_upstream_random_module.c ngx_module_libs= ngx_module_link=$HTTP_UPSTREAM_RANDOM . 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 . auto/module fi 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 . auto/module fi 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 . auto/module fi fi if [ $MAIL != NO ]; then MAIL_MODULES= MAIL_DEPS= MAIL_INCS= ngx_module_type=MAIL ngx_module_libs= ngx_module_link=YES ngx_module_order= ngx_module_name="ngx_mail_module ngx_mail_core_module" ngx_module_incs="src/mail" ngx_module_deps="src/mail/ngx_mail.h" ngx_module_srcs="src/mail/ngx_mail.c \ src/mail/ngx_mail_core_module.c \ src/mail/ngx_mail_handler.c \ src/mail/ngx_mail_parse.c" . auto/module ngx_module_incs= if [ $MAIL_SSL = YES ]; then USE_OPENSSL=YES have=NGX_MAIL_SSL . auto/have ngx_module_name=ngx_mail_ssl_module ngx_module_deps=src/mail/ngx_mail_ssl_module.h ngx_module_srcs=src/mail/ngx_mail_ssl_module.c . auto/module fi if [ $MAIL_POP3 = YES ]; then ngx_module_name=ngx_mail_pop3_module ngx_module_deps=src/mail/ngx_mail_pop3_module.h ngx_module_srcs="src/mail/ngx_mail_pop3_module.c \ src/mail/ngx_mail_pop3_handler.c" . auto/module fi if [ $MAIL_IMAP = YES ]; then ngx_module_name=ngx_mail_imap_module ngx_module_deps=src/mail/ngx_mail_imap_module.h ngx_module_srcs="src/mail/ngx_mail_imap_module.c \ src/mail/ngx_mail_imap_handler.c" . auto/module fi if [ $MAIL_SMTP = YES ]; then ngx_module_name=ngx_mail_smtp_module ngx_module_deps=src/mail/ngx_mail_smtp_module.h ngx_module_srcs="src/mail/ngx_mail_smtp_module.c \ src/mail/ngx_mail_smtp_handler.c" . auto/module fi ngx_module_name=ngx_mail_auth_http_module ngx_module_deps= ngx_module_srcs=src/mail/ngx_mail_auth_http_module.c . auto/module ngx_module_name=ngx_mail_proxy_module ngx_module_deps= ngx_module_srcs=src/mail/ngx_mail_proxy_module.c . auto/module fi if [ $STREAM != NO ]; then STREAM_MODULES= STREAM_DEPS= STREAM_INCS= ngx_module_type=STREAM ngx_module_libs= ngx_module_link=YES ngx_module_order= ngx_module_name="ngx_stream_module \ ngx_stream_core_module \ ngx_stream_log_module \ ngx_stream_proxy_module \ ngx_stream_upstream_module \ ngx_stream_write_filter_module" ngx_module_incs="src/stream" ngx_module_deps="src/stream/ngx_stream.h \ src/stream/ngx_stream_variables.h \ src/stream/ngx_stream_script.h \ src/stream/ngx_stream_upstream.h \ src/stream/ngx_stream_upstream_round_robin.h" ngx_module_srcs="src/stream/ngx_stream.c \ src/stream/ngx_stream_variables.c \ src/stream/ngx_stream_script.c \ src/stream/ngx_stream_handler.c \ src/stream/ngx_stream_core_module.c \ src/stream/ngx_stream_log_module.c \ src/stream/ngx_stream_proxy_module.c \ src/stream/ngx_stream_upstream.c \ src/stream/ngx_stream_upstream_round_robin.c \ src/stream/ngx_stream_write_filter_module.c" . auto/module ngx_module_incs= if [ $STREAM_SSL = YES ]; then USE_OPENSSL=YES have=NGX_STREAM_SSL . auto/have ngx_module_name=ngx_stream_ssl_module ngx_module_deps=src/stream/ngx_stream_ssl_module.h ngx_module_srcs=src/stream/ngx_stream_ssl_module.c ngx_module_libs= ngx_module_link=$STREAM_SSL . auto/module fi if [ $STREAM_REALIP = YES ]; then ngx_module_name=ngx_stream_realip_module ngx_module_deps= ngx_module_srcs=src/stream/ngx_stream_realip_module.c ngx_module_libs= ngx_module_link=$STREAM_REALIP . auto/module fi if [ $STREAM_LIMIT_CONN = YES ]; then ngx_module_name=ngx_stream_limit_conn_module ngx_module_deps= ngx_module_srcs=src/stream/ngx_stream_limit_conn_module.c ngx_module_libs= ngx_module_link=$STREAM_LIMIT_CONN . auto/module fi if [ $STREAM_ACCESS = YES ]; then ngx_module_name=ngx_stream_access_module ngx_module_deps= ngx_module_srcs=src/stream/ngx_stream_access_module.c ngx_module_libs= ngx_module_link=$STREAM_ACCESS . auto/module fi if [ $STREAM_GEO = YES ]; then ngx_module_name=ngx_stream_geo_module ngx_module_deps= ngx_module_srcs=src/stream/ngx_stream_geo_module.c ngx_module_libs= ngx_module_link=$STREAM_GEO . auto/module fi if [ $STREAM_GEOIP != NO ]; then ngx_module_name=ngx_stream_geoip_module ngx_module_deps= ngx_module_srcs=src/stream/ngx_stream_geoip_module.c ngx_module_libs=GEOIP ngx_module_link=$STREAM_GEOIP . auto/module fi if [ $STREAM_MAP = YES ]; then ngx_module_name=ngx_stream_map_module ngx_module_deps= ngx_module_srcs=src/stream/ngx_stream_map_module.c ngx_module_libs= ngx_module_link=$STREAM_MAP . auto/module fi if [ $STREAM_SPLIT_CLIENTS = YES ]; then ngx_module_name=ngx_stream_split_clients_module ngx_module_deps= ngx_module_srcs=src/stream/ngx_stream_split_clients_module.c ngx_module_libs= ngx_module_link=$STREAM_SPLIT_CLIENTS . auto/module fi if [ $STREAM_RETURN = YES ]; then ngx_module_name=ngx_stream_return_module ngx_module_deps= ngx_module_srcs=src/stream/ngx_stream_return_module.c ngx_module_libs= ngx_module_link=$STREAM_RETURN . auto/module fi if [ $STREAM_UPSTREAM_HASH = YES ]; then ngx_module_name=ngx_stream_upstream_hash_module ngx_module_deps= ngx_module_srcs=src/stream/ngx_stream_upstream_hash_module.c ngx_module_libs= ngx_module_link=$STREAM_UPSTREAM_HASH . auto/module fi if [ $STREAM_UPSTREAM_LEAST_CONN = YES ]; then ngx_module_name=ngx_stream_upstream_least_conn_module ngx_module_deps= ngx_module_srcs=src/stream/ngx_stream_upstream_least_conn_module.c ngx_module_libs= ngx_module_link=$STREAM_UPSTREAM_LEAST_CONN . auto/module fi if [ $STREAM_UPSTREAM_RANDOM = YES ]; then ngx_module_name=ngx_stream_upstream_random_module ngx_module_deps= ngx_module_srcs=src/stream/ngx_stream_upstream_random_module.c ngx_module_libs= ngx_module_link=$STREAM_UPSTREAM_RANDOM . auto/module fi if [ $STREAM_UPSTREAM_ZONE = YES ]; then have=NGX_STREAM_UPSTREAM_ZONE . auto/have ngx_module_name=ngx_stream_upstream_zone_module ngx_module_deps= ngx_module_srcs=src/stream/ngx_stream_upstream_zone_module.c ngx_module_libs= ngx_module_link=$STREAM_UPSTREAM_ZONE . auto/module fi if [ $STREAM_SSL_PREREAD = YES ]; then ngx_module_name=ngx_stream_ssl_preread_module ngx_module_deps= ngx_module_srcs=src/stream/ngx_stream_ssl_preread_module.c ngx_module_libs= ngx_module_link=$STREAM_SSL_PREREAD . auto/module fi fi #if [ -r $NGX_OBJS/auto ]; then # . $NGX_OBJS/auto #fi if test -n "$NGX_ADDONS"; then echo configuring additional modules for ngx_addon_dir in $NGX_ADDONS do echo "adding module in $ngx_addon_dir" ngx_module_type= ngx_module_name= ngx_module_incs= ngx_module_deps= ngx_module_srcs= ngx_module_libs= ngx_module_order= ngx_module_link=ADDON if test -f $ngx_addon_dir/config; then . $ngx_addon_dir/config echo " + $ngx_addon_name was configured" else echo "$0: error: no $ngx_addon_dir/config was found" exit 1 fi done fi if test -n "$DYNAMIC_ADDONS"; then echo configuring additional dynamic modules for ngx_addon_dir in $DYNAMIC_ADDONS do echo "adding module in $ngx_addon_dir" ngx_module_type= ngx_module_name= ngx_module_incs= ngx_module_deps= ngx_module_srcs= ngx_module_libs= ngx_module_order= ngx_module_link=DYNAMIC if test -f $ngx_addon_dir/config; then . $ngx_addon_dir/config echo " + $ngx_addon_name was configured" else echo "$0: error: no $ngx_addon_dir/config was found" exit 1 fi done fi if [ $USE_OPENSSL = YES ]; then ngx_module_type=CORE ngx_module_name=ngx_openssl_module ngx_module_incs= ngx_module_deps=src/event/ngx_event_openssl.h ngx_module_srcs="src/event/ngx_event_openssl.c src/event/ngx_event_openssl_stapling.c" ngx_module_libs= ngx_module_link=YES ngx_module_order= . auto/module fi if [ $USE_PCRE = YES ]; then ngx_module_type=CORE ngx_module_name=ngx_regex_module ngx_module_incs= ngx_module_deps=src/core/ngx_regex.h ngx_module_srcs=src/core/ngx_regex.c ngx_module_libs= ngx_module_link=YES ngx_module_order= . auto/module fi modules="$CORE_MODULES $EVENT_MODULES" # thread pool module should be initialized after events if [ $USE_THREADS = YES ]; then modules="$modules $THREAD_POOL_MODULE" fi if [ $HTTP = YES ]; then modules="$modules $HTTP_MODULES $HTTP_FILTER_MODULES \ $HTTP_AUX_FILTER_MODULES $HTTP_INIT_FILTER_MODULES" NGX_ADDON_DEPS="$NGX_ADDON_DEPS \$(HTTP_DEPS)" fi if [ $MAIL != NO ]; then if [ $MAIL = YES ]; then modules="$modules $MAIL_MODULES" elif [ $MAIL = DYNAMIC ]; then ngx_module_name=$MAIL_MODULES ngx_module_incs= ngx_module_deps= ngx_module_srcs=$MAIL_SRCS ngx_module_libs= ngx_module_link=DYNAMIC . auto/module fi NGX_ADDON_DEPS="$NGX_ADDON_DEPS \$(MAIL_DEPS)" fi if [ $STREAM != NO ]; then if [ $STREAM = YES ]; then modules="$modules $STREAM_MODULES" elif [ $STREAM = DYNAMIC ]; then ngx_module_name=$STREAM_MODULES ngx_module_incs= ngx_module_deps= ngx_module_srcs=$STREAM_SRCS ngx_module_libs= ngx_module_link=DYNAMIC . auto/module fi NGX_ADDON_DEPS="$NGX_ADDON_DEPS \$(STREAM_DEPS)" fi ngx_module_type=MISC MISC_MODULES= if [ $NGX_GOOGLE_PERFTOOLS = YES ]; then ngx_module_name=ngx_google_perftools_module ngx_module_incs= ngx_module_deps= ngx_module_srcs=src/misc/ngx_google_perftools_module.c ngx_module_libs= ngx_module_link=$NGX_GOOGLE_PERFTOOLS . auto/module fi if [ $NGX_CPP_TEST = YES ]; then ngx_module_name= ngx_module_incs= ngx_module_deps= ngx_module_srcs=src/misc/ngx_cpp_test_module.cpp ngx_module_libs=-lstdc++ ngx_module_link=$NGX_CPP_TEST . auto/module fi modules="$modules $MISC_MODULES" if [ $NGX_COMPAT = YES ]; then have=NGX_COMPAT . auto/have have=NGX_HTTP_GZIP . auto/have have=NGX_HTTP_DAV . auto/have have=NGX_HTTP_REALIP . auto/have have=NGX_HTTP_X_FORWARDED_FOR . auto/have have=NGX_HTTP_HEADERS . auto/have have=NGX_HTTP_UPSTREAM_ZONE . auto/have have=NGX_STREAM_UPSTREAM_ZONE . auto/have fi cat << END > $NGX_MODULES_C #include <ngx_config.h> #include <ngx_core.h> $NGX_PRAGMA END for mod in $modules do echo "extern ngx_module_t $mod;" >> $NGX_MODULES_C done echo >> $NGX_MODULES_C echo 'ngx_module_t *ngx_modules[] = {' >> $NGX_MODULES_C for mod in $modules do echo " &$mod," >> $NGX_MODULES_C done cat << END >> $NGX_MODULES_C NULL }; END echo 'char *ngx_module_names[] = {' >> $NGX_MODULES_C for mod in $modules do echo " \"$mod\"," >> $NGX_MODULES_C done cat << END >> $NGX_MODULES_C NULL }; END