Mercurial > hg > nginx-quic
view auto/modules @ 8039:09fb2135a589
SSL: fixed shutdown handling.
Previously, bidirectional shutdown never worked, due to two issues
in the code:
1. The code only tested SSL_ERROR_WANT_READ and SSL_ERROR_WANT_WRITE
when there was an error in the error queue, which cannot happen.
The bug was introduced in an attempt to fix unexpected error logging
as reported with OpenSSL 0.9.8g
(http://mailman.nginx.org/pipermail/nginx/2008-January/003084.html).
2. The code never called SSL_shutdown() for the second time to wait for
the peer's close_notify alert.
This change fixes both issues.
Note that after this change bidirectional shutdown is expected to work for
the first time, so c->ssl->no_wait_shutdown now makes a difference. This
is not a problem for HTTP code which always uses c->ssl->no_wait_shutdown,
but might be a problem for stream and mail code, as well as 3rd party
modules.
To minimize the effect of the change, the timeout, which was used to be 30
seconds and not configurable, though never actually used, is now set to
3 seconds. It is also expanded to apply to both SSL_ERROR_WANT_READ and
SSL_ERROR_WANT_WRITE, so timeout is properly set if writing to the socket
buffer is not possible.
author | Maxim Dounin <mdounin@mdounin.ru> |
---|---|
date | Mon, 10 Aug 2020 18:52:09 +0300 |
parents | ee36940cfb0f |
children | 5d91389e0fd3 45e9281c6c5b |
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 # 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 :; 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=YES . 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