Mercurial > hg > nginx
view auto/modules @ 7011:5e05118678af
Fixed background requests with asynchronous operations.
If the main request was finalized while a background request performed an
asynchronous operation, the main request ended up in ngx_http_writer() and was
not finalized until a network event or a timeout. For example, cache
background update with aio enabled made nginx unable to process further client
requests or close the connection, keeping it open until client closes it.
Now regular finalization of the main request is not suspended because of an
asynchronous operation in another request.
If a background request was terminated while an asynchronous operation was in
progress, background request's write event handler was changed to
ngx_http_request_finalizer() and never called again.
Now, whenever a request is terminated while an asynchronous operation is in
progress, connection error flag is set to make further finalizations of any
request with this connection lead to termination.
These issues appeared in 1aeaae6e9446 (not yet released).
author | Roman Arutyunyan <arut@nginx.com> |
---|---|
date | Mon, 29 May 2017 23:33:38 +0300 |
parents | 4d874b4d82ed |
children | cce6936ed2f4 |
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 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 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_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_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_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_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