aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKonstantin Ananyev <konstantin.ananyev@intel.com>2017-10-31 12:40:17 +0000
committerKonstantin Ananyev <konstantin.ananyev@intel.com>2017-10-31 14:19:39 +0000
commite18a033b921d0d79fa8278f853548e6125b93e0c (patch)
treea6a55edf6ddceef824561818c9836914c326340d
parent7e18fa1bf263822c46d7431a911b41d6377d5f69 (diff)
Integrate TLDK with NGINX
Created a clone of nginx (from https://github.com/nginx/nginx) to demonstrate and benchmark TLDK library integrated with real world application. A new nginx module is created and and BSD socket-like API is implemented on top of native TLDK API. Note, that right now only minimalistic subset of socket-like API is provided: - accept - close - readv - recv - writev so only limited nginx functionality is available for a moment. Change-Id: Ie1efe9349a0538da4348a48fb8306cbf636b5a92 Signed-off-by: Mohammad Abdul Awal <mohammad.abdul.awal@intel.com> Signed-off-by: Reshma Pattan <reshma.pattan@intel.com> Signed-off-by: Remy Horton <remy.horton@intel.com> Signed-off-by: Konstantin Ananyev <konstantin.ananyev@intel.com>
-rw-r--r--README5
-rw-r--r--app/nginx/.hgtags414
-rw-r--r--app/nginx/LICENSE26
-rw-r--r--app/nginx/README.TLDK148
-rw-r--r--app/nginx/auto/cc/acc14
-rw-r--r--app/nginx/auto/cc/bcc72
-rw-r--r--app/nginx/auto/cc/ccc46
-rw-r--r--app/nginx/auto/cc/clang98
-rw-r--r--app/nginx/auto/cc/conf250
-rw-r--r--app/nginx/auto/cc/gcc179
-rw-r--r--app/nginx/auto/cc/icc117
-rw-r--r--app/nginx/auto/cc/msvc157
-rw-r--r--app/nginx/auto/cc/name66
-rw-r--r--app/nginx/auto/cc/owc104
-rw-r--r--app/nginx/auto/cc/sunc160
-rwxr-xr-xapp/nginx/auto/configure116
-rw-r--r--app/nginx/auto/define12
-rw-r--r--app/nginx/auto/endianness50
-rw-r--r--app/nginx/auto/feature123
-rw-r--r--app/nginx/auto/have12
-rw-r--r--app/nginx/auto/have_headers12
-rw-r--r--app/nginx/auto/headers13
-rw-r--r--app/nginx/auto/include58
-rw-r--r--app/nginx/auto/init51
-rw-r--r--app/nginx/auto/install218
-rw-r--r--app/nginx/auto/lib/conf54
-rw-r--r--app/nginx/auto/lib/geoip/conf97
-rw-r--r--app/nginx/auto/lib/google-perftools/conf61
-rw-r--r--app/nginx/auto/lib/libatomic/conf43
-rw-r--r--app/nginx/auto/lib/libatomic/make16
-rw-r--r--app/nginx/auto/lib/libgd/conf93
-rw-r--r--app/nginx/auto/lib/libxslt/conf165
-rw-r--r--app/nginx/auto/lib/make24
-rw-r--r--app/nginx/auto/lib/openssl/conf135
-rw-r--r--app/nginx/auto/lib/openssl/make62
-rw-r--r--app/nginx/auto/lib/openssl/makefile.bcc18
-rw-r--r--app/nginx/auto/lib/openssl/makefile.msvc21
-rw-r--r--app/nginx/auto/lib/pcre/conf203
-rw-r--r--app/nginx/auto/lib/pcre/make64
-rw-r--r--app/nginx/auto/lib/pcre/makefile.bcc27
-rw-r--r--app/nginx/auto/lib/pcre/makefile.msvc23
-rw-r--r--app/nginx/auto/lib/pcre/makefile.owc25
-rw-r--r--app/nginx/auto/lib/perl/conf83
-rw-r--r--app/nginx/auto/lib/perl/make46
-rw-r--r--app/nginx/auto/lib/zlib/conf79
-rw-r--r--app/nginx/auto/lib/zlib/make135
-rw-r--r--app/nginx/auto/lib/zlib/makefile.bcc17
-rw-r--r--app/nginx/auto/lib/zlib/makefile.msvc17
-rw-r--r--app/nginx/auto/lib/zlib/makefile.owc14
-rw-r--r--app/nginx/auto/make673
-rw-r--r--app/nginx/auto/module138
-rw-r--r--app/nginx/auto/modules1399
-rw-r--r--app/nginx/auto/nohave12
-rw-r--r--app/nginx/auto/options616
-rw-r--r--app/nginx/auto/os/conf116
-rw-r--r--app/nginx/auto/os/darwin118
-rw-r--r--app/nginx/auto/os/freebsd107
-rw-r--r--app/nginx/auto/os/linux190
-rw-r--r--app/nginx/auto/os/solaris61
-rw-r--r--app/nginx/auto/os/win3242
-rw-r--r--app/nginx/auto/sources255
-rw-r--r--app/nginx/auto/stubs8
-rw-r--r--app/nginx/auto/summary82
-rw-r--r--app/nginx/auto/threads20
-rw-r--r--app/nginx/auto/types/sizeof76
-rw-r--r--app/nginx/auto/types/typedef82
-rw-r--r--app/nginx/auto/types/uintptr_t50
-rw-r--r--app/nginx/auto/types/value12
-rw-r--r--app/nginx/auto/unix964
-rw-r--r--app/nginx/conf/fastcgi.conf26
-rw-r--r--app/nginx/conf/fastcgi_params25
-rw-r--r--app/nginx/conf/koi-utf109
-rw-r--r--app/nginx/conf/koi-win103
-rw-r--r--app/nginx/conf/mime.types89
-rw-r--r--app/nginx/conf/nginx-tldk.conf83
-rw-r--r--app/nginx/conf/nginx.conf117
-rw-r--r--app/nginx/conf/scgi_params17
-rw-r--r--app/nginx/conf/uwsgi_params17
-rw-r--r--app/nginx/conf/win-utf126
-rw-r--r--app/nginx/contrib/README21
-rw-r--r--app/nginx/contrib/geo2nginx.pl58
-rw-r--r--app/nginx/contrib/unicode2nginx/koi-utf131
-rwxr-xr-xapp/nginx/contrib/unicode2nginx/unicode-to-nginx.pl48
-rw-r--r--app/nginx/contrib/unicode2nginx/win-utf130
-rw-r--r--app/nginx/contrib/vim/ftdetect/nginx.vim4
-rw-r--r--app/nginx/contrib/vim/ftplugin/nginx.vim1
-rw-r--r--app/nginx/contrib/vim/indent/nginx.vim11
-rw-r--r--app/nginx/contrib/vim/syntax/nginx.vim2144
-rw-r--r--app/nginx/docs/GNUmakefile41
-rw-r--r--app/nginx/docs/dtd/change_log_conf.dtd22
-rw-r--r--app/nginx/docs/dtd/changes.dtd22
-rw-r--r--app/nginx/docs/html/50x.html21
-rw-r--r--app/nginx/docs/html/index.html25
-rw-r--r--app/nginx/docs/man/nginx.8206
-rw-r--r--app/nginx/docs/text/LICENSE26
-rw-r--r--app/nginx/docs/text/README3
-rw-r--r--app/nginx/docs/xml/change_log_conf.xml47
-rw-r--r--app/nginx/docs/xml/nginx/changes.xml25676
-rw-r--r--app/nginx/docs/xsls/changes.xsls134
-rw-r--r--app/nginx/docs/xslt/changes.xslt128
-rw-r--r--app/nginx/misc/GNUmakefile155
-rw-r--r--app/nginx/misc/README13
-rw-r--r--app/nginx/src/core/nginx.c1583
-rw-r--r--app/nginx/src/core/nginx.h26
-rw-r--r--app/nginx/src/core/ngx_array.c141
-rw-r--r--app/nginx/src/core/ngx_array.h53
-rw-r--r--app/nginx/src/core/ngx_buf.c313
-rw-r--r--app/nginx/src/core/ngx_buf.h170
-rw-r--r--app/nginx/src/core/ngx_conf_file.c1479
-rw-r--r--app/nginx/src/core/ngx_conf_file.h295
-rw-r--r--app/nginx/src/core/ngx_config.h145
-rw-r--r--app/nginx/src/core/ngx_connection.c1404
-rw-r--r--app/nginx/src/core/ngx_connection.h224
-rw-r--r--app/nginx/src/core/ngx_core.h111
-rw-r--r--app/nginx/src/core/ngx_cpuinfo.c139
-rw-r--r--app/nginx/src/core/ngx_crc.h39
-rw-r--r--app/nginx/src/core/ngx_crc32.c129
-rw-r--r--app/nginx/src/core/ngx_crc32.h79
-rw-r--r--app/nginx/src/core/ngx_crypt.c270
-rw-r--r--app/nginx/src/core/ngx_crypt.h20
-rw-r--r--app/nginx/src/core/ngx_cycle.c1384
-rw-r--r--app/nginx/src/core/ngx_cycle.h144
-rw-r--r--app/nginx/src/core/ngx_file.c1127
-rw-r--r--app/nginx/src/core/ngx_file.h164
-rw-r--r--app/nginx/src/core/ngx_hash.c988
-rw-r--r--app/nginx/src/core/ngx_hash.h122
-rw-r--r--app/nginx/src/core/ngx_inet.c1493
-rw-r--r--app/nginx/src/core/ngx_inet.h129
-rw-r--r--app/nginx/src/core/ngx_list.c63
-rw-r--r--app/nginx/src/core/ngx_list.h83
-rw-r--r--app/nginx/src/core/ngx_log.c755
-rw-r--r--app/nginx/src/core/ngx_log.h268
-rw-r--r--app/nginx/src/core/ngx_md5.c283
-rw-r--r--app/nginx/src/core/ngx_md5.h28
-rw-r--r--app/nginx/src/core/ngx_module.c360
-rw-r--r--app/nginx/src/core/ngx_module.h283
-rw-r--r--app/nginx/src/core/ngx_murmurhash.c50
-rw-r--r--app/nginx/src/core/ngx_murmurhash.h19
-rw-r--r--app/nginx/src/core/ngx_open_file_cache.c1253
-rw-r--r--app/nginx/src/core/ngx_open_file_cache.h129
-rw-r--r--app/nginx/src/core/ngx_output_chain.c767
-rw-r--r--app/nginx/src/core/ngx_palloc.c430
-rw-r--r--app/nginx/src/core/ngx_palloc.h95
-rw-r--r--app/nginx/src/core/ngx_parse.c283
-rw-r--r--app/nginx/src/core/ngx_parse.h21
-rw-r--r--app/nginx/src/core/ngx_parse_time.c276
-rw-r--r--app/nginx/src/core/ngx_parse_time.h22
-rw-r--r--app/nginx/src/core/ngx_proxy_protocol.c168
-rw-r--r--app/nginx/src/core/ngx_proxy_protocol.h25
-rw-r--r--app/nginx/src/core/ngx_queue.c80
-rw-r--r--app/nginx/src/core/ngx_queue.h112
-rw-r--r--app/nginx/src/core/ngx_radix_tree.c488
-rw-r--r--app/nginx/src/core/ngx_radix_tree.h55
-rw-r--r--app/nginx/src/core/ngx_rbtree.c409
-rw-r--r--app/nginx/src/core/ngx_rbtree.h84
-rw-r--r--app/nginx/src/core/ngx_regex.c435
-rw-r--r--app/nginx/src/core/ngx_regex.h60
-rw-r--r--app/nginx/src/core/ngx_resolver.c4662
-rw-r--r--app/nginx/src/core/ngx_resolver.h238
-rw-r--r--app/nginx/src/core/ngx_rwlock.c120
-rw-r--r--app/nginx/src/core/ngx_rwlock.h21
-rw-r--r--app/nginx/src/core/ngx_sha1.c294
-rw-r--r--app/nginx/src/core/ngx_sha1.h28
-rw-r--r--app/nginx/src/core/ngx_shmtx.c310
-rw-r--r--app/nginx/src/core/ngx_shmtx.h49
-rw-r--r--app/nginx/src/core/ngx_slab.c806
-rw-r--r--app/nginx/src/core/ngx_slab.h71
-rw-r--r--app/nginx/src/core/ngx_spinlock.c53
-rw-r--r--app/nginx/src/core/ngx_string.c1976
-rw-r--r--app/nginx/src/core/ngx_string.h234
-rw-r--r--app/nginx/src/core/ngx_syslog.c382
-rw-r--r--app/nginx/src/core/ngx_syslog.h31
-rw-r--r--app/nginx/src/core/ngx_thread_pool.c641
-rw-r--r--app/nginx/src/core/ngx_thread_pool.h36
-rw-r--r--app/nginx/src/core/ngx_times.c428
-rw-r--r--app/nginx/src/core/ngx_times.h52
-rw-r--r--app/nginx/src/event/modules/ngx_devpoll_module.c560
-rw-r--r--app/nginx/src/event/modules/ngx_epoll_module.c1052
-rw-r--r--app/nginx/src/event/modules/ngx_eventport_module.c649
-rw-r--r--app/nginx/src/event/modules/ngx_iocp_module.c380
-rw-r--r--app/nginx/src/event/modules/ngx_iocp_module.h22
-rw-r--r--app/nginx/src/event/modules/ngx_kqueue_module.c722
-rw-r--r--app/nginx/src/event/modules/ngx_poll_module.c415
-rw-r--r--app/nginx/src/event/modules/ngx_select_module.c423
-rw-r--r--app/nginx/src/event/modules/ngx_win32_select_module.c398
-rw-r--r--app/nginx/src/event/ngx_event.c1290
-rw-r--r--app/nginx/src/event/ngx_event.h541
-rw-r--r--app/nginx/src/event/ngx_event_accept.c832
-rw-r--r--app/nginx/src/event/ngx_event_acceptex.c227
-rw-r--r--app/nginx/src/event/ngx_event_connect.c410
-rw-r--r--app/nginx/src/event/ngx_event_connect.h78
-rw-r--r--app/nginx/src/event/ngx_event_connectex.c206
-rw-r--r--app/nginx/src/event/ngx_event_openssl.c4201
-rw-r--r--app/nginx/src/event/ngx_event_openssl.h254
-rw-r--r--app/nginx/src/event/ngx_event_openssl_stapling.c1892
-rw-r--r--app/nginx/src/event/ngx_event_pipe.c1110
-rw-r--r--app/nginx/src/event/ngx_event_pipe.h107
-rw-r--r--app/nginx/src/event/ngx_event_posted.c35
-rw-r--r--app/nginx/src/event/ngx_event_posted.h48
-rw-r--r--app/nginx/src/event/ngx_event_timer.c126
-rw-r--r--app/nginx/src/event/ngx_event_timer.h90
-rw-r--r--app/nginx/src/http/modules/ngx_http_access_module.c469
-rw-r--r--app/nginx/src/http/modules/ngx_http_addition_filter_module.c252
-rw-r--r--app/nginx/src/http/modules/ngx_http_auth_basic_module.c467
-rw-r--r--app/nginx/src/http/modules/ngx_http_auth_request_module.c444
-rw-r--r--app/nginx/src/http/modules/ngx_http_autoindex_module.c1050
-rw-r--r--app/nginx/src/http/modules/ngx_http_browser_module.c715
-rw-r--r--app/nginx/src/http/modules/ngx_http_charset_filter_module.c1685
-rw-r--r--app/nginx/src/http/modules/ngx_http_chunked_filter_module.c243
-rw-r--r--app/nginx/src/http/modules/ngx_http_dav_module.c1159
-rw-r--r--app/nginx/src/http/modules/ngx_http_degradation_module.c243
-rw-r--r--app/nginx/src/http/modules/ngx_http_empty_gif_module.c140
-rw-r--r--app/nginx/src/http/modules/ngx_http_fastcgi_module.c3788
-rw-r--r--app/nginx/src/http/modules/ngx_http_flv_module.c266
-rw-r--r--app/nginx/src/http/modules/ngx_http_geo_module.c1658
-rw-r--r--app/nginx/src/http/modules/ngx_http_geoip_module.c925
-rw-r--r--app/nginx/src/http/modules/ngx_http_gunzip_filter_module.c687
-rw-r--r--app/nginx/src/http/modules/ngx_http_gzip_filter_module.c1245
-rw-r--r--app/nginx/src/http/modules/ngx_http_gzip_static_module.c331
-rw-r--r--app/nginx/src/http/modules/ngx_http_headers_filter_module.c741
-rw-r--r--app/nginx/src/http/modules/ngx_http_image_filter_module.c1675
-rw-r--r--app/nginx/src/http/modules/ngx_http_index_module.c540
-rw-r--r--app/nginx/src/http/modules/ngx_http_limit_conn_module.c670
-rw-r--r--app/nginx/src/http/modules/ngx_http_limit_req_module.c960
-rw-r--r--app/nginx/src/http/modules/ngx_http_log_module.c1857
-rw-r--r--app/nginx/src/http/modules/ngx_http_map_module.c589
-rw-r--r--app/nginx/src/http/modules/ngx_http_memcached_module.c723
-rw-r--r--app/nginx/src/http/modules/ngx_http_mp4_module.c3548
-rw-r--r--app/nginx/src/http/modules/ngx_http_not_modified_filter_module.c266
-rw-r--r--app/nginx/src/http/modules/ngx_http_proxy_module.c4424
-rw-r--r--app/nginx/src/http/modules/ngx_http_random_index_module.c317
-rw-r--r--app/nginx/src/http/modules/ngx_http_range_filter_module.c920
-rw-r--r--app/nginx/src/http/modules/ngx_http_realip_module.c570
-rw-r--r--app/nginx/src/http/modules/ngx_http_referer_module.c671
-rw-r--r--app/nginx/src/http/modules/ngx_http_rewrite_module.c1022
-rw-r--r--app/nginx/src/http/modules/ngx_http_scgi_module.c2005
-rw-r--r--app/nginx/src/http/modules/ngx_http_secure_link_module.c368
-rw-r--r--app/nginx/src/http/modules/ngx_http_slice_filter_module.c543
-rw-r--r--app/nginx/src/http/modules/ngx_http_split_clients_module.c246
-rw-r--r--app/nginx/src/http/modules/ngx_http_ssi_filter_module.c2930
-rw-r--r--app/nginx/src/http/modules/ngx_http_ssi_filter_module.h114
-rw-r--r--app/nginx/src/http/modules/ngx_http_ssl_module.c992
-rw-r--r--app/nginx/src/http/modules/ngx_http_ssl_module.h66
-rw-r--r--app/nginx/src/http/modules/ngx_http_static_module.c287
-rw-r--r--app/nginx/src/http/modules/ngx_http_stub_status_module.c236
-rw-r--r--app/nginx/src/http/modules/ngx_http_sub_filter_module.c1018
-rw-r--r--app/nginx/src/http/modules/ngx_http_upstream_hash_module.c676
-rw-r--r--app/nginx/src/http/modules/ngx_http_upstream_ip_hash_module.c272
-rw-r--r--app/nginx/src/http/modules/ngx_http_upstream_keepalive_module.c529
-rw-r--r--app/nginx/src/http/modules/ngx_http_upstream_least_conn_module.c314
-rw-r--r--app/nginx/src/http/modules/ngx_http_upstream_zone_module.c246
-rw-r--r--app/nginx/src/http/modules/ngx_http_userid_filter_module.c842
-rw-r--r--app/nginx/src/http/modules/ngx_http_uwsgi_module.c2393
-rw-r--r--app/nginx/src/http/modules/ngx_http_xslt_filter_module.c1147
-rw-r--r--app/nginx/src/http/modules/perl/Makefile.PL35
-rw-r--r--app/nginx/src/http/modules/perl/nginx.pm138
-rw-r--r--app/nginx/src/http/modules/perl/nginx.xs1039
-rw-r--r--app/nginx/src/http/modules/perl/ngx_http_perl_module.c1086
-rw-r--r--app/nginx/src/http/modules/perl/ngx_http_perl_module.h67
-rw-r--r--app/nginx/src/http/modules/perl/typemap3
-rw-r--r--app/nginx/src/http/ngx_http.c2081
-rw-r--r--app/nginx/src/http/ngx_http.h176
-rw-r--r--app/nginx/src/http/ngx_http_cache.h207
-rw-r--r--app/nginx/src/http/ngx_http_config.h75
-rw-r--r--app/nginx/src/http/ngx_http_copy_filter_module.c380
-rw-r--r--app/nginx/src/http/ngx_http_core_module.c5359
-rw-r--r--app/nginx/src/http/ngx_http_core_module.h588
-rw-r--r--app/nginx/src/http/ngx_http_file_cache.c2656
-rw-r--r--app/nginx/src/http/ngx_http_header_filter_module.c629
-rw-r--r--app/nginx/src/http/ngx_http_parse.c2379
-rw-r--r--app/nginx/src/http/ngx_http_postpone_filter_module.c176
-rw-r--r--app/nginx/src/http/ngx_http_request.c3671
-rw-r--r--app/nginx/src/http/ngx_http_request.h598
-rw-r--r--app/nginx/src/http/ngx_http_request_body.c1165
-rw-r--r--app/nginx/src/http/ngx_http_script.c1762
-rw-r--r--app/nginx/src/http/ngx_http_script.h257
-rw-r--r--app/nginx/src/http/ngx_http_special_response.c828
-rw-r--r--app/nginx/src/http/ngx_http_upstream.c6388
-rw-r--r--app/nginx/src/http/ngx_http_upstream.h430
-rw-r--r--app/nginx/src/http/ngx_http_upstream_round_robin.c842
-rw-r--r--app/nginx/src/http/ngx_http_upstream_round_robin.h156
-rw-r--r--app/nginx/src/http/ngx_http_variables.c2685
-rw-r--r--app/nginx/src/http/ngx_http_variables.h114
-rw-r--r--app/nginx/src/http/ngx_http_write_filter_module.c327
-rw-r--r--app/nginx/src/http/v2/ngx_http_v2.c4484
-rw-r--r--app/nginx/src/http/v2/ngx_http_v2.h342
-rw-r--r--app/nginx/src/http/v2/ngx_http_v2_filter_module.c1448
-rw-r--r--app/nginx/src/http/v2/ngx_http_v2_huff_decode.c2714
-rw-r--r--app/nginx/src/http/v2/ngx_http_v2_huff_encode.c254
-rw-r--r--app/nginx/src/http/v2/ngx_http_v2_module.c509
-rw-r--r--app/nginx/src/http/v2/ngx_http_v2_module.h44
-rw-r--r--app/nginx/src/http/v2/ngx_http_v2_table.c349
-rw-r--r--app/nginx/src/mail/ngx_mail.c510
-rw-r--r--app/nginx/src/mail/ngx_mail.h410
-rw-r--r--app/nginx/src/mail/ngx_mail_auth_http_module.c1574
-rw-r--r--app/nginx/src/mail/ngx_mail_core_module.c644
-rw-r--r--app/nginx/src/mail/ngx_mail_handler.c900
-rw-r--r--app/nginx/src/mail/ngx_mail_imap_handler.c472
-rw-r--r--app/nginx/src/mail/ngx_mail_imap_module.c257
-rw-r--r--app/nginx/src/mail/ngx_mail_imap_module.h39
-rw-r--r--app/nginx/src/mail/ngx_mail_parse.c932
-rw-r--r--app/nginx/src/mail/ngx_mail_pop3_handler.c515
-rw-r--r--app/nginx/src/mail/ngx_mail_pop3_module.c322
-rw-r--r--app/nginx/src/mail/ngx_mail_pop3_module.h38
-rw-r--r--app/nginx/src/mail/ngx_mail_proxy_module.c1123
-rw-r--r--app/nginx/src/mail/ngx_mail_smtp_handler.c872
-rw-r--r--app/nginx/src/mail/ngx_mail_smtp_module.c311
-rw-r--r--app/nginx/src/mail/ngx_mail_smtp_module.h45
-rw-r--r--app/nginx/src/mail/ngx_mail_ssl_module.c661
-rw-r--r--app/nginx/src/mail/ngx_mail_ssl_module.h64
-rw-r--r--app/nginx/src/misc/ngx_cpp_test_module.cpp29
-rw-r--r--app/nginx/src/misc/ngx_google_perftools_module.c126
-rw-r--r--app/nginx/src/os/unix/ngx_alloc.c90
-rw-r--r--app/nginx/src/os/unix/ngx_alloc.h45
-rw-r--r--app/nginx/src/os/unix/ngx_atomic.h313
-rw-r--r--app/nginx/src/os/unix/ngx_channel.c253
-rw-r--r--app/nginx/src/os/unix/ngx_channel.h34
-rw-r--r--app/nginx/src/os/unix/ngx_daemon.c70
-rw-r--r--app/nginx/src/os/unix/ngx_darwin.h23
-rw-r--r--app/nginx/src/os/unix/ngx_darwin_config.h97
-rw-r--r--app/nginx/src/os/unix/ngx_darwin_init.c198
-rw-r--r--app/nginx/src/os/unix/ngx_darwin_sendfile_chain.c206
-rw-r--r--app/nginx/src/os/unix/ngx_dlopen.c28
-rw-r--r--app/nginx/src/os/unix/ngx_dlopen.h31
-rw-r--r--app/nginx/src/os/unix/ngx_errno.c87
-rw-r--r--app/nginx/src/os/unix/ngx_errno.h79
-rw-r--r--app/nginx/src/os/unix/ngx_file_aio_read.c216
-rw-r--r--app/nginx/src/os/unix/ngx_files.c906
-rw-r--r--app/nginx/src/os/unix/ngx_files.h395
-rw-r--r--app/nginx/src/os/unix/ngx_freebsd.h25
-rw-r--r--app/nginx/src/os/unix/ngx_freebsd_config.h123
-rw-r--r--app/nginx/src/os/unix/ngx_freebsd_init.c262
-rw-r--r--app/nginx/src/os/unix/ngx_freebsd_sendfile_chain.c333
-rw-r--r--app/nginx/src/os/unix/ngx_gcc_atomic_amd64.h82
-rw-r--r--app/nginx/src/os/unix/ngx_gcc_atomic_ppc.h155
-rw-r--r--app/nginx/src/os/unix/ngx_gcc_atomic_sparc64.h82
-rw-r--r--app/nginx/src/os/unix/ngx_gcc_atomic_x86.h127
-rw-r--r--app/nginx/src/os/unix/ngx_linux.h16
-rw-r--r--app/nginx/src/os/unix/ngx_linux_aio_read.c148
-rw-r--r--app/nginx/src/os/unix/ngx_linux_config.h123
-rw-r--r--app/nginx/src/os/unix/ngx_linux_init.c60
-rw-r--r--app/nginx/src/os/unix/ngx_linux_sendfile_chain.c442
-rw-r--r--app/nginx/src/os/unix/ngx_os.h102
-rw-r--r--app/nginx/src/os/unix/ngx_posix_config.h171
-rw-r--r--app/nginx/src/os/unix/ngx_posix_init.c134
-rw-r--r--app/nginx/src/os/unix/ngx_process.c630
-rw-r--r--app/nginx/src/os/unix/ngx_process.h88
-rw-r--r--app/nginx/src/os/unix/ngx_process_cycle.c1196
-rw-r--r--app/nginx/src/os/unix/ngx_process_cycle.h61
-rw-r--r--app/nginx/src/os/unix/ngx_readv_chain.c214
-rw-r--r--app/nginx/src/os/unix/ngx_recv.c167
-rw-r--r--app/nginx/src/os/unix/ngx_send.c73
-rw-r--r--app/nginx/src/os/unix/ngx_setaffinity.c53
-rw-r--r--app/nginx/src/os/unix/ngx_setaffinity.h37
-rw-r--r--app/nginx/src/os/unix/ngx_setproctitle.c135
-rw-r--r--app/nginx/src/os/unix/ngx_setproctitle.h52
-rw-r--r--app/nginx/src/os/unix/ngx_shmem.c126
-rw-r--r--app/nginx/src/os/unix/ngx_shmem.h29
-rw-r--r--app/nginx/src/os/unix/ngx_socket.c116
-rw-r--r--app/nginx/src/os/unix/ngx_socket.h64
-rw-r--r--app/nginx/src/os/unix/ngx_solaris.h16
-rw-r--r--app/nginx/src/os/unix/ngx_solaris_config.h112
-rw-r--r--app/nginx/src/os/unix/ngx_solaris_init.c77
-rw-r--r--app/nginx/src/os/unix/ngx_solaris_sendfilev_chain.c228
-rw-r--r--app/nginx/src/os/unix/ngx_sunpro_amd64.il43
-rw-r--r--app/nginx/src/os/unix/ngx_sunpro_atomic_sparc64.h61
-rw-r--r--app/nginx/src/os/unix/ngx_sunpro_sparc64.il36
-rw-r--r--app/nginx/src/os/unix/ngx_sunpro_x86.il44
-rw-r--r--app/nginx/src/os/unix/ngx_thread.h71
-rw-r--r--app/nginx/src/os/unix/ngx_thread_cond.c76
-rw-r--r--app/nginx/src/os/unix/ngx_thread_id.c70
-rw-r--r--app/nginx/src/os/unix/ngx_thread_mutex.c165
-rw-r--r--app/nginx/src/os/unix/ngx_time.c104
-rw-r--r--app/nginx/src/os/unix/ngx_time.h66
-rw-r--r--app/nginx/src/os/unix/ngx_udp_recv.c72
-rw-r--r--app/nginx/src/os/unix/ngx_udp_send.c56
-rw-r--r--app/nginx/src/os/unix/ngx_udp_sendmsg_chain.c245
-rw-r--r--app/nginx/src/os/unix/ngx_user.c90
-rw-r--r--app/nginx/src/os/unix/ngx_user.h24
-rw-r--r--app/nginx/src/os/unix/ngx_writev_chain.c216
-rw-r--r--app/nginx/src/os/win32/nginx.icobin0 -> 1350 bytes
-rw-r--r--app/nginx/src/os/win32/nginx.rc6
-rw-r--r--app/nginx/src/os/win32/nginx_icon16.xpm24
-rw-r--r--app/nginx/src/os/win32/nginx_icon32.xpm39
-rw-r--r--app/nginx/src/os/win32/nginx_icon48.xpm55
-rw-r--r--app/nginx/src/os/win32/ngx_alloc.c44
-rw-r--r--app/nginx/src/os/win32/ngx_alloc.h27
-rw-r--r--app/nginx/src/os/win32/ngx_atomic.h69
-rw-r--r--app/nginx/src/os/win32/ngx_dlopen.c22
-rw-r--r--app/nginx/src/os/win32/ngx_dlopen.h32
-rw-r--r--app/nginx/src/os/win32/ngx_errno.c60
-rw-r--r--app/nginx/src/os/win32/ngx_errno.h71
-rw-r--r--app/nginx/src/os/win32/ngx_event_log.c99
-rw-r--r--app/nginx/src/os/win32/ngx_files.c883
-rw-r--r--app/nginx/src/os/win32/ngx_files.h273
-rw-r--r--app/nginx/src/os/win32/ngx_os.h68
-rw-r--r--app/nginx/src/os/win32/ngx_process.c238
-rw-r--r--app/nginx/src/os/win32/ngx_process.h78
-rw-r--r--app/nginx/src/os/win32/ngx_process_cycle.c1042
-rw-r--r--app/nginx/src/os/win32/ngx_process_cycle.h44
-rw-r--r--app/nginx/src/os/win32/ngx_service.c134
-rw-r--r--app/nginx/src/os/win32/ngx_shmem.c161
-rw-r--r--app/nginx/src/os/win32/ngx_shmem.h33
-rw-r--r--app/nginx/src/os/win32/ngx_socket.c34
-rw-r--r--app/nginx/src/os/win32/ngx_socket.h207
-rw-r--r--app/nginx/src/os/win32/ngx_stat.c34
-rw-r--r--app/nginx/src/os/win32/ngx_thread.c30
-rw-r--r--app/nginx/src/os/win32/ngx_thread.h27
-rw-r--r--app/nginx/src/os/win32/ngx_time.c83
-rw-r--r--app/nginx/src/os/win32/ngx_time.h51
-rw-r--r--app/nginx/src/os/win32/ngx_udp_wsarecv.c149
-rw-r--r--app/nginx/src/os/win32/ngx_user.c23
-rw-r--r--app/nginx/src/os/win32/ngx_user.h25
-rw-r--r--app/nginx/src/os/win32/ngx_win32_config.h282
-rw-r--r--app/nginx/src/os/win32/ngx_win32_init.c297
-rw-r--r--app/nginx/src/os/win32/ngx_wsarecv.c174
-rw-r--r--app/nginx/src/os/win32/ngx_wsarecv_chain.c106
-rw-r--r--app/nginx/src/os/win32/ngx_wsasend.c185
-rw-r--r--app/nginx/src/os/win32/ngx_wsasend_chain.c292
-rw-r--r--app/nginx/src/stream/ngx_stream.c683
-rw-r--r--app/nginx/src/stream/ngx_stream.h304
-rw-r--r--app/nginx/src/stream/ngx_stream_access_module.c459
-rw-r--r--app/nginx/src/stream/ngx_stream_core_module.c888
-rw-r--r--app/nginx/src/stream/ngx_stream_geo_module.c1586
-rw-r--r--app/nginx/src/stream/ngx_stream_geoip_module.c814
-rw-r--r--app/nginx/src/stream/ngx_stream_handler.c385
-rw-r--r--app/nginx/src/stream/ngx_stream_limit_conn_module.c646
-rw-r--r--app/nginx/src/stream/ngx_stream_log_module.c1543
-rw-r--r--app/nginx/src/stream/ngx_stream_map_module.c588
-rw-r--r--app/nginx/src/stream/ngx_stream_proxy_module.c2170
-rw-r--r--app/nginx/src/stream/ngx_stream_realip_module.c348
-rw-r--r--app/nginx/src/stream/ngx_stream_return_module.c218
-rw-r--r--app/nginx/src/stream/ngx_stream_script.c921
-rw-r--r--app/nginx/src/stream/ngx_stream_script.h127
-rw-r--r--app/nginx/src/stream/ngx_stream_split_clients_module.c244
-rw-r--r--app/nginx/src/stream/ngx_stream_ssl_module.c839
-rw-r--r--app/nginx/src/stream/ngx_stream_ssl_module.h56
-rw-r--r--app/nginx/src/stream/ngx_stream_ssl_preread_module.c449
-rw-r--r--app/nginx/src/stream/ngx_stream_upstream.c717
-rw-r--r--app/nginx/src/stream/ngx_stream_upstream.h154
-rw-r--r--app/nginx/src/stream/ngx_stream_upstream_hash_module.c675
-rw-r--r--app/nginx/src/stream/ngx_stream_upstream_least_conn_module.c310
-rw-r--r--app/nginx/src/stream/ngx_stream_upstream_round_robin.c874
-rw-r--r--app/nginx/src/stream/ngx_stream_upstream_round_robin.h146
-rw-r--r--app/nginx/src/stream/ngx_stream_upstream_zone_module.c243
-rw-r--r--app/nginx/src/stream/ngx_stream_variables.c1234
-rw-r--r--app/nginx/src/stream/ngx_stream_variables.h111
-rw-r--r--app/nginx/src/stream/ngx_stream_write_filter_module.c273
-rw-r--r--app/nginx/src/tldk/be.c1240
-rw-r--r--app/nginx/src/tldk/be.h56
-rw-r--r--app/nginx/src/tldk/debug.h75
-rw-r--r--app/nginx/src/tldk/module.c497
-rw-r--r--app/nginx/src/tldk/ngx_tldk.h182
-rw-r--r--app/nginx/src/tldk/parse.c456
-rw-r--r--app/nginx/src/tldk/tldk_event.c276
-rw-r--r--app/nginx/src/tldk/tldk_sock.c549
-rw-r--r--app/nginx/src/tldk/tldk_sock.h108
457 files changed, 228981 insertions, 0 deletions
diff --git a/README b/README
index d33b2df..98ed902 100644
--- a/README
+++ b/README
@@ -61,6 +61,11 @@
$(TLDK_ROOT)
|
+ +----app
+ | |
+ | +-- nginx - a clone of nginx integrated with TLDK
+ | (refer to app/nginx/README.TLDK for more information)
+ |
+----lib
| |
| +--libtle_dring - dring library
diff --git a/app/nginx/.hgtags b/app/nginx/.hgtags
new file mode 100644
index 0000000..818243e
--- /dev/null
+++ b/app/nginx/.hgtags
@@ -0,0 +1,414 @@
+551102312e19b704cd22bd7254a9444b9ea14e96 release-0.1.0
+23fb87bddda14ce9faec90f774085634106aded4 release-0.1.1
+295d97d70c698585705345f1a8f92b02e63d6d0d release-0.1.2
+ded1284520cc939ad5ae6ddab39925375e64237d release-0.1.3
+0491b909ef7612d8411f1f59054186c1f3471b52 release-0.1.4
+a88a3e4e158fade0aaa6f3eb25597d5ced2c1075 release-0.1.5
+1f31dc6d33a3a4e65240b08066bf186df9e33b79 release-0.1.6
+5aecc125bc33d81d6214c91d73eb44230a903dde release-0.1.7
+bbd6b0b4a2b15ef8c8f1aaf7b027b6da47303524 release-0.1.8
+2ff194b74f1e60cd04670986973e3b1a6aa3bece release-0.1.9
+31ee1b50354fb829564b81a6f34e8d6ceb2d3f48 release-0.1.10
+8e8f3af115b5b903b2b8f3335de971f18891246f release-0.1.11
+c3c2848fc081e19aec5ffa97e468ad20ddb81df0 release-0.1.12
+ad1e9ebf93bb5ae4c748d471fad2de8a0afc4d2a release-0.1.13
+c5240858380136a67bec261c59b1532560b57885 release-0.1.14
+fd661d14a7fad212e326a7dad6234ea0de992fbf release-0.1.15
+621229427cba1b0af417ff2a101fc4f17a7d93c8 release-0.1.16
+4ebe09b07e3021f1a63b459903ec58f162183b26 release-0.1.17
+31ff3e943e1675a2caf745ba7a981244445d4c98 release-0.1.18
+45a460f82aec80b0f61136aa09f412436d42203a release-0.1.19
+0f836f0288eee4980f57736d50a7a60fa082d8e9 release-0.1.20
+975f62e77f0244f1b631f740be77c72c8f2da1de release-0.1.21
+fc9909c369b2b4716304ac8e38da57b8fb781211 release-0.1.22
+d7c90bb5ce83dab08715e98f9c7b81c7df4b37be release-0.1.23
+64d9afb209da0cd4a917202b7b77e51cc23e2229 release-0.1.24
+d4ea69372b946dc4ec37fc3f5ddd93ff7c3da675 release-0.1.25
+b1648294f6935e993e436fd8a68bca75c74c826d release-0.1.26
+ee66921ecd47a7fa459f70f4a9d660f91f6a1b94 release-0.1.27
+cd3117ad9aab9c58c6f7e677e551e1adbdeaba54 release-0.1.28
+9b8c906f6e63ec2c71cecebfff35819a7d32227d release-0.1.29
+c12967aadd8726daf2d85e3f3e622d89c42db176 release-0.1.30
+fbbf16224844e7d560c00043e8ade8a560415bba release-0.1.31
+417a087c9c4d9abb9b0b9b3f787aff515c43c035 release-0.1.32
+dadfa78d227027348d7f9d1e7b7093d06ba545a0 release-0.1.33
+12234c998d83bfbbaa305273b3dd1b855ca325dc release-0.1.34
+6f00349b98e5f706b82115c6e4dc84456fc0d770 release-0.1.35
+2019117e6b38cc3e89fe4f56a23b271479c627a6 release-0.1.36
+09b42134ac0c42625340f16628e29690a04f8db5 release-0.1.37
+7fa11e5c6e9612ecff5eb58274cc846ae742d1d2 release-0.1.38
+e5d7d0334fdb946133c17523c198800142ac9fe9 release-0.1.39
+c3bd8cdabb8f73e5600a91f198eb7df6fac65e92 release-0.1.40
+d6e48c08d718bf5a9e58c20a37e8ae172bff1139 release-0.1.41
+563ad09abf5042eb41e8ecaf5b4e6c9deaa42731 release-0.1.42
+c9ad0d9c7d59b2fa2a5fe669f1e88debd03e6c04 release-0.1.43
+371c1cee100d7a1b0e6cad4d188e05c98a641ee7 release-0.1.44
+b09ee85d0ac823e36861491eedfc4dfafe282997 release-0.1.45
+511a89da35ada16ae806667d699f9610b4f8499a release-0.2.0
+0148586012ab3dde69b394ec5a389d44bb11c869 release-0.2.1
+818fbd4750b99d14d2736212c939855a11b1f1ef release-0.2.2
+e16a8d574da511622b97d6237d005f40f2cddb30 release-0.2.3
+483cca23060331f2078b1c2984870d80f288ad41 release-0.2.4
+45033d85b30e3f12c407b7cfc518d76e0eda0263 release-0.2.5
+7bd37aef1e7e87858c12b124e253e98558889b50 release-0.2.6
+ecd9c160f25b7a7075dd93383d98a0fc8d8c0a41 release-0.3.0
+c1f965ef97188fd7ef81342dcf8719da18c554d2 release-0.3.1
+e48ebafc69393fc94fecfdf9997c4179fd1ce473 release-0.3.2
+9c2f3ed7a24711d3b42b124d5f831155c8beff95 release-0.3.3
+7c1369d37c7eb0017c28ebcaa0778046f5aafdcc release-0.3.4
+1af2fcb3be8a63796b6b23a488049c92a6bc12f4 release-0.3.5
+174f1e853e1e831b01000aeccfd06a9c8d4d95a2 release-0.3.6
+458b6c3fea65a894c99dd429334a77bb164c7e83 release-0.3.7
+58475592100cb792c125101b6d2d898f5adada30 release-0.3.8
+fcd6fc7ff7f9b132c35193d834e6e7d05026c716 release-0.3.9
+4d9ea73a627a914d364e83e20c58eb1283f4031d release-0.3.10
+4c5c2c55975c1152b5ca5d5d55b32d4dd7945f7a release-0.3.11
+326634fb9d47912ad94221dc2f8fa4bec424d40c release-0.3.12
+4e296b7d25bf62390ca2afb599e395426b94f785 release-0.3.13
+401de5a43ba5a8acdb9c52465193c0ea7354afe7 release-0.3.14
+284cc140593bb16ac71094acd509ab415ff4837d release-0.3.15
+d4e858a5751a7fd08e64586795ed7d336011fbc0 release-0.3.16
+8c0cdd81580eb76d774cfc5724de68e7e5cbbdc2 release-0.3.17
+425af804d968f30eeff01e33b808bc2e8c467f2c release-0.3.18
+ebc68d8ca4962fe3531b7e13444f7ac4395d9c6e release-0.3.19
+9262f520ce214d3d5fd7c842891519336ef85ca6 release-0.3.20
+869b6444d2341a587183859d4df736c7f3381169 release-0.3.21
+77f77f53214a0e3a68fef8226c15532b54f2c365 release-0.3.22
+858700ae46b453ea111b966b6d03f2c21ddcb94e release-0.3.23
+5dac8c7fb71b86aafed8ea352305e7f85759f72e release-0.3.24
+77cdfe394a94a625955e7585e09983b3af9b889b release-0.3.25
+608cf78b24ef7baaf9705e4715a361f26bb16ba9 release-0.3.26
+3f8a2132b93d66ac19bec006205a304a68524a0b release-0.3.27
+c73c5c58c619c22dd3a5a26c91bb0567a62c6930 release-0.3.28
+5ef026a2ac7481f04154f29ab49377bf99aaf96f release-0.3.29
+51b27717f140b71a2e9158807d79da17c888ce4c release-0.3.30
+7a16e281c01f1c7ab3b79c64b43ddb754ea7935e release-0.3.31
+93e85a79757c49d502e42a1cb8264a0f133b0b00 release-0.3.32
+0216fd1471f386168545f772836156761eddec08 release-0.3.33
+fbed40ce7cb4fd7203fecc22a617b9ce5b950fb3 release-0.3.34
+387450de0b4d21652f0b6242a5e26a31e3be8d8c release-0.3.35
+65bf042c0b4f39f18a235464c52f980e9fa24f6b release-0.3.36
+5d2b8078c1c2593b95ec50acfeeafbefa65be344 release-0.3.37
+f971949ffb585d400e0f15508a56232a0f897c80 release-0.3.38
+18268abd340cb351e0c01b9c44e9f8cc05492364 release-0.3.39
+e60fe4cf1d4ea3c34be8c49047c712c6d46c1727 release-0.3.40
+715d243270806d38be776fc3ed826d97514a73d6 release-0.3.41
+5e8fb59c18c19347a5607fb5af075fe1e2925b9a release-0.3.42
+947c6fd27699e0199249ad592151f844c8a900b0 release-0.3.43
+4946078f0a79e6cc952d3e410813aac9b8bda650 release-0.3.44
+95d7da23ea5315a6e9255ce036ed2c51f091f180 release-0.3.45
+1e720b0be7ecd92358da8a60944669fa493e78cd release-0.3.46
+39b7d7b33c918d8f4abc86c4075052d8c19da3c7 release-0.3.47
+7cbef16c71a1f43a07f8141f02e0135c775f0f5b release-0.3.48
+4c8cd5ae5cc100add5c08c252d991b82b1838c6b release-0.3.49
+400711951595aef7cd2ef865b84b31df52b15782 release-0.3.50
+649c9063d0fda23620eaeaf0f6393be0a672ebe7 release-0.3.51
+9079ee4735aefa98165bb2cb26dee4f58d58c1d7 release-0.3.52
+6d5c1535bb9dcd891c5963971f767421a334a728 release-0.3.53
+5fd7a5e990477189c40718c8c3e01002a2c20b81 release-0.3.54
+63a820b0bc6ca629c8e45a069b52d622ddc27a2d release-0.3.55
+562806624c4afb1687cba83bc1852f5d0fecbac3 release-0.3.56
+cec32b3753acf610ac1a6227d14032c1a89d6319 release-0.3.57
+b80f94fa2197b99db5e033fec92e0426d1fe5026 release-0.3.58
+e924670896abe2769ea0fcfd2058b405bed8e8ec release-0.3.59
+921a7ce4baf42fd1091b7e40f89c858c6b23053e release-0.3.60
+df95dcff753a6dc5e94257302aea02c18c7a7c87 release-0.3.61
+7e24168b0853ee7e46c9c7b943ef077dc64f17f5 release-0.4.0
+8183d4ba50f8500465efb27e66dd23f98775dd21 release-0.4.1
+610267a772c7bf911b499d37f66c21ce8f2ebaf7 release-0.4.2
+39dd0b045441e21512e0a6061a03d0df63414d8b release-0.4.3
+5e42c1615f4de0079bd4d8913886d588ce6a295d release-0.4.4
+40266f92b829a870808b3d4ee54c8fccdecbd2d6 release-0.4.5
+56e33c6efee7ff63cdc52bd1cf172bde195079df release-0.4.6
+119bad43bfd493400c57a05848eada2c35a46810 release-0.4.7
+0f404f82a1343cb4e4b277a44e3417385798e5e5 release-0.4.8
+d24a717314365c857b9f283d6072c2a427d5e342 release-0.4.9
+d6f0a00015fdef861fd67fb583b9690638650656 release-0.4.10
+e372368dadd7b2ecd0182b2f1b11db86fc27b2c3 release-0.4.11
+fd57967d850d2361072c72562d1ed03598473478 release-0.4.12
+979045fdcbd20cf7188545c1c589ff240251f890 release-0.4.13
+93c94cfa9f78f0a5740595dde4466ec4fba664f8 release-0.4.14
+589ee12e8d7c2ae5e4f4676bcc7a1279a76f9e8e release-0.5.0
+13416db8a807e5acb4021bc3c581203de57e2f50 release-0.5.1
+06c58edc88831fb31c492a8eddcf2c6056567f18 release-0.5.2
+e2ac5fa41bcba14adbbb722d45c083c30c07bb5c release-0.5.3
+393dbc659df15ccd411680b5c1ce87ed86d4c144 release-0.5.4
+38cc7bd8e04f2c519fd4526c12841a876be353cb release-0.5.5
+6d1fcec2ea79101c756316c015f72e75f601a5ab release-0.5.6
+aed8a9de62456c4b360358bc112ccca32ce02e8d release-0.5.7
+7642f45af67d805452df2667486201c36efaff85 release-0.5.8
+779216610662c3a459935d506f66a9b16b9c9576 release-0.5.9
+9eeb585454f3daa30cf768e95c088a092fe229b9 release-0.5.10
+bb491c8197e38ca10ae63b1f1ecb36bf6fdaf950 release-0.5.11
+613369e08810f36bbcc9734ef1059a03ccbf5e16 release-0.5.12
+bd796ef5c9c9dd34bfac20261b98685e0410122a release-0.5.13
+8a730c49f906d783b47e4b44d735efd083936c64 release-0.5.14
+cb447039152d85e9145139ff2575a6199b9af9d4 release-0.5.15
+64854c7c95d04f838585ca08492823000503fa61 release-0.5.16
+d1ffcf84ea1244f659145c36ff28de6fcdf528b2 release-0.5.17
+796a6e30ca9d29504195c10210dbc8deced0ae83 release-0.5.18
+1f81c711d2a039e1f93b9b515065a2235372d455 release-0.5.19
+8e8f6082654aedb4438c8fca408cfc316c7c5a2a release-0.5.20
+e9551132f7dd40da5719dd5bcf924c86f1436f85 release-0.5.21
+533a252896c4d1cff1586ae42129d610f7497811 release-0.5.22
+f461a49b6c747e0b67f721f2be172902afea5528 release-0.5.23
+2d5ef73671f690b65bf6d9e22e7155f68f484d5a release-0.5.24
+77bf42576050862c268e267ef3e508b145845a25 release-0.5.25
+2aefee4d4ed69eb7567680bf27a2efd212232488 release-0.6.0
+7ac0fe9bec9a2b5f8e191f6fdd6922bfd916a6cb release-0.6.1
+4882735ebc71eeec0fbfe645bdfdb31306872d82 release-0.6.2
+b94731c73d0922f472ff938b9d252ba29020f20c release-0.6.3
+13e649b813d6ccba5db33a61e08ebe09d683cd5b release-0.6.4
+80de622646b0059fd4c553eff47c391bf7503b89 release-0.6.5
+3b05edb2619d5935023b979ee7a9611b61b6c9e5 release-0.6.6
+1dcfd375100c4479611f71efb99271d0a3059215 release-0.6.7
+0228185d4c5772947b842e856ad74cf7f7fd52f3 release-0.6.8
+d1879c52326ecac45c713203670f54220879911e release-0.6.9
+5a80c6ccbe2ad24fa3d4ff6f9fe4a2b07408d19d release-0.6.10
+f88a8b0b39601b19cd740e4db614ab0b5b874686 release-0.6.11
+5557460a7247a1602ae96efd1d0ccf781344cb58 release-0.6.12
+451b02cc770a794cd41363461b446948ae1d8bc8 release-0.6.13
+537b6ef014c4a133e0ab0b7dc817508e0647e315 release-0.6.14
+5e68764f0d6e91a983170fa806e7450a9e9b33fe release-0.6.15
+158aa4e8cc46fcf9504a61469d22daf3476b17bf release-0.6.16
+d8fcca555542619228d9fab89e1665b993f8c3ee release-0.6.17
+60707ebc037086cf004736a0d4979e2a608da033 release-0.6.18
+3c2a99d3a71af846855be35e62edb9a12f363f44 release-0.6.19
+3e0a27f9358ffc1b5249e0ea2311ce7da5c8967e release-0.6.20
+143f4d65b1c875d6563ccb7f653d9157afc72194 release-0.6.21
+95e6160d2b7d0af8ffd1b95a23cadadf8f0b3f6d release-0.6.22
+69a03d5e3b6e6660079ef1ef172db7ac08d8370e release-0.6.23
+3e2a58fb48f1e1a99ebf851e0d47a7034c52ae22 release-0.6.24
+3b8607c05a8bebcfa59235c2126a70d737f0ccf5 release-0.6.25
+07ad5b2606614c4be4ee720c46cf4af126059d31 release-0.6.26
+be531addfabe5214f409d457140c1038af10d199 release-0.6.27
+58f05255d3a345d04baef5cff0ca1ae0ac7ecebb release-0.6.28
+eb2bd21dc8d03f6c94016f04ffb9adaf83a2b606 release-0.6.29
+55408deb3cd171efa9b81d23d7a1dd1ccde0b839 release-0.6.30
+d4288915bba73c4c3c9cf5d39d34e86879eb2b45 release-0.6.31
+0a189588830b8629c4dfea68feb49af36b59e4a9 release-0.7.0
+6ab27a06f3346cf9ec8737f5dbcc82dd4031e30f release-0.7.1
+a07e258cef3b0a0b6e76a6ff4ba4651c5facc85a release-0.7.2
+9992c4583513d2804fc2e7fec860fbc7ab043009 release-0.7.3
+4dc24d50230fbadfc037a414a86390db2de69dd2 release-0.7.4
+9527137b4354a648a229c7169850c7c65272c00d release-0.7.5
+c2f0f7cf306f302254beae512bda18713922375c release-0.7.6
+bbcf6d75556fdcee8bd4aba8f6c27014be9920ee release-0.7.7
+43bde71f0bbe5a33b161760d7f9f980d50386597 release-0.7.8
+769f0dd7081e9011394f264aa22aa66fd79730d8 release-0.7.9
+511edfa732da637f5f0c9476335df7dca994706d release-0.7.10
+0e7023bf6b2461309c29885935443449a41be807 release-0.7.11
+9ad1bd2b21d93902863807528e426862aedee737 release-0.7.12
+d90ea21e24ea35379aef50c5d70564158e110a15 release-0.7.13
+c07d2d20d95c83d804079bbdcecbce4a0c8282f0 release-0.7.14
+0cd7bb051f67eac2b179fb9f9cc988b9ba18ed76 release-0.7.15
+eab2e87deba73ae6abd9cc740e8d4365bed96322 release-0.7.16
+91d7a9eb8ade90e9421d7b1e3c2e47a6bc427876 release-0.7.17
+fc10f7b5cb1305fb930f8ac40b46882d0828d61e release-0.7.18
+9dba9779e37e5969a2d408c792084fd7acfec062 release-0.7.19
+61838d1bcbddc7bc4dd9f30d535573a6fddca8f9 release-0.7.20
+5f665d0fa6a5f6e748157f2ccbc445b2db8125d0 release-0.7.21
+24763afa5efe91e54f00b2ae5b87666eb6c08c3b release-0.7.22
+0562fb355a25266150cbe8c8d4e00f55e3654df3 release-0.7.23
+19c452ecd083550816873a8a31eb3ed9879085e6 release-0.7.24
+46b68faf271d6fdcaaf3ad2c69f6167ea9e9fa28 release-0.7.25
+d04bfca0c7e3ae2e4422bc1d383553139d6f0a19 release-0.7.26
+9425d9c7f8ead95b00a3929a9a5e487e0e3c8499 release-0.7.27
+fbc3e7e8b3ee756568a875f87d8a954a2f9d3bf6 release-0.7.28
+5176dfdf153fc785b18604197d58806f919829ad release-0.7.29
+87e07ccdf0a4ec53458d9d7a4ea66e1239910968 release-0.7.30
+9fddd7e1a7a27f8463867f41a461aad57df461b2 release-0.7.31
+780b2ba1ec6daf6e3773774e26b05b9ff0d5483e release-0.7.32
+83027471a25385b1c671968be761e9aa7a8591a7 release-0.7.33
+1e9a362c3dcee221ca6e34308c483ed93867aca2 release-0.7.34
+c7ee9e15717b54ead5f4a554686e74abe66c6b07 release-0.7.35
+b84548abe9b9d4f4e203f848696e52c8c82c308f release-0.7.36
+3286f0bab8e77dbc7ebb370b1dc379592ccff123 release-0.7.37
+11a4e2ed5b166b9c9f119171aa399a9e3aa4684a release-0.7.38
+f822655d4120629977794c32d3b969343b6c30db release-0.7.39
+8a350e49d2b6751296db6d8e27277ccf63ed412a release-0.7.40
+c4a56c197eeafd71fc1caef7a9d890a330e3c23d release-0.7.41
+a9575a57a5443df39611774cf3840e9088132b0e release-0.7.42
+7503d95d6eadad14c28b2db183ba09848265274b release-0.7.43
+9be652e9114435fc6f1fdec84c0458d56702db91 release-0.7.44
+797e070d480a34b31ddac0d364784773f1bbbcf9 release-0.7.45
+9b5037e7ec7db25875c40f9d1cf20a853388b124 release-0.7.46
+d1d0e6d7ff0ca3c0dd1be1ef1cfff2e3fd0b4e1c release-0.7.47
+9816fb28eda599bfd53940e6d3b6617d1ecb6323 release-0.7.48
+452b9d09df8e3f2fb04b2a33d04d2f3a6436eb34 release-0.7.49
+e4350efa7cf7a0e868c2236a1137de8a33bd8ec6 release-0.7.50
+f51f2bec766c8b6d7e1799d904f18f8ea631bd44 release-0.7.51
+18e39e566781c9c187e2eb62bebd9d669d68f08c release-0.7.52
+b073eaa1dcea296a3488b83d455fab6621a73932 release-0.7.53
+01c6fe6c2a55998434cd3b05dd10ca487ac3fb6c release-0.7.54
+3ed9377e686f2521e6ec15873084381033fb490d release-0.7.55
+a1e44954549c35023b409f728c678be8bf898148 release-0.7.56
+fbb1918a85e38a7becdb1a001dbaf5933f23a919 release-0.7.57
+87f4a49a9cc34a5b11c8784cc5ea89e97b4b2bd8 release-0.7.58
+0c22cb4862c8beb4ee1b9e4627125162a29a5304 release-0.7.59
+82d56c2425ef857cd430b8530a3f9e1127145a67 release-0.8.0
+f4acb784b53cd952559567971b97dde1e818a2b6 release-0.8.1
+b3503597c1a0f0f378afdc5e5e5b85e2c095a4be release-0.8.2
+c98da980514a02ba81c421b25bf91803ffffddf3 release-0.8.3
+db34ec0c53c4b9dec12ffdf70caf89a325ab9577 release-0.8.4
+0914802433b8678ba2cdf91280766f00f4b9b76e release-0.8.5
+ff52ee9e6422f3759f43a442b7ba615595b3a3d4 release-0.8.6
+7607237b4829fff1f60999f4663c50ed9d5182f7 release-0.8.7
+1cef1807bc12cb05ac52fb0e7a0f111d3760b569 release-0.8.8
+a40f8475511d74a468ade29c1505e8986600d7a3 release-0.8.9
+2d9faf2260df6c3e5d4aa1781493c31f27a557d0 release-0.8.10
+d0d61c32331a6505381b5218318f7b69db167ca8 release-0.8.11
+ca7a1c6c798a7eb5b294d4ac3179ec87ecf297d3 release-0.8.12
+81c8277cd8ed55febcb2dd9d9213076f6c0ccb09 release-0.8.13
+3089486a8dc5844b5b6e9f78d536b4b26f7ffa16 release-0.8.14
+d364c2c12dd9723a2dfac3f096f5e55d4cfe6838 release-0.8.15
+52163a1027c3efd6b4c461b60a2ca6266c23e193 release-0.8.16
+06564e9a2d9ec5852132c212e85eda0bf1300307 release-0.8.17
+7aaa959da85e09e29bcac3b1cadec35b0a25b64d release-0.8.18
+4bc73c644329a510da4e96b7241b80ead7772f83 release-0.8.19
+ea3d168fb99c32a5c3545717ecc61e85a375e5dd release-0.8.20
+27951ca037e63dae45ff5b6279124c224ae1255a release-0.8.21
+d56c8b5df517c2bf6e7bc2827b8bf3e08cda90e1 release-0.8.22
+3c6ac062b379b126212cbb27e98a3c8275ef381a release-0.8.23
+89b9173476de14688b1418fbf7df10f91d1719ef release-0.8.24
+aa550cb4159ae0d566006e091fb1c7a888771050 release-0.8.25
+06ce92293f6a65651b08c466f90f55bd69984b98 release-0.8.26
+ea50b0d79ef1d7d901cd0e4dcd7373447849d719 release-0.8.27
+e68b1c35cad86105ff1c5b240f53442f4c36356e release-0.8.28
+78d3582a30afe63fc0adb17c3ac8891a64e47146 release-0.8.29
+9852c5965a3292a1b6127dbb4da9fce4912d898a release-0.8.30
+4f84115914490e572bcbee5069157b7334df2744 release-0.8.31
+59dee6f7f3afeb1fad6ed5983756e48c81ad2a5c release-0.8.32
+a4456378d234c07038456cf32bfe3c651f1d5e82 release-0.8.33
+21cb50799a20575a42f9733342d37a426f79db4d release-0.8.34
+7cb3cb8d78ef7ae63561733ed91fd07933896bc8 release-0.8.35
+aed68639d4eb6afe944b7fb50499c16f7f3f503c release-0.8.36
+265b7fd2ae21c75bbffa5115b83a0123d6c4acb4 release-0.8.37
+fa5f1ca353c0c5aa5415f51d72fd7bbcc02d1ed7 release-0.8.38
+af10bf9d4c6532850aa1f70cdf7504bd109b284c release-0.8.39
+4846ec9f83cb5bc4c8519d5641b35fb9b190430c release-0.8.40
+718b4cb3faf7efe4e0648140f064bf7a92c3f7e8 release-0.8.41
+b5a3065749093282ddd19845e0b77ffc2e54333e release-0.8.42
+34df9fb22fed415cdad52def04095dc6d4b48222 release-0.8.43
+00ec8cd76fb89af27363b76c40d9f88bf4679c3b release-0.8.44
+e16dd52a0d226c23dcae9a11252564a04753bbed release-0.8.45
+f034d9173df0a433e0bbcf5974f12ea9eb9076c0 release-0.8.46
+4434dc967087315efcd0658206a67fe6c85528f3 release-0.8.47
+0b65c962e0cd6783a854877b52c903cb058eec8c release-0.8.48
+a2b7e94b9807e981866bf07e37b715847d1b7120 release-0.8.49
+e7bdb8edc1bab2bc352a9fb6ce765c46575c35bf release-0.8.50
+21dacebd12f65cb57ceb8d2688db5b07fad6e06d release-0.8.51
+67dd7533b99c8945b5b8b5b393504d4e003a1c50 release-0.8.52
+010468d890dbac33a4cae6dfb2017db70721b2fe release-0.8.53
+62b599022a2fa625b526c2ad1711dc6db7d66786 release-0.9.0
+71281dd73b17a0ead5535d531afaee098da723cb release-0.9.1
+16cff36b0e49fc9fdeee13b2e92690286bcc1b3d release-0.9.2
+b7b306325972661117694879d3e22faf4cf0df32 release-0.9.3
+fe671505a8ea86a76f0358b3ec4de84a9037ac2b release-0.9.4
+70542931bc5436d1bbd38f152245d93ac063968d release-0.9.5
+27e2f3b7a3db1819c5d0ba28327ceaba84a13c4e release-0.9.6
+657d05d63915ce2f6c4d763091059f5f85bb10e5 release-0.9.7
+e0fd9f36005923b8f98d1ba1ea583cb7625f318f release-1.0.0
+f8f89eb4e0c27e857ec517d893d4f9a454985084 release-1.0.1
+c50df367648e53d55e80b60a447c9c66caa0d326 release-1.0.2
+80d586db316512b5a9d39f00fe185f7f91523f52 release-1.0.3
+c9c2805ac9245cc48ce6efeba2b4a444f859d6aa release-1.0.4
+fa2c37b1122c2c983b6e91d1188e387d72dde4d6 release-1.0.5
+f31aea5b06654c9163be5acd6d9b7aaf0fdf6b33 release-1.1.0
+44bf95f670656fae01ccb266b3863843ea13d324 release-1.1.1
+da1289482a143dfa016769649bdff636c26f53c8 release-1.1.2
+bac8ba08a6570bac2ecd3bf2ad64b0ac3030c903 release-1.1.3
+911060bc8221d4113a693ae97952a1fa88663ca8 release-1.1.4
+e47531dfabbf8e5f8b8aff9ff353642ea4aa7abb release-1.1.5
+f9ddecfe331462f870a95e4c1c3ba1bb8f19f2d3 release-1.1.6
+378c297bb7459fb99aa9c77decac0d35391a3932 release-1.1.7
+71600ce67510af093d4bc0117a78b3b4678c6b3a release-1.1.8
+482d7d907f1ab92b78084d8b8631ed0eb7dd08f7 release-1.1.9
+c7e65deabf0db5109e8d8f6cf64cd3fb7633a3d1 release-1.1.10
+9590f0cf5aab8e6e0b0c8ae59c70187b2b97d886 release-1.1.11
+ade8fc136430cfc04a8d0885c757968b0987d56c release-1.1.12
+6a6836e65827fd3cb10a406e7bbbe36e0dad8736 release-1.1.13
+6845f4ac909233f5a08ed8a51de137713a888328 release-1.1.14
+2397e9c72f1bc5eac67006e12ad3e33e0ea9ba74 release-1.1.15
+7b7c49639a7bceecabf4963c60b26b65a77d6ce0 release-1.1.16
+f7e1113a9a1648cad122543e7080e895cf2d88f4 release-1.1.17
+2b22743c3079b41233ded0fc35af8aa89bcfab91 release-1.1.18
+0f0b425659e0b26f5bc8ea14a42dbf34de2eaba6 release-1.1.19
+f582d662cc408eb7a132c21f4b298b71d0701abb release-1.2.0
+9ee68d629722f583d43d92271f2eb84281afc630 release-1.3.0
+61b6a3438afef630774e568eefd89c53e3b93287 release-1.3.1
+7ccd50a0a455f2f2d3b241f376e1193ad956196d release-1.2.1
+0000000000000000000000000000000000000000 release-1.2.1
+50107e2d96bbfc2c59e46f889b1a5f68dd10cf19 release-1.3.2
+2c5e1e88c8cf710caf551c5c67eba00443601efe release-1.3.3
+a43447fb82aa03eabcd85352758ae14606a84d35 release-1.3.4
+90f3b4ea7992a7bf9385851a3e77173363091eea release-1.3.5
+3aeb14f88daeb973e4708310daa3dc68ac1200f7 release-1.3.6
+dafd375f1c882b15fa4a9b7aa7c801c55082395e release-1.3.7
+ab7ce0eb4cf78a656750ab1d8e55ef61f7e535ec release-1.3.8
+1b1a9337a7399ad3cdc5e3a2f9fbaaec990271d5 release-1.3.9
+2c053b2572694eb9cd4aed26a498b6cb1f51bbcc release-1.3.10
+36409ac209872ce53019f084e4e07467c5d9d25e release-1.3.11
+560dc55e90c13860a79d8f3e0d67a81c7b0257bb release-1.3.12
+dc195ffe0965b2b9072f8e213fe74ecce38f6773 release-1.3.13
+e04428778567dd4de329bbbe97ad653e22801612 release-1.3.14
+cd84e467c72967b9f5fb4d96bfc708c93edeb634 release-1.3.15
+23159600bdea695db8f9d2890aaf73424303e49c release-1.3.16
+7809529022b83157067e7d1e2fb65d57db5f4d99 release-1.4.0
+48a84bc3ff074a65a63e353b9796ff2b14239699 release-1.5.0
+99eed1a88fc33f32d66e2ec913874dfef3e12fcc release-1.5.1
+5bdca4812974011731e5719a6c398b54f14a6d61 release-1.5.2
+644a079526295aca11c52c46cb81e3754e6ad4ad release-1.5.3
+376a5e7694004048a9d073e4feb81bb54ee3ba91 release-1.5.4
+60e0409b9ec7ee194c6d8102f0656598cc4a6cfe release-1.5.5
+70c5cd3a61cb476c2afb3a61826e59c7cda0b7a7 release-1.5.6
+9ba2542d75bf62a3972278c63561fc2ef5ec573a release-1.5.7
+eaa76f24975948b0ce8be01838d949122d44ed67 release-1.5.8
+5a1759f33b7fa6270e1617c08d7e655b7b127f26 release-1.5.9
+b798fc020e3a84ef68e6c9f47865a319c826d33c release-1.5.10
+f995a10d4c7e9a817157a6ce7b753297ad32897e release-1.5.11
+97b47d95e4449cbde976657cf8cbbc118351ffe0 release-1.5.12
+fd722b890eabc600394349730a093f50dac31639 release-1.5.13
+d161d68df8be32e5cbf72b07db1a707714827803 release-1.7.0
+0351a6d89c3dbcc7a76295024ba6b70e27b9a497 release-1.7.1
+0bd223a546192fdf2e862f33938f4ec2a3b5b283 release-1.7.2
+fe7cd01828d5ca7491059f0690bb4453645eb28b release-1.7.3
+cbb146b120296852e781079d5138b04495bab6df release-1.7.4
+fe129aa02db9001d220f1db7c3c056f79482c111 release-1.7.5
+a8d111bb68847f61d682a3c8792fecb2e52efa2c release-1.7.6
+6d2fbc30f8a7f70136cf08f32d5ff3179d524873 release-1.7.7
+d5ea659b8bab2d6402a2266efa691f705e84001e release-1.7.8
+34b201c1abd1e2d4faeae4650a21574771a03c0e release-1.7.9
+860cfbcc4606ee36d898a9cd0c5ae8858db984d6 release-1.7.10
+2b3b737b5456c05cd63d3d834f4fb4d3776953d0 release-1.7.11
+3ef00a71f56420a9c3e9cec311c9a2109a015d67 release-1.7.12
+53d850fe292f157d2fb999c52788ec1dc53c91ed release-1.9.0
+884a967c369f73ab16ea859670d690fb094d3850 release-1.9.1
+3a32d6e7404a79a0973bcd8d0b83181c5bf66074 release-1.9.2
+e27a215601292872f545a733859e06d01af1017d release-1.9.3
+5cb7e2eed2031e32d2e5422caf9402758c38a6ad release-1.9.4
+942475e10cb47654205ede7ccbe7d568698e665b release-1.9.5
+b78018cfaa2f0ec20494fccb16252daa87c48a31 release-1.9.6
+54117529e40b988590ea2d38aae909b0b191663f release-1.9.7
+1bdc497c81607d854e3edf8b9a3be324c3d136b6 release-1.9.8
+ef107f3ddc237a3007e2769ec04adde0dcf627fa release-1.9.9
+be00ca08e41a69e585b6aff70a725ed6c9e1a876 release-1.9.10
+fe66cff450a95beed36a2515210eb2d7ef62c9d3 release-1.9.11
+ead3907d74f90a14d1646f1b2b56ba01d3d11702 release-1.9.12
+5936b7ed929237f1a73b467f662611cdc0309e51 release-1.9.13
+4106db71cbcb9c8274700199ac17e520902c6c0f release-1.9.14
+13070ecfda67397985f0e986eb9c42ecb46d05b5 release-1.9.15
+271ee30c6791847980cd139d31807541f5e569bf release-1.11.0
+cb783d9cc19761e14e1285d91c38f4b84d0b8756 release-1.11.1
+4d3b3a13a8cf5fc3351a7f167d1c13325e00f21c release-1.11.2
+b83a067949a3384a49fd3d943eb8d0997b31f87b release-1.11.3
+953512ca02c6f63b4fcbbc3e10d0d9835896bf99 release-1.11.4
+5253015a339aaca0a3111473d3e931b6d4752393 release-1.11.5
+5e371426b3bcba4312ce08606194b89b758927d1 release-1.11.6
+5c8f60faf33ca8926473d2da27b4c3c417bd4630 release-1.11.7
+4591da489a30f790def29bc5987f43409b503cae release-1.11.8
+20a45c768e5ed26b740679d0e22045c98727c3cc release-1.11.9
+1ad0999a7ded3d4fb01c7acf8ff57c80b643da7e release-1.11.10
+d8b321a876d6254e9e98795e3b194ef053290354 release-1.11.11
+7f394e433f0003222aa6531931ecc0b24740d5e4 release-1.11.12
+3d0e8655f897959e48cc74e87670bb5492a58871 release-1.11.13
diff --git a/app/nginx/LICENSE b/app/nginx/LICENSE
new file mode 100644
index 0000000..3f29d93
--- /dev/null
+++ b/app/nginx/LICENSE
@@ -0,0 +1,26 @@
+/*
+ * 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
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
diff --git a/app/nginx/README.TLDK b/app/nginx/README.TLDK
new file mode 100644
index 0000000..a2c4a6c
--- /dev/null
+++ b/app/nginx/README.TLDK
@@ -0,0 +1,148 @@
+1. INTRODUCTION
+
+This is a clone of nginx (from https://github.com/nginx/nginx)
+to demonstrate and benchmark TLDK library integration with real
+world application.
+A new nginx module is created and and BSD socket-like API is implemented
+on top of native TLDK API.
+Note, that right now only minimalistic subset of socket-like API is provided:
+- accept
+- close
+- readv
+- recv
+- writev
+so only limited nginx functionality is available for a moment.
+
+2. HOW TO BUILD/RUN
+
+ cd to your TLDK root directory
+ Build TLDK as usual (and explained in README), then:
+ export TLDK_ROOT=${PWD}
+ cd app/nginx/
+ auto/configure --prefix=${TLDK_ROOT}/${RTE_TARGET} --with-tldk \
+ --with-cc-opt="-march=native -D_GNU_SOURCE"
+ make install
+
+ create a copy of app/nginx/conf/nginx-tldk.conf and modify it accrodingly
+ to your system setup.
+ ${TLDK_ROOT}/${RTE_TARGET}/sbin/nginx -c <path_to_your_config_file>
+
+ On your peer system:
+ make sure your net interface connected to the TLDK system is up and running
+ add TLDK assigned ip address into ip neighbor table
+ run your favorite web client
+ as an example:
+ ifconfig eth1 192.168.1.90/24 up
+ ip neigh add 192.168.1.60 lladdr 3c:fd:fe:9f:ce:e9 nud permanent dev eth1
+ wget --no-proxy 192.168.1.60:6000
+
+3. NGINX.CONF TLDK RELATED PARAMETERS
+
+ Syntax: tldk_main { ... }
+ Default: -
+ Context: main
+ Provides the configuration file context in which the directives that affect
+ global DPDK/TLDK startup parameters are specified.
+
+ Syntax: eal_main <DPDK cmdline startup parameters>;
+ Default: ""
+ Context: tldk_main
+ Example: eal_cmd --lcores=8-10 -n 4 -w 03:00.1;
+ Provides command-line arguments list for rte_eal_init().
+
+ Syntax: port <uint> mtu <uint> rx_offload <uint> tx_offload <uint> ipv4 <ipv4> ipv6 <ipv6>;
+ Default: -
+ Context: tldk_main
+ Example: port 0 rx_offload 0xf tx_offload 0xf ipv4 192.168.1.60;
+ Provides configuration information for particular DPDK ethdev port.
+ port - DPDK port id to be used to receive/send packets.
+ It is an mandatory option.
+ mtu - MTU to be used on that port (= application data size + L2/L3/L4
+ headers sizes, default=1514). It is an optional option.
+ rx_offload - RX HW offload capabilities to enable/use on this port.
+ (bitmask of DPDK DEV_RX_OFFLOAD_* values).
+ It is an optional option.
+ tx_offload - TX HW offload capabilities to enable/use on this port.
+ (bitmask of DPDK DEV_TX_OFFLOAD_* values).
+ It is an optional option.
+ ipv4 - IPv4 network address that will be assigned to that port.
+ At least one of ipv4/ipv6 has to be specified.
+ ipv6 - IPv6 network address that will be assigned to that port.
+ At least one of ipv4/ipv6 has to be specified.
+
+ For more details regarding TLDK related parameters in nginx config file,
+ please refer to app/nginx/conf/nginx-tldk.conf.
+
+ Syntax: tldk_ctx { ... }
+ Default: -
+ Context: main
+ Provides the configuration for particular TLDK context.
+ In current implementation there is one to one mapping between NGINX workers
+ and TLDK contents:
+ - each NGINX worker has to be assigned to work with only one TLDK context.
+ - each TLDK context services only one NGINX worker.
+
+ Syntax: worker <uint>;
+ Default: -
+ Context: tldk_ctx
+ Example: worker 0;
+ Associates given TLDK context with NGINX worker # 0.
+
+ Syntax: lcore <uint>;
+ Default: -
+ Context: tldk_ctx
+ Example: lcore 9;
+ Specifies on which lcore given TLDK context will run on.
+
+ Syntax: be_in_worker;
+ Default: off
+ Context: tldk_ctx
+ Example: be_in_worker;
+ Specifies should TLDK context processing (Back-End) run inside NGINX worker
+ process, or as a separate thread (DPDK lcore) inside NGINX master process.
+
+ Syntax: tcp_timewait <uint>;
+ Default: 120s
+ Context: tldk_ctx
+ Example: tcp_timewait 0;
+ Specifies TCP TIME_WAIT state timeout duration in milliseconds for given
+ TLDK context.
+
+ Syntax: mbufs <uint>;
+ Default: 0x20000
+ Context: tldk_ctx
+ Example: mbufs 0x20000;
+ Specifies maximum number of DPDK mbufs to be created for given TLDK context.
+
+ Syntax: sbufs <uint>;
+ Default: 1
+ Context: tldk_ctx
+ Example: sbufs 0x100;
+ Specifies maximum number of send mbufs per stream (connection)
+ for given TLDK context.
+
+ Syntax: rbufs <uint>;
+ Default: 1
+ Context: tldk_ctx
+ Example: rbufs 0x100;
+ Specifies maximum number of recv mbufs per stream (connection)
+ for given TLDK context.
+
+ Syntax: dev <uint> port <uint> queue <uint>;
+ Default: -
+ Context: tldk_ctx
+ Example: dev 0 port 0 queue 0;
+ Assigns DPDK ethdev devices to the given TLDK context.
+ dev - dev id inside given TLDK context.
+ port - DPDK port id to be used to receive/send packets.
+ queue - DPDK queue id to be used to receive/send packets.
+
+ Syntax: dest dev <uint> addr <ipv4/ipv6> masklen <uint> mac <ether>
+ Default: -
+ Context: tldk_ctx
+ Example: dest dev 0 addr 192.168.1.0 masklen 24 mac 3C:FD:FE:9F:D1:E1;
+ Specifies routing information for given TLDK context.
+ dev - dev id inside given TLDK context.
+ addr - ipv4/ipv6 destination address.
+ masklen - destination network prefix length.
+ mac - destination ethernet address.
diff --git a/app/nginx/auto/cc/acc b/app/nginx/auto/cc/acc
new file mode 100644
index 0000000..64fa671
--- /dev/null
+++ b/app/nginx/auto/cc/acc
@@ -0,0 +1,14 @@
+
+# Copyright (C) Igor Sysoev
+# Copyright (C) Nginx, Inc.
+
+
+# aCC: HP ANSI C++ B3910B A.03.55.02
+
+# C89 mode
+
+CFLAGS="$CFLAGS -Ae"
+CC_TEST_FLAGS="-Ae"
+
+PCRE_OPT="$PCRE_OPT -Ae"
+ZLIB_OPT="$ZLIB_OPT -Ae"
diff --git a/app/nginx/auto/cc/bcc b/app/nginx/auto/cc/bcc
new file mode 100644
index 0000000..ec82e60
--- /dev/null
+++ b/app/nginx/auto/cc/bcc
@@ -0,0 +1,72 @@
+
+# Copyright (C) Igor Sysoev
+# Copyright (C) Nginx, Inc.
+
+
+# Borland C++ 5.5
+
+# optimizations
+
+# maximize speed
+CFLAGS="$CFLAGS -O2"
+
+case $CPU in
+ pentium)
+ # optimize for Pentium and Athlon
+ CPU_OPT="-5"
+ ;;
+
+ pentiumpro)
+ # optimize for Pentium Pro, Pentium II and Pentium III
+ CPU_OPT="-6"
+ ;;
+esac
+
+# __stdcall
+#CPU_OPT="$CPU_OPT -ps"
+# __fastcall
+#CPU_OPT="$CPU_OPT -pr"
+
+CFLAGS="$CFLAGS $CPU_OPT"
+
+# multithreaded
+CFLAGS="$CFLAGS -tWM"
+
+# stop on warning
+CFLAGS="$CFLAGS -w!"
+
+# disable logo
+CFLAGS="$CFLAGS -q"
+
+
+# precompiled headers
+CORE_DEPS="$CORE_DEPS $NGX_OBJS/ngx_config.csm"
+NGX_PCH="$NGX_OBJS/ngx_config.csm"
+NGX_BUILD_PCH="-H=$NGX_OBJS/ngx_config.csm"
+NGX_USE_PCH="-Hu -H=$NGX_OBJS/ngx_config.csm"
+
+
+# Win32 GUI mode application
+#LINK="\$(CC) -laa"
+
+
+# the resource file
+NGX_RES="$NGX_OBJS/nginx.res"
+NGX_RCC="brcc32 -fo$NGX_OBJS/nginx.res \$(CORE_INCS) $NGX_WIN32_RC"
+# the pragma allows to link the resource file using bcc32 and
+# to avoid the direct ilink32 calling and the c0w32.obj's WinMain/main problem
+NGX_PRAGMA="#pragma resource \"$NGX_OBJS/nginx.res\""
+
+
+ngx_include_opt="-I"
+ngx_objout="-o"
+ngx_binout="-e"
+ngx_objext="obj"
+ngx_binext=".exe"
+
+ngx_long_start='@&&|
+ '
+ngx_long_end='|'
+
+ngx_regex_dirsep='\\'
+ngx_dirsep="\\"
diff --git a/app/nginx/auto/cc/ccc b/app/nginx/auto/cc/ccc
new file mode 100644
index 0000000..c964045
--- /dev/null
+++ b/app/nginx/auto/cc/ccc
@@ -0,0 +1,46 @@
+
+# Copyright (C) Igor Sysoev
+# Copyright (C) Nginx, Inc.
+
+
+# Compaq C V6.5-207
+
+ngx_include_opt="-I"
+
+# warnings
+
+CFLAGS="$CFLAGS -msg_enable level6 -msg_fatal level6"
+
+CFLAGS="$CFLAGS -msg_disable unknownmacro"
+CFLAGS="$CFLAGS -msg_disable unusedincl"
+CFLAGS="$CFLAGS -msg_disable unnecincl"
+CFLAGS="$CFLAGS -msg_disable nestincl"
+CFLAGS="$CFLAGS -msg_disable strctpadding"
+CFLAGS="$CFLAGS -msg_disable ansialiascast"
+CFLAGS="$CFLAGS -msg_disable inlinestoclsmod"
+CFLAGS="$CFLAGS -msg_disable cxxkeyword"
+CFLAGS="$CFLAGS -msg_disable longlongsufx"
+CFLAGS="$CFLAGS -msg_disable valuepres"
+
+# STUB
+CFLAGS="$CFLAGS -msg_disable truncintcast"
+CFLAGS="$CFLAGS -msg_disable trunclongcast"
+
+CFLAGS="$CFLAGS -msg_disable truncintasn"
+CFLAGS="$CFLAGS -msg_disable trunclongint"
+CFLAGS="$CFLAGS -msg_disable intconcastsgn"
+CFLAGS="$CFLAGS -msg_disable intconstsign"
+CFLAGS="$CFLAGS -msg_disable switchlong"
+CFLAGS="$CFLAGS -msg_disable subscrbounds2"
+
+CFLAGS="$CFLAGS -msg_disable hexoctunsign"
+
+CFLAGS="$CFLAGS -msg_disable ignorecallval"
+CFLAGS="$CFLAGS -msg_disable nonstandcast"
+CFLAGS="$CFLAGS -msg_disable embedcomment"
+CFLAGS="$CFLAGS -msg_disable unreachcode"
+CFLAGS="$CFLAGS -msg_disable questcompare2"
+CFLAGS="$CFLAGS -msg_disable unusedtop"
+CFLAGS="$CFLAGS -msg_disable unrefdecl"
+
+CFLAGS="$CFLAGS -msg_disable bitnotint"
diff --git a/app/nginx/auto/cc/clang b/app/nginx/auto/cc/clang
new file mode 100644
index 0000000..19bdaaa
--- /dev/null
+++ b/app/nginx/auto/cc/clang
@@ -0,0 +1,98 @@
+
+# Copyright (C) Nginx, Inc.
+
+
+# clang
+
+
+NGX_CLANG_VER=`$CC -v 2>&1 | grep '\(clang\|LLVM\) version' 2>&1 \
+ | sed -e 's/^.* version \(.*\)/\1/'`
+
+echo " + clang version: $NGX_CLANG_VER"
+
+have=NGX_COMPILER value="\"clang $NGX_CLANG_VER\"" . auto/define
+
+
+CC_TEST_FLAGS="-pipe"
+
+
+# optimizations
+
+#NGX_CLANG_OPT="-O2"
+#NGX_CLANG_OPT="-Oz"
+NGX_CLANG_OPT="-O"
+
+case $CPU in
+ pentium)
+ # optimize for Pentium
+ CPU_OPT="-march=pentium"
+ NGX_CPU_CACHE_LINE=32
+ ;;
+
+ pentiumpro | pentium3)
+ # optimize for Pentium Pro, Pentium II and Pentium III
+ CPU_OPT="-march=pentiumpro"
+ NGX_CPU_CACHE_LINE=32
+ ;;
+
+ pentium4)
+ # optimize for Pentium 4
+ CPU_OPT="-march=pentium4"
+ NGX_CPU_CACHE_LINE=128
+ ;;
+
+ athlon)
+ # optimize for Athlon
+ CPU_OPT="-march=athlon"
+ NGX_CPU_CACHE_LINE=64
+ ;;
+
+ opteron)
+ # optimize for Opteron
+ CPU_OPT="-march=opteron"
+ NGX_CPU_CACHE_LINE=64
+ ;;
+
+esac
+
+CC_AUX_FLAGS="$CC_AUX_FLAGS $CPU_OPT"
+
+
+CFLAGS="$CFLAGS -pipe $CPU_OPT"
+
+if [ ".$PCRE_OPT" = "." ]; then
+ PCRE_OPT="-O2 -pipe $CPU_OPT"
+else
+ PCRE_OPT="$PCRE_OPT -pipe"
+fi
+
+if [ ".$ZLIB_OPT" = "." ]; then
+ ZLIB_OPT="-O2 -pipe $CPU_OPT"
+else
+ ZLIB_OPT="$ZLIB_OPT -pipe"
+fi
+
+
+# warnings
+
+CFLAGS="$CFLAGS $NGX_CLANG_OPT -Wall -Wextra -Wpointer-arith"
+CFLAGS="$CFLAGS -Wconditional-uninitialized"
+#CFLAGS="$CFLAGS -Wmissing-prototypes"
+
+# we have a lot of unused function arguments
+CFLAGS="$CFLAGS -Wno-unused-parameter"
+
+# deprecated system OpenSSL library on OS X
+if [ "$NGX_SYSTEM" = "Darwin" ]; then
+ CFLAGS="$CFLAGS -Wno-deprecated-declarations"
+fi
+
+# stop on warning
+CFLAGS="$CFLAGS -Werror"
+
+# debug
+CFLAGS="$CFLAGS -g"
+
+if [ ".$CPP" = "." ]; then
+ CPP="$CC -E"
+fi
diff --git a/app/nginx/auto/cc/conf b/app/nginx/auto/cc/conf
new file mode 100644
index 0000000..b3b9f92
--- /dev/null
+++ b/app/nginx/auto/cc/conf
@@ -0,0 +1,250 @@
+
+# Copyright (C) Igor Sysoev
+# Copyright (C) Nginx, Inc.
+
+
+LINK="\$(CC)"
+
+MAIN_LINK=
+MODULE_LINK="-shared"
+
+ngx_include_opt="-I "
+ngx_compile_opt="-c"
+ngx_pic_opt="-fPIC"
+ngx_objout="-o "
+ngx_binout="-o "
+ngx_objext="o"
+ngx_binext=
+ngx_modext=".so"
+
+ngx_long_start=
+ngx_long_end=
+
+ngx_regex_dirsep="\/"
+ngx_dirsep='/'
+
+ngx_regex_cont=' \\\
+ '
+ngx_cont=' \
+ '
+ngx_tab=' \
+ '
+ngx_spacer=
+
+ngx_long_regex_cont=$ngx_regex_cont
+ngx_long_cont=$ngx_cont
+
+. auto/cc/name
+
+if test -n "$CFLAGS"; then
+
+ CC_TEST_FLAGS="$CFLAGS $NGX_CC_OPT"
+
+ case $NGX_CC_NAME in
+
+ ccc)
+ # Compaq C V6.5-207
+
+ ngx_include_opt="-I"
+ ;;
+
+ sunc)
+
+ MAIN_LINK=
+ MODULE_LINK="-G"
+
+ case "$NGX_MACHINE" in
+
+ i86pc)
+ NGX_AUX=" src/os/unix/ngx_sunpro_x86.il"
+ ;;
+
+ sun4u | sun4v)
+ NGX_AUX=" src/os/unix/ngx_sunpro_sparc64.il"
+ ;;
+
+ esac
+
+ case $CPU in
+
+ amd64)
+ NGX_AUX=" src/os/unix/ngx_sunpro_amd64.il"
+ ;;
+
+ esac
+ ;;
+
+ esac
+
+else
+
+ case $NGX_CC_NAME in
+ gcc)
+ # gcc 2.7.2.3, 2.8.1, 2.95.4, egcs-1.1.2
+ # 3.0.4, 3.1.1, 3.2.3, 3.3.2, 3.3.3, 3.3.4, 3.4.0, 3.4.2
+ # 4.0.0, 4.0.1, 4.1.0
+
+ . auto/cc/gcc
+ ;;
+
+ clang)
+ # Clang C compiler
+
+ . auto/cc/clang
+ ;;
+
+ icc)
+ # Intel C++ compiler 7.1, 8.0, 8.1
+
+ . auto/cc/icc
+ ;;
+
+ sunc)
+ # Sun C 5.7 Patch 117837-04 2005/05/11
+
+ . auto/cc/sunc
+ ;;
+
+ ccc)
+ # Compaq C V6.5-207
+
+ . auto/cc/ccc
+ ;;
+
+ acc)
+ # aCC: HP ANSI C++ B3910B A.03.55.02
+
+ . auto/cc/acc
+ ;;
+
+ msvc*)
+ # MSVC++ 6.0 SP2, MSVC++ Toolkit 2003
+
+ . auto/cc/msvc
+ ;;
+
+ owc)
+ # Open Watcom C 1.0, 1.2
+
+ . auto/cc/owc
+ ;;
+
+ bcc)
+ # Borland C++ 5.5
+
+ . auto/cc/bcc
+ ;;
+
+ esac
+
+ CC_TEST_FLAGS="$CC_TEST_FLAGS $NGX_CC_OPT"
+
+fi
+
+CFLAGS="$CFLAGS $NGX_CC_OPT"
+NGX_TEST_LD_OPT="$NGX_LD_OPT"
+
+if [ "$NGX_PLATFORM" != win32 ]; then
+
+ if test -n "$NGX_LD_OPT"; then
+ ngx_feature=--with-ld-opt=\"$NGX_LD_OPT\"
+ ngx_feature_name=
+ ngx_feature_run=no
+ ngx_feature_incs=
+ ngx_feature_path=
+ ngx_feature_libs=
+ ngx_feature_test=
+ . auto/feature
+
+ if [ $ngx_found = no ]; then
+ echo $0: error: the invalid value in --with-ld-opt=\"$NGX_LD_OPT\"
+ echo
+ exit 1
+ fi
+ fi
+
+
+ ngx_feature="-Wl,-E switch"
+ ngx_feature_name=
+ ngx_feature_run=no
+ ngx_feature_incs=
+ ngx_feature_path=
+ ngx_feature_libs=-Wl,-E
+ ngx_feature_test=
+ . auto/feature
+
+ if [ $ngx_found = yes ]; then
+ MAIN_LINK="-Wl,-E"
+ fi
+
+
+ ngx_feature="gcc builtin atomic operations"
+ ngx_feature_name=NGX_HAVE_GCC_ATOMIC
+ ngx_feature_run=yes
+ ngx_feature_incs=
+ ngx_feature_path=
+ ngx_feature_libs=
+ ngx_feature_test="long n = 0;
+ if (!__sync_bool_compare_and_swap(&n, 0, 1))
+ return 1;
+ if (__sync_fetch_and_add(&n, 1) != 1)
+ return 1;
+ if (n != 2)
+ return 1;
+ __sync_synchronize();"
+ . auto/feature
+
+
+ if [ "$NGX_CC_NAME" = "ccc" ]; then
+ echo "checking for C99 variadic macros ... disabled"
+ else
+ ngx_feature="C99 variadic macros"
+ ngx_feature_name="NGX_HAVE_C99_VARIADIC_MACROS"
+ ngx_feature_run=yes
+ ngx_feature_incs="#include <stdio.h>
+#define var(dummy, ...) sprintf(__VA_ARGS__)"
+ ngx_feature_path=
+ ngx_feature_libs=
+ ngx_feature_test="char buf[30]; buf[0] = '0';
+ var(0, buf, \"%d\", 1);
+ if (buf[0] != '1') return 1"
+ . auto/feature
+ fi
+
+
+ ngx_feature="gcc variadic macros"
+ ngx_feature_name="NGX_HAVE_GCC_VARIADIC_MACROS"
+ ngx_feature_run=yes
+ ngx_feature_incs="#include <stdio.h>
+#define var(dummy, args...) sprintf(args)"
+ ngx_feature_path=
+ ngx_feature_libs=
+ ngx_feature_test="char buf[30]; buf[0] = '0';
+ var(0, buf, \"%d\", 1);
+ if (buf[0] != '1') return 1"
+ . auto/feature
+
+
+ ngx_feature="gcc builtin 64 bit byteswap"
+ ngx_feature_name="NGX_HAVE_GCC_BSWAP64"
+ ngx_feature_run=no
+ ngx_feature_incs=
+ ngx_feature_path=
+ ngx_feature_libs=
+ ngx_feature_test="if (__builtin_bswap64(0)) return 1"
+ . auto/feature
+
+
+# ngx_feature="inline"
+# ngx_feature_name=
+# ngx_feature_run=no
+# ngx_feature_incs="int inline f(void) { return 1 }"
+# ngx_feature_path=
+# ngx_feature_libs=
+# ngx_feature_test=
+# . auto/feature
+#
+# if [ $ngx_found = yes ]; then
+# fi
+
+fi
diff --git a/app/nginx/auto/cc/gcc b/app/nginx/auto/cc/gcc
new file mode 100644
index 0000000..a5c5c18
--- /dev/null
+++ b/app/nginx/auto/cc/gcc
@@ -0,0 +1,179 @@
+
+# Copyright (C) Igor Sysoev
+# Copyright (C) Nginx, Inc.
+
+
+# gcc 2.7.2.3, 2.8.1, 2.95.4, egcs-1.1.2
+# 3.0.4, 3.1.1, 3.2.3, 3.3.2, 3.3.3, 3.3.4, 3.4.0, 3.4.2
+# 4.0.0, 4.0.1, 4.1.0
+
+
+NGX_GCC_VER=`$CC -v 2>&1 | grep 'gcc version' 2>&1 \
+ | sed -e 's/^.* version \(.*\)/\1/'`
+
+echo " + gcc version: $NGX_GCC_VER"
+
+have=NGX_COMPILER value="\"gcc $NGX_GCC_VER\"" . auto/define
+
+
+# Solaris 7's /usr/ccs/bin/as does not support "-pipe"
+
+CC_TEST_FLAGS="-pipe"
+
+ngx_feature="gcc -pipe switch"
+ngx_feature_name=
+ngx_feature_run=no
+ngx_feature_incs=
+ngx_feature_path=
+ngx_feature_libs=
+ngx_feature_test=
+. auto/feature
+
+CC_TEST_FLAGS=
+
+if [ $ngx_found = yes ]; then
+ PIPE="-pipe"
+fi
+
+
+case "$NGX_MACHINE" in
+
+ sun4u | sun4v | sparc | sparc64 )
+ # "-mcpu=v9" enables the "casa" assembler instruction
+ CFLAGS="$CFLAGS -mcpu=v9"
+ ;;
+
+esac
+
+
+# optimizations
+
+#NGX_GCC_OPT="-O2"
+#NGX_GCC_OPT="-Os"
+NGX_GCC_OPT="-O"
+
+#CFLAGS="$CFLAGS -fomit-frame-pointer"
+
+case $CPU in
+ pentium)
+ # optimize for Pentium and Athlon
+ CPU_OPT="-march=pentium"
+ NGX_CPU_CACHE_LINE=32
+ ;;
+
+ pentiumpro | pentium3)
+ # optimize for Pentium Pro, Pentium II and Pentium III
+ CPU_OPT="-march=pentiumpro"
+ NGX_CPU_CACHE_LINE=32
+ ;;
+
+ pentium4)
+ # optimize for Pentium 4, gcc 3.x
+ CPU_OPT="-march=pentium4"
+ NGX_CPU_CACHE_LINE=128
+ ;;
+
+ athlon)
+ # optimize for Athlon, gcc 3.x
+ CPU_OPT="-march=athlon"
+ NGX_CPU_CACHE_LINE=64
+ ;;
+
+ opteron)
+ # optimize for Opteron, gcc 3.x
+ CPU_OPT="-march=opteron"
+ NGX_CPU_CACHE_LINE=64
+ ;;
+
+ sparc32)
+ # build 32-bit UltraSparc binary
+ CPU_OPT="-m32"
+ CORE_LINK="$CORE_LINK -m32"
+ NGX_CPU_CACHE_LINE=64
+ ;;
+
+ sparc64)
+ # build 64-bit UltraSparc binary
+ CPU_OPT="-m64"
+ CORE_LINK="$CORE_LINK -m64"
+ NGX_CPU_CACHE_LINE=64
+ ;;
+
+ ppc64)
+ # build 64-bit PowerPC binary
+ CPU_OPT="-m64"
+ CPU_OPT="$CPU_OPT -falign-functions=32 -falign-labels=32"
+ CPU_OPT="$CPU_OPT -falign-loops=32 -falign-jumps=32"
+ CORE_LINK="$CORE_LINK -m64"
+ NGX_CPU_CACHE_LINE=128
+ ;;
+
+esac
+
+CC_AUX_FLAGS="$CC_AUX_FLAGS $CPU_OPT"
+
+case "$NGX_GCC_VER" in
+ 2.7*)
+ # batch build
+ CPU_OPT=
+ ;;
+esac
+
+
+CFLAGS="$CFLAGS $PIPE $CPU_OPT"
+
+if [ ".$PCRE_OPT" = "." ]; then
+ PCRE_OPT="-O2 -fomit-frame-pointer $PIPE $CPU_OPT"
+else
+ PCRE_OPT="$PCRE_OPT $PIPE"
+fi
+
+if [ ".$ZLIB_OPT" = "." ]; then
+ ZLIB_OPT="-O2 -fomit-frame-pointer $PIPE $CPU_OPT"
+else
+ ZLIB_OPT="$ZLIB_OPT $PIPE"
+fi
+
+
+# warnings
+
+# -W requires at least -O
+CFLAGS="$CFLAGS ${NGX_GCC_OPT:--O} -W"
+
+CFLAGS="$CFLAGS -Wall -Wpointer-arith"
+#CFLAGS="$CFLAGS -Wconversion"
+#CFLAGS="$CFLAGS -Winline"
+#CFLAGS="$CFLAGS -Wmissing-prototypes"
+
+case "$NGX_GCC_VER" in
+ 2.*)
+ # we have a lot of the unused function arguments
+ CFLAGS="$CFLAGS -Wno-unused"
+ ;;
+
+ *)
+ # we have a lot of the unused function arguments
+ CFLAGS="$CFLAGS -Wno-unused-parameter"
+ # 4.2.1 shows the warning in wrong places
+ #CFLAGS="$CFLAGS -Wunreachable-code"
+
+ # deprecated system OpenSSL library on OS X
+ if [ "$NGX_SYSTEM" = "Darwin" ]; then
+ CFLAGS="$CFLAGS -Wno-deprecated-declarations"
+ fi
+ ;;
+esac
+
+
+# stop on warning
+CFLAGS="$CFLAGS -Werror"
+
+# debug
+CFLAGS="$CFLAGS -g"
+
+# DragonFly's gcc3 generates DWARF
+#CFLAGS="$CFLAGS -g -gstabs"
+
+if [ ".$CPP" = "." ]; then
+ CPP="$CC -E"
+fi
diff --git a/app/nginx/auto/cc/icc b/app/nginx/auto/cc/icc
new file mode 100644
index 0000000..c47f6e4
--- /dev/null
+++ b/app/nginx/auto/cc/icc
@@ -0,0 +1,117 @@
+
+# Copyright (C) Igor Sysoev
+# Copyright (C) Nginx, Inc.
+
+
+# Intel C++ compiler 7.1, 8.0, 8.1, 9.0, 11.1
+
+NGX_ICC_VER=`$CC -V 2>&1 | grep 'Version' 2>&1 \
+ | sed -e 's/^.* Version \([^ ]*\) *Build.*$/\1/'`
+
+echo " + icc version: $NGX_ICC_VER"
+
+have=NGX_COMPILER value="\"Intel C Compiler $NGX_ICC_VER\"" . auto/define
+
+
+# optimizations
+
+CFLAGS="$CFLAGS -O"
+
+CORE_LINK="$CORE_LINK -opt_report_file=$NGX_OBJS/opt_report_file"
+
+
+case $CPU in
+ pentium)
+ # optimize for Pentium and Athlon
+ CPU_OPT="-march=pentium"
+ ;;
+
+ pentiumpro)
+ # optimize for Pentium Pro, Pentium II and Pentium III
+ CPU_OPT="-mcpu=pentiumpro -march=pentiumpro"
+ ;;
+
+ pentium4)
+ # optimize for Pentium 4, default
+ CPU_OPT="-march=pentium4"
+ ;;
+esac
+
+CFLAGS="$CFLAGS $CPU_OPT"
+
+if [ ".$PCRE_OPT" = "." ]; then
+ PCRE_OPT="-O $CPU_OPT"
+fi
+
+if [ ".$ZLIB_OPT" = "." ]; then
+ ZLIB_OPT="-O $CPU_OPT"
+fi
+
+
+# warnings
+
+CFLAGS="$CFLAGS -w2"
+
+# disable some warnings
+
+# invalid type conversion: "int" to "char *"
+CFLAGS="$CFLAGS -wd171"
+# argument is incompatible with corresponding format string conversion
+CFLAGS="$CFLAGS -wd181"
+# zero used for undefined preprocessing identifier
+CFLAGS="$CFLAGS -wd193"
+# the format string ends before this argument
+CFLAGS="$CFLAGS -wd268"
+# invalid format string conversion
+CFLAGS="$CFLAGS -wd269"
+# conversion from "long long" to "size_t" may lose significant bits
+CFLAGS="$CFLAGS -wd810"
+# parameter was never referenced
+CFLAGS="$CFLAGS -wd869"
+# attribute "unused" is only allowed in a function definition, warning on pTHX_
+CFLAGS="$CFLAGS -wd1301"
+
+# STUB
+# enumerated type mixed with another type
+CFLAGS="$CFLAGS -wd188"
+# controlling expression is constant
+CFLAGS="$CFLAGS -wd279"
+# operands are evaluated in unspecified order
+CFLAGS="$CFLAGS -wd981"
+# external definition with no prior declaration
+CFLAGS="$CFLAGS -wd1418"
+# external declaration in primary source file
+CFLAGS="$CFLAGS -wd1419"
+
+case "$NGX_ICC_VER" in
+ 9.*)
+ # "cc" clobber ignored, warnings for Linux's htonl()/htons()
+ CFLAGS="$CFLAGS -wd1469"
+ # explicit conversion of a 64-bit integral type to a smaller
+ # integral type
+ CFLAGS="$CFLAGS -wd1683"
+ # conversion from pointer to same-sized integral type,
+ # warning on offsetof()
+ CFLAGS="$CFLAGS -wd1684"
+ # floating-point equality and inequality comparisons are unreliable,
+ # warning on SvTRUE()
+ CFLAGS="$CFLAGS -wd1572"
+ ;;
+
+ 8.*)
+ # "cc" clobber ignored, warnings for Linux's htonl()/htons()
+ CFLAGS="$CFLAGS -wd1469"
+ # floating-point equality and inequality comparisons are unreliable,
+ # warning on SvTRUE()
+ CFLAGS="$CFLAGS -wd1572"
+ ;;
+
+ *)
+ ;;
+esac
+
+# stop on warning
+CFLAGS="$CFLAGS -Werror"
+
+# debug
+CFLAGS="$CFLAGS -g"
diff --git a/app/nginx/auto/cc/msvc b/app/nginx/auto/cc/msvc
new file mode 100644
index 0000000..4eef101
--- /dev/null
+++ b/app/nginx/auto/cc/msvc
@@ -0,0 +1,157 @@
+
+# Copyright (C) Igor Sysoev
+# Copyright (C) Nginx, Inc.
+
+
+# MSVC 6.0 SP2 cl 12.00
+# MSVC Toolkit 2003 (7.1) cl 13.10
+# MSVC 2005 Express Edition SP1 (8.0) cl 14.00
+# MSVC 2008 Express Edition (9.0) cl 15.00
+# MSVC 2010 (10.0) cl 16.00
+# MSVC 2015 (14.0) cl 19.00
+
+
+NGX_MSVC_VER=`$NGX_WINE $CC 2>&1 | grep 'Compiler Version' 2>&1 \
+ | sed -e 's/^.* Version \(.*\)/\1/'`
+
+echo " + cl version: $NGX_MSVC_VER"
+
+have=NGX_COMPILER value="\"cl $NGX_MSVC_VER\"" . auto/define
+
+
+ngx_msvc_ver=`echo $NGX_MSVC_VER | sed -e 's/^\([0-9]*\).*/\1/'`
+
+
+# optimizations
+
+# maximize speed, equivalent to -Og -Oi -Ot -Oy -Ob2 -Gs -GF -Gy
+CFLAGS="$CFLAGS -O2"
+
+# enable global optimization
+#CFLAGS="$CFLAGS -Og"
+# enable intrinsic functions
+#CFLAGS="$CFLAGS -Oi"
+
+# disable inline expansion
+#CFLAGS="$CFLAGS -Ob0"
+# explicit inline expansion
+#CFLAGS="$CFLAGS -Ob1"
+# explicit and implicit inline expansion
+#CFLAGS="$CFLAGS -Ob2"
+
+# enable frame pointer omission
+#CFLAGS="$CFLAGS -Oy"
+# disable stack checking calls
+#CFLAGS="$CFLAGS -Gs"
+
+# pools strings as read/write
+#CFLAGS="$CFLAGS -Gf"
+# pools strings as read-only
+#CFLAGS="$CFLAGS -GF"
+
+
+case $CPU in
+ pentium)
+ # optimize for Pentium and Athlon
+ CPU_OPT="-G5"
+ ;;
+
+ pentiumpro)
+ # optimize for Pentium Pro, Pentium II and Pentium III
+ CPU_OPT="-G6"
+ ;;
+
+ pentium4)
+ # optimize for Pentium 4, MSVC 7
+ CPU_OPT="-G7"
+ ;;
+esac
+
+# __cdecl, default, must be used with OpenSSL, md5 asm, and sha1 asm
+#CPU_OPT="$CPU_OPT -Gd"
+# __stdcall
+#CPU_OPT="$CPU_OPT -Gz"
+# __fastcall
+#CPU_OPT="$CPU_OPT -Gr"
+
+
+CFLAGS="$CFLAGS $CPU_OPT"
+
+
+# warnings
+
+CFLAGS="$CFLAGS -W4"
+
+# stop on warning
+CFLAGS="$CFLAGS -WX"
+
+# disable logo
+CFLAGS="$CFLAGS -nologo"
+
+# the link flags
+CORE_LINK="$CORE_LINK -link -verbose:lib"
+
+# link with libcmt.lib, multithreaded
+LIBC="-MT"
+# link with msvcrt.dll
+# however, MSVC Toolkit 2003 has no MSVCRT.LIB
+#LIBC="-MD"
+
+CFLAGS="$CFLAGS $LIBC"
+
+CORE_LIBS="$CORE_LIBS kernel32.lib user32.lib"
+
+# Win32 GUI mode application
+#CORE_LINK="$CORE_LINK -subsystem:windows -entry:mainCRTStartup"
+
+# debug
+# msvc under Wine issues
+# C1902: Program database manager mismatch; please check your installation
+if [ -z "$NGX_WINE" ]; then
+ CFLAGS="$CFLAGS -Zi"
+ CORE_LINK="$CORE_LINK -debug"
+fi
+
+
+# MSVC 2005 supports C99 variadic macros
+if [ "$ngx_msvc_ver" -ge 14 ]; then
+ have=NGX_HAVE_C99_VARIADIC_MACROS . auto/have
+fi
+
+
+# precompiled headers
+CORE_DEPS="$CORE_DEPS $NGX_OBJS/ngx_config.pch"
+CORE_LINK="$CORE_LINK $NGX_OBJS/ngx_pch.obj"
+NGX_PCH="$NGX_OBJS/ngx_config.pch"
+NGX_BUILD_PCH="-Ycngx_config.h -Fp$NGX_OBJS/ngx_config.pch"
+NGX_USE_PCH="-Yungx_config.h -Fp$NGX_OBJS/ngx_config.pch"
+
+
+# the resource file
+NGX_RES="$NGX_OBJS/nginx.res"
+NGX_RCC="rc -fo$NGX_RES \$(CORE_INCS) $NGX_WIN32_RC"
+CORE_LINK="$NGX_RES $CORE_LINK"
+
+
+# dynamic modules
+#MAIN_LINK="-link -def:$NGX_OBJS/nginx.def"
+#MODULE_LINK="-LD $NGX_OBJS/nginx.lib"
+
+
+ngx_pic_opt=
+ngx_objout="-Fo"
+ngx_binout="-Fe"
+ngx_objext="obj"
+ngx_binext=".exe"
+
+ngx_long_start='@<<
+ '
+ngx_long_end='<<'
+ngx_long_regex_cont=' \
+ '
+ngx_long_cont='
+ '
+
+# MSVC understand / in path
+#ngx_regex_dirsep='\\'
+#ngx_dirsep="\\"
diff --git a/app/nginx/auto/cc/name b/app/nginx/auto/cc/name
new file mode 100644
index 0000000..35d319e
--- /dev/null
+++ b/app/nginx/auto/cc/name
@@ -0,0 +1,66 @@
+
+# Copyright (C) Igor Sysoev
+# Copyright (C) Nginx, Inc.
+
+
+if [ "$NGX_PLATFORM" != win32 ]; then
+
+ ngx_feature="C compiler"
+ ngx_feature_name=
+ ngx_feature_run=yes
+ ngx_feature_incs=
+ ngx_feature_path=
+ ngx_feature_libs=
+ ngx_feature_test=
+ . auto/feature
+
+ if [ $ngx_found = no ]; then
+ echo
+ echo $0: error: C compiler $CC is not found
+ echo
+ exit 1
+ fi
+
+fi
+
+
+if [ "$CC" = cl ]; then
+ NGX_CC_NAME=msvc
+ echo " + using Microsoft Visual C++ compiler"
+
+elif [ "$CC" = wcl386 ]; then
+ NGX_CC_NAME=owc
+ echo " + using Open Watcom C compiler"
+
+elif [ "$CC" = bcc32 ]; then
+ NGX_CC_NAME=bcc
+ echo " + using Borland C++ compiler"
+
+elif `$CC -V 2>&1 | grep '^Intel(R) C' >/dev/null 2>&1`; then
+ NGX_CC_NAME=icc
+ echo " + using Intel C++ compiler"
+
+elif `$CC -v 2>&1 | grep 'gcc version' >/dev/null 2>&1`; then
+ NGX_CC_NAME=gcc
+ echo " + using GNU C compiler"
+
+elif `$CC -v 2>&1 | grep '\(clang\|LLVM\) version' >/dev/null 2>&1`; then
+ NGX_CC_NAME=clang
+ echo " + using Clang C compiler"
+
+elif `$CC -V 2>&1 | grep 'Sun C' >/dev/null 2>&1`; then
+ NGX_CC_NAME=sunc
+ echo " + using Sun C compiler"
+
+elif `$CC -V 2>&1 | grep '^Compaq C' >/dev/null 2>&1`; then
+ NGX_CC_NAME=ccc
+ echo " + using Compaq C compiler"
+
+elif `$CC -V 2>&1 | grep '^aCC: ' >/dev/null 2>&1`; then
+ NGX_CC_NAME=acc
+ echo " + using HP aC++ compiler"
+
+else
+ NGX_CC_NAME=unknown
+
+fi
diff --git a/app/nginx/auto/cc/owc b/app/nginx/auto/cc/owc
new file mode 100644
index 0000000..a063aa3
--- /dev/null
+++ b/app/nginx/auto/cc/owc
@@ -0,0 +1,104 @@
+
+# Copyright (C) Igor Sysoev
+# Copyright (C) Nginx, Inc.
+
+
+# Open Watcom C 1.0, 1.2, 1.3
+
+# optimizations
+
+# maximize speed
+CFLAGS="$CFLAGS -ot"
+# reorder instructions for best pipeline usage
+CFLAGS="$CFLAGS -op"
+# inline intrinsic functions
+CFLAGS="$CFLAGS -oi"
+# inline expansion
+CFLAGS="$CFLAGS -oe"
+# disable stack checking calls
+CFLAGS="$CFLAGS -s"
+
+case $CPU in
+ pentium)
+ # optimize for Pentium and Athlon
+ # register-based arguments passing conventions
+ CPU_OPT="-5r"
+ # stack-based arguments passing conventions
+ #CPU_OPT="-5s"
+ ;;
+
+ pentiumpro)
+ # optimize for Pentium Pro, Pentium II and Pentium III
+ # register-based arguments passing conventions
+ CPU_OPT="-6r"
+ # stack-based arguments passing conventions
+ #CPU_OPT="-6s"
+ ;;
+esac
+
+CFLAGS="$CFLAGS $CPU_OPT"
+
+
+# warnings
+
+# maximum level
+CFLAGS="$CFLAGS -wx"
+#CFLAGS="$CFLAGS -w3"
+
+# stop on warning
+CFLAGS="$CFLAGS -we"
+
+# built target is NT
+CFLAGS="$CFLAGS -bt=nt"
+
+# multithreaded
+CFLAGS="$CFLAGS -bm"
+
+# debug
+CFLAGS="$CFLAGS -d2"
+
+# quiet
+CFLAGS="$CFLAGS -zq"
+
+# Open Watcom C 1.2
+have=NGX_HAVE_C99_VARIADIC_MACROS . auto/have
+
+
+# the precompiled headers
+#CORE_DEPS="$CORE_DEPS $NGX_OBJS/ngx_config.pch"
+#NGX_PCH="$NGX_OBJS/ngx_config.pch"
+#NGX_BUILD_PCH="-fhq=$NGX_OBJS/ngx_config.pch"
+#NGX_USE_PCH="-fh=$NGX_OBJS/ngx_config.pch"
+
+
+# the link flags, built target is NT GUI mode application
+#CORE_LINK="$CORE_LINK -l=nt_win"
+
+
+# the resource file
+NGX_RCC="wrc \$(CORE_INCS) -fo=$NGX_OBJS/nginx.res "
+NGX_RCC="$NGX_RCC $NGX_WIN32_RC $NGX_OBJS/nginx.exe"
+
+
+ngx_include_opt="-i="
+ngx_objout="-fo"
+ngx_binout="-fe="
+ngx_objext="obj"
+ngx_binext=".exe"
+
+ngx_regex_dirsep='\\'
+ngx_dirsep="\\"
+
+ngx_long_start=' '
+ngx_long_end=' '
+ngx_long_regex_cont=' \&\
+ '
+ngx_long_cont=' &
+ '
+
+ngx_regex_cont=' \&\
+ '
+ngx_cont=' &
+ '
+ngx_tab=' &
+ '
diff --git a/app/nginx/auto/cc/sunc b/app/nginx/auto/cc/sunc
new file mode 100644
index 0000000..806ccc4
--- /dev/null
+++ b/app/nginx/auto/cc/sunc
@@ -0,0 +1,160 @@
+
+# Copyright (C) Igor Sysoev
+# Copyright (C) Nginx, Inc.
+
+
+# Sun C 5.7 Patch 117837-04 2005/05/11 Sun Studio 10
+# Sun C 5.8 2005/10/13 Sun Studio 11
+# Sun C 5.9 SunOS_i386 2007/05/03 Sun Studio 12
+# Sun C 5.9 SunOS_sparc 2007/05/03
+# Sun C 5.10 SunOS_i386 2009/06/03 Sun Studio 12.1
+# Sun C 5.11 SunOS_i386 2010/08/13 Sun Studio 12.2
+
+NGX_SUNC_VER=`$CC -V 2>&1 | grep 'Sun C' 2>&1 \
+ | sed -e 's/^.* Sun C \(.*\)/\1/'`
+
+echo " + Sun C version: $NGX_SUNC_VER"
+
+have=NGX_COMPILER value="\"Sun C $NGX_SUNC_VER\"" . auto/define
+
+
+cat << END > $NGX_AUTOTEST.c
+
+int main(void) {
+ printf("%d", __SUNPRO_C);
+ return 0;
+}
+
+END
+
+eval "$CC -o $NGX_AUTOTEST $NGX_AUTOTEST.c >> $NGX_ERR 2>&1"
+
+if [ -x $NGX_AUTOTEST ]; then
+ ngx_sunc_ver=`$NGX_AUTOTEST`
+fi
+
+rm -rf $NGX_AUTOTEST*
+
+# 1424 == 0x590, Sun Studio 12
+
+if [ "$ngx_sunc_ver" -ge 1424 ]; then
+ ngx_sparc32="-m32"
+ ngx_sparc64="-m64"
+ ngx_amd64="-m64"
+
+else
+ ngx_sparc32="-xarch=v8plus"
+ ngx_sparc64="-xarch=v9"
+ ngx_amd64="-xarch=amd64"
+fi
+
+case "$NGX_MACHINE" in
+
+ i86pc)
+ NGX_AUX=" src/os/unix/ngx_sunpro_x86.il"
+ ;;
+
+ sun4u | sun4v)
+ NGX_AUX=" src/os/unix/ngx_sunpro_sparc64.il"
+ ;;
+
+esac
+
+MAIN_LINK=
+MODULE_LINK="-G"
+
+
+# optimizations
+
+# 20736 == 0x5100, Sun Studio 12.1
+
+if [ "$ngx_sunc_ver" -ge 20736 ]; then
+ ngx_fast="-fast"
+
+else
+ # older versions had problems with bit-fields
+ ngx_fast="-fast -xalias_level=any"
+fi
+
+IPO=-xipo
+CFLAGS="$CFLAGS $ngx_fast $IPO"
+CORE_LINK="$CORE_LINK $ngx_fast $IPO"
+
+
+case $CPU in
+ pentium)
+ # optimize for Pentium and Athlon
+ CPU_OPT="-xchip=pentium"
+ ;;
+
+ pentiumpro)
+ # optimize for Pentium Pro, Pentium II
+ CPU_OPT="-xchip=pentium_pro"
+ ;;
+
+ pentium3)
+ # optimize for Pentium III
+ CPU_OPT="-xchip=pentium3"
+ #CPU_OPT="$CPU_OPT -xarch=sse"
+ CPU_OPT="$CPU_OPT -xcache=16/32/4:256/32/4"
+ ;;
+
+ pentium4)
+ # optimize for Pentium 4
+ CPU_OPT="-xchip=pentium4"
+ #CPU_OPT="$CPU_OPT -xarch=sse2"
+ CPU_OPT="$CPU_OPT -xcache=8/64/4:256/128/8"
+ ;;
+
+ opteron)
+ # optimize for Opteron
+ CPU_OPT="-xchip=opteron"
+ #CPU_OPT="$CPU_OPT -xarch=sse2"
+ CPU_OPT="$CPU_OPT -xcache=64/64/2:1024/64/16"
+ ;;
+
+ sparc32)
+ # build 32-bit UltraSparc binary
+ CPU_OPT="$ngx_sparc32"
+ CORE_LINK="$CORE_LINK $ngx_sparc32"
+ CC_AUX_FLAGS="$CC_AUX_FLAGS $ngx_sparc32"
+ NGX_CPU_CACHE_LINE=64
+ ;;
+
+ sparc64)
+ # build 64-bit UltraSparc binary
+ CPU_OPT="$ngx_sparc64"
+ CORE_LINK="$CORE_LINK $ngx_sparc64"
+ CC_AUX_FLAGS="$CC_AUX_FLAGS $ngx_sparc64"
+ NGX_CPU_CACHE_LINE=64
+ ;;
+
+ amd64)
+ # build 64-bit amd64 binary
+ CPU_OPT="$ngx_amd64"
+ CORE_LINK="$CORE_LINK $ngx_amd64"
+ CC_AUX_FLAGS="$CC_AUX_FLAGS $ngx_amd64"
+ NGX_AUX=" src/os/unix/ngx_sunpro_amd64.il"
+ NGX_CPU_CACHE_LINE=64
+ ;;
+
+esac
+
+
+CFLAGS="$CFLAGS $CPU_OPT"
+
+
+if [ ".$PCRE_OPT" = "." ]; then
+ PCRE_OPT="$ngx_fast $IPO $CPU_OPT"
+fi
+
+if [ ".$ZLIB_OPT" = "." ]; then
+ ZLIB_OPT="$ngx_fast $IPO $CPU_OPT"
+fi
+
+
+# stop on warning
+CFLAGS="$CFLAGS -errwarn=%all"
+
+# debug
+CFLAGS="$CFLAGS -g"
diff --git a/app/nginx/auto/configure b/app/nginx/auto/configure
new file mode 100755
index 0000000..ceff15e
--- /dev/null
+++ b/app/nginx/auto/configure
@@ -0,0 +1,116 @@
+#!/bin/sh
+
+# Copyright (C) Igor Sysoev
+# Copyright (C) Nginx, Inc.
+
+
+LC_ALL=C
+export LC_ALL
+
+. auto/options
+. auto/init
+. auto/sources
+
+test -d $NGX_OBJS || mkdir -p $NGX_OBJS
+
+echo > $NGX_AUTO_HEADERS_H
+echo > $NGX_AUTOCONF_ERR
+
+echo "#define NGX_CONFIGURE \"$NGX_CONFIGURE\"" > $NGX_AUTO_CONFIG_H
+
+
+if [ $NGX_DEBUG = YES ]; then
+ have=NGX_DEBUG . auto/have
+fi
+
+
+if test -z "$NGX_PLATFORM"; then
+ echo "checking for OS"
+
+ NGX_SYSTEM=`uname -s 2>/dev/null`
+ NGX_RELEASE=`uname -r 2>/dev/null`
+ NGX_MACHINE=`uname -m 2>/dev/null`
+
+ echo " + $NGX_SYSTEM $NGX_RELEASE $NGX_MACHINE"
+
+ NGX_PLATFORM="$NGX_SYSTEM:$NGX_RELEASE:$NGX_MACHINE";
+
+ case "$NGX_SYSTEM" in
+ MINGW32_*)
+ NGX_PLATFORM=win32
+ ;;
+ esac
+
+else
+ echo "building for $NGX_PLATFORM"
+ NGX_SYSTEM=$NGX_PLATFORM
+fi
+
+. auto/cc/conf
+
+if [ "$NGX_PLATFORM" != win32 ]; then
+ . auto/headers
+fi
+
+. auto/os/conf
+
+if [ "$NGX_PLATFORM" != win32 ]; then
+ . auto/unix
+fi
+
+. auto/threads
+. auto/modules
+. auto/lib/conf
+
+case ".$NGX_PREFIX" in
+ .)
+ NGX_PREFIX=${NGX_PREFIX:-/usr/local/nginx}
+ have=NGX_PREFIX value="\"$NGX_PREFIX/\"" . auto/define
+ ;;
+
+ .!)
+ NGX_PREFIX=
+ ;;
+
+ *)
+ have=NGX_PREFIX value="\"$NGX_PREFIX/\"" . auto/define
+ ;;
+esac
+
+if [ ".$NGX_CONF_PREFIX" != "." ]; then
+ have=NGX_CONF_PREFIX value="\"$NGX_CONF_PREFIX/\"" . auto/define
+fi
+
+have=NGX_SBIN_PATH value="\"$NGX_SBIN_PATH\"" . auto/define
+have=NGX_CONF_PATH value="\"$NGX_CONF_PATH\"" . auto/define
+have=NGX_PID_PATH value="\"$NGX_PID_PATH\"" . auto/define
+have=NGX_LOCK_PATH value="\"$NGX_LOCK_PATH\"" . auto/define
+have=NGX_ERROR_LOG_PATH value="\"$NGX_ERROR_LOG_PATH\"" . auto/define
+
+have=NGX_HTTP_LOG_PATH value="\"$NGX_HTTP_LOG_PATH\"" . auto/define
+have=NGX_HTTP_CLIENT_TEMP_PATH value="\"$NGX_HTTP_CLIENT_TEMP_PATH\""
+. auto/define
+have=NGX_HTTP_PROXY_TEMP_PATH value="\"$NGX_HTTP_PROXY_TEMP_PATH\""
+. auto/define
+have=NGX_HTTP_FASTCGI_TEMP_PATH value="\"$NGX_HTTP_FASTCGI_TEMP_PATH\""
+. auto/define
+have=NGX_HTTP_UWSGI_TEMP_PATH value="\"$NGX_HTTP_UWSGI_TEMP_PATH\""
+. auto/define
+have=NGX_HTTP_SCGI_TEMP_PATH value="\"$NGX_HTTP_SCGI_TEMP_PATH\""
+. auto/define
+
+. auto/make
+. auto/lib/make
+. auto/install
+
+# STUB
+. auto/stubs
+
+have=NGX_USER value="\"$NGX_USER\"" . auto/define
+have=NGX_GROUP value="\"$NGX_GROUP\"" . auto/define
+
+if [ ".$NGX_BUILD" != "." ]; then
+ have=NGX_BUILD value="\"$NGX_BUILD\"" . auto/define
+fi
+
+. auto/summary
diff --git a/app/nginx/auto/define b/app/nginx/auto/define
new file mode 100644
index 0000000..b5a7622
--- /dev/null
+++ b/app/nginx/auto/define
@@ -0,0 +1,12 @@
+
+# Copyright (C) Igor Sysoev
+# Copyright (C) Nginx, Inc.
+
+
+cat << END >> $NGX_AUTO_CONFIG_H
+
+#ifndef $have
+#define $have $value
+#endif
+
+END
diff --git a/app/nginx/auto/endianness b/app/nginx/auto/endianness
new file mode 100644
index 0000000..1b552b6
--- /dev/null
+++ b/app/nginx/auto/endianness
@@ -0,0 +1,50 @@
+
+# Copyright (C) Igor Sysoev
+# Copyright (C) Nginx, Inc.
+
+
+echo $ngx_n "checking for system byte ordering ...$ngx_c"
+
+cat << END >> $NGX_AUTOCONF_ERR
+
+----------------------------------------
+checking for system byte ordering
+
+END
+
+
+cat << END > $NGX_AUTOTEST.c
+
+int main(void) {
+ int i = 0x11223344;
+ char *p;
+
+ p = (char *) &i;
+ if (*p == 0x44) return 0;
+ return 1;
+}
+
+END
+
+ngx_test="$CC $CC_TEST_FLAGS $CC_AUX_FLAGS \
+ -o $NGX_AUTOTEST $NGX_AUTOTEST.c $NGX_LD_OPT $ngx_feature_libs"
+
+eval "$ngx_test >> $NGX_AUTOCONF_ERR 2>&1"
+
+if [ -x $NGX_AUTOTEST ]; then
+ if $NGX_AUTOTEST >/dev/null 2>&1; then
+ echo " little endian"
+ have=NGX_HAVE_LITTLE_ENDIAN . auto/have
+ else
+ echo " big endian"
+ fi
+
+ rm -rf $NGX_AUTOTEST*
+
+else
+ rm -rf $NGX_AUTOTEST*
+
+ echo
+ echo "$0: error: cannot detect system byte ordering"
+ exit 1
+fi
diff --git a/app/nginx/auto/feature b/app/nginx/auto/feature
new file mode 100644
index 0000000..3561f59
--- /dev/null
+++ b/app/nginx/auto/feature
@@ -0,0 +1,123 @@
+
+# Copyright (C) Igor Sysoev
+# Copyright (C) Nginx, Inc.
+
+
+echo $ngx_n "checking for $ngx_feature ...$ngx_c"
+
+cat << END >> $NGX_AUTOCONF_ERR
+
+----------------------------------------
+checking for $ngx_feature
+
+END
+
+ngx_found=no
+
+if test -n "$ngx_feature_name"; then
+ ngx_have_feature=`echo $ngx_feature_name \
+ | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ`
+fi
+
+if test -n "$ngx_feature_path"; then
+ for ngx_temp in $ngx_feature_path; do
+ ngx_feature_inc_path="$ngx_feature_inc_path -I $ngx_temp"
+ done
+fi
+
+cat << END > $NGX_AUTOTEST.c
+
+#include <sys/types.h>
+$NGX_INCLUDE_UNISTD_H
+$ngx_feature_incs
+
+int main(void) {
+ $ngx_feature_test;
+ return 0;
+}
+
+END
+
+
+ngx_test="$CC $CC_TEST_FLAGS $CC_AUX_FLAGS $ngx_feature_inc_path \
+ -o $NGX_AUTOTEST $NGX_AUTOTEST.c $NGX_TEST_LD_OPT $ngx_feature_libs"
+
+ngx_feature_inc_path=
+
+eval "/bin/sh -c \"$ngx_test\" >> $NGX_AUTOCONF_ERR 2>&1"
+
+
+if [ -x $NGX_AUTOTEST ]; then
+
+ case "$ngx_feature_run" in
+
+ yes)
+ # /bin/sh is used to intercept "Killed" or "Abort trap" messages
+ if /bin/sh -c $NGX_AUTOTEST >> $NGX_AUTOCONF_ERR 2>&1; then
+ echo " found"
+ ngx_found=yes
+
+ if test -n "$ngx_feature_name"; then
+ have=$ngx_have_feature . auto/have
+ fi
+
+ else
+ echo " found but is not working"
+ fi
+ ;;
+
+ value)
+ # /bin/sh is used to intercept "Killed" or "Abort trap" messages
+ if /bin/sh -c $NGX_AUTOTEST >> $NGX_AUTOCONF_ERR 2>&1; then
+ echo " found"
+ ngx_found=yes
+
+ cat << END >> $NGX_AUTO_CONFIG_H
+
+#ifndef $ngx_feature_name
+#define $ngx_feature_name `$NGX_AUTOTEST`
+#endif
+
+END
+ else
+ echo " found but is not working"
+ fi
+ ;;
+
+ bug)
+ # /bin/sh is used to intercept "Killed" or "Abort trap" messages
+ if /bin/sh -c $NGX_AUTOTEST >> $NGX_AUTOCONF_ERR 2>&1; then
+ echo " not found"
+
+ else
+ echo " found"
+ ngx_found=yes
+
+ if test -n "$ngx_feature_name"; then
+ have=$ngx_have_feature . auto/have
+ fi
+ fi
+ ;;
+
+ *)
+ echo " found"
+ ngx_found=yes
+
+ if test -n "$ngx_feature_name"; then
+ have=$ngx_have_feature . auto/have
+ fi
+ ;;
+
+ esac
+
+else
+ echo " not found"
+
+ echo "----------" >> $NGX_AUTOCONF_ERR
+ cat $NGX_AUTOTEST.c >> $NGX_AUTOCONF_ERR
+ echo "----------" >> $NGX_AUTOCONF_ERR
+ echo $ngx_test >> $NGX_AUTOCONF_ERR
+ echo "----------" >> $NGX_AUTOCONF_ERR
+fi
+
+rm -rf $NGX_AUTOTEST*
diff --git a/app/nginx/auto/have b/app/nginx/auto/have
new file mode 100644
index 0000000..f8e3751
--- /dev/null
+++ b/app/nginx/auto/have
@@ -0,0 +1,12 @@
+
+# Copyright (C) Igor Sysoev
+# Copyright (C) Nginx, Inc.
+
+
+cat << END >> $NGX_AUTO_CONFIG_H
+
+#ifndef $have
+#define $have 1
+#endif
+
+END
diff --git a/app/nginx/auto/have_headers b/app/nginx/auto/have_headers
new file mode 100644
index 0000000..a3a7543
--- /dev/null
+++ b/app/nginx/auto/have_headers
@@ -0,0 +1,12 @@
+
+# Copyright (C) Igor Sysoev
+# Copyright (C) Nginx, Inc.
+
+
+cat << END >> $NGX_AUTO_HEADERS_H
+
+#ifndef $have
+#define $have 1
+#endif
+
+END
diff --git a/app/nginx/auto/headers b/app/nginx/auto/headers
new file mode 100644
index 0000000..5a2e6b9
--- /dev/null
+++ b/app/nginx/auto/headers
@@ -0,0 +1,13 @@
+
+# Copyright (C) Igor Sysoev
+# Copyright (C) Nginx, Inc.
+
+
+ngx_include="unistd.h"; . auto/include
+ngx_include="inttypes.h"; . auto/include
+ngx_include="limits.h"; . auto/include
+ngx_include="sys/filio.h"; . auto/include
+ngx_include="sys/param.h"; . auto/include
+ngx_include="sys/mount.h"; . auto/include
+ngx_include="sys/statvfs.h"; . auto/include
+ngx_include="crypt.h"; . auto/include
diff --git a/app/nginx/auto/include b/app/nginx/auto/include
new file mode 100644
index 0000000..c1bd364
--- /dev/null
+++ b/app/nginx/auto/include
@@ -0,0 +1,58 @@
+
+# Copyright (C) Igor Sysoev
+# Copyright (C) Nginx, Inc.
+
+
+echo $ngx_n "checking for $ngx_include ...$ngx_c"
+
+cat << END >> $NGX_AUTOCONF_ERR
+
+----------------------------------------
+checking for $ngx_include
+
+END
+
+
+ngx_found=no
+
+cat << END > $NGX_AUTOTEST.c
+
+$NGX_INCLUDE_SYS_PARAM_H
+#include <$ngx_include>
+
+int main(void) {
+ return 0;
+}
+
+END
+
+
+ngx_test="$CC -o $NGX_AUTOTEST $NGX_AUTOTEST.c"
+
+eval "$ngx_test >> $NGX_AUTOCONF_ERR 2>&1"
+
+if [ -x $NGX_AUTOTEST ]; then
+
+ ngx_found=yes
+
+ echo " found"
+
+ ngx_name=`echo $ngx_include \
+ | tr abcdefghijklmnopqrstuvwxyz/. ABCDEFGHIJKLMNOPQRSTUVWXYZ__`
+
+
+ have=NGX_HAVE_$ngx_name . auto/have_headers
+
+ eval "NGX_INCLUDE_$ngx_name='#include <$ngx_include>'"
+
+else
+ echo " not found"
+
+ echo "----------" >> $NGX_AUTOCONF_ERR
+ cat $NGX_AUTOTEST.c >> $NGX_AUTOCONF_ERR
+ echo "----------" >> $NGX_AUTOCONF_ERR
+ echo $ngx_test >> $NGX_AUTOCONF_ERR
+ echo "----------" >> $NGX_AUTOCONF_ERR
+fi
+
+rm -rf $NGX_AUTOTEST*
diff --git a/app/nginx/auto/init b/app/nginx/auto/init
new file mode 100644
index 0000000..910f529
--- /dev/null
+++ b/app/nginx/auto/init
@@ -0,0 +1,51 @@
+
+# Copyright (C) Igor Sysoev
+# Copyright (C) Nginx, Inc.
+
+
+NGX_MAKEFILE=$NGX_OBJS/Makefile
+NGX_MODULES_C=$NGX_OBJS/ngx_modules.c
+
+NGX_AUTO_HEADERS_H=$NGX_OBJS/ngx_auto_headers.h
+NGX_AUTO_CONFIG_H=$NGX_OBJS/ngx_auto_config.h
+
+NGX_AUTOTEST=$NGX_OBJS/autotest
+NGX_AUTOCONF_ERR=$NGX_OBJS/autoconf.err
+
+# STUBs
+NGX_ERR=$NGX_OBJS/autoconf.err
+MAKEFILE=$NGX_OBJS/Makefile
+
+
+NGX_PCH=
+NGX_USE_PCH=
+
+
+# check the echo's "-n" option and "\c" capability
+
+if echo "test\c" | grep c >/dev/null; then
+
+ if echo -n test | grep n >/dev/null; then
+ ngx_n=
+ ngx_c=
+
+ else
+ ngx_n=-n
+ ngx_c=
+ fi
+
+else
+ ngx_n=
+ ngx_c='\c'
+fi
+
+
+# create Makefile
+
+cat << END > Makefile
+
+default: build
+
+clean:
+ rm -rf Makefile $NGX_OBJS
+END
diff --git a/app/nginx/auto/install b/app/nginx/auto/install
new file mode 100644
index 0000000..d884487
--- /dev/null
+++ b/app/nginx/auto/install
@@ -0,0 +1,218 @@
+
+# Copyright (C) Igor Sysoev
+# Copyright (C) Nginx, Inc.
+
+
+if [ $USE_PERL != NO ]; then
+
+ cat << END >> $NGX_MAKEFILE
+
+install_perl_modules:
+ cd $NGX_OBJS/src/http/modules/perl && \$(MAKE) install
+END
+
+ NGX_INSTALL_PERL_MODULES=install_perl_modules
+
+fi
+
+
+case ".$NGX_SBIN_PATH" in
+ ./*)
+ ;;
+
+ *)
+ NGX_SBIN_PATH=$NGX_PREFIX/$NGX_SBIN_PATH
+ ;;
+esac
+
+
+case ".$NGX_MODULES_PATH" in
+ ./*)
+ ;;
+
+ *)
+ NGX_MODULES_PATH=$NGX_PREFIX/$NGX_MODULES_PATH
+ ;;
+esac
+
+NGX_MODULES_PATH=`dirname $NGX_MODULES_PATH/.`
+
+
+case ".$NGX_CONF_PATH" in
+ ./*)
+ ;;
+
+ *)
+ NGX_CONF_PATH=$NGX_PREFIX/$NGX_CONF_PATH
+ ;;
+esac
+
+
+NGX_CONF_PREFIX=`dirname $NGX_CONF_PATH`
+
+
+case ".$NGX_PID_PATH" in
+ ./*)
+ ;;
+
+ *)
+ NGX_PID_PATH=$NGX_PREFIX/$NGX_PID_PATH
+ ;;
+esac
+
+
+case ".$NGX_ERROR_LOG_PATH" in
+ ./* | .)
+ ;;
+
+ *)
+ NGX_ERROR_LOG_PATH=$NGX_PREFIX/$NGX_ERROR_LOG_PATH
+ ;;
+esac
+
+
+case ".$NGX_HTTP_LOG_PATH" in
+ ./*)
+ ;;
+
+ *)
+ NGX_HTTP_LOG_PATH=$NGX_PREFIX/$NGX_HTTP_LOG_PATH
+ ;;
+esac
+
+
+if test -f man/nginx.8 ; then
+ NGX_MAN=man/nginx.8
+else
+ NGX_MAN=docs/man/nginx.8
+fi
+
+if test -d html ; then
+ NGX_HTML=html
+else
+ NGX_HTML=docs/html
+fi
+
+cat << END >> $NGX_MAKEFILE
+
+manpage: $NGX_OBJS/nginx.8
+
+$NGX_OBJS/nginx.8: $NGX_MAN $NGX_AUTO_CONFIG_H
+ sed -e "s|%%PREFIX%%|$NGX_PREFIX|" \\
+ -e "s|%%PID_PATH%%|$NGX_PID_PATH|" \\
+ -e "s|%%CONF_PATH%%|$NGX_CONF_PATH|" \\
+ -e "s|%%ERROR_LOG_PATH%%|${NGX_ERROR_LOG_PATH:-stderr}|" \\
+ < $NGX_MAN > \$@
+
+install: build $NGX_INSTALL_PERL_MODULES
+ test -d '\$(DESTDIR)$NGX_PREFIX' || mkdir -p '\$(DESTDIR)$NGX_PREFIX'
+
+ test -d '\$(DESTDIR)`dirname "$NGX_SBIN_PATH"`' \\
+ || mkdir -p '\$(DESTDIR)`dirname "$NGX_SBIN_PATH"`'
+ test ! -f '\$(DESTDIR)$NGX_SBIN_PATH' \\
+ || mv '\$(DESTDIR)$NGX_SBIN_PATH' \\
+ '\$(DESTDIR)$NGX_SBIN_PATH.old'
+ cp $NGX_OBJS/nginx '\$(DESTDIR)$NGX_SBIN_PATH'
+
+ test -d '\$(DESTDIR)$NGX_CONF_PREFIX' \\
+ || mkdir -p '\$(DESTDIR)$NGX_CONF_PREFIX'
+
+ cp conf/koi-win '\$(DESTDIR)$NGX_CONF_PREFIX'
+ cp conf/koi-utf '\$(DESTDIR)$NGX_CONF_PREFIX'
+ cp conf/win-utf '\$(DESTDIR)$NGX_CONF_PREFIX'
+
+ test -f '\$(DESTDIR)$NGX_CONF_PREFIX/mime.types' \\
+ || cp conf/mime.types '\$(DESTDIR)$NGX_CONF_PREFIX'
+ cp conf/mime.types '\$(DESTDIR)$NGX_CONF_PREFIX/mime.types.default'
+
+ test -f '\$(DESTDIR)$NGX_CONF_PREFIX/fastcgi_params' \\
+ || cp conf/fastcgi_params '\$(DESTDIR)$NGX_CONF_PREFIX'
+ cp conf/fastcgi_params \\
+ '\$(DESTDIR)$NGX_CONF_PREFIX/fastcgi_params.default'
+
+ test -f '\$(DESTDIR)$NGX_CONF_PREFIX/fastcgi.conf' \\
+ || cp conf/fastcgi.conf '\$(DESTDIR)$NGX_CONF_PREFIX'
+ cp conf/fastcgi.conf '\$(DESTDIR)$NGX_CONF_PREFIX/fastcgi.conf.default'
+
+ test -f '\$(DESTDIR)$NGX_CONF_PREFIX/uwsgi_params' \\
+ || cp conf/uwsgi_params '\$(DESTDIR)$NGX_CONF_PREFIX'
+ cp conf/uwsgi_params \\
+ '\$(DESTDIR)$NGX_CONF_PREFIX/uwsgi_params.default'
+
+ test -f '\$(DESTDIR)$NGX_CONF_PREFIX/scgi_params' \\
+ || cp conf/scgi_params '\$(DESTDIR)$NGX_CONF_PREFIX'
+ cp conf/scgi_params \\
+ '\$(DESTDIR)$NGX_CONF_PREFIX/scgi_params.default'
+
+ test -f '\$(DESTDIR)$NGX_CONF_PATH' \\
+ || cp conf/nginx.conf '\$(DESTDIR)$NGX_CONF_PATH'
+ cp conf/nginx.conf '\$(DESTDIR)$NGX_CONF_PREFIX/nginx.conf.default'
+
+ test -d '\$(DESTDIR)`dirname "$NGX_PID_PATH"`' \\
+ || mkdir -p '\$(DESTDIR)`dirname "$NGX_PID_PATH"`'
+
+ test -d '\$(DESTDIR)`dirname "$NGX_HTTP_LOG_PATH"`' \\
+ || mkdir -p '\$(DESTDIR)`dirname "$NGX_HTTP_LOG_PATH"`'
+
+ test -d '\$(DESTDIR)$NGX_PREFIX/html' \\
+ || cp -R $NGX_HTML '\$(DESTDIR)$NGX_PREFIX'
+END
+
+
+if test -n "$NGX_ERROR_LOG_PATH"; then
+ cat << END >> $NGX_MAKEFILE
+
+ test -d '\$(DESTDIR)`dirname "$NGX_ERROR_LOG_PATH"`' \\
+ || mkdir -p '\$(DESTDIR)`dirname "$NGX_ERROR_LOG_PATH"`'
+END
+
+fi
+
+
+if test -n "$DYNAMIC_MODULES"; then
+ cat << END >> $NGX_MAKEFILE
+
+ test -d '\$(DESTDIR)$NGX_MODULES_PATH' \\
+ || mkdir -p '\$(DESTDIR)$NGX_MODULES_PATH'
+END
+
+fi
+
+
+for ngx_module in $DYNAMIC_MODULES
+do
+ ngx_module=$ngx_module$ngx_modext
+
+ cat << END >> $NGX_MAKEFILE
+
+ test ! -f '\$(DESTDIR)$NGX_MODULES_PATH/$ngx_module' \\
+ || mv '\$(DESTDIR)$NGX_MODULES_PATH/$ngx_module' \\
+ '\$(DESTDIR)$NGX_MODULES_PATH/$ngx_module.old'
+ cp $NGX_OBJS/$ngx_module '\$(DESTDIR)$NGX_MODULES_PATH/$ngx_module'
+END
+
+done
+
+
+# create Makefile
+
+cat << END >> Makefile
+
+build:
+ \$(MAKE) -f $NGX_MAKEFILE
+
+install:
+ \$(MAKE) -f $NGX_MAKEFILE install
+
+modules:
+ \$(MAKE) -f $NGX_MAKEFILE modules
+
+upgrade:
+ $NGX_SBIN_PATH -t
+
+ kill -USR2 \`cat $NGX_PID_PATH\`
+ sleep 1
+ test -f $NGX_PID_PATH.oldbin
+
+ kill -QUIT \`cat $NGX_PID_PATH.oldbin\`
+END
diff --git a/app/nginx/auto/lib/conf b/app/nginx/auto/lib/conf
new file mode 100644
index 0000000..0b8545a
--- /dev/null
+++ b/app/nginx/auto/lib/conf
@@ -0,0 +1,54 @@
+
+# Copyright (C) Igor Sysoev
+# Copyright (C) Nginx, Inc.
+
+
+if [ $USE_PCRE = YES -o $PCRE != NONE ]; then
+ . auto/lib/pcre/conf
+
+else
+ if [ $USE_PCRE = DISABLED -a $HTTP_REWRITE = YES ]; then
+
+cat << END
+
+$0: error: the HTTP rewrite module requires the PCRE library.
+You can either disable the module by using --without-http_rewrite_module
+option or you have to enable the PCRE support.
+
+END
+ exit 1
+ fi
+fi
+
+
+if [ $USE_OPENSSL = YES ]; then
+ . auto/lib/openssl/conf
+fi
+
+if [ $USE_ZLIB = YES ]; then
+ . auto/lib/zlib/conf
+fi
+
+if [ $USE_LIBXSLT != NO ]; then
+ . auto/lib/libxslt/conf
+fi
+
+if [ $USE_LIBGD != NO ]; then
+ . auto/lib/libgd/conf
+fi
+
+if [ $USE_PERL != NO ]; then
+ . auto/lib/perl/conf
+fi
+
+if [ $USE_GEOIP != NO ]; then
+ . auto/lib/geoip/conf
+fi
+
+if [ $NGX_GOOGLE_PERFTOOLS = YES ]; then
+ . auto/lib/google-perftools/conf
+fi
+
+if [ $NGX_LIBATOMIC != NO ]; then
+ . auto/lib/libatomic/conf
+fi
diff --git a/app/nginx/auto/lib/geoip/conf b/app/nginx/auto/lib/geoip/conf
new file mode 100644
index 0000000..8302aae
--- /dev/null
+++ b/app/nginx/auto/lib/geoip/conf
@@ -0,0 +1,97 @@
+
+# Copyright (C) Igor Sysoev
+# Copyright (C) Nginx, Inc.
+
+
+ ngx_feature="GeoIP library"
+ ngx_feature_name=
+ ngx_feature_run=no
+ ngx_feature_incs="#include <GeoIP.h>"
+ ngx_feature_path=
+ ngx_feature_libs="-lGeoIP"
+ ngx_feature_test="GeoIP_open(NULL, 0)"
+ . auto/feature
+
+
+if [ $ngx_found = no ]; then
+
+ # FreeBSD port
+
+ ngx_feature="GeoIP library in /usr/local/"
+ ngx_feature_path="/usr/local/include"
+
+ if [ $NGX_RPATH = YES ]; then
+ ngx_feature_libs="-R/usr/local/lib -L/usr/local/lib -lGeoIP"
+ else
+ ngx_feature_libs="-L/usr/local/lib -lGeoIP"
+ fi
+
+ . auto/feature
+fi
+
+
+if [ $ngx_found = no ]; then
+
+ # NetBSD port
+
+ ngx_feature="GeoIP library in /usr/pkg/"
+ ngx_feature_path="/usr/pkg/include"
+
+ if [ $NGX_RPATH = YES ]; then
+ ngx_feature_libs="-R/usr/pkg/lib -L/usr/pkg/lib -lGeoIP"
+ else
+ ngx_feature_libs="-L/usr/pkg/lib -lGeoIP"
+ fi
+
+ . auto/feature
+fi
+
+
+if [ $ngx_found = no ]; then
+
+ # MacPorts
+
+ ngx_feature="GeoIP library in /opt/local/"
+ ngx_feature_path="/opt/local/include"
+
+ if [ $NGX_RPATH = YES ]; then
+ ngx_feature_libs="-R/opt/local/lib -L/opt/local/lib -lGeoIP"
+ else
+ ngx_feature_libs="-L/opt/local/lib -lGeoIP"
+ fi
+
+ . auto/feature
+fi
+
+
+if [ $ngx_found = yes ]; then
+
+ CORE_INCS="$CORE_INCS $ngx_feature_path"
+
+ if [ $USE_GEOIP = YES ]; then
+ CORE_LIBS="$CORE_LIBS $ngx_feature_libs"
+ fi
+
+ NGX_LIB_GEOIP=$ngx_feature_libs
+
+ ngx_feature="GeoIP IPv6 support"
+ ngx_feature_name="NGX_HAVE_GEOIP_V6"
+ ngx_feature_run=no
+ ngx_feature_incs="#include <stdio.h>
+ #include <GeoIP.h>"
+ #ngx_feature_path=
+ #ngx_feature_libs=
+ ngx_feature_test="printf(\"%d\", GEOIP_CITY_EDITION_REV0_V6);"
+ . auto/feature
+
+else
+
+cat << END
+
+$0: error: the GeoIP module requires the GeoIP library.
+You can either do not enable the module or install the library.
+
+END
+
+ exit 1
+fi
diff --git a/app/nginx/auto/lib/google-perftools/conf b/app/nginx/auto/lib/google-perftools/conf
new file mode 100644
index 0000000..5d5ddae
--- /dev/null
+++ b/app/nginx/auto/lib/google-perftools/conf
@@ -0,0 +1,61 @@
+
+# Copyright (C) Igor Sysoev
+# Copyright (C) Nginx, Inc.
+
+
+ ngx_feature="Google perftools"
+ ngx_feature_name=
+ ngx_feature_run=no
+ ngx_feature_incs=
+ ngx_feature_path=
+ ngx_feature_libs="-lprofiler"
+ ngx_feature_test="ProfilerStop()"
+ . auto/feature
+
+
+if [ $ngx_found = no ]; then
+
+ # FreeBSD port
+
+ ngx_feature="Google perftools in /usr/local/"
+
+ if [ $NGX_RPATH = YES ]; then
+ ngx_feature_libs="-R/usr/local/lib -L/usr/local/lib -lprofiler"
+ else
+ ngx_feature_libs="-L/usr/local/lib -lprofiler"
+ fi
+
+ . auto/feature
+fi
+
+
+if [ $ngx_found = no ]; then
+
+ # MacPorts
+
+ ngx_feature="Google perftools in /opt/local/"
+
+ if [ $NGX_RPATH = YES ]; then
+ ngx_feature_libs="-R/opt/local/lib -L/opt/local/lib -lprofiler"
+ else
+ ngx_feature_libs="-L/opt/local/lib -lprofiler"
+ fi
+
+ . auto/feature
+fi
+
+
+if [ $ngx_found = yes ]; then
+ CORE_LIBS="$CORE_LIBS $ngx_feature_libs"
+
+else
+
+cat << END
+
+$0: error: the Google perftools module requires the Google perftools
+library. You can either do not enable the module or install the library.
+
+END
+
+ exit 1
+fi
diff --git a/app/nginx/auto/lib/libatomic/conf b/app/nginx/auto/lib/libatomic/conf
new file mode 100644
index 0000000..d1e484a
--- /dev/null
+++ b/app/nginx/auto/lib/libatomic/conf
@@ -0,0 +1,43 @@
+
+# Copyright (C) Igor Sysoev
+# Copyright (C) Nginx, Inc.
+
+
+if [ $NGX_LIBATOMIC != YES ]; then
+
+ have=NGX_HAVE_LIBATOMIC . auto/have
+ CORE_INCS="$CORE_INCS $NGX_LIBATOMIC/src"
+ LINK_DEPS="$LINK_DEPS $NGX_LIBATOMIC/src/libatomic_ops.a"
+ CORE_LIBS="$CORE_LIBS $NGX_LIBATOMIC/src/libatomic_ops.a"
+
+else
+
+ ngx_feature="atomic_ops library"
+ ngx_feature_name=NGX_HAVE_LIBATOMIC
+ ngx_feature_run=yes
+ ngx_feature_incs="#define AO_REQUIRE_CAS
+ #include <atomic_ops.h>"
+ ngx_feature_path=
+ ngx_feature_libs="-latomic_ops"
+ ngx_feature_test="long n = 0;
+ if (!AO_compare_and_swap(&n, 0, 1))
+ return 1;
+ if (AO_fetch_and_add(&n, 1) != 1)
+ return 1;
+ if (n != 2)
+ return 1;
+ AO_nop();"
+ . auto/feature
+
+ if [ $ngx_found = yes ]; then
+ CORE_LIBS="$CORE_LIBS $ngx_feature_libs"
+ else
+
+cat << END
+
+$0: error: libatomic_ops library was not found.
+
+END
+ exit 1
+ fi
+fi
diff --git a/app/nginx/auto/lib/libatomic/make b/app/nginx/auto/lib/libatomic/make
new file mode 100644
index 0000000..c90318e
--- /dev/null
+++ b/app/nginx/auto/lib/libatomic/make
@@ -0,0 +1,16 @@
+
+# Copyright (C) Igor Sysoev
+# Copyright (C) Nginx, Inc.
+
+
+ cat << END >> $NGX_MAKEFILE
+
+$NGX_LIBATOMIC/src/libatomic_ops.a: $NGX_LIBATOMIC/Makefile
+ cd $NGX_LIBATOMIC && \$(MAKE)
+
+$NGX_LIBATOMIC/Makefile: $NGX_MAKEFILE
+ cd $NGX_LIBATOMIC \\
+ && if [ -f Makefile ]; then \$(MAKE) distclean; fi \\
+ && ./configure
+
+END
diff --git a/app/nginx/auto/lib/libgd/conf b/app/nginx/auto/lib/libgd/conf
new file mode 100644
index 0000000..87761f1
--- /dev/null
+++ b/app/nginx/auto/lib/libgd/conf
@@ -0,0 +1,93 @@
+
+# Copyright (C) Igor Sysoev
+# Copyright (C) Nginx, Inc.
+
+
+ ngx_feature="GD library"
+ ngx_feature_name=
+ ngx_feature_run=no
+ ngx_feature_incs="#include <gd.h>"
+ ngx_feature_path=
+ ngx_feature_libs="-lgd"
+ ngx_feature_test="gdImagePtr img = gdImageCreateFromGifPtr(1, NULL);"
+ . auto/feature
+
+
+if [ $ngx_found = no ]; then
+
+ # FreeBSD port
+
+ ngx_feature="GD library in /usr/local/"
+ ngx_feature_path="/usr/local/include"
+
+ if [ $NGX_RPATH = YES ]; then
+ ngx_feature_libs="-R/usr/local/lib -L/usr/local/lib -lgd"
+ else
+ ngx_feature_libs="-L/usr/local/lib -lgd"
+ fi
+
+ . auto/feature
+fi
+
+
+if [ $ngx_found = no ]; then
+
+ # NetBSD port
+
+ ngx_feature="GD library in /usr/pkg/"
+ ngx_feature_path="/usr/pkg/include"
+
+ if [ $NGX_RPATH = YES ]; then
+ ngx_feature_libs="-R/usr/pkg/lib -L/usr/pkg/lib -lgd"
+ else
+ ngx_feature_libs="-L/usr/pkg/lib -lgd"
+ fi
+
+ . auto/feature
+fi
+
+
+if [ $ngx_found = no ]; then
+
+ # MacPorts
+
+ ngx_feature="GD library in /opt/local/"
+ ngx_feature_path="/opt/local/include"
+
+ if [ $NGX_RPATH = YES ]; then
+ ngx_feature_libs="-R/opt/local/lib -L/opt/local/lib -lgd"
+ else
+ ngx_feature_libs="-L/opt/local/lib -lgd"
+ fi
+
+ . auto/feature
+fi
+
+
+if [ $ngx_found = yes ]; then
+
+ CORE_INCS="$CORE_INCS $ngx_feature_path"
+
+ if [ $USE_LIBGD = YES ]; then
+ CORE_LIBS="$CORE_LIBS $ngx_feature_libs"
+ fi
+
+ NGX_LIB_LIBGD=$ngx_feature_libs
+
+ ngx_feature="GD WebP support"
+ ngx_feature_name="NGX_HAVE_GD_WEBP"
+ ngx_feature_test="gdImagePtr img = gdImageCreateFromWebpPtr(1, NULL);"
+ . auto/feature
+
+else
+
+cat << END
+
+$0: error: the HTTP image filter module requires the GD library.
+You can either do not enable the module or install the libraries.
+
+END
+
+ exit 1
+
+fi
diff --git a/app/nginx/auto/lib/libxslt/conf b/app/nginx/auto/lib/libxslt/conf
new file mode 100644
index 0000000..3a0f37b
--- /dev/null
+++ b/app/nginx/auto/lib/libxslt/conf
@@ -0,0 +1,165 @@
+
+# Copyright (C) Igor Sysoev
+# Copyright (C) Nginx, Inc.
+
+
+ ngx_feature="libxslt"
+ ngx_feature_name=
+ ngx_feature_run=no
+ ngx_feature_incs="#include <libxml/parser.h>
+ #include <libxml/tree.h>
+ #include <libxslt/xslt.h>
+ #include <libxslt/xsltInternals.h>
+ #include <libxslt/transform.h>
+ #include <libxslt/xsltutils.h>"
+ ngx_feature_path="/usr/include/libxml2"
+ ngx_feature_libs="-lxml2 -lxslt"
+ ngx_feature_test="xmlParserCtxtPtr ctxt = NULL;
+ xsltStylesheetPtr sheet = NULL;
+ xmlDocPtr doc;
+ doc = xmlParseChunk(ctxt, NULL, 0, 0);
+ xsltApplyStylesheet(sheet, doc, NULL);"
+ . auto/feature
+
+
+if [ $ngx_found = no ]; then
+
+ # FreeBSD port
+
+ ngx_feature="libxslt in /usr/local/"
+ ngx_feature_path="/usr/local/include/libxml2 /usr/local/include"
+
+ if [ $NGX_RPATH = YES ]; then
+ ngx_feature_libs="-R/usr/local/lib -L/usr/local/lib -lxml2 -lxslt"
+ else
+ ngx_feature_libs="-L/usr/local/lib -lxml2 -lxslt"
+ fi
+
+ . auto/feature
+fi
+
+
+if [ $ngx_found = no ]; then
+
+ # NetBSD port
+
+ ngx_feature="libxslt in /usr/pkg/"
+ ngx_feature_path="/usr/pkg/include/libxml2 /usr/pkg/include"
+
+ if [ $NGX_RPATH = YES ]; then
+ ngx_feature_libs="-R/usr/pkg/lib -L/usr/pkg/lib -lxml2 -lxslt"
+ else
+ ngx_feature_libs="-L/usr/pkg/lib -lxml2 -lxslt"
+ fi
+
+ . auto/feature
+fi
+
+
+if [ $ngx_found = no ]; then
+
+ # MacPorts
+
+ ngx_feature="libxslt in /opt/local/"
+ ngx_feature_path="/opt/local/include/libxml2 /opt/local/include"
+
+ if [ $NGX_RPATH = YES ]; then
+ ngx_feature_libs="-R/opt/local/lib -L/opt/local/lib -lxml2 -lxslt"
+ else
+ ngx_feature_libs="-L/opt/local/lib -lxml2 -lxslt"
+ fi
+
+ . auto/feature
+fi
+
+
+if [ $ngx_found = yes ]; then
+
+ CORE_INCS="$CORE_INCS $ngx_feature_path"
+
+ if [ $USE_LIBXSLT = YES ]; then
+ CORE_LIBS="$CORE_LIBS $ngx_feature_libs"
+ fi
+
+ NGX_LIB_LIBXSLT=$ngx_feature_libs
+
+else
+
+cat << END
+
+$0: error: the HTTP XSLT module requires the libxml2/libxslt
+libraries. You can either do not enable the module or install the libraries.
+
+END
+
+ exit 1
+fi
+
+
+ ngx_feature="libexslt"
+ ngx_feature_name=NGX_HAVE_EXSLT
+ ngx_feature_run=no
+ ngx_feature_incs="#include <libexslt/exslt.h>"
+ ngx_feature_path="/usr/include/libxml2"
+ ngx_feature_libs="-lexslt"
+ ngx_feature_test="exsltRegisterAll();"
+ . auto/feature
+
+if [ $ngx_found = no ]; then
+
+ # FreeBSD port
+
+ ngx_feature="libexslt in /usr/local/"
+ ngx_feature_path="/usr/local/include/libxml2 /usr/local/include"
+
+ if [ $NGX_RPATH = YES ]; then
+ ngx_feature_libs="-R/usr/local/lib -L/usr/local/lib -lexslt"
+ else
+ ngx_feature_libs="-L/usr/local/lib -lexslt"
+ fi
+
+ . auto/feature
+fi
+
+
+if [ $ngx_found = no ]; then
+
+ # NetBSD port
+
+ ngx_feature="libexslt in /usr/pkg/"
+ ngx_feature_path="/usr/pkg/include/libxml2 /usr/local/include"
+
+ if [ $NGX_RPATH = YES ]; then
+ ngx_feature_libs="-R/usr/pkg/lib -L/usr/pkg/lib -lexslt"
+ else
+ ngx_feature_libs="-L/usr/pkg/lib -lexslt"
+ fi
+
+ . auto/feature
+fi
+
+
+if [ $ngx_found = no ]; then
+
+ # MacPorts
+
+ ngx_feature="libexslt in /opt/local/"
+ ngx_feature_path="/opt/local/include/libxml2 /opt/local/include"
+
+ if [ $NGX_RPATH = YES ]; then
+ ngx_feature_libs="-R/opt/local/lib -L/opt/local/lib -lexslt"
+ else
+ ngx_feature_libs="-L/opt/local/lib -lexslt"
+ fi
+
+ . auto/feature
+fi
+
+
+if [ $ngx_found = yes ]; then
+ if [ $USE_LIBXSLT = YES ]; then
+ CORE_LIBS="$CORE_LIBS -lexslt"
+ fi
+
+ NGX_LIB_LIBXSLT="$NGX_LIB_LIBXSLT -lexslt"
+fi
diff --git a/app/nginx/auto/lib/make b/app/nginx/auto/lib/make
new file mode 100644
index 0000000..b64e329
--- /dev/null
+++ b/app/nginx/auto/lib/make
@@ -0,0 +1,24 @@
+
+# Copyright (C) Igor Sysoev
+# Copyright (C) Nginx, Inc.
+
+
+if [ $PCRE != NONE -a $PCRE != NO -a $PCRE != YES ]; then
+ . auto/lib/pcre/make
+fi
+
+if [ $OPENSSL != NONE -a $OPENSSL != NO -a $OPENSSL != YES ]; then
+ . auto/lib/openssl/make
+fi
+
+if [ $ZLIB != NONE -a $ZLIB != NO -a $ZLIB != YES ]; then
+ . auto/lib/zlib/make
+fi
+
+if [ $NGX_LIBATOMIC != NO -a $NGX_LIBATOMIC != YES ]; then
+ . auto/lib/libatomic/make
+fi
+
+if [ $USE_PERL != NO ]; then
+ . auto/lib/perl/make
+fi
diff --git a/app/nginx/auto/lib/openssl/conf b/app/nginx/auto/lib/openssl/conf
new file mode 100644
index 0000000..e7d3795
--- /dev/null
+++ b/app/nginx/auto/lib/openssl/conf
@@ -0,0 +1,135 @@
+
+# Copyright (C) Igor Sysoev
+# Copyright (C) Nginx, Inc.
+
+
+if [ $OPENSSL != NONE ]; then
+
+ case "$CC" in
+
+ cl | bcc32)
+ have=NGX_OPENSSL . auto/have
+ have=NGX_SSL . auto/have
+
+ CFLAGS="$CFLAGS -DNO_SYS_TYPES_H"
+
+ CORE_INCS="$CORE_INCS $OPENSSL/openssl/include"
+ CORE_DEPS="$CORE_DEPS $OPENSSL/openssl/include/openssl/ssl.h"
+
+ if [ -f $OPENSSL/ms/do_ms.bat ]; then
+ # before OpenSSL 1.1.0
+ CORE_LIBS="$CORE_LIBS $OPENSSL/openssl/lib/ssleay32.lib"
+ CORE_LIBS="$CORE_LIBS $OPENSSL/openssl/lib/libeay32.lib"
+ else
+ # OpenSSL 1.1.0+
+ CORE_LIBS="$CORE_LIBS $OPENSSL/openssl/lib/libssl.lib"
+ CORE_LIBS="$CORE_LIBS $OPENSSL/openssl/lib/libcrypto.lib"
+ fi
+
+ # libeay32.lib requires gdi32.lib
+ CORE_LIBS="$CORE_LIBS gdi32.lib"
+ # OpenSSL 1.0.0 requires crypt32.lib
+ CORE_LIBS="$CORE_LIBS crypt32.lib"
+ ;;
+
+ *)
+ have=NGX_OPENSSL . auto/have
+ have=NGX_SSL . auto/have
+
+ CORE_INCS="$CORE_INCS $OPENSSL/.openssl/include"
+ CORE_DEPS="$CORE_DEPS $OPENSSL/.openssl/include/openssl/ssl.h"
+ CORE_LIBS="$CORE_LIBS $OPENSSL/.openssl/lib/libssl.a"
+ CORE_LIBS="$CORE_LIBS $OPENSSL/.openssl/lib/libcrypto.a"
+ CORE_LIBS="$CORE_LIBS $NGX_LIBDL"
+
+ if [ "$NGX_PLATFORM" = win32 ]; then
+ CORE_LIBS="$CORE_LIBS -lgdi32 -lcrypt32 -lws2_32"
+ fi
+ ;;
+ esac
+
+else
+
+ if [ "$NGX_PLATFORM" != win32 ]; then
+
+ OPENSSL=NO
+
+ ngx_feature="OpenSSL library"
+ ngx_feature_name="NGX_OPENSSL"
+ ngx_feature_run=no
+ ngx_feature_incs="#include <openssl/ssl.h>"
+ ngx_feature_path=
+ ngx_feature_libs="-lssl -lcrypto $NGX_LIBDL"
+ ngx_feature_test="SSL_CTX_set_options(NULL, 0)"
+ . auto/feature
+
+ if [ $ngx_found = no ]; then
+
+ # FreeBSD port
+
+ ngx_feature="OpenSSL library in /usr/local/"
+ ngx_feature_path="/usr/local/include"
+
+ if [ $NGX_RPATH = YES ]; then
+ ngx_feature_libs="-R/usr/local/lib -L/usr/local/lib -lssl -lcrypto $NGX_LIBDL"
+ else
+ ngx_feature_libs="-L/usr/local/lib -lssl -lcrypto $NGX_LIBDL"
+ fi
+
+ . auto/feature
+ fi
+
+ if [ $ngx_found = no ]; then
+
+ # NetBSD port
+
+ ngx_feature="OpenSSL library in /usr/pkg/"
+ ngx_feature_path="/usr/pkg/include"
+
+ if [ $NGX_RPATH = YES ]; then
+ ngx_feature_libs="-R/usr/pkg/lib -L/usr/pkg/lib -lssl -lcrypto $NGX_LIBDL"
+ else
+ ngx_feature_libs="-L/usr/pkg/lib -lssl -lcrypto $NGX_LIBDL"
+ fi
+
+ . auto/feature
+ fi
+
+ if [ $ngx_found = no ]; then
+
+ # MacPorts
+
+ ngx_feature="OpenSSL library in /opt/local/"
+ ngx_feature_path="/opt/local/include"
+
+ if [ $NGX_RPATH = YES ]; then
+ ngx_feature_libs="-R/opt/local/lib -L/opt/local/lib -lssl -lcrypto $NGX_LIBDL"
+ else
+ ngx_feature_libs="-L/opt/local/lib -lssl -lcrypto $NGX_LIBDL"
+ fi
+
+ . auto/feature
+ fi
+
+ if [ $ngx_found = yes ]; then
+ have=NGX_SSL . auto/have
+ CORE_INCS="$CORE_INCS $ngx_feature_path"
+ CORE_LIBS="$CORE_LIBS $ngx_feature_libs"
+ OPENSSL=YES
+ fi
+ fi
+
+ if [ $OPENSSL != YES ]; then
+
+cat << END
+
+$0: error: SSL modules require the OpenSSL library.
+You can either do not enable the modules, or install the OpenSSL library
+into the system, or build the OpenSSL library statically from the source
+with nginx by using --with-openssl=<path> option.
+
+END
+ exit 1
+ fi
+
+fi
diff --git a/app/nginx/auto/lib/openssl/make b/app/nginx/auto/lib/openssl/make
new file mode 100644
index 0000000..a6090c6
--- /dev/null
+++ b/app/nginx/auto/lib/openssl/make
@@ -0,0 +1,62 @@
+
+# Copyright (C) Igor Sysoev
+# Copyright (C) Nginx, Inc.
+
+
+case "$CC" in
+
+ cl)
+
+ cat << END >> $NGX_MAKEFILE
+
+$OPENSSL/openssl/include/openssl/ssl.h: $NGX_MAKEFILE
+ \$(MAKE) -f auto/lib/openssl/makefile.msvc \
+ OPENSSL="$OPENSSL" OPENSSL_OPT="$OPENSSL_OPT"
+
+END
+
+ ;;
+
+ bcc32)
+
+ ngx_opt=`echo "-DOPENSSL=\"$OPENSSL\" -DOPENSSL_OPT=\"$OPENSSL_OPT\"" \
+ | sed -e "s/\//$ngx_regex_dirsep/g"`
+
+ cat << END >> $NGX_MAKEFILE
+
+`echo "$OPENSSL\\openssl\\lib\\libeay32.lib: \
+ $OPENSSL\\openssl\\include\\openssl\\ssl.h" \
+ | sed -e "s/\//$ngx_regex_dirsep/g"`
+
+`echo "$OPENSSL\\openssl\\lib\\ssleay32.lib: \
+ $OPENSSL\\openssl\\include\\openssl\\ssl.h" \
+ | sed -e "s/\//$ngx_regex_dirsep/g"`
+
+`echo "$OPENSSL\\openssl\\include\\openssl\\ssl.h: $NGX_MAKEFILE" \
+ | sed -e "s/\//$ngx_regex_dirsep/g"`
+ \$(MAKE) -f auto/lib/openssl/makefile.bcc $ngx_opt
+
+END
+
+ ;;
+
+ *)
+ case $OPENSSL in
+ /*) ngx_prefix="$OPENSSL/.openssl" ;;
+ *) ngx_prefix="$PWD/$OPENSSL/.openssl" ;;
+ esac
+
+ cat << END >> $NGX_MAKEFILE
+
+$OPENSSL/.openssl/include/openssl/ssl.h: $NGX_MAKEFILE
+ cd $OPENSSL \\
+ && if [ -f Makefile ]; then \$(MAKE) clean; fi \\
+ && ./config --prefix=$ngx_prefix no-shared $OPENSSL_OPT \\
+ && \$(MAKE) \\
+ && \$(MAKE) install_sw LIBDIR=lib
+
+END
+
+ ;;
+
+esac
diff --git a/app/nginx/auto/lib/openssl/makefile.bcc b/app/nginx/auto/lib/openssl/makefile.bcc
new file mode 100644
index 0000000..6a94ff7
--- /dev/null
+++ b/app/nginx/auto/lib/openssl/makefile.bcc
@@ -0,0 +1,18 @@
+
+# Copyright (C) Igor Sysoev
+# Copyright (C) Nginx, Inc.
+
+
+all:
+ cd $(OPENSSL)
+
+ perl Configure BC-32 no-shared --prefix=openssl $(OPENSSL_OPT)
+
+ ms\do_nasm
+
+ $(MAKE) -f ms\bcb.mak
+ $(MAKE) -f ms\bcb.mak install
+
+ # Borland's make does not expand "[ch]" in
+ # copy "inc32\openssl\*.[ch]" "openssl\include\openssl"
+ copy inc32\openssl\*.h openssl\include\openssl
diff --git a/app/nginx/auto/lib/openssl/makefile.msvc b/app/nginx/auto/lib/openssl/makefile.msvc
new file mode 100644
index 0000000..5b90dcb
--- /dev/null
+++ b/app/nginx/auto/lib/openssl/makefile.msvc
@@ -0,0 +1,21 @@
+
+# Copyright (C) Igor Sysoev
+# Copyright (C) Nginx, Inc.
+
+
+all:
+ cd $(OPENSSL)
+
+ perl Configure VC-WIN32 no-shared \
+ --prefix="%cd%/openssl" \
+ --openssldir="%cd%/openssl/ssl" \
+ $(OPENSSL_OPT)
+
+ if exist ms\do_ms.bat ( \
+ ms\do_ms \
+ && $(MAKE) -f ms\nt.mak \
+ && $(MAKE) -f ms\nt.mak install \
+ ) else ( \
+ $(MAKE) \
+ && $(MAKE) install_sw \
+ )
diff --git a/app/nginx/auto/lib/pcre/conf b/app/nginx/auto/lib/pcre/conf
new file mode 100644
index 0000000..5e3960f
--- /dev/null
+++ b/app/nginx/auto/lib/pcre/conf
@@ -0,0 +1,203 @@
+
+# Copyright (C) Igor Sysoev
+# Copyright (C) Nginx, Inc.
+
+
+if [ $PCRE != NONE ]; then
+ CORE_INCS="$CORE_INCS $PCRE"
+
+ case "$NGX_CC_NAME" in
+
+ msvc | owc | bcc)
+ have=NGX_PCRE . auto/have
+ have=PCRE_STATIC . auto/have
+ CORE_DEPS="$CORE_DEPS $PCRE/pcre.h"
+ LINK_DEPS="$LINK_DEPS $PCRE/pcre.lib"
+ CORE_LIBS="$CORE_LIBS $PCRE/pcre.lib"
+ ;;
+
+ icc)
+ have=NGX_PCRE . auto/have
+ CORE_DEPS="$CORE_DEPS $PCRE/pcre.h"
+
+ LINK_DEPS="$LINK_DEPS $PCRE/.libs/libpcre.a"
+
+ echo $ngx_n "checking for PCRE library ...$ngx_c"
+
+ if [ -f $PCRE/pcre.h ]; then
+ ngx_pcre_ver=`grep PCRE_MAJOR $PCRE/pcre.h \
+ | sed -e 's/^.*PCRE_MAJOR.* \(.*\)$/\1/'`
+
+ else if [ -f $PCRE/configure.in ]; then
+ ngx_pcre_ver=`grep PCRE_MAJOR= $PCRE/configure.in \
+ | sed -e 's/^.*=\(.*\)$/\1/'`
+
+ else
+ ngx_pcre_ver=`grep pcre_major, $PCRE/configure.ac \
+ | sed -e 's/^.*pcre_major,.*\[\(.*\)\].*$/\1/'`
+ fi
+ fi
+
+ echo " $ngx_pcre_ver major version found"
+
+ # to allow -ipo optimization we link with the *.o but not library
+
+ case "$ngx_pcre_ver" in
+ 4|5)
+ CORE_LIBS="$CORE_LIBS $PCRE/pcre.o"
+ ;;
+
+ 6)
+ CORE_LIBS="$CORE_LIBS $PCRE/pcre_chartables.o"
+ CORE_LIBS="$CORE_LIBS $PCRE/pcre_compile.o"
+ CORE_LIBS="$CORE_LIBS $PCRE/pcre_exec.o"
+ CORE_LIBS="$CORE_LIBS $PCRE/pcre_fullinfo.o"
+ CORE_LIBS="$CORE_LIBS $PCRE/pcre_globals.o"
+ CORE_LIBS="$CORE_LIBS $PCRE/pcre_tables.o"
+ CORE_LIBS="$CORE_LIBS $PCRE/pcre_try_flipped.o"
+ ;;
+
+ *)
+ CORE_LIBS="$CORE_LIBS $PCRE/pcre_chartables.o"
+ CORE_LIBS="$CORE_LIBS $PCRE/pcre_compile.o"
+ CORE_LIBS="$CORE_LIBS $PCRE/pcre_exec.o"
+ CORE_LIBS="$CORE_LIBS $PCRE/pcre_fullinfo.o"
+ CORE_LIBS="$CORE_LIBS $PCRE/pcre_globals.o"
+ CORE_LIBS="$CORE_LIBS $PCRE/pcre_tables.o"
+ CORE_LIBS="$CORE_LIBS $PCRE/pcre_try_flipped.o"
+ CORE_LIBS="$CORE_LIBS $PCRE/pcre_newline.o"
+ ;;
+
+ esac
+ ;;
+
+ *)
+ have=NGX_PCRE . auto/have
+
+ if [ "$NGX_PLATFORM" = win32 ]; then
+ have=PCRE_STATIC . auto/have
+ fi
+
+ CORE_DEPS="$CORE_DEPS $PCRE/pcre.h"
+ LINK_DEPS="$LINK_DEPS $PCRE/.libs/libpcre.a"
+ CORE_LIBS="$CORE_LIBS $PCRE/.libs/libpcre.a"
+ ;;
+
+ esac
+
+
+ if [ $PCRE_JIT = YES ]; then
+ have=NGX_HAVE_PCRE_JIT . auto/have
+ PCRE_CONF_OPT="$PCRE_CONF_OPT --enable-jit"
+ fi
+
+else
+
+ if [ "$NGX_PLATFORM" != win32 ]; then
+
+ PCRE=NO
+
+ ngx_feature="PCRE library"
+ ngx_feature_name="NGX_PCRE"
+ ngx_feature_run=no
+ ngx_feature_incs="#include <pcre.h>"
+ ngx_feature_path=
+ ngx_feature_libs="-lpcre"
+ ngx_feature_test="pcre *re;
+ re = pcre_compile(NULL, 0, NULL, 0, NULL);
+ if (re == NULL) return 1"
+ . auto/feature
+
+ if [ $ngx_found = no ]; then
+
+ # FreeBSD port
+
+ ngx_feature="PCRE library in /usr/local/"
+ ngx_feature_path="/usr/local/include"
+
+ if [ $NGX_RPATH = YES ]; then
+ ngx_feature_libs="-R/usr/local/lib -L/usr/local/lib -lpcre"
+ else
+ ngx_feature_libs="-L/usr/local/lib -lpcre"
+ fi
+
+ . auto/feature
+ fi
+
+ if [ $ngx_found = no ]; then
+
+ # RedHat RPM, Solaris package
+
+ ngx_feature="PCRE library in /usr/include/pcre/"
+ ngx_feature_path="/usr/include/pcre"
+ ngx_feature_libs="-lpcre"
+
+ . auto/feature
+ fi
+
+ if [ $ngx_found = no ]; then
+
+ # NetBSD port
+
+ ngx_feature="PCRE library in /usr/pkg/"
+ ngx_feature_path="/usr/pkg/include"
+
+ if [ $NGX_RPATH = YES ]; then
+ ngx_feature_libs="-R/usr/pkg/lib -L/usr/pkg/lib -lpcre"
+ else
+ ngx_feature_libs="-L/usr/pkg/lib -lpcre"
+ fi
+
+ . auto/feature
+ fi
+
+ if [ $ngx_found = no ]; then
+
+ # MacPorts
+
+ ngx_feature="PCRE library in /opt/local/"
+ ngx_feature_path="/opt/local/include"
+
+ if [ $NGX_RPATH = YES ]; then
+ ngx_feature_libs="-R/opt/local/lib -L/opt/local/lib -lpcre"
+ else
+ ngx_feature_libs="-L/opt/local/lib -lpcre"
+ fi
+
+ . auto/feature
+ fi
+
+ if [ $ngx_found = yes ]; then
+ CORE_INCS="$CORE_INCS $ngx_feature_path"
+ CORE_LIBS="$CORE_LIBS $ngx_feature_libs"
+ PCRE=YES
+ fi
+
+ if [ $PCRE = YES ]; then
+ ngx_feature="PCRE JIT support"
+ ngx_feature_name="NGX_HAVE_PCRE_JIT"
+ ngx_feature_test="int jit = 0;
+ pcre_free_study(NULL);
+ pcre_config(PCRE_CONFIG_JIT, &jit);
+ if (jit != 1) return 1;"
+ . auto/feature
+
+ if [ $ngx_found = yes ]; then
+ PCRE_JIT=YES
+ fi
+ fi
+ fi
+
+ if [ $PCRE != YES ]; then
+cat << END
+
+$0: error: the HTTP rewrite module requires the PCRE library.
+You can either disable the module by using --without-http_rewrite_module
+option, or install the PCRE library into the system, or build the PCRE library
+statically from the source with nginx by using --with-pcre=<path> option.
+
+END
+ exit 1
+ fi
+
+fi
diff --git a/app/nginx/auto/lib/pcre/make b/app/nginx/auto/lib/pcre/make
new file mode 100644
index 0000000..97c9f3b
--- /dev/null
+++ b/app/nginx/auto/lib/pcre/make
@@ -0,0 +1,64 @@
+
+# Copyright (C) Igor Sysoev
+# Copyright (C) Nginx, Inc.
+
+
+case "$NGX_CC_NAME" in
+
+ msvc)
+ ngx_makefile=makefile.msvc
+ ngx_opt="CPU_OPT=\"$CPU_OPT\" LIBC=$LIBC"
+ ngx_pcre="PCRE=\"$PCRE\""
+ ;;
+
+ owc)
+ ngx_makefile=makefile.owc
+ ngx_opt="CPU_OPT=\"$CPU_OPT\""
+ ngx_pcre=`echo PCRE=\"$PCRE\" | sed -e "s/\//$ngx_regex_dirsep/g"`
+ ;;
+
+ bcc)
+ ngx_makefile=makefile.bcc
+ ngx_opt="-DCPU_OPT=\"$CPU_OPT\""
+ ngx_pcre=`echo \-DPCRE=\"$PCRE\" | sed -e "s/\//$ngx_regex_dirsep/g"`
+ ;;
+
+ *)
+ ngx_makefile=
+ ;;
+
+esac
+
+
+if [ -n "$ngx_makefile" ]; then
+
+ cat << END >> $NGX_MAKEFILE
+
+`echo "$PCRE/pcre.lib: $PCRE/pcre.h $NGX_MAKEFILE" \
+ | sed -e "s/\//$ngx_regex_dirsep/g"`
+ \$(MAKE) -f auto/lib/pcre/$ngx_makefile $ngx_pcre $ngx_opt
+
+`echo "$PCRE/pcre.h:" | sed -e "s/\//$ngx_regex_dirsep/g"`
+ \$(MAKE) -f auto/lib/pcre/$ngx_makefile $ngx_pcre pcre.h
+
+END
+
+else
+
+ cat << END >> $NGX_MAKEFILE
+
+$PCRE/pcre.h: $PCRE/Makefile
+
+$PCRE/Makefile: $NGX_MAKEFILE
+ cd $PCRE \\
+ && if [ -f Makefile ]; then \$(MAKE) distclean; fi \\
+ && CC="\$(CC)" CFLAGS="$PCRE_OPT" \\
+ ./configure --disable-shared $PCRE_CONF_OPT
+
+$PCRE/.libs/libpcre.a: $PCRE/Makefile
+ cd $PCRE \\
+ && \$(MAKE) libpcre.la
+
+END
+
+fi
diff --git a/app/nginx/auto/lib/pcre/makefile.bcc b/app/nginx/auto/lib/pcre/makefile.bcc
new file mode 100644
index 0000000..7a0f2be
--- /dev/null
+++ b/app/nginx/auto/lib/pcre/makefile.bcc
@@ -0,0 +1,27 @@
+
+# Copyright (C) Igor Sysoev
+# Copyright (C) Nginx, Inc.
+
+
+CFLAGS = -q -O2 -tWM -w-8004 $(CPU_OPT)
+PCREFLAGS = -DHAVE_CONFIG_H -DPCRE_STATIC -DPOSIX_MALLOC_THRESHOLD=10 \
+ -DSUPPORT_PCRE8 -DHAVE_MEMMOVE
+
+
+pcre.lib:
+ cd $(PCRE)
+
+ bcc32 -c $(CFLAGS) -I. $(PCREFLAGS) pcre_*.c
+
+ copy /y nul pcre.lst
+ for %n in (*.obj) do @echo +%n ^^& >> pcre.lst
+ echo + >> pcre.lst
+
+ tlib pcre.lib @pcre.lst
+
+pcre.h:
+ cd $(PCRE)
+
+ copy /y pcre.h.generic pcre.h
+ copy /y config.h.generic config.h
+ copy /y pcre_chartables.c.dist pcre_chartables.c
diff --git a/app/nginx/auto/lib/pcre/makefile.msvc b/app/nginx/auto/lib/pcre/makefile.msvc
new file mode 100644
index 0000000..07fd9a2
--- /dev/null
+++ b/app/nginx/auto/lib/pcre/makefile.msvc
@@ -0,0 +1,23 @@
+
+# Copyright (C) Igor Sysoev
+# Copyright (C) Nginx, Inc.
+
+
+CFLAGS = -O2 -Ob1 -Oi -Gs $(LIBC) $(CPU_OPT)
+PCREFLAGS = -DHAVE_CONFIG_H -DPCRE_STATIC -DPOSIX_MALLOC_THRESHOLD=10 \
+ -DSUPPORT_PCRE8 -DHAVE_MEMMOVE
+
+
+pcre.lib:
+ cd $(PCRE)
+
+ cl -nologo -c $(CFLAGS) -I . $(PCREFLAGS) pcre_*.c
+
+ link -lib -out:pcre.lib -verbose:lib pcre_*.obj
+
+pcre.h:
+ cd $(PCRE)
+
+ copy /y pcre.h.generic pcre.h
+ copy /y config.h.generic config.h
+ copy /y pcre_chartables.c.dist pcre_chartables.c
diff --git a/app/nginx/auto/lib/pcre/makefile.owc b/app/nginx/auto/lib/pcre/makefile.owc
new file mode 100644
index 0000000..122fd5b
--- /dev/null
+++ b/app/nginx/auto/lib/pcre/makefile.owc
@@ -0,0 +1,25 @@
+
+# Copyright (C) Igor Sysoev
+# Copyright (C) Nginx, Inc.
+
+
+CFLAGS = -c -zq -bt=nt -ot -op -oi -oe -s -bm $(CPU_OPT)
+PCREFLAGS = -DHAVE_CONFIG_H -DPCRE_STATIC -DPOSIX_MALLOC_THRESHOLD=10 &
+ -DSUPPORT_PCRE8 -DHAVE_MEMMOVE
+
+
+pcre.lib:
+ cd $(PCRE)
+
+ wcl386 $(CFLAGS) -i=. $(PCREFLAGS) pcre_*.c
+
+ dir /b *.obj > pcre.lst
+
+ wlib -n pcre.lib @pcre.lst
+
+pcre.h:
+ cd $(PCRE)
+
+ copy /y pcre.h.generic pcre.h
+ copy /y config.h.generic config.h
+ copy /y pcre_chartables.c.dist pcre_chartables.c
diff --git a/app/nginx/auto/lib/perl/conf b/app/nginx/auto/lib/perl/conf
new file mode 100644
index 0000000..e16a1bc
--- /dev/null
+++ b/app/nginx/auto/lib/perl/conf
@@ -0,0 +1,83 @@
+
+# Copyright (C) Igor Sysoev
+# Copyright (C) Nginx, Inc.
+
+
+echo "checking for perl"
+
+
+NGX_PERL_VER=`$NGX_PERL -v 2>&1 | grep '^This is perl' 2>&1 \
+ | sed -e 's/^This is perl, \(.*\)/\1/'`
+
+if test -n "$NGX_PERL_VER"; then
+ echo " + perl version: $NGX_PERL_VER"
+
+ if [ "`$NGX_PERL -e 'use 5.008006; print "OK"'`" != "OK" ]; then
+ echo
+ echo "$0: error: perl 5.8.6 or higher is required"
+ echo
+
+ exit 1;
+ fi
+
+ if [ "`$NGX_PERL -MExtUtils::Embed -e 'print "OK"'`" != "OK" ]; then
+ echo
+ echo "$0: error: perl module ExtUtils::Embed is required"
+ echo
+
+ exit 1;
+ fi
+
+ NGX_PM_CFLAGS=`$NGX_PERL -MExtUtils::Embed -e ccopts`
+ NGX_PM_LDFLAGS=`$NGX_PERL -MConfig -e 'print $Config{lddlflags}'`
+
+ NGX_PERL_CFLAGS="$CFLAGS `$NGX_PERL -MExtUtils::Embed -e ccopts`"
+
+ # gcc 4.1/4.2 warn about unused values in pTHX_
+ NGX_PERL_CFLAGS=`echo $NGX_PERL_CFLAGS \
+ | sed -e 's/-Wunused-value/-Wno-unused-value/'`
+ # icc8 warns 'declaration hides parameter "my_perl"' in ENTER and LEAVE
+ NGX_PERL_CFLAGS=`echo $NGX_PERL_CFLAGS \
+ | sed -e 's/-wd171/-wd171 -wd1599/'`
+
+ ngx_perl_ldopts=`$NGX_PERL -MExtUtils::Embed -e ldopts`
+
+ ngx_perl_dlext=`$NGX_PERL -MConfig -e 'print $Config{dlext}'`
+ ngx_perl_libdir="src/http/modules/perl/blib/arch/auto"
+ ngx_perl_module="$ngx_perl_libdir/nginx/nginx.$ngx_perl_dlext"
+
+ if $NGX_PERL -V:usemultiplicity | grep define > /dev/null; then
+ have=NGX_HAVE_PERL_MULTIPLICITY . auto/have
+ echo " + perl interpreter multiplicity found"
+ fi
+
+ if $NGX_PERL -V:useithreads | grep undef > /dev/null; then
+ # FreeBSD port wants to link with -pthread non-threaded perl
+ ngx_perl_ldopts=`echo $ngx_perl_ldopts | sed 's/ -pthread//'`
+ fi
+
+ if [ "$NGX_SYSTEM" = "Darwin" ]; then
+ # OS X system perl wants to link universal binaries
+ ngx_perl_ldopts=`echo $ngx_perl_ldopts \
+ | sed -e 's/-arch i386//' -e 's/-arch x86_64//'`
+ fi
+
+ if [ $USE_PERL = YES ]; then
+ CORE_LINK="$CORE_LINK $ngx_perl_ldopts"
+ fi
+
+ NGX_LIB_PERL="$ngx_perl_ldopts"
+
+ if test -n "$NGX_PERL_MODULES"; then
+ have=NGX_PERL_MODULES value="(u_char *) \"$NGX_PERL_MODULES\""
+ . auto/define
+ NGX_PERL_MODULES_MAN=$NGX_PERL_MODULES/man3
+ fi
+
+else
+ echo
+ echo "$0: error: perl 5.8.6 or higher is required"
+ echo
+
+ exit 1;
+fi
diff --git a/app/nginx/auto/lib/perl/make b/app/nginx/auto/lib/perl/make
new file mode 100644
index 0000000..74e0f3a
--- /dev/null
+++ b/app/nginx/auto/lib/perl/make
@@ -0,0 +1,46 @@
+
+# Copyright (C) Igor Sysoev
+# Copyright (C) Nginx, Inc.
+
+
+cat << END >> $NGX_MAKEFILE
+
+$NGX_OBJS/src/http/modules/perl/ngx_http_perl_module.o: \\
+ $NGX_OBJS/$ngx_perl_module
+
+$NGX_OBJS/$ngx_perl_module: \\
+ \$(CORE_DEPS) \$(HTTP_DEPS) \\
+ src/http/modules/perl/ngx_http_perl_module.h \\
+ $NGX_OBJS/src/http/modules/perl/Makefile
+ cd $NGX_OBJS/src/http/modules/perl && \$(MAKE)
+
+ rm -rf $NGX_OBJS/install_perl
+
+
+$NGX_OBJS/src/http/modules/perl/Makefile: \\
+ $NGX_AUTO_CONFIG_H \\
+ src/core/nginx.h \\
+ src/http/modules/perl/Makefile.PL \\
+ src/http/modules/perl/nginx.pm \\
+ src/http/modules/perl/nginx.xs \\
+ src/http/modules/perl/typemap
+ grep 'define NGINX_VERSION' src/core/nginx.h \\
+ | sed -e 's/^.*"\(.*\)".*/\1/' > \\
+ $NGX_OBJS/src/http/modules/perl/version
+ sed "s/%%VERSION%%/\`cat $NGX_OBJS/src/http/modules/perl/version\`/" \\
+ src/http/modules/perl/nginx.pm > \\
+ $NGX_OBJS/src/http/modules/perl/nginx.pm
+ cp -p src/http/modules/perl/nginx.xs $NGX_OBJS/src/http/modules/perl/
+ cp -p src/http/modules/perl/typemap $NGX_OBJS/src/http/modules/perl/
+ cp -p src/http/modules/perl/Makefile.PL $NGX_OBJS/src/http/modules/perl/
+
+ cd $NGX_OBJS/src/http/modules/perl \\
+ && NGX_PM_CFLAGS="\$(NGX_PM_CFLAGS) -g $NGX_CC_OPT" \\
+ NGX_PM_LDFLAGS="$NGX_LD_OPT \$(NGX_PM_LDFLAGS)" \\
+ NGX_INCS="$CORE_INCS $NGX_OBJS $HTTP_INCS" \\
+ NGX_DEPS="\$(CORE_DEPS) \$(HTTP_DEPS)" \\
+ $NGX_PERL Makefile.PL \\
+ LIB=$NGX_PERL_MODULES \\
+ INSTALLSITEMAN3DIR=$NGX_PERL_MODULES_MAN
+
+END
diff --git a/app/nginx/auto/lib/zlib/conf b/app/nginx/auto/lib/zlib/conf
new file mode 100644
index 0000000..239592e
--- /dev/null
+++ b/app/nginx/auto/lib/zlib/conf
@@ -0,0 +1,79 @@
+
+# Copyright (C) Igor Sysoev
+# Copyright (C) Nginx, Inc.
+
+
+if [ $ZLIB != NONE ]; then
+ CORE_INCS="$CORE_INCS $ZLIB"
+
+ case "$NGX_CC_NAME" in
+
+ msvc | owc | bcc)
+ have=NGX_ZLIB . auto/have
+ LINK_DEPS="$LINK_DEPS $ZLIB/zlib.lib"
+ CORE_LIBS="$CORE_LIBS $ZLIB/zlib.lib"
+ ;;
+
+ icc)
+ have=NGX_ZLIB . auto/have
+ LINK_DEPS="$LINK_DEPS $ZLIB/libz.a"
+
+ # to allow -ipo optimization we link with the *.o but not library
+ CORE_LIBS="$CORE_LIBS $ZLIB/adler32.o"
+ CORE_LIBS="$CORE_LIBS $ZLIB/crc32.o"
+ CORE_LIBS="$CORE_LIBS $ZLIB/deflate.o"
+ CORE_LIBS="$CORE_LIBS $ZLIB/trees.o"
+ CORE_LIBS="$CORE_LIBS $ZLIB/zutil.o"
+ CORE_LIBS="$CORE_LIBS $ZLIB/compress.o"
+
+ if [ $ZLIB_ASM != NO ]; then
+ CORE_LIBS="$CORE_LIBS $ZLIB/match.o"
+ fi
+ ;;
+
+ *)
+ have=NGX_ZLIB . auto/have
+ LINK_DEPS="$LINK_DEPS $ZLIB/libz.a"
+ CORE_LIBS="$CORE_LIBS $ZLIB/libz.a"
+ #CORE_LIBS="$CORE_LIBS -L $ZLIB -lz"
+ ;;
+
+ esac
+
+else
+
+ if [ "$NGX_PLATFORM" != win32 ]; then
+ ZLIB=NO
+
+ # FreeBSD, Solaris, Linux
+
+ ngx_feature="zlib library"
+ ngx_feature_name="NGX_ZLIB"
+ ngx_feature_run=no
+ ngx_feature_incs="#include <zlib.h>"
+ ngx_feature_path=
+ ngx_feature_libs="-lz"
+ ngx_feature_test="z_stream z; deflate(&z, Z_NO_FLUSH)"
+ . auto/feature
+
+
+ if [ $ngx_found = yes ]; then
+ CORE_LIBS="$CORE_LIBS $ngx_feature_libs"
+ ZLIB=YES
+ ngx_found=no
+ fi
+ fi
+
+ if [ $ZLIB != YES ]; then
+cat << END
+
+$0: error: the HTTP gzip module requires the zlib library.
+You can either disable the module by using --without-http_gzip_module
+option, or install the zlib library into the system, or build the zlib library
+statically from the source with nginx by using --with-zlib=<path> option.
+
+END
+ exit 1
+ fi
+
+fi
diff --git a/app/nginx/auto/lib/zlib/make b/app/nginx/auto/lib/zlib/make
new file mode 100644
index 0000000..0082ad5
--- /dev/null
+++ b/app/nginx/auto/lib/zlib/make
@@ -0,0 +1,135 @@
+
+# Copyright (C) Igor Sysoev
+# Copyright (C) Nginx, Inc.
+
+
+case "$NGX_CC_NAME" in
+
+ msvc)
+ ngx_makefile=makefile.msvc
+ ngx_opt="CPU_OPT=\"$CPU_OPT\" LIBC=$LIBC"
+ ngx_zlib="ZLIB=\"$ZLIB\""
+
+ ;;
+
+ owc)
+ ngx_makefile=makefile.owc
+ ngx_opt="CPU_OPT=\"$CPU_OPT\""
+ ngx_zlib=`echo ZLIB=\"$ZLIB\" | sed -e "s/\//$ngx_regex_dirsep/g"`
+ ;;
+
+ bcc)
+ ngx_makefile=makefile.bcc
+ ngx_opt="-DCPU_OPT=\"$CPU_OPT\""
+ ngx_zlib=`echo \-DZLIB=\"$ZLIB\" | sed -e "s/\//$ngx_regex_dirsep/g"`
+ ;;
+
+ *)
+ ngx_makefile=
+ ;;
+
+esac
+
+
+done=NO
+
+
+case "$NGX_PLATFORM" in
+
+ win32)
+
+ if [ -n "$ngx_makefile" ]; then
+ cat << END >> $NGX_MAKEFILE
+
+`echo "$ZLIB/zlib.lib: $NGX_MAKEFILE" | sed -e "s/\//$ngx_regex_dirsep/g"`
+ \$(MAKE) -f auto/lib/zlib/$ngx_makefile $ngx_opt $ngx_zlib
+
+END
+
+ else
+
+ cat << END >> $NGX_MAKEFILE
+
+$ZLIB/libz.a: $NGX_MAKEFILE
+ cd $ZLIB \\
+ && \$(MAKE) distclean \\
+ && \$(MAKE) -f win32/Makefile.gcc \\
+ CFLAGS="$ZLIB_OPT" CC="\$(CC)" \\
+ libz.a
+
+END
+
+ fi
+
+ done=YES
+ ;;
+
+ # FreeBSD: i386
+ # Linux: i686
+
+ *:i386 | *:i686)
+ case $ZLIB_ASM in
+ pentium)
+
+ cat << END >> $NGX_MAKEFILE
+
+$ZLIB/libz.a: $NGX_MAKEFILE
+ cd $ZLIB \\
+ && \$(MAKE) distclean \\
+ && cp contrib/asm586/match.S . \\
+ && CFLAGS="$ZLIB_OPT -DASMV" CC="\$(CC)" \\
+ ./configure \\
+ && \$(MAKE) OBJA=match.o libz.a
+
+END
+
+ done=YES
+ ;;
+
+ pentiumpro)
+
+ cat << END >> $NGX_MAKEFILE
+
+$ZLIB/libz.a: $NGX_MAKEFILE
+ cd $ZLIB \\
+ && \$(MAKE) distclean \\
+ && cp contrib/asm686/match.S . \\
+ && CFLAGS="$ZLIB_OPT -DASMV" CC="\$(CC)" \\
+ ./configure \\
+ && \$(MAKE) OBJA=match.o libz.a
+
+END
+
+ done=YES
+ ;;
+
+ NO)
+ ;;
+
+ *)
+ echo "$0: error: invalid --with-zlib-asm=$ZLIB_ASM option."
+ echo "The valid values are \"pentium\" and \"pentiumpro\" only".
+ echo
+
+ exit 1;
+ ;;
+ esac
+ ;;
+
+esac
+
+
+if [ $done = NO ]; then
+
+ cat << END >> $NGX_MAKEFILE
+
+$ZLIB/libz.a: $NGX_MAKEFILE
+ cd $ZLIB \\
+ && \$(MAKE) distclean \\
+ && CFLAGS="$ZLIB_OPT" CC="\$(CC)" \\
+ ./configure \\
+ && \$(MAKE) libz.a
+
+END
+
+fi
diff --git a/app/nginx/auto/lib/zlib/makefile.bcc b/app/nginx/auto/lib/zlib/makefile.bcc
new file mode 100644
index 0000000..97a30ea
--- /dev/null
+++ b/app/nginx/auto/lib/zlib/makefile.bcc
@@ -0,0 +1,17 @@
+
+# Copyright (C) Igor Sysoev
+# Copyright (C) Nginx, Inc.
+
+
+CFLAGS = -q -O2 -tWM -w-8004 -w-8012 $(CPU_OPT)
+
+zlib.lib:
+ cd $(ZLIB)
+
+ bcc32 -c $(CFLAGS) adler32.c crc32.c deflate.c \
+ trees.c zutil.c compress.c \
+ inflate.c inffast.c inftrees.c
+
+ tlib zlib.lib +adler32.obj +crc32.obj +deflate.obj \
+ +trees.obj +zutil.obj +compress.obj \
+ +inflate.obj +inffast.obj +inftrees.obj
diff --git a/app/nginx/auto/lib/zlib/makefile.msvc b/app/nginx/auto/lib/zlib/makefile.msvc
new file mode 100644
index 0000000..6fbd691
--- /dev/null
+++ b/app/nginx/auto/lib/zlib/makefile.msvc
@@ -0,0 +1,17 @@
+
+# Copyright (C) Igor Sysoev
+# Copyright (C) Nginx, Inc.
+
+
+CFLAGS = -nologo -O2 -Ob1 -Oi -Gs $(LIBC) $(CPU_OPT)
+
+zlib.lib:
+ cd $(ZLIB)
+
+ cl -c $(CFLAGS) adler32.c crc32.c deflate.c \
+ trees.c zutil.c compress.c \
+ inflate.c inffast.c inftrees.c
+
+ link -lib -out:zlib.lib adler32.obj crc32.obj deflate.obj \
+ trees.obj zutil.obj compress.obj \
+ inflate.obj inffast.obj inftrees.obj
diff --git a/app/nginx/auto/lib/zlib/makefile.owc b/app/nginx/auto/lib/zlib/makefile.owc
new file mode 100644
index 0000000..9e123be
--- /dev/null
+++ b/app/nginx/auto/lib/zlib/makefile.owc
@@ -0,0 +1,14 @@
+
+# Copyright (C) Igor Sysoev
+# Copyright (C) Nginx, Inc.
+
+
+CFLAGS = -zq -bt=nt -ot -op -oi -oe -s -bm $(CPU_OPT)
+
+zlib.lib:
+ cd $(ZLIB)
+
+ wcl386 -c $(CFLAGS) adler32.c crc32.c deflate.c trees.c zutil.c &
+ compress.c inflate.c inffast.c inftrees.c
+ wlib -n zlib.lib adler32.obj crc32.obj deflate.obj trees.obj &
+ zutil.obj compress.obj inflate.obj inffast.obj inftrees.obj
diff --git a/app/nginx/auto/make b/app/nginx/auto/make
new file mode 100644
index 0000000..516c2ca
--- /dev/null
+++ b/app/nginx/auto/make
@@ -0,0 +1,673 @@
+
+# Copyright (C) Igor Sysoev
+# Copyright (C) Nginx, Inc.
+
+
+echo "creating $NGX_MAKEFILE"
+
+mkdir -p $NGX_OBJS/src/core $NGX_OBJS/src/event $NGX_OBJS/src/event/modules \
+ $NGX_OBJS/src/os/unix $NGX_OBJS/src/os/win32 \
+ $NGX_OBJS/src/http $NGX_OBJS/src/http/v2 $NGX_OBJS/src/http/modules \
+ $NGX_OBJS/src/http/modules/perl \
+ $NGX_OBJS/src/mail \
+ $NGX_OBJS/src/stream \
+ $NGX_OBJS/src/tldk \
+ $NGX_OBJS/src/misc
+
+
+ngx_objs_dir=$NGX_OBJS$ngx_regex_dirsep
+ngx_use_pch=`echo $NGX_USE_PCH | sed -e "s/\//$ngx_regex_dirsep/g"`
+
+
+cat << END > $NGX_MAKEFILE
+
+CC = $CC
+CFLAGS = $CFLAGS
+CPP = $CPP
+LINK = $LINK
+
+END
+
+
+if test -n "$NGX_PERL_CFLAGS"; then
+ echo NGX_PERL_CFLAGS = $NGX_PERL_CFLAGS >> $NGX_MAKEFILE
+ echo NGX_PM_CFLAGS = $NGX_PM_CFLAGS >> $NGX_MAKEFILE
+ echo NGX_PM_LDFLAGS = $NGX_PM_LDFLAGS >> $NGX_MAKEFILE
+fi
+
+
+# ALL_INCS, required by the addons and by OpenWatcom C precompiled headers
+
+ngx_incs=`echo $CORE_INCS $NGX_OBJS $HTTP_INCS $MAIL_INCS $STREAM_INCS\
+ | sed -e "s/ *\([^ ][^ ]*\)/$ngx_regex_cont$ngx_include_opt\1/g" \
+ -e "s/\//$ngx_regex_dirsep/g"`
+
+cat << END >> $NGX_MAKEFILE
+
+ALL_INCS = $ngx_include_opt$ngx_incs
+
+END
+
+
+ngx_all_srcs="$CORE_SRCS"
+
+
+# the core dependencies and include paths
+
+ngx_deps=`echo $CORE_DEPS $NGX_AUTO_CONFIG_H $NGX_PCH \
+ | sed -e "s/ *\([^ ][^ ]*\)/$ngx_regex_cont\1/g" \
+ -e "s/\//$ngx_regex_dirsep/g"`
+
+ngx_incs=`echo $CORE_INCS $NGX_OBJS \
+ | sed -e "s/ *\([^ ][^ ]*\)/$ngx_regex_cont$ngx_include_opt\1/g" \
+ -e "s/\//$ngx_regex_dirsep/g"`
+
+cat << END >> $NGX_MAKEFILE
+
+CORE_DEPS = $ngx_deps
+
+
+CORE_INCS = $ngx_include_opt$ngx_incs
+
+END
+
+
+# the http dependencies and include paths
+
+if [ $HTTP = YES ]; then
+
+ ngx_all_srcs="$ngx_all_srcs $HTTP_SRCS"
+
+ ngx_deps=`echo $HTTP_DEPS \
+ | sed -e "s/ *\([^ ][^ ]*\)/$ngx_regex_cont\1/g" \
+ -e "s/\//$ngx_regex_dirsep/g"`
+
+ ngx_incs=`echo $HTTP_INCS \
+ | sed -e "s/ *\([^ ][^ ]*\)/$ngx_regex_cont$ngx_include_opt\1/g" \
+ -e "s/\//$ngx_regex_dirsep/g"`
+
+ cat << END >> $NGX_MAKEFILE
+
+HTTP_DEPS = $ngx_deps
+
+
+HTTP_INCS = $ngx_include_opt$ngx_incs
+
+END
+
+fi
+
+
+# the mail dependencies and include paths
+
+if [ $MAIL != NO ]; then
+
+ if [ $MAIL = YES ]; then
+ ngx_all_srcs="$ngx_all_srcs $MAIL_SRCS"
+ fi
+
+ ngx_deps=`echo $MAIL_DEPS \
+ | sed -e "s/ *\([^ ][^ ]*\)/$ngx_regex_cont\1/g" \
+ -e "s/\//$ngx_regex_dirsep/g"`
+
+ ngx_incs=`echo $MAIL_INCS \
+ | sed -e "s/ *\([^ ][^ ]*\)/$ngx_regex_cont$ngx_include_opt\1/g" \
+ -e "s/\//$ngx_regex_dirsep/g"`
+
+ cat << END >> $NGX_MAKEFILE
+
+MAIL_DEPS = $ngx_deps
+
+
+MAIL_INCS = $ngx_include_opt$ngx_incs
+
+END
+
+fi
+
+
+# the stream dependencies and include paths
+
+if [ $STREAM != NO ]; then
+
+ if [ $STREAM = YES ]; then
+ ngx_all_srcs="$ngx_all_srcs $STREAM_SRCS"
+ fi
+
+ ngx_deps=`echo $STREAM_DEPS \
+ | sed -e "s/ *\([^ ][^ ]*\)/$ngx_regex_cont\1/g" \
+ -e "s/\//$ngx_regex_dirsep/g"`
+
+ ngx_incs=`echo $STREAM_INCS \
+ | sed -e "s/ *\([^ ][^ ]*\)/$ngx_regex_cont$ngx_include_opt\1/g" \
+ -e "s/\//$ngx_regex_dirsep/g"`
+
+ cat << END >> $NGX_MAKEFILE
+
+STREAM_DEPS = $ngx_deps
+
+
+STREAM_INCS = $ngx_include_opt$ngx_incs
+
+END
+
+fi
+
+
+ngx_all_srcs="$ngx_all_srcs $MISC_SRCS"
+
+
+if test -n "$NGX_ADDON_SRCS$DYNAMIC_MODULES"; then
+
+cat << END >> $NGX_MAKEFILE
+
+ADDON_DEPS = \$(CORE_DEPS) $NGX_ADDON_DEPS
+
+END
+
+fi
+
+
+# nginx
+
+ngx_all_srcs=`echo $ngx_all_srcs | sed -e "s/\//$ngx_regex_dirsep/g"`
+
+for ngx_src in $NGX_ADDON_SRCS
+do
+ ngx_obj="addon/`basename \`dirname $ngx_src\``"
+
+ test -d $NGX_OBJS/$ngx_obj || mkdir -p $NGX_OBJS/$ngx_obj
+
+ ngx_obj=`echo $ngx_obj/\`basename $ngx_src\` \
+ | sed -e "s/\//$ngx_regex_dirsep/g"`
+
+ ngx_all_srcs="$ngx_all_srcs $ngx_obj"
+done
+
+ngx_all_objs=`echo $ngx_all_srcs \
+ | sed -e "s#\([^ ]*\.\)cpp#$NGX_OBJS\/\1$ngx_objext#g" \
+ -e "s#\([^ ]*\.\)cc#$NGX_OBJS\/\1$ngx_objext#g" \
+ -e "s#\([^ ]*\.\)c#$NGX_OBJS\/\1$ngx_objext#g" \
+ -e "s#\([^ ]*\.\)S#$NGX_OBJS\/\1$ngx_objext#g"`
+
+ngx_modules_c=`echo $NGX_MODULES_C | sed -e "s/\//$ngx_regex_dirsep/g"`
+
+ngx_modules_obj=`echo $ngx_modules_c | sed -e "s/\(.*\.\)c/\1$ngx_objext/"`
+
+
+if test -n "$NGX_RES"; then
+ ngx_res=$NGX_RES
+else
+ ngx_res="$NGX_RC $NGX_ICONS"
+ ngx_rcc=`echo $NGX_RCC | sed -e "s/\//$ngx_regex_dirsep/g"`
+fi
+
+ngx_deps=`echo $ngx_all_objs $ngx_modules_obj $ngx_res $LINK_DEPS \
+ | sed -e "s/ *\([^ ][^ ]*\)/$ngx_regex_cont\1/g" \
+ -e "s/\//$ngx_regex_dirsep/g"`
+
+ngx_objs=`echo $ngx_all_objs $ngx_modules_obj \
+ | sed -e "s/ *\([^ ][^ ]*\)/$ngx_long_regex_cont\1/g" \
+ -e "s/\//$ngx_regex_dirsep/g"`
+
+ngx_libs=
+if test -n "$NGX_LD_OPT$CORE_LIBS"; then
+ ngx_libs=`echo $NGX_LD_OPT $CORE_LIBS \
+ | sed -e "s/\//$ngx_regex_dirsep/g" -e "s/^/$ngx_long_regex_cont/"`
+fi
+
+ngx_link=${CORE_LINK:+`echo $CORE_LINK \
+ | sed -e "s/\//$ngx_regex_dirsep/g" -e "s/^/$ngx_long_regex_cont/"`}
+
+ngx_main_link=${MAIN_LINK:+`echo $MAIN_LINK \
+ | sed -e "s/\//$ngx_regex_dirsep/g" -e "s/^/$ngx_long_regex_cont/"`}
+
+
+cat << END >> $NGX_MAKEFILE
+
+build: binary modules manpage
+
+binary: $NGX_OBJS${ngx_dirsep}nginx$ngx_binext
+
+$NGX_OBJS${ngx_dirsep}nginx$ngx_binext: $ngx_deps$ngx_spacer
+ \$(LINK) $ngx_long_start$ngx_binout$NGX_OBJS${ngx_dirsep}nginx$ngx_long_cont$ngx_objs$ngx_libs$ngx_link$ngx_main_link
+ $ngx_rcc
+$ngx_long_end
+
+modules:
+END
+
+
+# ngx_modules.c
+
+if test -n "$NGX_PCH"; then
+ ngx_cc="\$(CC) $ngx_compile_opt \$(CFLAGS) $ngx_use_pch \$(ALL_INCS)"
+else
+ ngx_cc="\$(CC) $ngx_compile_opt \$(CFLAGS) \$(CORE_INCS)"
+fi
+
+cat << END >> $NGX_MAKEFILE
+
+$ngx_modules_obj: \$(CORE_DEPS)$ngx_cont$ngx_modules_c
+ $ngx_cc$ngx_tab$ngx_objout$ngx_modules_obj$ngx_tab$ngx_modules_c$NGX_AUX
+
+END
+
+
+# the core sources
+
+for ngx_src in $CORE_SRCS
+do
+ ngx_src=`echo $ngx_src | sed -e "s/\//$ngx_regex_dirsep/g"`
+ ngx_obj=`echo $ngx_src \
+ | sed -e "s#^\(.*\.\)cpp\\$#$ngx_objs_dir\1$ngx_objext#g" \
+ -e "s#^\(.*\.\)cc\\$#$ngx_objs_dir\1$ngx_objext#g" \
+ -e "s#^\(.*\.\)c\\$#$ngx_objs_dir\1$ngx_objext#g" \
+ -e "s#^\(.*\.\)S\\$#$ngx_objs_dir\1$ngx_objext#g"`
+
+ cat << END >> $NGX_MAKEFILE
+
+$ngx_obj: \$(CORE_DEPS)$ngx_cont$ngx_src
+ $ngx_cc$ngx_tab$ngx_objout$ngx_obj$ngx_tab$ngx_src$NGX_AUX
+
+END
+
+done
+
+
+# the http sources
+
+if [ $HTTP = YES ]; then
+
+ if test -n "$NGX_PCH"; then
+ ngx_cc="\$(CC) $ngx_compile_opt \$(CFLAGS) $ngx_use_pch \$(ALL_INCS)"
+ else
+ ngx_cc="\$(CC) $ngx_compile_opt \$(CFLAGS) \$(CORE_INCS) \$(HTTP_INCS)"
+ ngx_perl_cc="\$(CC) $ngx_compile_opt \$(NGX_PERL_CFLAGS)"
+ ngx_perl_cc="$ngx_perl_cc \$(CORE_INCS) \$(HTTP_INCS)"
+ fi
+
+ for ngx_source in $HTTP_SRCS
+ do
+ ngx_src=`echo $ngx_source | sed -e "s/\//$ngx_regex_dirsep/g"`
+ ngx_obj=`echo $ngx_src \
+ | sed -e "s#^\(.*\.\)cpp\\$#$ngx_objs_dir\1$ngx_objext#g" \
+ -e "s#^\(.*\.\)cc\\$#$ngx_objs_dir\1$ngx_objext#g" \
+ -e "s#^\(.*\.\)c\\$#$ngx_objs_dir\1$ngx_objext#g" \
+ -e "s#^\(.*\.\)S\\$#$ngx_objs_dir\1$ngx_objext#g"`
+
+ if [ $ngx_source = src/http/modules/perl/ngx_http_perl_module.c ]; then
+
+ cat << END >> $NGX_MAKEFILE
+
+$ngx_obj: \$(CORE_DEPS) \$(HTTP_DEPS)$ngx_cont$ngx_src
+ $ngx_perl_cc$ngx_tab$ngx_objout$ngx_obj$ngx_tab$ngx_src$NGX_AUX
+
+END
+ else
+
+ cat << END >> $NGX_MAKEFILE
+
+$ngx_obj: \$(CORE_DEPS) \$(HTTP_DEPS)$ngx_cont$ngx_src
+ $ngx_cc$ngx_tab$ngx_objout$ngx_obj$ngx_tab$ngx_src$NGX_AUX
+
+END
+
+ fi
+ done
+
+fi
+
+
+# the mail sources
+
+if [ $MAIL = YES ]; then
+
+ if test -n "$NGX_PCH"; then
+ ngx_cc="\$(CC) $ngx_compile_opt \$(CFLAGS) $ngx_use_pch \$(ALL_INCS)"
+ else
+ ngx_cc="\$(CC) $ngx_compile_opt \$(CFLAGS) \$(CORE_INCS) \$(MAIL_INCS)"
+ fi
+
+ for ngx_src in $MAIL_SRCS
+ do
+ ngx_src=`echo $ngx_src | sed -e "s/\//$ngx_regex_dirsep/g"`
+ ngx_obj=`echo $ngx_src \
+ | sed -e "s#^\(.*\.\)cpp\\$#$ngx_objs_dir\1$ngx_objext#g" \
+ -e "s#^\(.*\.\)cc\\$#$ngx_objs_dir\1$ngx_objext#g" \
+ -e "s#^\(.*\.\)c\\$#$ngx_objs_dir\1$ngx_objext#g" \
+ -e "s#^\(.*\.\)S\\$#$ngx_objs_dir\1$ngx_objext#g"`
+
+ cat << END >> $NGX_MAKEFILE
+
+$ngx_obj: \$(CORE_DEPS) \$(MAIL_DEPS)$ngx_cont$ngx_src
+ $ngx_cc$ngx_tab$ngx_objout$ngx_obj$ngx_tab$ngx_src$NGX_AUX
+
+END
+ done
+
+fi
+
+
+# the stream sources
+
+if [ $STREAM = YES ]; then
+
+ if test -n "$NGX_PCH"; then
+ ngx_cc="\$(CC) $ngx_compile_opt \$(CFLAGS) $ngx_use_pch \$(ALL_INCS)"
+ else
+ ngx_cc="\$(CC) $ngx_compile_opt \$(CFLAGS) \$(CORE_INCS) \$(STREAM_INCS)"
+ fi
+
+ for ngx_src in $STREAM_SRCS
+ do
+ ngx_src=`echo $ngx_src | sed -e "s/\//$ngx_regex_dirsep/g"`
+ ngx_obj=`echo $ngx_src \
+ | sed -e "s#^\(.*\.\)cpp\\$#$ngx_objs_dir\1$ngx_objext#g" \
+ -e "s#^\(.*\.\)cc\\$#$ngx_objs_dir\1$ngx_objext#g" \
+ -e "s#^\(.*\.\)c\\$#$ngx_objs_dir\1$ngx_objext#g" \
+ -e "s#^\(.*\.\)S\\$#$ngx_objs_dir\1$ngx_objext#g"`
+
+ cat << END >> $NGX_MAKEFILE
+
+$ngx_obj: \$(CORE_DEPS) \$(STREAM_DEPS)$ngx_cont$ngx_src
+ $ngx_cc$ngx_tab$ngx_objout$ngx_obj$ngx_tab$ngx_src$NGX_AUX
+
+END
+ done
+
+fi
+
+
+# the misc sources
+
+if test -n "$MISC_SRCS"; then
+
+ ngx_cc="\$(CC) $ngx_compile_opt \$(CFLAGS) $ngx_use_pch \$(ALL_INCS)"
+
+ for ngx_src in $MISC_SRCS
+ do
+ ngx_src=`echo $ngx_src | sed -e "s/\//$ngx_regex_dirsep/g"`
+ ngx_obj=`echo $ngx_src \
+ | sed -e "s#^\(.*\.\)cpp\\$#$ngx_objs_dir\1$ngx_objext#g" \
+ -e "s#^\(.*\.\)cc\\$#$ngx_objs_dir\1$ngx_objext#g" \
+ -e "s#^\(.*\.\)c\\$#$ngx_objs_dir\1$ngx_objext#g" \
+ -e "s#^\(.*\.\)S\\$#$ngx_objs_dir\1$ngx_objext#g"`
+
+ cat << END >> $NGX_MAKEFILE
+
+$ngx_obj: \$(CORE_DEPS) $ngx_cont$ngx_src
+ $ngx_cc$ngx_tab$ngx_objout$ngx_obj$ngx_tab$ngx_src$NGX_AUX
+
+END
+ done
+
+fi
+
+
+# the addons sources
+
+if test -n "$NGX_ADDON_SRCS"; then
+
+ ngx_cc="\$(CC) $ngx_compile_opt \$(CFLAGS) $ngx_use_pch \$(ALL_INCS)"
+
+ for ngx_src in $NGX_ADDON_SRCS
+ do
+ ngx_obj="addon/`basename \`dirname $ngx_src\``"
+
+ ngx_obj=`echo $ngx_obj/\`basename $ngx_src\` \
+ | sed -e "s/\//$ngx_regex_dirsep/g"`
+
+ ngx_obj=`echo $ngx_obj \
+ | sed -e "s#^\(.*\.\)cpp\\$#$ngx_objs_dir\1$ngx_objext#g" \
+ -e "s#^\(.*\.\)cc\\$#$ngx_objs_dir\1$ngx_objext#g" \
+ -e "s#^\(.*\.\)c\\$#$ngx_objs_dir\1$ngx_objext#g" \
+ -e "s#^\(.*\.\)S\\$#$ngx_objs_dir\1$ngx_objext#g"`
+
+ ngx_src=`echo $ngx_src | sed -e "s/\//$ngx_regex_dirsep/g"`
+
+ cat << END >> $NGX_MAKEFILE
+
+$ngx_obj: \$(ADDON_DEPS)$ngx_cont$ngx_src
+ $ngx_cc$ngx_tab$ngx_objout$ngx_obj$ngx_tab$ngx_src$NGX_AUX
+
+END
+ done
+
+fi
+
+
+# the addons config.make
+
+if test -n "$NGX_ADDONS$DYNAMIC_ADDONS"; then
+
+ for ngx_addon_dir in $NGX_ADDONS $DYNAMIC_ADDONS
+ do
+ if test -f $ngx_addon_dir/config.make; then
+ . $ngx_addon_dir/config.make
+ fi
+ done
+fi
+
+
+# Win32 resource file
+
+if test -n "$NGX_RES"; then
+
+ ngx_res=`echo "$NGX_RES: $NGX_RC $NGX_ICONS" \
+ | sed -e "s/\//$ngx_regex_dirsep/g"`
+ ngx_rcc=`echo $NGX_RCC | sed -e "s/\//$ngx_regex_dirsep/g"`
+
+ cat << END >> $NGX_MAKEFILE
+
+$ngx_res
+ $ngx_rcc
+
+END
+
+fi
+
+
+# the precompiled headers
+
+if test -n "$NGX_PCH"; then
+ echo "#include <ngx_config.h>" > $NGX_OBJS/ngx_pch.c
+
+ ngx_pch="src/core/ngx_config.h $OS_CONFIG $NGX_OBJS/ngx_auto_config.h"
+ ngx_pch=`echo "$NGX_PCH: $ngx_pch" | sed -e "s/\//$ngx_regex_dirsep/g"`
+
+ ngx_src="\$(CC) \$(CFLAGS) $NGX_BUILD_PCH $ngx_compile_opt \$(ALL_INCS)"
+ ngx_src="$ngx_src $ngx_objout$NGX_OBJS/ngx_pch.obj $NGX_OBJS/ngx_pch.c"
+ ngx_src=`echo $ngx_src | sed -e "s/\//$ngx_regex_dirsep/g"`
+
+ cat << END >> $NGX_MAKEFILE
+
+$ngx_pch
+ $ngx_src
+
+END
+
+fi
+
+
+# dynamic modules
+
+if test -n "$NGX_PCH"; then
+ ngx_cc="\$(CC) $ngx_compile_opt $ngx_pic_opt \$(CFLAGS) $ngx_use_pch \$(ALL_INCS)"
+else
+ ngx_cc="\$(CC) $ngx_compile_opt $ngx_pic_opt \$(CFLAGS) \$(ALL_INCS)"
+ ngx_perl_cc="\$(CC) $ngx_compile_opt $ngx_pic_opt \$(NGX_PERL_CFLAGS)"
+ ngx_perl_cc="$ngx_perl_cc \$(ALL_INCS)"
+fi
+
+for ngx_module in $DYNAMIC_MODULES
+do
+ eval ngx_module_srcs="\$${ngx_module}_SRCS"
+ eval eval ngx_module_libs="\\\"\$${ngx_module}_LIBS\\\""
+
+ eval ngx_module_modules="\$${ngx_module}_MODULES"
+ eval ngx_module_order="\$${ngx_module}_ORDER"
+
+ ngx_modules_c=$NGX_OBJS/${ngx_module}_modules.c
+
+ cat << END > $ngx_modules_c
+
+#include <ngx_config.h>
+#include <ngx_core.h>
+
+END
+
+ for mod in $ngx_module_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 $ngx_module_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 $ngx_module_modules
+ do
+ echo " \"$mod\"," >> $ngx_modules_c
+ done
+
+ cat << END >> $ngx_modules_c
+ NULL
+};
+
+END
+
+ echo 'char *ngx_module_order[] = {' >> $ngx_modules_c
+
+ for mod in $ngx_module_order
+ do
+ echo " \"$mod\"," >> $ngx_modules_c
+ done
+
+ cat << END >> $ngx_modules_c
+ NULL
+};
+
+END
+
+ ngx_modules_c=`echo $ngx_modules_c | sed -e "s/\//$ngx_regex_dirsep/g"`
+
+ ngx_modules_obj=`echo $ngx_modules_c \
+ | sed -e "s/\(.*\.\)c/\1$ngx_objext/"`
+
+ ngx_module_objs=
+ for ngx_src in $ngx_module_srcs
+ do
+ case "$ngx_src" in
+ src/*)
+ ngx_obj=$ngx_src
+ ;;
+ *)
+ ngx_obj="addon/`basename \`dirname $ngx_src\``"
+ mkdir -p $NGX_OBJS/$ngx_obj
+ ngx_obj="$ngx_obj/`basename $ngx_src`"
+ ;;
+ esac
+
+ ngx_module_objs="$ngx_module_objs $ngx_obj"
+ done
+
+ ngx_module_objs=`echo $ngx_module_objs \
+ | sed -e "s#\([^ ]*\.\)cpp#$NGX_OBJS\/\1$ngx_objext#g" \
+ -e "s#\([^ ]*\.\)cc#$NGX_OBJS\/\1$ngx_objext#g" \
+ -e "s#\([^ ]*\.\)c#$NGX_OBJS\/\1$ngx_objext#g" \
+ -e "s#\([^ ]*\.\)S#$NGX_OBJS\/\1$ngx_objext#g"`
+
+ ngx_deps=`echo $ngx_module_objs $ngx_modules_obj $LINK_DEPS \
+ | sed -e "s/ *\([^ ][^ ]*\)/$ngx_regex_cont\1/g" \
+ -e "s/\//$ngx_regex_dirsep/g"`
+
+ ngx_objs=`echo $ngx_module_objs $ngx_modules_obj \
+ | sed -e "s/ *\([^ ][^ ]*\)/$ngx_long_regex_cont\1/g" \
+ -e "s/\//$ngx_regex_dirsep/g"`
+
+ ngx_obj=$NGX_OBJS$ngx_dirsep$ngx_module$ngx_modext
+
+ if [ "$NGX_PLATFORM" = win32 ]; then
+ ngx_module_libs="$CORE_LIBS $ngx_module_libs"
+ fi
+
+ ngx_libs=
+ if test -n "$NGX_LD_OPT$ngx_module_libs"; then
+ ngx_libs=`echo $NGX_LD_OPT $ngx_module_libs \
+ | sed -e "s/\//$ngx_regex_dirsep/g" -e "s/^/$ngx_long_regex_cont/"`
+ fi
+
+ ngx_link=${CORE_LINK:+`echo $CORE_LINK \
+ | sed -e "s/\//$ngx_regex_dirsep/g" -e "s/^/$ngx_long_regex_cont/"`}
+
+ ngx_module_link=${MODULE_LINK:+`echo $MODULE_LINK \
+ | sed -e "s/\//$ngx_regex_dirsep/g" -e "s/^/$ngx_long_regex_cont/"`}
+
+
+ cat << END >> $NGX_MAKEFILE
+
+modules: $ngx_obj
+
+$ngx_obj: $ngx_deps$ngx_spacer
+ \$(LINK) $ngx_long_start$ngx_binout$ngx_obj$ngx_long_cont$ngx_objs$ngx_libs$ngx_link$ngx_module_link
+$ngx_long_end
+
+$ngx_modules_obj: \$(CORE_DEPS)$ngx_cont$ngx_modules_c
+ $ngx_cc$ngx_tab$ngx_objout$ngx_modules_obj$ngx_tab$ngx_modules_c$NGX_AUX
+
+END
+
+ for ngx_source in $ngx_module_srcs
+ do
+ case "$ngx_source" in
+ src/*)
+ ngx_obj=`echo $ngx_source | sed -e "s/\//$ngx_regex_dirsep/g"`
+ ;;
+ *)
+ ngx_obj="addon/`basename \`dirname $ngx_source\``"
+ ngx_obj=`echo $ngx_obj/\`basename $ngx_source\` \
+ | sed -e "s/\//$ngx_regex_dirsep/g"`
+ ;;
+ esac
+
+ ngx_obj=`echo $ngx_obj \
+ | sed -e "s#^\(.*\.\)cpp\\$#$ngx_objs_dir\1$ngx_objext#g" \
+ -e "s#^\(.*\.\)cc\\$#$ngx_objs_dir\1$ngx_objext#g" \
+ -e "s#^\(.*\.\)c\\$#$ngx_objs_dir\1$ngx_objext#g" \
+ -e "s#^\(.*\.\)S\\$#$ngx_objs_dir\1$ngx_objext#g"`
+
+ ngx_src=`echo $ngx_source | sed -e "s/\//$ngx_regex_dirsep/g"`
+
+ if [ $ngx_source = src/http/modules/perl/ngx_http_perl_module.c ]; then
+
+ cat << END >> $NGX_MAKEFILE
+
+$ngx_obj: \$(ADDON_DEPS)$ngx_cont$ngx_src
+ $ngx_perl_cc$ngx_tab$ngx_objout$ngx_obj$ngx_tab$ngx_src$NGX_AUX
+
+END
+ else
+
+ cat << END >> $NGX_MAKEFILE
+
+$ngx_obj: \$(ADDON_DEPS)$ngx_cont$ngx_src
+ $ngx_cc$ngx_tab$ngx_objout$ngx_obj$ngx_tab$ngx_src$NGX_AUX
+
+END
+
+ fi
+ done
+done
diff --git a/app/nginx/auto/module b/app/nginx/auto/module
new file mode 100644
index 0000000..a2b578d
--- /dev/null
+++ b/app/nginx/auto/module
@@ -0,0 +1,138 @@
+
+# Copyright (C) Ruslan Ermilov
+# Copyright (C) Nginx, Inc.
+
+
+case $ngx_module_type in
+ HTTP_*) ngx_var=HTTP ;;
+ *) ngx_var=$ngx_module_type ;;
+esac
+
+
+if [ "$ngx_module_link" = DYNAMIC ]; then
+
+ for ngx_module in $ngx_module_name; do
+ # extract the first name
+ break
+ done
+
+ DYNAMIC_MODULES="$DYNAMIC_MODULES $ngx_module"
+ eval ${ngx_module}_SRCS=\"$ngx_module_srcs\"
+
+ eval ${ngx_module}_MODULES=\"$ngx_module_name\"
+
+ if [ -z "$ngx_module_order" -a \
+ \( "$ngx_module_type" = "HTTP_FILTER" \
+ -o "$ngx_module_type" = "HTTP_AUX_FILTER" \) ]
+ then
+ eval ${ngx_module}_ORDER=\"$ngx_module_name \
+ ngx_http_copy_filter_module\"
+ else
+ eval ${ngx_module}_ORDER=\"$ngx_module_order\"
+ fi
+
+ if test -n "$ngx_module_incs"; then
+ CORE_INCS="$CORE_INCS $ngx_module_incs"
+ fi
+
+ if test -n "$ngx_module_deps"; then
+ NGX_ADDON_DEPS="$NGX_ADDON_DEPS $ngx_module_deps"
+ fi
+
+ libs=
+ for lib in $ngx_module_libs
+ do
+ case $lib in
+
+ LIBXSLT | LIBGD | GEOIP | PERL)
+ libs="$libs \$NGX_LIB_$lib"
+
+ if eval [ "\$USE_${lib}" = NO ] ; then
+ eval USE_${lib}=DYNAMIC
+ fi
+ ;;
+
+ PCRE | OPENSSL | ZLIB)
+ eval USE_${lib}=YES
+ ;;
+
+ MD5 | SHA1)
+ # obsolete
+ ;;
+
+ *)
+ libs="$libs $lib"
+ ;;
+
+ esac
+ done
+ eval ${ngx_module}_LIBS=\'$libs\'
+
+elif [ "$ngx_module_link" = YES ]; then
+
+ eval ${ngx_module_type}_MODULES=\"\$${ngx_module_type}_MODULES \
+ $ngx_module_name\"
+
+ eval ${ngx_var}_SRCS=\"\$${ngx_var}_SRCS $ngx_module_srcs\"
+
+ if test -n "$ngx_module_incs"; then
+ eval ${ngx_var}_INCS=\"\$${ngx_var}_INCS $ngx_module_incs\"
+ fi
+
+ if test -n "$ngx_module_deps"; then
+ eval ${ngx_var}_DEPS=\"\$${ngx_var}_DEPS $ngx_module_deps\"
+ fi
+
+ for lib in $ngx_module_libs
+ do
+ case $lib in
+
+ PCRE | OPENSSL | ZLIB | LIBXSLT | LIBGD | PERL | GEOIP)
+ eval USE_${lib}=YES
+ ;;
+
+ MD5 | SHA1)
+ # obsolete
+ ;;
+
+ *)
+ CORE_LIBS="$CORE_LIBS $lib"
+ ;;
+
+ esac
+ done
+
+elif [ "$ngx_module_link" = ADDON ]; then
+
+ eval ${ngx_module_type}_MODULES=\"\$${ngx_module_type}_MODULES \
+ $ngx_module_name\"
+
+ NGX_ADDON_SRCS="$NGX_ADDON_SRCS $ngx_module_srcs"
+
+ if test -n "$ngx_module_incs"; then
+ eval ${ngx_var}_INCS=\"\$${ngx_var}_INCS $ngx_module_incs\"
+ fi
+
+ if test -n "$ngx_module_deps"; then
+ NGX_ADDON_DEPS="$NGX_ADDON_DEPS $ngx_module_deps"
+ fi
+
+ for lib in $ngx_module_libs
+ do
+ case $lib in
+
+ PCRE | OPENSSL | ZLIB | LIBXSLT | LIBGD | PERL | GEOIP)
+ eval USE_${lib}=YES
+ ;;
+
+ MD5 | SHA1)
+ # obsolete
+ ;;
+
+ *)
+ CORE_LIBS="$CORE_LIBS $lib"
+ ;;
+
+ esac
+ done
+fi
diff --git a/app/nginx/auto/modules b/app/nginx/auto/modules
new file mode 100644
index 0000000..f1791c9
--- /dev/null
+++ b/app/nginx/auto/modules
@@ -0,0 +1,1399 @@
+
+# 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
+
+if [ $USE_TLDK = YES ]; then
+
+ ngx_module_type=CORE
+ ngx_module_name=ngx_tldk_module
+ ngx_module_incs="src/tldk ${RTE_SDK}/${RTE_TARGET}/include
+ ${TLDK_ROOT}/${RTE_TARGET}/include"
+ ngx_module_deps="src/tldk/ngx_tldk.h
+ src/tldk/tldk_sock.h"
+ ngx_module_srcs="src/tldk/module.c
+ src/tldk/be.c
+ src/tldk/tldk_sock.c
+ src/tldk/tldk_event.c
+ src/tldk/parse.c"
+ ngx_module_libs="-L${TLDK_ROOT}/${RTE_TARGET}/lib -Wl,--whole-archive
+ -ltle_l4p -ltle_dring -ltle_timer -Wl,--no-whole-archive
+ -L${RTE_SDK}/${RTE_TARGET}/lib -Wl,--whole-archive -ldpdk
+ -lm -lpcap -lnuma -Wl,--no-whole-archive"
+ ngx_module_link=YES
+ ngx_module_order=
+
+ . auto/module
+
+ ngx_module_type=EVENT
+ ngx_module_name=ngx_tldk_event_module
+ ngx_module_incs=
+ ngx_module_deps=
+ ngx_module_srcs=
+ ngx_module_libs=
+ ngx_module_link=YES
+ ngx_module_order=ngx_tldk_module
+
+ . 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
diff --git a/app/nginx/auto/nohave b/app/nginx/auto/nohave
new file mode 100644
index 0000000..dfb1718
--- /dev/null
+++ b/app/nginx/auto/nohave
@@ -0,0 +1,12 @@
+
+# Copyright (C) Igor Sysoev
+# Copyright (C) Nginx, Inc.
+
+
+cat << END >> $NGX_AUTO_CONFIG_H
+
+#ifndef $have
+#define $have 0
+#endif
+
+END
diff --git a/app/nginx/auto/options b/app/nginx/auto/options
new file mode 100644
index 0000000..d58c3c2
--- /dev/null
+++ b/app/nginx/auto/options
@@ -0,0 +1,616 @@
+
+# Copyright (C) Igor Sysoev
+# Copyright (C) Nginx, Inc.
+
+
+help=no
+
+NGX_PREFIX=
+NGX_SBIN_PATH=
+NGX_MODULES_PATH=
+NGX_CONF_PREFIX=
+NGX_CONF_PATH=
+NGX_ERROR_LOG_PATH=
+NGX_PID_PATH=
+NGX_LOCK_PATH=
+NGX_USER=
+NGX_GROUP=
+NGX_BUILD=
+
+CC=${CC:-cc}
+CPP=
+NGX_OBJS=objs
+
+NGX_DEBUG=NO
+NGX_CC_OPT=
+NGX_LD_OPT=
+CPU=NO
+
+NGX_RPATH=NO
+
+NGX_TEST_BUILD_DEVPOLL=NO
+NGX_TEST_BUILD_EVENTPORT=NO
+NGX_TEST_BUILD_EPOLL=NO
+NGX_TEST_BUILD_SOLARIS_SENDFILEV=NO
+
+NGX_PLATFORM=
+NGX_WINE=
+
+EVENT_FOUND=NO
+
+EVENT_SELECT=NO
+EVENT_POLL=NO
+
+USE_THREADS=NO
+
+NGX_FILE_AIO=NO
+
+HTTP=YES
+
+NGX_HTTP_LOG_PATH=
+NGX_HTTP_CLIENT_TEMP_PATH=
+NGX_HTTP_PROXY_TEMP_PATH=
+NGX_HTTP_FASTCGI_TEMP_PATH=
+NGX_HTTP_UWSGI_TEMP_PATH=
+NGX_HTTP_SCGI_TEMP_PATH=
+
+HTTP_CACHE=YES
+HTTP_CHARSET=YES
+HTTP_GZIP=YES
+HTTP_SSL=NO
+HTTP_V2=NO
+HTTP_SSI=YES
+HTTP_POSTPONE=NO
+HTTP_REALIP=NO
+HTTP_XSLT=NO
+HTTP_IMAGE_FILTER=NO
+HTTP_SUB=NO
+HTTP_ADDITION=NO
+HTTP_DAV=NO
+HTTP_ACCESS=YES
+HTTP_AUTH_BASIC=YES
+HTTP_AUTH_REQUEST=NO
+HTTP_USERID=YES
+HTTP_SLICE=NO
+HTTP_AUTOINDEX=YES
+HTTP_RANDOM_INDEX=NO
+HTTP_STATUS=NO
+HTTP_GEO=YES
+HTTP_GEOIP=NO
+HTTP_MAP=YES
+HTTP_SPLIT_CLIENTS=YES
+HTTP_REFERER=YES
+HTTP_REWRITE=YES
+HTTP_PROXY=YES
+HTTP_FASTCGI=YES
+HTTP_UWSGI=YES
+HTTP_SCGI=YES
+HTTP_PERL=NO
+HTTP_MEMCACHED=YES
+HTTP_LIMIT_CONN=YES
+HTTP_LIMIT_REQ=YES
+HTTP_EMPTY_GIF=YES
+HTTP_BROWSER=YES
+HTTP_SECURE_LINK=NO
+HTTP_DEGRADATION=NO
+HTTP_FLV=NO
+HTTP_MP4=NO
+HTTP_GUNZIP=NO
+HTTP_GZIP_STATIC=NO
+HTTP_UPSTREAM_HASH=YES
+HTTP_UPSTREAM_IP_HASH=YES
+HTTP_UPSTREAM_LEAST_CONN=YES
+HTTP_UPSTREAM_KEEPALIVE=YES
+HTTP_UPSTREAM_ZONE=YES
+
+# STUB
+HTTP_STUB_STATUS=NO
+
+MAIL=NO
+MAIL_SSL=NO
+MAIL_POP3=YES
+MAIL_IMAP=YES
+MAIL_SMTP=YES
+
+STREAM=NO
+STREAM_SSL=NO
+STREAM_REALIP=NO
+STREAM_LIMIT_CONN=YES
+STREAM_ACCESS=YES
+STREAM_GEO=YES
+STREAM_GEOIP=NO
+STREAM_MAP=YES
+STREAM_SPLIT_CLIENTS=YES
+STREAM_RETURN=YES
+STREAM_UPSTREAM_HASH=YES
+STREAM_UPSTREAM_LEAST_CONN=YES
+STREAM_UPSTREAM_ZONE=YES
+STREAM_SSL_PREREAD=NO
+
+DYNAMIC_MODULES=
+
+NGX_ADDONS=
+NGX_ADDON_DEPS=
+DYNAMIC_ADDONS=
+
+NGX_COMPAT=NO
+
+USE_PCRE=NO
+PCRE=NONE
+PCRE_OPT=
+PCRE_CONF_OPT=
+PCRE_JIT=NO
+
+USE_OPENSSL=NO
+OPENSSL=NONE
+
+USE_ZLIB=NO
+ZLIB=NONE
+ZLIB_OPT=
+ZLIB_ASM=NO
+
+USE_PERL=NO
+NGX_PERL=perl
+
+USE_LIBXSLT=NO
+USE_LIBGD=NO
+USE_GEOIP=NO
+
+USE_TLDK=NO
+
+NGX_GOOGLE_PERFTOOLS=NO
+NGX_CPP_TEST=NO
+
+NGX_LIBATOMIC=NO
+
+NGX_CPU_CACHE_LINE=
+
+NGX_POST_CONF_MSG=
+
+opt=
+
+for option
+do
+ opt="$opt `echo $option | sed -e \"s/\(--[^=]*=\)\(.* .*\)/\1'\2'/\"`"
+
+ case "$option" in
+ -*=*) value=`echo "$option" | sed -e 's/[-_a-zA-Z0-9]*=//'` ;;
+ *) value="" ;;
+ esac
+
+ case "$option" in
+ --help) help=yes ;;
+
+ --prefix=) NGX_PREFIX="!" ;;
+ --prefix=*) NGX_PREFIX="$value" ;;
+ --sbin-path=*) NGX_SBIN_PATH="$value" ;;
+ --modules-path=*) NGX_MODULES_PATH="$value" ;;
+ --conf-path=*) NGX_CONF_PATH="$value" ;;
+ --error-log-path=*) NGX_ERROR_LOG_PATH="$value";;
+ --pid-path=*) NGX_PID_PATH="$value" ;;
+ --lock-path=*) NGX_LOCK_PATH="$value" ;;
+ --user=*) NGX_USER="$value" ;;
+ --group=*) NGX_GROUP="$value" ;;
+
+ --crossbuild=*) NGX_PLATFORM="$value" ;;
+
+ --build=*) NGX_BUILD="$value" ;;
+ --builddir=*) NGX_OBJS="$value" ;;
+
+ --with-select_module) EVENT_SELECT=YES ;;
+ --without-select_module) EVENT_SELECT=NONE ;;
+ --with-poll_module) EVENT_POLL=YES ;;
+ --without-poll_module) EVENT_POLL=NONE ;;
+
+ --with-threads) USE_THREADS=YES ;;
+
+ --with-file-aio) NGX_FILE_AIO=YES ;;
+
+ --with-ipv6)
+ NGX_POST_CONF_MSG="$NGX_POST_CONF_MSG
+$0: warning: the \"--with-ipv6\" option is deprecated"
+ ;;
+
+ --without-http) HTTP=NO ;;
+ --without-http-cache) HTTP_CACHE=NO ;;
+
+ --http-log-path=*) NGX_HTTP_LOG_PATH="$value" ;;
+ --http-client-body-temp-path=*) NGX_HTTP_CLIENT_TEMP_PATH="$value" ;;
+ --http-proxy-temp-path=*) NGX_HTTP_PROXY_TEMP_PATH="$value" ;;
+ --http-fastcgi-temp-path=*) NGX_HTTP_FASTCGI_TEMP_PATH="$value" ;;
+ --http-uwsgi-temp-path=*) NGX_HTTP_UWSGI_TEMP_PATH="$value" ;;
+ --http-scgi-temp-path=*) NGX_HTTP_SCGI_TEMP_PATH="$value" ;;
+
+ --with-http_ssl_module) HTTP_SSL=YES ;;
+ --with-http_v2_module) HTTP_V2=YES ;;
+ --with-http_realip_module) HTTP_REALIP=YES ;;
+ --with-http_addition_module) HTTP_ADDITION=YES ;;
+ --with-http_xslt_module) HTTP_XSLT=YES ;;
+ --with-http_xslt_module=dynamic) HTTP_XSLT=DYNAMIC ;;
+ --with-http_image_filter_module) HTTP_IMAGE_FILTER=YES ;;
+ --with-http_image_filter_module=dynamic)
+ HTTP_IMAGE_FILTER=DYNAMIC ;;
+ --with-http_geoip_module) HTTP_GEOIP=YES ;;
+ --with-http_geoip_module=dynamic)
+ HTTP_GEOIP=DYNAMIC ;;
+ --with-http_sub_module) HTTP_SUB=YES ;;
+ --with-http_dav_module) HTTP_DAV=YES ;;
+ --with-http_flv_module) HTTP_FLV=YES ;;
+ --with-http_mp4_module) HTTP_MP4=YES ;;
+ --with-http_gunzip_module) HTTP_GUNZIP=YES ;;
+ --with-http_gzip_static_module) HTTP_GZIP_STATIC=YES ;;
+ --with-http_auth_request_module) HTTP_AUTH_REQUEST=YES ;;
+ --with-http_random_index_module) HTTP_RANDOM_INDEX=YES ;;
+ --with-http_secure_link_module) HTTP_SECURE_LINK=YES ;;
+ --with-http_degradation_module) HTTP_DEGRADATION=YES ;;
+ --with-http_slice_module) HTTP_SLICE=YES ;;
+
+ --without-http_charset_module) HTTP_CHARSET=NO ;;
+ --without-http_gzip_module) HTTP_GZIP=NO ;;
+ --without-http_ssi_module) HTTP_SSI=NO ;;
+ --without-http_userid_module) HTTP_USERID=NO ;;
+ --without-http_access_module) HTTP_ACCESS=NO ;;
+ --without-http_auth_basic_module) HTTP_AUTH_BASIC=NO ;;
+ --without-http_autoindex_module) HTTP_AUTOINDEX=NO ;;
+ --without-http_status_module) HTTP_STATUS=NO ;;
+ --without-http_geo_module) HTTP_GEO=NO ;;
+ --without-http_map_module) HTTP_MAP=NO ;;
+ --without-http_split_clients_module) HTTP_SPLIT_CLIENTS=NO ;;
+ --without-http_referer_module) HTTP_REFERER=NO ;;
+ --without-http_rewrite_module) HTTP_REWRITE=NO ;;
+ --without-http_proxy_module) HTTP_PROXY=NO ;;
+ --without-http_fastcgi_module) HTTP_FASTCGI=NO ;;
+ --without-http_uwsgi_module) HTTP_UWSGI=NO ;;
+ --without-http_scgi_module) HTTP_SCGI=NO ;;
+ --without-http_memcached_module) HTTP_MEMCACHED=NO ;;
+ --without-http_limit_conn_module) HTTP_LIMIT_CONN=NO ;;
+ --without-http_limit_req_module) HTTP_LIMIT_REQ=NO ;;
+ --without-http_empty_gif_module) HTTP_EMPTY_GIF=NO ;;
+ --without-http_browser_module) HTTP_BROWSER=NO ;;
+ --without-http_upstream_hash_module) HTTP_UPSTREAM_HASH=NO ;;
+ --without-http_upstream_ip_hash_module) HTTP_UPSTREAM_IP_HASH=NO ;;
+ --without-http_upstream_least_conn_module)
+ HTTP_UPSTREAM_LEAST_CONN=NO ;;
+ --without-http_upstream_keepalive_module) HTTP_UPSTREAM_KEEPALIVE=NO ;;
+ --without-http_upstream_zone_module) HTTP_UPSTREAM_ZONE=NO ;;
+
+ --with-http_perl_module) HTTP_PERL=YES ;;
+ --with-http_perl_module=dynamic) HTTP_PERL=DYNAMIC ;;
+ --with-perl_modules_path=*) NGX_PERL_MODULES="$value" ;;
+ --with-perl=*) NGX_PERL="$value" ;;
+
+ # STUB
+ --with-http_stub_status_module) HTTP_STUB_STATUS=YES ;;
+
+ --with-mail) MAIL=YES ;;
+ --with-mail=dynamic) MAIL=DYNAMIC ;;
+ --with-mail_ssl_module) MAIL_SSL=YES ;;
+ # STUB
+ --with-imap)
+ MAIL=YES
+ NGX_POST_CONF_MSG="$NGX_POST_CONF_MSG
+$0: warning: the \"--with-imap\" option is deprecated, \
+use the \"--with-mail\" option instead"
+ ;;
+ --with-imap_ssl_module)
+ MAIL_SSL=YES
+ NGX_POST_CONF_MSG="$NGX_POST_CONF_MSG
+$0: warning: the \"--with-imap_ssl_module\" option is deprecated, \
+use the \"--with-mail_ssl_module\" option instead"
+ ;;
+ --without-mail_pop3_module) MAIL_POP3=NO ;;
+ --without-mail_imap_module) MAIL_IMAP=NO ;;
+ --without-mail_smtp_module) MAIL_SMTP=NO ;;
+
+ --with-stream) STREAM=YES ;;
+ --with-stream=dynamic) STREAM=DYNAMIC ;;
+ --with-stream_ssl_module) STREAM_SSL=YES ;;
+ --with-stream_realip_module) STREAM_REALIP=YES ;;
+ --with-stream_geoip_module) STREAM_GEOIP=YES ;;
+ --with-stream_geoip_module=dynamic)
+ STREAM_GEOIP=DYNAMIC ;;
+ --with-stream_ssl_preread_module)
+ STREAM_SSL_PREREAD=YES ;;
+ --without-stream_limit_conn_module)
+ STREAM_LIMIT_CONN=NO ;;
+ --without-stream_access_module) STREAM_ACCESS=NO ;;
+ --without-stream_geo_module) STREAM_GEO=NO ;;
+ --without-stream_map_module) STREAM_MAP=NO ;;
+ --without-stream_split_clients_module)
+ STREAM_SPLIT_CLIENTS=NO ;;
+ --without-stream_return_module) STREAM_RETURN=NO ;;
+ --without-stream_upstream_hash_module)
+ STREAM_UPSTREAM_HASH=NO ;;
+ --without-stream_upstream_least_conn_module)
+ STREAM_UPSTREAM_LEAST_CONN=NO ;;
+ --without-stream_upstream_zone_module)
+ STREAM_UPSTREAM_ZONE=NO ;;
+
+ --with-google_perftools_module) NGX_GOOGLE_PERFTOOLS=YES ;;
+ --with-cpp_test_module) NGX_CPP_TEST=YES ;;
+
+ --add-module=*) NGX_ADDONS="$NGX_ADDONS $value" ;;
+ --add-dynamic-module=*) DYNAMIC_ADDONS="$DYNAMIC_ADDONS $value" ;;
+
+ --with-compat) NGX_COMPAT=YES ;;
+
+ --with-cc=*) CC="$value" ;;
+ --with-cpp=*) CPP="$value" ;;
+ --with-cc-opt=*) NGX_CC_OPT="$value" ;;
+ --with-ld-opt=*) NGX_LD_OPT="$value" ;;
+ --with-cpu-opt=*) CPU="$value" ;;
+ --with-debug) NGX_DEBUG=YES ;;
+
+ --without-pcre) USE_PCRE=DISABLED ;;
+ --with-pcre) USE_PCRE=YES ;;
+ --with-pcre=*) PCRE="$value" ;;
+ --with-pcre-opt=*) PCRE_OPT="$value" ;;
+ --with-pcre-jit) PCRE_JIT=YES ;;
+
+ --with-openssl=*) OPENSSL="$value" ;;
+ --with-openssl-opt=*) OPENSSL_OPT="$value" ;;
+
+ --with-md5=*)
+ NGX_POST_CONF_MSG="$NGX_POST_CONF_MSG
+$0: warning: the \"--with-md5\" option is deprecated"
+ ;;
+ --with-md5-opt=*)
+ NGX_POST_CONF_MSG="$NGX_POST_CONF_MSG
+$0: warning: the \"--with-md5-opt\" option is deprecated"
+ ;;
+ --with-md5-asm)
+ NGX_POST_CONF_MSG="$NGX_POST_CONF_MSG
+$0: warning: the \"--with-md5-asm\" option is deprecated"
+ ;;
+
+ --with-sha1=*)
+ NGX_POST_CONF_MSG="$NGX_POST_CONF_MSG
+$0: warning: the \"--with-sha1\" option is deprecated"
+ ;;
+ --with-sha1-opt=*)
+ NGX_POST_CONF_MSG="$NGX_POST_CONF_MSG
+$0: warning: the \"--with-sha1-opt\" option is deprecated"
+ ;;
+ --with-sha1-asm)
+ NGX_POST_CONF_MSG="$NGX_POST_CONF_MSG
+$0: warning: the \"--with-sha1-asm\" option is deprecated"
+ ;;
+
+ --with-zlib=*) ZLIB="$value" ;;
+ --with-zlib-opt=*) ZLIB_OPT="$value" ;;
+ --with-zlib-asm=*) ZLIB_ASM="$value" ;;
+
+ --with-tldk) USE_TLDK=YES ;;
+
+ --with-libatomic) NGX_LIBATOMIC=YES ;;
+ --with-libatomic=*) NGX_LIBATOMIC="$value" ;;
+
+ --test-build-devpoll) NGX_TEST_BUILD_DEVPOLL=YES ;;
+ --test-build-eventport) NGX_TEST_BUILD_EVENTPORT=YES ;;
+ --test-build-epoll) NGX_TEST_BUILD_EPOLL=YES ;;
+ --test-build-solaris-sendfilev) NGX_TEST_BUILD_SOLARIS_SENDFILEV=YES ;;
+
+ *)
+ echo "$0: error: invalid option \"$option\""
+ exit 1
+ ;;
+ esac
+done
+
+
+NGX_CONFIGURE="$opt"
+
+
+if [ $help = yes ]; then
+
+cat << END
+
+ --help print this message
+
+ --prefix=PATH set installation prefix
+ --sbin-path=PATH set nginx binary pathname
+ --modules-path=PATH set modules path
+ --conf-path=PATH set nginx.conf pathname
+ --error-log-path=PATH set error log pathname
+ --pid-path=PATH set nginx.pid pathname
+ --lock-path=PATH set nginx.lock pathname
+
+ --user=USER set non-privileged user for
+ worker processes
+ --group=GROUP set non-privileged group for
+ worker processes
+
+ --build=NAME set build name
+ --builddir=DIR set build directory
+
+ --with-select_module enable select module
+ --without-select_module disable select module
+ --with-poll_module enable poll module
+ --without-poll_module disable poll module
+
+ --with-threads enable thread pool support
+
+ --with-file-aio enable file AIO support
+
+ --with-http_ssl_module enable ngx_http_ssl_module
+ --with-http_v2_module enable ngx_http_v2_module
+ --with-http_realip_module enable ngx_http_realip_module
+ --with-http_addition_module enable ngx_http_addition_module
+ --with-http_xslt_module enable ngx_http_xslt_module
+ --with-http_xslt_module=dynamic enable dynamic ngx_http_xslt_module
+ --with-http_image_filter_module enable ngx_http_image_filter_module
+ --with-http_image_filter_module=dynamic
+ enable dynamic ngx_http_image_filter_module
+ --with-http_geoip_module enable ngx_http_geoip_module
+ --with-http_geoip_module=dynamic enable dynamic ngx_http_geoip_module
+ --with-http_sub_module enable ngx_http_sub_module
+ --with-http_dav_module enable ngx_http_dav_module
+ --with-http_flv_module enable ngx_http_flv_module
+ --with-http_mp4_module enable ngx_http_mp4_module
+ --with-http_gunzip_module enable ngx_http_gunzip_module
+ --with-http_gzip_static_module enable ngx_http_gzip_static_module
+ --with-http_auth_request_module enable ngx_http_auth_request_module
+ --with-http_random_index_module enable ngx_http_random_index_module
+ --with-http_secure_link_module enable ngx_http_secure_link_module
+ --with-http_degradation_module enable ngx_http_degradation_module
+ --with-http_slice_module enable ngx_http_slice_module
+ --with-http_stub_status_module enable ngx_http_stub_status_module
+
+ --without-http_charset_module disable ngx_http_charset_module
+ --without-http_gzip_module disable ngx_http_gzip_module
+ --without-http_ssi_module disable ngx_http_ssi_module
+ --without-http_userid_module disable ngx_http_userid_module
+ --without-http_access_module disable ngx_http_access_module
+ --without-http_auth_basic_module disable ngx_http_auth_basic_module
+ --without-http_autoindex_module disable ngx_http_autoindex_module
+ --without-http_geo_module disable ngx_http_geo_module
+ --without-http_map_module disable ngx_http_map_module
+ --without-http_split_clients_module disable ngx_http_split_clients_module
+ --without-http_referer_module disable ngx_http_referer_module
+ --without-http_rewrite_module disable ngx_http_rewrite_module
+ --without-http_proxy_module disable ngx_http_proxy_module
+ --without-http_fastcgi_module disable ngx_http_fastcgi_module
+ --without-http_uwsgi_module disable ngx_http_uwsgi_module
+ --without-http_scgi_module disable ngx_http_scgi_module
+ --without-http_memcached_module disable ngx_http_memcached_module
+ --without-http_limit_conn_module disable ngx_http_limit_conn_module
+ --without-http_limit_req_module disable ngx_http_limit_req_module
+ --without-http_empty_gif_module disable ngx_http_empty_gif_module
+ --without-http_browser_module disable ngx_http_browser_module
+ --without-http_upstream_hash_module
+ disable ngx_http_upstream_hash_module
+ --without-http_upstream_ip_hash_module
+ disable ngx_http_upstream_ip_hash_module
+ --without-http_upstream_least_conn_module
+ disable ngx_http_upstream_least_conn_module
+ --without-http_upstream_keepalive_module
+ disable ngx_http_upstream_keepalive_module
+ --without-http_upstream_zone_module
+ disable ngx_http_upstream_zone_module
+
+ --with-http_perl_module enable ngx_http_perl_module
+ --with-http_perl_module=dynamic enable dynamic ngx_http_perl_module
+ --with-perl_modules_path=PATH set Perl modules path
+ --with-perl=PATH set perl binary pathname
+
+ --http-log-path=PATH set http access log pathname
+ --http-client-body-temp-path=PATH set path to store
+ http client request body temporary files
+ --http-proxy-temp-path=PATH set path to store
+ http proxy temporary files
+ --http-fastcgi-temp-path=PATH set path to store
+ http fastcgi temporary files
+ --http-uwsgi-temp-path=PATH set path to store
+ http uwsgi temporary files
+ --http-scgi-temp-path=PATH set path to store
+ http scgi temporary files
+
+ --without-http disable HTTP server
+ --without-http-cache disable HTTP cache
+
+ --with-mail enable POP3/IMAP4/SMTP proxy module
+ --with-mail=dynamic enable dynamic POP3/IMAP4/SMTP proxy module
+ --with-mail_ssl_module enable ngx_mail_ssl_module
+ --without-mail_pop3_module disable ngx_mail_pop3_module
+ --without-mail_imap_module disable ngx_mail_imap_module
+ --without-mail_smtp_module disable ngx_mail_smtp_module
+
+ --with-stream enable TCP/UDP proxy module
+ --with-stream=dynamic enable dynamic TCP/UDP proxy module
+ --with-stream_ssl_module enable ngx_stream_ssl_module
+ --with-stream_realip_module enable ngx_stream_realip_module
+ --with-stream_geoip_module enable ngx_stream_geoip_module
+ --with-stream_geoip_module=dynamic enable dynamic ngx_stream_geoip_module
+ --with-stream_ssl_preread_module enable ngx_stream_ssl_preread_module
+ --without-stream_limit_conn_module disable ngx_stream_limit_conn_module
+ --without-stream_access_module disable ngx_stream_access_module
+ --without-stream_geo_module disable ngx_stream_geo_module
+ --without-stream_map_module disable ngx_stream_map_module
+ --without-stream_split_clients_module
+ disable ngx_stream_split_clients_module
+ --without-stream_return_module disable ngx_stream_return_module
+ --without-stream_upstream_hash_module
+ disable ngx_stream_upstream_hash_module
+ --without-stream_upstream_least_conn_module
+ disable ngx_stream_upstream_least_conn_module
+ --without-stream_upstream_zone_module
+ disable ngx_stream_upstream_zone_module
+
+ --with-google_perftools_module enable ngx_google_perftools_module
+ --with-cpp_test_module enable ngx_cpp_test_module
+
+ --add-module=PATH enable external module
+ --add-dynamic-module=PATH enable dynamic external module
+
+ --with-compat dynamic modules compatibility
+
+ --with-cc=PATH set C compiler pathname
+ --with-cpp=PATH set C preprocessor pathname
+ --with-cc-opt=OPTIONS set additional C compiler options
+ --with-ld-opt=OPTIONS set additional linker options
+ --with-cpu-opt=CPU build for the specified CPU, valid values:
+ pentium, pentiumpro, pentium3, pentium4,
+ athlon, opteron, sparc32, sparc64, ppc64
+
+ --without-pcre disable PCRE library usage
+ --with-pcre force PCRE library usage
+ --with-pcre=DIR set path to PCRE library sources
+ --with-pcre-opt=OPTIONS set additional build options for PCRE
+ --with-pcre-jit build PCRE with JIT compilation support
+
+ --with-zlib=DIR set path to zlib library sources
+ --with-zlib-opt=OPTIONS set additional build options for zlib
+ --with-zlib-asm=CPU use zlib assembler sources optimized
+ for the specified CPU, valid values:
+ pentium, pentiumpro
+
+ --with-libatomic force libatomic_ops library usage
+ --with-libatomic=DIR set path to libatomic_ops library sources
+
+ --with-openssl=DIR set path to OpenSSL library sources
+ --with-openssl-opt=OPTIONS set additional build options for OpenSSL
+
+ --with-debug enable debug logging
+
+END
+
+ exit 1
+fi
+
+
+if [ ".$NGX_PLATFORM" = ".win32" ]; then
+ NGX_WINE=$WINE
+fi
+
+
+NGX_SBIN_PATH=${NGX_SBIN_PATH:-sbin/nginx}
+NGX_MODULES_PATH=${NGX_MODULES_PATH:-modules}
+NGX_CONF_PATH=${NGX_CONF_PATH:-conf/nginx.conf}
+NGX_CONF_PREFIX=`dirname $NGX_CONF_PATH`
+NGX_PID_PATH=${NGX_PID_PATH:-logs/nginx.pid}
+NGX_LOCK_PATH=${NGX_LOCK_PATH:-logs/nginx.lock}
+
+if [ ".$NGX_ERROR_LOG_PATH" = ".stderr" ]; then
+ NGX_ERROR_LOG_PATH=
+else
+ NGX_ERROR_LOG_PATH=${NGX_ERROR_LOG_PATH:-logs/error.log}
+fi
+
+NGX_HTTP_LOG_PATH=${NGX_HTTP_LOG_PATH:-logs/access.log}
+NGX_HTTP_CLIENT_TEMP_PATH=${NGX_HTTP_CLIENT_TEMP_PATH:-client_body_temp}
+NGX_HTTP_PROXY_TEMP_PATH=${NGX_HTTP_PROXY_TEMP_PATH:-proxy_temp}
+NGX_HTTP_FASTCGI_TEMP_PATH=${NGX_HTTP_FASTCGI_TEMP_PATH:-fastcgi_temp}
+NGX_HTTP_UWSGI_TEMP_PATH=${NGX_HTTP_UWSGI_TEMP_PATH:-uwsgi_temp}
+NGX_HTTP_SCGI_TEMP_PATH=${NGX_HTTP_SCGI_TEMP_PATH:-scgi_temp}
+
+case ".$NGX_PERL_MODULES" in
+ ./*)
+ ;;
+
+ .)
+ ;;
+
+ *)
+ NGX_PERL_MODULES=$NGX_PREFIX/$NGX_PERL_MODULES
+ ;;
+esac
diff --git a/app/nginx/auto/os/conf b/app/nginx/auto/os/conf
new file mode 100644
index 0000000..6ad0e74
--- /dev/null
+++ b/app/nginx/auto/os/conf
@@ -0,0 +1,116 @@
+
+# Copyright (C) Igor Sysoev
+# Copyright (C) Nginx, Inc.
+
+
+echo "checking for $NGX_SYSTEM specific features"
+
+case "$NGX_PLATFORM" in
+
+ FreeBSD:*)
+ . auto/os/freebsd
+ ;;
+
+ Linux:*)
+ . auto/os/linux
+ ;;
+
+ SunOS:*)
+ . auto/os/solaris
+ ;;
+
+ Darwin:*)
+ . auto/os/darwin
+ ;;
+
+ win32)
+ . auto/os/win32
+ ;;
+
+ DragonFly:*)
+ have=NGX_FREEBSD . auto/have_headers
+ CORE_INCS="$UNIX_INCS"
+ CORE_DEPS="$UNIX_DEPS $FREEBSD_DEPS"
+ CORE_SRCS="$UNIX_SRCS $FREEBSD_SRCS"
+
+ echo " + sendfile() found"
+ have=NGX_HAVE_SENDFILE . auto/have
+ CORE_SRCS="$CORE_SRCS $FREEBSD_SENDFILE_SRCS"
+
+ ngx_spacer='
+'
+ ;;
+
+ HP-UX:*)
+ # HP/UX
+ have=NGX_HPUX . auto/have_headers
+ CORE_INCS="$UNIX_INCS"
+ CORE_DEPS="$UNIX_DEPS $POSIX_DEPS"
+ CORE_SRCS="$UNIX_SRCS"
+ CC_AUX_FLAGS="$CC_AUX_FLAGS -D_XOPEN_SOURCE -D_XOPEN_SOURCE_EXTENDED=1"
+ CC_AUX_FLAGS="$CC_AUX_FLAGS -D_HPUX_ALT_XOPEN_SOCKET_API"
+ ;;
+
+ OSF1:*)
+ # Tru64 UNIX
+ have=NGX_TRU64 . auto/have_headers
+ have=NGX_HAVE_STRERROR_R . auto/nohave
+ CORE_INCS="$UNIX_INCS"
+ CORE_DEPS="$UNIX_DEPS $POSIX_DEPS"
+ CORE_SRCS="$UNIX_SRCS"
+ ;;
+
+ GNU:*)
+ # GNU Hurd
+ have=NGX_GNU_HURD . auto/have_headers
+ CORE_INCS="$UNIX_INCS"
+ CORE_DEPS="$UNIX_DEPS $POSIX_DEPS"
+ CORE_SRCS="$UNIX_SRCS"
+ CC_AUX_FLAGS="$CC_AUX_FLAGS -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64"
+ ;;
+
+ *)
+ CORE_INCS="$UNIX_INCS"
+ CORE_DEPS="$UNIX_DEPS $POSIX_DEPS"
+ CORE_SRCS="$UNIX_SRCS"
+ ;;
+
+esac
+
+
+case "$NGX_MACHINE" in
+
+ i386 | i686 | i86pc)
+ have=NGX_HAVE_NONALIGNED . auto/have
+ NGX_MACH_CACHE_LINE=32
+ ;;
+
+ amd64 | x86_64)
+ have=NGX_HAVE_NONALIGNED . auto/have
+ NGX_MACH_CACHE_LINE=64
+ ;;
+
+ sun4u | sun4v | sparc | sparc64)
+ have=NGX_ALIGNMENT value=16 . auto/define
+ # TODO
+ NGX_MACH_CACHE_LINE=64
+ ;;
+
+ ia64 )
+ have=NGX_ALIGNMENT value=16 . auto/define
+ # TODO
+ NGX_MACH_CACHE_LINE=64
+ ;;
+
+ *)
+ have=NGX_ALIGNMENT value=16 . auto/define
+ NGX_MACH_CACHE_LINE=32
+ ;;
+
+esac
+
+if test -z "$NGX_CPU_CACHE_LINE"; then
+ NGX_CPU_CACHE_LINE=$NGX_MACH_CACHE_LINE
+fi
+
+have=NGX_CPU_CACHE_LINE value=$NGX_CPU_CACHE_LINE . auto/define
diff --git a/app/nginx/auto/os/darwin b/app/nginx/auto/os/darwin
new file mode 100644
index 0000000..b4b3ad3
--- /dev/null
+++ b/app/nginx/auto/os/darwin
@@ -0,0 +1,118 @@
+
+# Copyright (C) Igor Sysoev
+# Copyright (C) Nginx, Inc.
+
+
+have=NGX_DARWIN . auto/have_headers
+
+CORE_INCS="$UNIX_INCS"
+CORE_DEPS="$UNIX_DEPS $DARWIN_DEPS"
+CORE_SRCS="$UNIX_SRCS $DARWIN_SRCS"
+
+
+
+ngx_spacer='
+'
+
+MAIN_LINK=
+MODULE_LINK="-shared -Wl,-undefined,dynamic_lookup"
+
+# kqueue
+
+echo " + kqueue found"
+have=NGX_HAVE_KQUEUE . auto/have
+have=NGX_HAVE_CLEAR_EVENT . auto/have
+EVENT_MODULES="$EVENT_MODULES $KQUEUE_MODULE"
+CORE_SRCS="$CORE_SRCS $KQUEUE_SRCS"
+EVENT_FOUND=YES
+NGX_KQUEUE_CHECKED=YES
+
+ngx_feature="kqueue's EVFILT_TIMER"
+ngx_feature_name="NGX_HAVE_TIMER_EVENT"
+ngx_feature_run=yes
+ngx_feature_incs="#include <sys/event.h>
+ #include <sys/time.h>"
+ngx_feature_path=
+ngx_feature_libs=
+ngx_feature_test="int kq;
+ struct kevent kev;
+ struct timespec ts;
+
+ if ((kq = kqueue()) == -1) return 1;
+
+ kev.ident = 0;
+ kev.filter = EVFILT_TIMER;
+ kev.flags = EV_ADD|EV_ENABLE;
+ kev.fflags = 0;
+ kev.data = 1000;
+ kev.udata = 0;
+
+ ts.tv_sec = 0;
+ ts.tv_nsec = 0;
+
+ if (kevent(kq, &kev, 1, &kev, 1, &ts) == -1) return 1;
+
+ if (kev.flags & EV_ERROR) return 1;"
+
+. auto/feature
+
+
+ngx_feature="Darwin 64-bit kqueue millisecond timeout bug"
+ngx_feature_name=NGX_DARWIN_KEVENT_BUG
+ngx_feature_run=bug
+ngx_feature_incs="#include <sys/event.h>
+ #include <sys/time.h>"
+ngx_feature_path=
+ngx_feature_libs=
+ngx_feature_test="int kq;
+ struct kevent kev;
+ struct timespec ts;
+ struct timeval tv, tv0;
+
+ kq = kqueue();
+
+ ts.tv_sec = 0;
+ ts.tv_nsec = 999000000;
+
+ gettimeofday(&tv, 0);
+ kevent(kq, NULL, 0, &kev, 1, &ts);
+ gettimeofday(&tv0, 0);
+ timersub(&tv0, &tv, &tv);
+
+ if (tv.tv_sec * 1000000 + tv.tv_usec < 900000) return 1;"
+
+. auto/feature
+
+
+# sendfile()
+
+CC_AUX_FLAGS="$CC_AUX_FLAGS"
+ngx_feature="sendfile()"
+ngx_feature_name="NGX_HAVE_SENDFILE"
+ngx_feature_run=yes
+ngx_feature_incs="#include <sys/types.h>
+ #include <sys/socket.h>
+ #include <sys/uio.h>
+ #include <sys/errno.h>"
+ngx_feature_path=
+ngx_feature_libs=
+ngx_feature_test="int s = 0, fd = 1;
+ off_t n; off_t off = 0;
+ n = sendfile(s, fd, off, &n, NULL, 0);
+ if (n == -1 && errno == ENOSYS) return 1"
+. auto/feature
+
+if [ $ngx_found = yes ]; then
+ CORE_SRCS="$CORE_SRCS $DARWIN_SENDFILE_SRCS"
+fi
+
+
+ngx_feature="atomic(3)"
+ngx_feature_name=NGX_DARWIN_ATOMIC
+ngx_feature_run=no
+ngx_feature_incs="#include <libkern/OSAtomic.h>"
+ngx_feature_path=
+ngx_feature_libs=
+ngx_feature_test="int32_t lock = 0;
+ if (!OSAtomicCompareAndSwap32Barrier(0, 1, &lock)) return 1"
+. auto/feature
diff --git a/app/nginx/auto/os/freebsd b/app/nginx/auto/os/freebsd
new file mode 100644
index 0000000..937ca20
--- /dev/null
+++ b/app/nginx/auto/os/freebsd
@@ -0,0 +1,107 @@
+
+# Copyright (C) Igor Sysoev
+# Copyright (C) Nginx, Inc.
+
+
+have=NGX_FREEBSD . auto/have_headers
+
+CORE_INCS="$UNIX_INCS"
+CORE_DEPS="$UNIX_DEPS $FREEBSD_DEPS"
+CORE_SRCS="$UNIX_SRCS $FREEBSD_SRCS"
+
+ngx_spacer='
+'
+
+
+# __FreeBSD_version and sysctl kern.osreldate are the best ways
+# to determine whether some capability exists and is safe to use.
+# __FreeBSD_version is used for the testing of the build environment.
+# sysctl kern.osreldate is used for the testing of the kernel capabilities.
+
+version=`grep "#define __FreeBSD_version" /usr/include/osreldate.h \
+ | sed -e 's/^.* \(.*\)$/\1/'`
+
+osreldate=`/sbin/sysctl -n kern.osreldate`
+
+
+# setproctitle() in libutil
+
+if [ \( $version -ge 500000 -a $version -lt 500012 \) \
+ -o $version -lt 410002 ]
+then
+ echo " + setproctitle() in libutil"
+
+ CORE_LIBS="$CORE_LIBS -lutil"
+ NGX_SETPROCTITLE_LIB="-lutil"
+fi
+
+# sendfile
+
+if [ $osreldate -gt 300007 ]; then
+ echo " + sendfile() found"
+
+ have=NGX_HAVE_SENDFILE . auto/have
+ CORE_SRCS="$CORE_SRCS $FREEBSD_SENDFILE_SRCS"
+fi
+
+if [ $NGX_FILE_AIO = YES ]; then
+ if [ $osreldate -gt 502103 ]; then
+ echo " + sendfile()'s SF_NODISKIO found"
+
+ have=NGX_HAVE_AIO_SENDFILE . auto/have
+ fi
+fi
+
+# POSIX semaphores
+# http://www.freebsd.org/cgi/query-pr.cgi?pr=kern/127545
+
+if [ $osreldate -ge 701106 ]; then
+ echo " + POSIX semaphores should work"
+else
+ have=NGX_HAVE_POSIX_SEM . auto/nohave
+fi
+
+
+# kqueue
+
+if [ \( $osreldate -lt 500000 -a $osreldate -ge 410000 \) \
+ -o $osreldate -ge 500011 ]
+then
+ echo " + kqueue found"
+
+ have=NGX_HAVE_KQUEUE . auto/have
+ have=NGX_HAVE_CLEAR_EVENT . auto/have
+ EVENT_MODULES="$EVENT_MODULES $KQUEUE_MODULE"
+ CORE_SRCS="$CORE_SRCS $KQUEUE_SRCS"
+ EVENT_FOUND=YES
+fi
+
+
+NGX_KQUEUE_CHECKED=YES
+
+
+# kqueue's NOTE_LOWAT
+
+if [ \( $version -lt 500000 -a $version -ge 430000 \) \
+ -o $version -ge 500018 ]
+then
+ echo " + kqueue's NOTE_LOWAT found"
+ have=NGX_HAVE_LOWAT_EVENT . auto/have
+fi
+
+# kqueue's EVFILT_TIMER
+
+if [ \( $version -lt 500000 -a $version -ge 440001 \) \
+ -o $version -ge 500023 ]
+then
+ echo " + kqueue's EVFILT_TIMER found"
+ have=NGX_HAVE_TIMER_EVENT . auto/have
+fi
+
+
+# cpuset_setaffinity()
+
+if [ $version -ge 701000 ]; then
+ echo " + cpuset_setaffinity() found"
+ have=NGX_HAVE_CPUSET_SETAFFINITY . auto/have
+fi
diff --git a/app/nginx/auto/os/linux b/app/nginx/auto/os/linux
new file mode 100644
index 0000000..fae8842
--- /dev/null
+++ b/app/nginx/auto/os/linux
@@ -0,0 +1,190 @@
+
+# Copyright (C) Igor Sysoev
+# Copyright (C) Nginx, Inc.
+
+
+have=NGX_LINUX . auto/have_headers
+
+CORE_INCS="$UNIX_INCS"
+CORE_DEPS="$UNIX_DEPS $LINUX_DEPS"
+CORE_SRCS="$UNIX_SRCS $LINUX_SRCS"
+
+ngx_spacer='
+'
+
+cc_aux_flags="$CC_AUX_FLAGS"
+CC_AUX_FLAGS="$cc_aux_flags -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64"
+
+
+# Linux kernel version
+
+version=$((`uname -r \
+ | sed -n -e 's/^\([0-9][0-9]*\)\.\([0-9][0-9]*\)\.\([0-9][0-9]*\).*/ \
+ \1*256*256+\2*256+\3/p' \
+ -e 's/^\([0-9][0-9]*\)\.\([0-9][0-9]*\).*/\1*256*256+\2*256/p'`))
+
+version=${version:-0}
+
+
+# posix_fadvise64() had been implemented in 2.5.60
+
+if [ $version -lt 132412 ]; then
+ have=NGX_HAVE_POSIX_FADVISE . auto/nohave
+fi
+
+# epoll, EPOLLET version
+
+ngx_feature="epoll"
+ngx_feature_name="NGX_HAVE_EPOLL"
+ngx_feature_run=yes
+ngx_feature_incs="#include <sys/epoll.h>"
+ngx_feature_path=
+ngx_feature_libs=
+ngx_feature_test="int efd = 0;
+ struct epoll_event ee;
+ ee.events = EPOLLIN|EPOLLOUT|EPOLLET;
+ ee.data.ptr = NULL;
+ (void) ee;
+ efd = epoll_create(100);
+ if (efd == -1) return 1;"
+. auto/feature
+
+if [ $ngx_found = yes ]; then
+ have=NGX_HAVE_CLEAR_EVENT . auto/have
+ CORE_SRCS="$CORE_SRCS $EPOLL_SRCS"
+ EVENT_MODULES="$EVENT_MODULES $EPOLL_MODULE"
+ EVENT_FOUND=YES
+
+
+ # EPOLLRDHUP appeared in Linux 2.6.17, glibc 2.8
+
+ ngx_feature="EPOLLRDHUP"
+ ngx_feature_name="NGX_HAVE_EPOLLRDHUP"
+ ngx_feature_run=no
+ ngx_feature_incs="#include <sys/epoll.h>"
+ ngx_feature_path=
+ ngx_feature_libs=
+ ngx_feature_test="int efd = 0, fd = 0;
+ struct epoll_event ee;
+ ee.events = EPOLLIN|EPOLLRDHUP|EPOLLET;
+ ee.data.ptr = NULL;
+ epoll_ctl(efd, EPOLL_CTL_ADD, fd, &ee)"
+ . auto/feature
+
+
+ # EPOLLEXCLUSIVE appeared in Linux 4.5, glibc 2.24
+
+ ngx_feature="EPOLLEXCLUSIVE"
+ ngx_feature_name="NGX_HAVE_EPOLLEXCLUSIVE"
+ ngx_feature_run=no
+ ngx_feature_incs="#include <sys/epoll.h>"
+ ngx_feature_path=
+ ngx_feature_libs=
+ ngx_feature_test="int efd = 0, fd = 0;
+ struct epoll_event ee;
+ ee.events = EPOLLIN|EPOLLEXCLUSIVE;
+ ee.data.ptr = NULL;
+ epoll_ctl(efd, EPOLL_CTL_ADD, fd, &ee)"
+ . auto/feature
+fi
+
+
+# O_PATH and AT_EMPTY_PATH were introduced in 2.6.39, glibc 2.14
+
+ngx_feature="O_PATH"
+ngx_feature_name="NGX_HAVE_O_PATH"
+ngx_feature_run=no
+ngx_feature_incs="#include <sys/types.h>
+ #include <sys/stat.h>
+ #include <fcntl.h>"
+ngx_feature_path=
+ngx_feature_libs=
+ngx_feature_test="int fd; struct stat sb;
+ fd = openat(AT_FDCWD, \".\", O_PATH|O_DIRECTORY|O_NOFOLLOW);
+ if (fstatat(fd, \"\", &sb, AT_EMPTY_PATH) != 0) return 1"
+. auto/feature
+
+
+# sendfile()
+
+CC_AUX_FLAGS="$cc_aux_flags -D_GNU_SOURCE"
+ngx_feature="sendfile()"
+ngx_feature_name="NGX_HAVE_SENDFILE"
+ngx_feature_run=yes
+ngx_feature_incs="#include <sys/sendfile.h>
+ #include <errno.h>"
+ngx_feature_path=
+ngx_feature_libs=
+ngx_feature_test="int s = 0, fd = 1;
+ ssize_t n; off_t off = 0;
+ n = sendfile(s, fd, &off, 1);
+ if (n == -1 && errno == ENOSYS) return 1"
+. auto/feature
+
+if [ $ngx_found = yes ]; then
+ CORE_SRCS="$CORE_SRCS $LINUX_SENDFILE_SRCS"
+fi
+
+
+# sendfile64()
+
+CC_AUX_FLAGS="$cc_aux_flags -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64"
+ngx_feature="sendfile64()"
+ngx_feature_name="NGX_HAVE_SENDFILE64"
+ngx_feature_run=yes
+ngx_feature_incs="#include <sys/sendfile.h>
+ #include <errno.h>"
+ngx_feature_path=
+ngx_feature_libs=
+ngx_feature_test="int s = 0, fd = 1;
+ ssize_t n; off_t off = 0;
+ n = sendfile(s, fd, &off, 1);
+ if (n == -1 && errno == ENOSYS) return 1"
+. auto/feature
+
+
+ngx_include="sys/prctl.h"; . auto/include
+
+# prctl(PR_SET_DUMPABLE)
+
+ngx_feature="prctl(PR_SET_DUMPABLE)"
+ngx_feature_name="NGX_HAVE_PR_SET_DUMPABLE"
+ngx_feature_run=yes
+ngx_feature_incs="#include <sys/prctl.h>"
+ngx_feature_path=
+ngx_feature_libs=
+ngx_feature_test="if (prctl(PR_SET_DUMPABLE, 1, 0, 0, 0) == -1) return 1"
+. auto/feature
+
+
+# sched_setaffinity()
+
+ngx_feature="sched_setaffinity()"
+ngx_feature_name="NGX_HAVE_SCHED_SETAFFINITY"
+ngx_feature_run=no
+ngx_feature_incs="#include <sched.h>"
+ngx_feature_path=
+ngx_feature_libs=
+ngx_feature_test="cpu_set_t mask;
+ CPU_ZERO(&mask);
+ sched_setaffinity(0, sizeof(cpu_set_t), &mask)"
+. auto/feature
+
+
+# crypt_r()
+
+ngx_feature="crypt_r()"
+ngx_feature_name="NGX_HAVE_GNU_CRYPT_R"
+ngx_feature_run=no
+ngx_feature_incs="#include <crypt.h>"
+ngx_feature_path=
+ngx_feature_libs=-lcrypt
+ngx_feature_test="struct crypt_data cd;
+ crypt_r(\"key\", \"salt\", &cd);"
+. auto/feature
+
+
+ngx_include="sys/vfs.h"; . auto/include
+
+
+CC_AUX_FLAGS="$cc_aux_flags -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64"
diff --git a/app/nginx/auto/os/solaris b/app/nginx/auto/os/solaris
new file mode 100644
index 0000000..1dcfe84
--- /dev/null
+++ b/app/nginx/auto/os/solaris
@@ -0,0 +1,61 @@
+
+# Copyright (C) Igor Sysoev
+# Copyright (C) Nginx, Inc.
+
+
+have=NGX_SOLARIS . auto/have_headers
+
+CORE_INCS="$UNIX_INCS"
+CORE_DEPS="$UNIX_DEPS $SOLARIS_DEPS"
+CORE_SRCS="$UNIX_SRCS $SOLARIS_SRCS "
+CORE_LIBS="$CORE_LIBS -lsocket -lnsl"
+
+NGX_RPATH=YES
+
+# Solaris's make does not support a blank line between target and rules
+ngx_spacer=
+
+CC_AUX_FLAGS="$CC_AUX_FLAGS -D_FILE_OFFSET_BITS=64 -lsocket -lnsl"
+
+
+if [ $ZLIB_ASM != NO ]; then
+ echo "$0: error: the --with-zlib-asm=CPU option is not supported"
+ echo "on that platform"
+ echo
+
+ exit 1
+fi
+
+
+ngx_feature="sendfilev()"
+ngx_feature_name="NGX_HAVE_SENDFILE"
+ngx_feature_run=no
+ngx_feature_incs="#include <sys/sendfile.h>"
+ngx_feature_path=
+ngx_feature_libs="-lsendfile"
+ngx_feature_test="int fd = 1; sendfilevec_t vec[1];
+ size_t sent; ssize_t n;
+ n = sendfilev(fd, vec, 1, &sent);
+ if (n == -1) return 1"
+. auto/feature
+
+
+if [ $ngx_found = yes ]; then
+ CORE_SRCS="$CORE_SRCS $SOLARIS_SENDFILEV_SRCS"
+ CORE_LIBS="$CORE_LIBS -lsendfile"
+fi
+
+
+ngx_feature="event ports"
+ngx_feature_name="NGX_HAVE_EVENTPORT"
+ngx_feature_run=no
+ngx_feature_incs="#include <port.h>"
+ngx_feature_path=
+ngx_feature_libs=
+ngx_feature_test="(void) port_create()"
+. auto/feature
+
+if [ $ngx_found = yes ]; then
+ CORE_SRCS="$CORE_SRCS $EVENTPORT_SRCS"
+ EVENT_MODULES="$EVENT_MODULES $EVENTPORT_MODULE"
+fi
diff --git a/app/nginx/auto/os/win32 b/app/nginx/auto/os/win32
new file mode 100644
index 0000000..650cf49
--- /dev/null
+++ b/app/nginx/auto/os/win32
@@ -0,0 +1,42 @@
+
+# Copyright (C) Igor Sysoev
+# Copyright (C) Nginx, Inc.
+
+
+have=NGX_WIN32 . auto/have_headers
+
+CORE_INCS="$WIN32_INCS"
+CORE_DEPS="$WIN32_DEPS"
+CORE_SRCS="$WIN32_SRCS $IOCP_SRCS"
+OS_CONFIG="$WIN32_CONFIG"
+NGX_ICONS="$NGX_WIN32_ICONS"
+SELECT_SRCS=$WIN32_SELECT_SRCS
+
+ngx_pic_opt=
+
+case "$NGX_CC_NAME" in
+
+ gcc)
+ CORE_LIBS="$CORE_LIBS -ladvapi32 -lws2_32"
+ MAIN_LINK="$MAIN_LINK -Wl,--export-all-symbols"
+ MAIN_LINK="$MAIN_LINK -Wl,--out-implib=$NGX_OBJS/libnginx.a"
+ MODULE_LINK="-shared -L $NGX_OBJS -lnginx"
+ ;;
+
+ *)
+ CORE_LIBS="$CORE_LIBS advapi32.lib ws2_32.lib"
+ ;;
+
+esac
+
+EVENT_MODULES="$EVENT_MODULES $IOCP_MODULE"
+EVENT_FOUND=YES
+
+if [ $EVENT_SELECT = NO ]; then
+ CORE_SRCS="$CORE_SRCS $SELECT_SRCS"
+ EVENT_MODULES="$EVENT_MODULES $SELECT_MODULE"
+fi
+
+have=NGX_HAVE_INET6 . auto/have
+
+have=NGX_HAVE_IOCP . auto/have
diff --git a/app/nginx/auto/sources b/app/nginx/auto/sources
new file mode 100644
index 0000000..1398147
--- /dev/null
+++ b/app/nginx/auto/sources
@@ -0,0 +1,255 @@
+
+# Copyright (C) Igor Sysoev
+# Copyright (C) Nginx, Inc.
+
+
+CORE_MODULES="ngx_core_module ngx_errlog_module ngx_conf_module"
+
+CORE_INCS="src/core"
+
+CORE_DEPS="src/core/nginx.h \
+ src/core/ngx_config.h \
+ src/core/ngx_core.h \
+ src/core/ngx_log.h \
+ src/core/ngx_palloc.h \
+ src/core/ngx_array.h \
+ src/core/ngx_list.h \
+ src/core/ngx_hash.h \
+ src/core/ngx_buf.h \
+ src/core/ngx_queue.h \
+ src/core/ngx_string.h \
+ src/core/ngx_parse.h \
+ src/core/ngx_parse_time.h \
+ src/core/ngx_inet.h \
+ src/core/ngx_file.h \
+ src/core/ngx_crc.h \
+ src/core/ngx_crc32.h \
+ src/core/ngx_murmurhash.h \
+ src/core/ngx_md5.h \
+ src/core/ngx_sha1.h \
+ src/core/ngx_rbtree.h \
+ src/core/ngx_radix_tree.h \
+ src/core/ngx_rwlock.h \
+ src/core/ngx_slab.h \
+ src/core/ngx_times.h \
+ src/core/ngx_shmtx.h \
+ src/core/ngx_connection.h \
+ src/core/ngx_cycle.h \
+ src/core/ngx_conf_file.h \
+ src/core/ngx_module.h \
+ src/core/ngx_resolver.h \
+ src/core/ngx_open_file_cache.h \
+ src/core/ngx_crypt.h \
+ src/core/ngx_proxy_protocol.h \
+ src/core/ngx_syslog.h"
+
+
+CORE_SRCS="src/core/nginx.c \
+ src/core/ngx_log.c \
+ src/core/ngx_palloc.c \
+ src/core/ngx_array.c \
+ src/core/ngx_list.c \
+ src/core/ngx_hash.c \
+ src/core/ngx_buf.c \
+ src/core/ngx_queue.c \
+ src/core/ngx_output_chain.c \
+ src/core/ngx_string.c \
+ src/core/ngx_parse.c \
+ src/core/ngx_parse_time.c \
+ src/core/ngx_inet.c \
+ src/core/ngx_file.c \
+ src/core/ngx_crc32.c \
+ src/core/ngx_murmurhash.c \
+ src/core/ngx_md5.c \
+ src/core/ngx_sha1.c \
+ src/core/ngx_rbtree.c \
+ src/core/ngx_radix_tree.c \
+ src/core/ngx_slab.c \
+ src/core/ngx_times.c \
+ src/core/ngx_shmtx.c \
+ src/core/ngx_connection.c \
+ src/core/ngx_cycle.c \
+ src/core/ngx_spinlock.c \
+ src/core/ngx_rwlock.c \
+ src/core/ngx_cpuinfo.c \
+ src/core/ngx_conf_file.c \
+ src/core/ngx_module.c \
+ src/core/ngx_resolver.c \
+ src/core/ngx_open_file_cache.c \
+ src/core/ngx_crypt.c \
+ src/core/ngx_proxy_protocol.c \
+ src/core/ngx_syslog.c"
+
+
+EVENT_MODULES="ngx_events_module ngx_event_core_module"
+
+EVENT_INCS="src/event src/event/modules"
+
+EVENT_DEPS="src/event/ngx_event.h \
+ src/event/ngx_event_timer.h \
+ src/event/ngx_event_posted.h \
+ src/event/ngx_event_connect.h \
+ src/event/ngx_event_pipe.h"
+
+EVENT_SRCS="src/event/ngx_event.c \
+ src/event/ngx_event_timer.c \
+ src/event/ngx_event_posted.c \
+ src/event/ngx_event_accept.c \
+ src/event/ngx_event_connect.c \
+ src/event/ngx_event_pipe.c"
+
+
+SELECT_MODULE=ngx_select_module
+SELECT_SRCS=src/event/modules/ngx_select_module.c
+WIN32_SELECT_SRCS=src/event/modules/ngx_win32_select_module.c
+
+POLL_MODULE=ngx_poll_module
+POLL_SRCS=src/event/modules/ngx_poll_module.c
+
+KQUEUE_MODULE=ngx_kqueue_module
+KQUEUE_SRCS=src/event/modules/ngx_kqueue_module.c
+
+DEVPOLL_MODULE=ngx_devpoll_module
+DEVPOLL_SRCS=src/event/modules/ngx_devpoll_module.c
+
+EVENTPORT_MODULE=ngx_eventport_module
+EVENTPORT_SRCS=src/event/modules/ngx_eventport_module.c
+
+EPOLL_MODULE=ngx_epoll_module
+EPOLL_SRCS=src/event/modules/ngx_epoll_module.c
+
+IOCP_MODULE=ngx_iocp_module
+IOCP_SRCS=src/event/modules/ngx_iocp_module.c
+
+FILE_AIO_SRCS="src/os/unix/ngx_file_aio_read.c"
+LINUX_AIO_SRCS="src/os/unix/ngx_linux_aio_read.c"
+
+UNIX_INCS="$CORE_INCS $EVENT_INCS src/os/unix"
+
+UNIX_DEPS="$CORE_DEPS $EVENT_DEPS \
+ src/os/unix/ngx_time.h \
+ src/os/unix/ngx_errno.h \
+ src/os/unix/ngx_alloc.h \
+ src/os/unix/ngx_files.h \
+ src/os/unix/ngx_channel.h \
+ src/os/unix/ngx_shmem.h \
+ src/os/unix/ngx_process.h \
+ src/os/unix/ngx_setaffinity.h \
+ src/os/unix/ngx_setproctitle.h \
+ src/os/unix/ngx_atomic.h \
+ src/os/unix/ngx_gcc_atomic_x86.h \
+ src/os/unix/ngx_thread.h \
+ src/os/unix/ngx_socket.h \
+ src/os/unix/ngx_os.h \
+ src/os/unix/ngx_user.h \
+ src/os/unix/ngx_dlopen.h \
+ src/os/unix/ngx_process_cycle.h"
+
+# add to UNIX_DEPS
+# src/os/unix/ngx_gcc_atomic_amd64.h \
+# src/os/unix/ngx_gcc_atomic_sparc64.h \
+# src/os/unix/ngx_gcc_atomic_ppc.h \
+# src/os/unix/ngx_sunpro_atomic_sparc64.h \
+# src/os/unix/ngx_sunpro_x86.il \
+# src/os/unix/ngx_sunpro_amd64.il \
+# src/os/unix/ngx_sunpro_sparc64.il \
+
+
+UNIX_SRCS="$CORE_SRCS $EVENT_SRCS \
+ src/os/unix/ngx_time.c \
+ src/os/unix/ngx_errno.c \
+ src/os/unix/ngx_alloc.c \
+ src/os/unix/ngx_files.c \
+ src/os/unix/ngx_socket.c \
+ src/os/unix/ngx_recv.c \
+ src/os/unix/ngx_readv_chain.c \
+ src/os/unix/ngx_udp_recv.c \
+ src/os/unix/ngx_send.c \
+ src/os/unix/ngx_writev_chain.c \
+ src/os/unix/ngx_udp_send.c \
+ src/os/unix/ngx_udp_sendmsg_chain.c \
+ src/os/unix/ngx_channel.c \
+ src/os/unix/ngx_shmem.c \
+ src/os/unix/ngx_process.c \
+ src/os/unix/ngx_daemon.c \
+ src/os/unix/ngx_setaffinity.c \
+ src/os/unix/ngx_setproctitle.c \
+ src/os/unix/ngx_posix_init.c \
+ src/os/unix/ngx_user.c \
+ src/os/unix/ngx_dlopen.c \
+ src/os/unix/ngx_process_cycle.c"
+
+POSIX_DEPS=src/os/unix/ngx_posix_config.h
+
+THREAD_POOL_MODULE=ngx_thread_pool_module
+THREAD_POOL_DEPS=src/core/ngx_thread_pool.h
+THREAD_POOL_SRCS="src/core/ngx_thread_pool.c
+ src/os/unix/ngx_thread_cond.c
+ src/os/unix/ngx_thread_mutex.c
+ src/os/unix/ngx_thread_id.c"
+
+FREEBSD_DEPS="src/os/unix/ngx_freebsd_config.h src/os/unix/ngx_freebsd.h"
+FREEBSD_SRCS=src/os/unix/ngx_freebsd_init.c
+FREEBSD_SENDFILE_SRCS=src/os/unix/ngx_freebsd_sendfile_chain.c
+
+LINUX_DEPS="src/os/unix/ngx_linux_config.h src/os/unix/ngx_linux.h"
+LINUX_SRCS=src/os/unix/ngx_linux_init.c
+LINUX_SENDFILE_SRCS=src/os/unix/ngx_linux_sendfile_chain.c
+
+
+SOLARIS_DEPS="src/os/unix/ngx_solaris_config.h src/os/unix/ngx_solaris.h"
+SOLARIS_SRCS=src/os/unix/ngx_solaris_init.c
+SOLARIS_SENDFILEV_SRCS=src/os/unix/ngx_solaris_sendfilev_chain.c
+
+
+DARWIN_DEPS="src/os/unix/ngx_darwin_config.h src/os/unix/ngx_darwin.h"
+DARWIN_SRCS=src/os/unix/ngx_darwin_init.c
+DARWIN_SENDFILE_SRCS=src/os/unix/ngx_darwin_sendfile_chain.c
+
+
+WIN32_INCS="$CORE_INCS $EVENT_INCS src/os/win32"
+
+WIN32_DEPS="$CORE_DEPS $EVENT_DEPS \
+ src/os/win32/ngx_win32_config.h \
+ src/os/win32/ngx_time.h \
+ src/os/win32/ngx_errno.h \
+ src/os/win32/ngx_alloc.h \
+ src/os/win32/ngx_files.h \
+ src/os/win32/ngx_shmem.h \
+ src/os/win32/ngx_process.h \
+ src/os/win32/ngx_atomic.h \
+ src/os/win32/ngx_thread.h \
+ src/os/win32/ngx_socket.h \
+ src/os/win32/ngx_os.h \
+ src/os/win32/ngx_user.h \
+ src/os/win32/ngx_dlopen.h \
+ src/os/win32/ngx_process_cycle.h"
+
+WIN32_CONFIG=src/os/win32/ngx_win32_config.h
+
+WIN32_SRCS="$CORE_SRCS $EVENT_SRCS \
+ src/os/win32/ngx_errno.c \
+ src/os/win32/ngx_alloc.c \
+ src/os/win32/ngx_files.c \
+ src/os/win32/ngx_shmem.c \
+ src/os/win32/ngx_time.c \
+ src/os/win32/ngx_process.c \
+ src/os/win32/ngx_thread.c \
+ src/os/win32/ngx_socket.c \
+ src/os/win32/ngx_wsarecv.c \
+ src/os/win32/ngx_wsarecv_chain.c \
+ src/os/win32/ngx_udp_wsarecv.c \
+ src/os/win32/ngx_wsasend.c \
+ src/os/win32/ngx_wsasend_chain.c \
+ src/os/win32/ngx_win32_init.c \
+ src/os/win32/ngx_user.c \
+ src/os/win32/ngx_dlopen.c \
+ src/os/win32/ngx_event_log.c \
+ src/os/win32/ngx_process_cycle.c \
+ src/event/ngx_event_acceptex.c"
+
+NGX_WIN32_ICONS="src/os/win32/nginx.ico"
+NGX_WIN32_RC="src/os/win32/nginx.rc"
+
+
+HTTP_FILE_CACHE_SRCS=src/http/ngx_http_file_cache.c
diff --git a/app/nginx/auto/stubs b/app/nginx/auto/stubs
new file mode 100644
index 0000000..d8bc1f0
--- /dev/null
+++ b/app/nginx/auto/stubs
@@ -0,0 +1,8 @@
+
+# Copyright (C) Igor Sysoev
+# Copyright (C) Nginx, Inc.
+
+
+have=NGX_SUPPRESS_WARN . auto/have
+
+have=NGX_SMP . auto/have
diff --git a/app/nginx/auto/summary b/app/nginx/auto/summary
new file mode 100644
index 0000000..9aa776e
--- /dev/null
+++ b/app/nginx/auto/summary
@@ -0,0 +1,82 @@
+
+# Copyright (C) Igor Sysoev
+# Copyright (C) Nginx, Inc.
+
+
+echo
+echo "Configuration summary"
+
+
+if [ $USE_THREADS = YES ]; then
+ echo " + using threads"
+fi
+
+if [ $USE_PCRE = DISABLED ]; then
+ echo " + PCRE library is disabled"
+
+else
+ case $PCRE in
+ YES) echo " + using system PCRE library" ;;
+ NONE) echo " + PCRE library is not used" ;;
+ *) echo " + using PCRE library: $PCRE" ;;
+ esac
+fi
+
+case $OPENSSL in
+ YES) echo " + using system OpenSSL library" ;;
+ NONE) echo " + OpenSSL library is not used" ;;
+ *) echo " + using OpenSSL library: $OPENSSL" ;;
+esac
+
+case $ZLIB in
+ YES) echo " + using system zlib library" ;;
+ NONE) echo " + zlib library is not used" ;;
+ *) echo " + using zlib library: $ZLIB" ;;
+esac
+
+case $NGX_LIBATOMIC in
+ YES) echo " + using system libatomic_ops library" ;;
+ NO) ;; # not used
+ *) echo " + using libatomic_ops library: $NGX_LIBATOMIC" ;;
+esac
+
+echo
+
+
+cat << END
+ nginx path prefix: "$NGX_PREFIX"
+ nginx binary file: "$NGX_SBIN_PATH"
+ nginx modules path: "$NGX_MODULES_PATH"
+ nginx configuration prefix: "$NGX_CONF_PREFIX"
+ nginx configuration file: "$NGX_CONF_PATH"
+ nginx pid file: "$NGX_PID_PATH"
+END
+
+if test -n "$NGX_ERROR_LOG_PATH"; then
+ echo " nginx error log file: \"$NGX_ERROR_LOG_PATH\""
+else
+ echo " nginx logs errors to stderr"
+fi
+
+cat << END
+ nginx http access log file: "$NGX_HTTP_LOG_PATH"
+ nginx http client request body temporary files: "$NGX_HTTP_CLIENT_TEMP_PATH"
+END
+
+if [ $HTTP_PROXY = YES ]; then
+ echo " nginx http proxy temporary files: \"$NGX_HTTP_PROXY_TEMP_PATH\""
+fi
+
+if [ $HTTP_FASTCGI = YES ]; then
+ echo " nginx http fastcgi temporary files: \"$NGX_HTTP_FASTCGI_TEMP_PATH\""
+fi
+
+if [ $HTTP_UWSGI = YES ]; then
+ echo " nginx http uwsgi temporary files: \"$NGX_HTTP_UWSGI_TEMP_PATH\""
+fi
+
+if [ $HTTP_SCGI = YES ]; then
+ echo " nginx http scgi temporary files: \"$NGX_HTTP_SCGI_TEMP_PATH\""
+fi
+
+echo "$NGX_POST_CONF_MSG"
diff --git a/app/nginx/auto/threads b/app/nginx/auto/threads
new file mode 100644
index 0000000..381f07a
--- /dev/null
+++ b/app/nginx/auto/threads
@@ -0,0 +1,20 @@
+
+# Copyright (C) Nginx, Inc.
+
+
+if [ $USE_THREADS = YES ]; then
+
+ if [ "$NGX_PLATFORM" = win32 ]; then
+ cat << END
+
+$0: --with-threads is not supported on Windows
+
+END
+ exit 1
+ fi
+
+ have=NGX_THREADS . auto/have
+ CORE_DEPS="$CORE_DEPS $THREAD_POOL_DEPS"
+ CORE_SRCS="$CORE_SRCS $THREAD_POOL_SRCS"
+ CORE_LIBS="$CORE_LIBS -lpthread"
+fi
diff --git a/app/nginx/auto/types/sizeof b/app/nginx/auto/types/sizeof
new file mode 100644
index 0000000..480d8cf
--- /dev/null
+++ b/app/nginx/auto/types/sizeof
@@ -0,0 +1,76 @@
+
+# Copyright (C) Igor Sysoev
+# Copyright (C) Nginx, Inc.
+
+
+echo $ngx_n "checking for $ngx_type size ...$ngx_c"
+
+cat << END >> $NGX_AUTOCONF_ERR
+
+----------------------------------------
+checking for $ngx_type size
+
+END
+
+ngx_size=
+
+cat << END > $NGX_AUTOTEST.c
+
+#include <sys/types.h>
+#include <sys/time.h>
+$NGX_INCLUDE_UNISTD_H
+#include <signal.h>
+#include <stdio.h>
+#include <sys/resource.h>
+$NGX_INCLUDE_INTTYPES_H
+$NGX_INCLUDE_AUTO_CONFIG_H
+
+int main(void) {
+ printf("%d", (int) sizeof($ngx_type));
+ return 0;
+}
+
+END
+
+
+ngx_test="$CC $CC_TEST_FLAGS $CC_AUX_FLAGS \
+ -o $NGX_AUTOTEST $NGX_AUTOTEST.c $NGX_LD_OPT $ngx_feature_libs"
+
+eval "$ngx_test >> $NGX_AUTOCONF_ERR 2>&1"
+
+
+if [ -x $NGX_AUTOTEST ]; then
+ ngx_size=`$NGX_AUTOTEST`
+ echo " $ngx_size bytes"
+fi
+
+
+case $ngx_size in
+ 4)
+ ngx_max_value=2147483647
+ ngx_max_len='(sizeof("-2147483648") - 1)'
+ ;;
+
+ 8)
+ ngx_max_value=9223372036854775807LL
+ ngx_max_len='(sizeof("-9223372036854775808") - 1)'
+ ;;
+
+ *)
+ echo
+ echo "$0: error: can not detect $ngx_type size"
+
+ echo "----------" >> $NGX_AUTOCONF_ERR
+ cat $NGX_AUTOTEST.c >> $NGX_AUTOCONF_ERR
+ echo "----------" >> $NGX_AUTOCONF_ERR
+ echo $ngx_test >> $NGX_AUTOCONF_ERR
+ echo "----------" >> $NGX_AUTOCONF_ERR
+
+ rm -rf $NGX_AUTOTEST*
+
+ exit 1
+esac
+
+
+rm -rf $NGX_AUTOTEST*
+
diff --git a/app/nginx/auto/types/typedef b/app/nginx/auto/types/typedef
new file mode 100644
index 0000000..d54c289
--- /dev/null
+++ b/app/nginx/auto/types/typedef
@@ -0,0 +1,82 @@
+
+# Copyright (C) Igor Sysoev
+# Copyright (C) Nginx, Inc.
+
+
+echo $ngx_n "checking for $ngx_type ...$ngx_c"
+
+cat << END >> $NGX_AUTOCONF_ERR
+
+----------------------------------------
+checking for $ngx_type
+
+END
+
+ngx_found=no
+
+for ngx_try in $ngx_type $ngx_types
+do
+
+ cat << END > $NGX_AUTOTEST.c
+
+#include <sys/types.h>
+#include <signal.h>
+#include <sys/socket.h>
+#include <sys/time.h>
+#include <sys/resource.h>
+#include <netinet/in.h>
+$NGX_INCLUDE_INTTYPES_H
+
+int main(void) {
+ $ngx_try i = 0;
+ return (int) i;
+}
+
+END
+
+ ngx_test="$CC $CC_TEST_FLAGS $CC_AUX_FLAGS \
+ -o $NGX_AUTOTEST $NGX_AUTOTEST.c $NGX_LD_OPT $ngx_feature_libs"
+
+ eval "$ngx_test >> $NGX_AUTOCONF_ERR 2>&1"
+
+ if [ -x $NGX_AUTOTEST ]; then
+ if [ $ngx_try = $ngx_type ]; then
+ echo " found"
+ ngx_found=yes
+ else
+ echo ", $ngx_try used"
+ ngx_found=$ngx_try
+ fi
+ fi
+
+ if [ $ngx_found = no ]; then
+ if [ $ngx_try = $ngx_type ]; then
+ echo $ngx_n " $ngx_try not found$ngx_c"
+ else
+ echo $ngx_n ", $ngx_try not found$ngx_c"
+ fi
+
+ echo "----------" >> $NGX_AUTOCONF_ERR
+ cat $NGX_AUTOTEST.c >> $NGX_AUTOCONF_ERR
+ echo "----------" >> $NGX_AUTOCONF_ERR
+ echo $ngx_test >> $NGX_AUTOCONF_ERR
+ echo "----------" >> $NGX_AUTOCONF_ERR
+ fi
+
+ rm -rf $NGX_AUTOTEST*
+
+ if [ $ngx_found != no ]; then
+ break
+ fi
+done
+
+if [ $ngx_found = no ]; then
+ echo
+ echo "$0: error: can not define $ngx_type"
+
+ exit 1
+fi
+
+if [ $ngx_found != yes ]; then
+ echo "typedef $ngx_found $ngx_type;" >> $NGX_AUTO_CONFIG_H
+fi
diff --git a/app/nginx/auto/types/uintptr_t b/app/nginx/auto/types/uintptr_t
new file mode 100644
index 0000000..a33d6d0
--- /dev/null
+++ b/app/nginx/auto/types/uintptr_t
@@ -0,0 +1,50 @@
+
+# Copyright (C) Igor Sysoev
+# Copyright (C) Nginx, Inc.
+
+
+echo $ngx_n "checking for uintptr_t ...$ngx_c"
+
+cat << END >> $NGX_AUTOCONF_ERR
+
+----------------------------------------
+checking for uintptr_t
+
+END
+
+found=no
+
+cat << END > $NGX_AUTOTEST.c
+
+#include <sys/types.h>
+$NGX_INCLUDE_INTTYPES_H
+
+int main(void) {
+ uintptr_t i = 0;
+ return (int) i;
+}
+
+END
+
+ngx_test="$CC $CC_TEST_FLAGS $CC_AUX_FLAGS \
+ -o $NGX_AUTOTEST $NGX_AUTOTEST.c $NGX_LD_OPT"
+
+eval "$ngx_test >> $NGX_AUTOCONF_ERR 2>&1"
+
+if [ -x $NGX_AUTOTEST ]; then
+ echo " uintptr_t found"
+ found=yes
+else
+ echo $ngx_n " uintptr_t not found" $ngx_c
+fi
+
+rm -rf $NGX_AUTOTEST*
+
+
+if [ $found = no ]; then
+ found="uint`expr 8 \* $ngx_ptr_size`_t"
+ echo ", $found used"
+
+ echo "typedef $found uintptr_t;" >> $NGX_AUTO_CONFIG_H
+ echo "typedef $found intptr_t;" | sed -e 's/u//g' >> $NGX_AUTO_CONFIG_H
+fi
diff --git a/app/nginx/auto/types/value b/app/nginx/auto/types/value
new file mode 100644
index 0000000..ac88a39
--- /dev/null
+++ b/app/nginx/auto/types/value
@@ -0,0 +1,12 @@
+
+# Copyright (C) Igor Sysoev
+# Copyright (C) Nginx, Inc.
+
+
+cat << END >> $NGX_AUTO_CONFIG_H
+
+#ifndef $ngx_param
+#define $ngx_param $ngx_value
+#endif
+
+END
diff --git a/app/nginx/auto/unix b/app/nginx/auto/unix
new file mode 100644
index 0000000..5ef74d4
--- /dev/null
+++ b/app/nginx/auto/unix
@@ -0,0 +1,964 @@
+
+# Copyright (C) Igor Sysoev
+# Copyright (C) Nginx, Inc.
+
+
+NGX_USER=${NGX_USER:-nobody}
+
+if [ -z "$NGX_GROUP" ]; then
+ if [ $NGX_USER = nobody ]; then
+ if grep nobody /etc/group 2>&1 >/dev/null; then
+ echo "checking for nobody group ... found"
+ NGX_GROUP=nobody
+ else
+ echo "checking for nobody group ... not found"
+
+ if grep nogroup /etc/group 2>&1 >/dev/null; then
+ echo "checking for nogroup group ... found"
+ NGX_GROUP=nogroup
+ else
+ echo "checking for nogroup group ... not found"
+ NGX_GROUP=nobody
+ fi
+ fi
+ else
+ NGX_GROUP=$NGX_USER
+ fi
+fi
+
+
+ngx_feature="poll()"
+ngx_feature_name=
+ngx_feature_run=no
+ngx_feature_incs="#include <poll.h>"
+ngx_feature_path=
+ngx_feature_libs=
+ngx_feature_test="int n; struct pollfd pl;
+ pl.fd = 0;
+ pl.events = 0;
+ pl.revents = 0;
+ n = poll(&pl, 1, 0);
+ if (n == -1) return 1"
+. auto/feature
+
+if [ $ngx_found = no ]; then
+ EVENT_POLL=NONE
+fi
+
+
+ngx_feature="/dev/poll"
+ngx_feature_name="NGX_HAVE_DEVPOLL"
+ngx_feature_run=no
+ngx_feature_incs="#include <sys/devpoll.h>"
+ngx_feature_path=
+ngx_feature_libs=
+ngx_feature_test="int n, dp; struct dvpoll dvp;
+ dp = 0;
+ dvp.dp_fds = NULL;
+ dvp.dp_nfds = 0;
+ dvp.dp_timeout = 0;
+ n = ioctl(dp, DP_POLL, &dvp);
+ if (n == -1) return 1"
+. auto/feature
+
+if [ $ngx_found = yes ]; then
+ CORE_SRCS="$CORE_SRCS $DEVPOLL_SRCS"
+ EVENT_MODULES="$EVENT_MODULES $DEVPOLL_MODULE"
+ EVENT_FOUND=YES
+fi
+
+
+if test -z "$NGX_KQUEUE_CHECKED"; then
+ ngx_feature="kqueue"
+ ngx_feature_name="NGX_HAVE_KQUEUE"
+ ngx_feature_run=no
+ ngx_feature_incs="#include <sys/event.h>"
+ ngx_feature_path=
+ ngx_feature_libs=
+ ngx_feature_test="(void) kqueue()"
+ . auto/feature
+
+ if [ $ngx_found = yes ]; then
+
+ have=NGX_HAVE_CLEAR_EVENT . auto/have
+ EVENT_MODULES="$EVENT_MODULES $KQUEUE_MODULE"
+ CORE_SRCS="$CORE_SRCS $KQUEUE_SRCS"
+ EVENT_FOUND=YES
+
+ ngx_feature="kqueue's NOTE_LOWAT"
+ ngx_feature_name="NGX_HAVE_LOWAT_EVENT"
+ ngx_feature_run=no
+ ngx_feature_incs="#include <sys/event.h>"
+ ngx_feature_path=
+ ngx_feature_libs=
+ ngx_feature_test="struct kevent kev;
+ kev.fflags = NOTE_LOWAT;
+ (void) kev"
+ . auto/feature
+
+
+ ngx_feature="kqueue's EVFILT_TIMER"
+ ngx_feature_name="NGX_HAVE_TIMER_EVENT"
+ ngx_feature_run=yes
+ ngx_feature_incs="#include <sys/event.h>
+ #include <sys/time.h>"
+ ngx_feature_path=
+ ngx_feature_libs=
+ ngx_feature_test="int kq;
+ struct kevent kev;
+ struct timespec ts;
+
+ if ((kq = kqueue()) == -1) return 1;
+
+ kev.ident = 0;
+ kev.filter = EVFILT_TIMER;
+ kev.flags = EV_ADD|EV_ENABLE;
+ kev.fflags = 0;
+ kev.data = 1000;
+ kev.udata = 0;
+
+ ts.tv_sec = 0;
+ ts.tv_nsec = 0;
+
+ if (kevent(kq, &kev, 1, &kev, 1, &ts) == -1) return 1;
+
+ if (kev.flags & EV_ERROR) return 1;"
+
+ . auto/feature
+ fi
+fi
+
+
+if [ "$NGX_SYSTEM" = "NetBSD" ]; then
+
+ # NetBSD 2.0 incompatibly defines kevent.udata as "intptr_t"
+
+ cat << END >> $NGX_AUTO_CONFIG_H
+
+#define NGX_KQUEUE_UDATA_T
+
+END
+
+else
+ cat << END >> $NGX_AUTO_CONFIG_H
+
+#define NGX_KQUEUE_UDATA_T (void *)
+
+END
+
+fi
+
+
+ngx_feature="crypt()"
+ngx_feature_name=
+ngx_feature_run=no
+ngx_feature_incs=
+ngx_feature_path=
+ngx_feature_libs=
+ngx_feature_test="crypt(\"test\", \"salt\");"
+. auto/feature
+
+
+if [ $ngx_found = no ]; then
+
+ ngx_feature="crypt() in libcrypt"
+ ngx_feature_name=
+ ngx_feature_run=no
+ ngx_feature_incs=
+ ngx_feature_path=
+ ngx_feature_libs=-lcrypt
+ . auto/feature
+
+ if [ $ngx_found = yes ]; then
+ CRYPT_LIB="-lcrypt"
+ fi
+fi
+
+
+ngx_feature="F_READAHEAD"
+ngx_feature_name="NGX_HAVE_F_READAHEAD"
+ngx_feature_run=no
+ngx_feature_incs="#include <fcntl.h>"
+ngx_feature_path=
+ngx_feature_libs=
+ngx_feature_test="fcntl(0, F_READAHEAD, 1);"
+. auto/feature
+
+
+ngx_feature="posix_fadvise()"
+ngx_feature_name="NGX_HAVE_POSIX_FADVISE"
+ngx_feature_run=no
+ngx_feature_incs="#include <fcntl.h>"
+ngx_feature_path=
+ngx_feature_libs=
+ngx_feature_test="posix_fadvise(0, 0, 0, POSIX_FADV_SEQUENTIAL);"
+. auto/feature
+
+
+ngx_feature="O_DIRECT"
+ngx_feature_name="NGX_HAVE_O_DIRECT"
+ngx_feature_run=no
+ngx_feature_incs="#include <fcntl.h>"
+ngx_feature_path=
+ngx_feature_libs=
+ngx_feature_test="fcntl(0, F_SETFL, O_DIRECT);"
+. auto/feature
+
+
+if [ $ngx_found = yes -a "$NGX_SYSTEM" = "Linux" ]; then
+ have=NGX_HAVE_ALIGNED_DIRECTIO . auto/have
+fi
+
+ngx_feature="F_NOCACHE"
+ngx_feature_name="NGX_HAVE_F_NOCACHE"
+ngx_feature_run=no
+ngx_feature_incs="#include <fcntl.h>"
+ngx_feature_path=
+ngx_feature_libs=
+ngx_feature_test="fcntl(0, F_NOCACHE, 1);"
+. auto/feature
+
+
+ngx_feature="directio()"
+ngx_feature_name="NGX_HAVE_DIRECTIO"
+ngx_feature_run=no
+ngx_feature_incs="#include <sys/types.h>
+ #include <sys/fcntl.h>"
+ngx_feature_path=
+ngx_feature_libs=
+ngx_feature_test="directio(0, DIRECTIO_ON);"
+. auto/feature
+
+
+ngx_feature="statfs()"
+ngx_feature_name="NGX_HAVE_STATFS"
+ngx_feature_run=no
+ngx_feature_incs="$NGX_INCLUDE_SYS_PARAM_H
+ $NGX_INCLUDE_SYS_MOUNT_H
+ $NGX_INCLUDE_SYS_VFS_H"
+ngx_feature_path=
+ngx_feature_libs=
+ngx_feature_test="struct statfs fs;
+ statfs(\".\", &fs);"
+. auto/feature
+
+
+ngx_feature="statvfs()"
+ngx_feature_name="NGX_HAVE_STATVFS"
+ngx_feature_run=no
+ngx_feature_incs="#include <sys/types.h>
+ #include <sys/statvfs.h>"
+ngx_feature_path=
+ngx_feature_libs=
+ngx_feature_test="struct statvfs fs;
+ statvfs(\".\", &fs);"
+. auto/feature
+
+
+ngx_feature="dlopen()"
+ngx_feature_name="NGX_HAVE_DLOPEN"
+ngx_feature_run=no
+ngx_feature_incs="#include <dlfcn.h>"
+ngx_feature_path=
+ngx_feature_libs=
+ngx_feature_test="dlopen(NULL, RTLD_NOW | RTLD_GLOBAL); dlsym(NULL, \"\")"
+. auto/feature
+
+
+if [ $ngx_found = no ]; then
+
+ ngx_feature="dlopen() in libdl"
+ ngx_feature_libs="-ldl"
+ . auto/feature
+
+ if [ $ngx_found = yes ]; then
+ CORE_LIBS="$CORE_LIBS -ldl"
+ NGX_LIBDL="-ldl"
+ fi
+fi
+
+
+ngx_feature="sched_yield()"
+ngx_feature_name="NGX_HAVE_SCHED_YIELD"
+ngx_feature_run=no
+ngx_feature_incs="#include <sched.h>"
+ngx_feature_path=
+ngx_feature_libs=
+ngx_feature_test="sched_yield()"
+. auto/feature
+
+
+if [ $ngx_found = no ]; then
+
+ ngx_feature="sched_yield() in librt"
+ ngx_feature_libs="-lrt"
+ . auto/feature
+
+ if [ $ngx_found = yes ]; then
+ CORE_LIBS="$CORE_LIBS -lrt"
+ fi
+fi
+
+
+ngx_feature="SO_SETFIB"
+ngx_feature_name="NGX_HAVE_SETFIB"
+ngx_feature_run=no
+ngx_feature_incs="#include <sys/socket.h>"
+ngx_feature_path=
+ngx_feature_libs=
+ngx_feature_test="setsockopt(0, SOL_SOCKET, SO_SETFIB, NULL, 0)"
+. auto/feature
+
+
+ngx_feature="SO_REUSEPORT"
+ngx_feature_name="NGX_HAVE_REUSEPORT"
+ngx_feature_run=no
+ngx_feature_incs="#include <sys/socket.h>"
+ngx_feature_path=
+ngx_feature_libs=
+ngx_feature_test="setsockopt(0, SOL_SOCKET, SO_REUSEPORT, NULL, 0)"
+. auto/feature
+
+
+ngx_feature="SO_ACCEPTFILTER"
+ngx_feature_name="NGX_HAVE_DEFERRED_ACCEPT"
+ngx_feature_run=no
+ngx_feature_incs="#include <sys/socket.h>"
+ngx_feature_path=
+ngx_feature_libs=
+ngx_feature_test="setsockopt(0, SOL_SOCKET, SO_ACCEPTFILTER, NULL, 0)"
+. auto/feature
+
+
+# NetBSD bind to any address for transparent proxying
+
+ngx_feature="SO_BINDANY"
+ngx_feature_name="NGX_HAVE_TRANSPARENT_PROXY"
+ngx_feature_run=no
+ngx_feature_incs="#include <sys/socket.h>"
+ngx_feature_path=
+ngx_feature_libs=
+ngx_feature_test="setsockopt(0, SOL_SOCKET, SO_BINDANY, NULL, 0)"
+. auto/feature
+
+
+# Linux IP_BIND_ADDRESS_NO_PORT
+
+ngx_feature="IP_BIND_ADDRESS_NO_PORT"
+ngx_feature_name="NGX_HAVE_IP_BIND_ADDRESS_NO_PORT"
+ngx_feature_run=no
+ngx_feature_incs="#include <sys/socket.h>
+ #include <netinet/in.h>"
+ngx_feature_path=
+ngx_feature_libs=
+ngx_feature_test="setsockopt(0, IPPROTO_IP, IP_BIND_ADDRESS_NO_PORT, NULL, 0)"
+. auto/feature
+
+
+# Linux transparent proxying
+
+ngx_feature="IP_TRANSPARENT"
+ngx_feature_name="NGX_HAVE_TRANSPARENT_PROXY"
+ngx_feature_run=no
+ngx_feature_incs="#include <sys/socket.h>
+ #include <netinet/in.h>"
+ngx_feature_path=
+ngx_feature_libs=
+ngx_feature_test="setsockopt(0, IPPROTO_IP, IP_TRANSPARENT, NULL, 0)"
+. auto/feature
+
+
+# FreeBSD bind to any address for transparent proxying
+
+ngx_feature="IP_BINDANY"
+ngx_feature_name="NGX_HAVE_TRANSPARENT_PROXY"
+ngx_feature_run=no
+ngx_feature_incs="#include <sys/socket.h>
+ #include <netinet/in.h>"
+ngx_feature_path=
+ngx_feature_libs=
+ngx_feature_test="setsockopt(0, IPPROTO_IP, IP_BINDANY, NULL, 0)"
+. auto/feature
+
+
+# BSD way to get IPv4 datagram destination address
+
+ngx_feature="IP_RECVDSTADDR"
+ngx_feature_name="NGX_HAVE_IP_RECVDSTADDR"
+ngx_feature_run=no
+ngx_feature_incs="#include <sys/socket.h>
+ #include <netinet/in.h>"
+ngx_feature_path=
+ngx_feature_libs=
+ngx_feature_test="setsockopt(0, IPPROTO_IP, IP_RECVDSTADDR, NULL, 0)"
+. auto/feature
+
+
+# Linux way to get IPv4 datagram destination address
+
+ngx_feature="IP_PKTINFO"
+ngx_feature_name="NGX_HAVE_IP_PKTINFO"
+ngx_feature_run=no
+ngx_feature_incs="#include <sys/socket.h>
+ #include <netinet/in.h>"
+ngx_feature_path=
+ngx_feature_libs=
+ngx_feature_test="setsockopt(0, IPPROTO_IP, IP_PKTINFO, NULL, 0)"
+. auto/feature
+
+
+# RFC 3542 way to get IPv6 datagram destination address
+
+ngx_feature="IPV6_RECVPKTINFO"
+ngx_feature_name="NGX_HAVE_IPV6_RECVPKTINFO"
+ngx_feature_run=no
+ngx_feature_incs="#include <sys/socket.h>
+ #include <netinet/in.h>"
+ngx_feature_path=
+ngx_feature_libs=
+ngx_feature_test="setsockopt(0, IPPROTO_IPV6, IPV6_RECVPKTINFO, NULL, 0)"
+. auto/feature
+
+
+ngx_feature="TCP_DEFER_ACCEPT"
+ngx_feature_name="NGX_HAVE_DEFERRED_ACCEPT"
+ngx_feature_run=no
+ngx_feature_incs="#include <sys/socket.h>
+ #include <netinet/in.h>
+ #include <netinet/tcp.h>"
+ngx_feature_path=
+ngx_feature_libs=
+ngx_feature_test="setsockopt(0, IPPROTO_TCP, TCP_DEFER_ACCEPT, NULL, 0)"
+. auto/feature
+
+
+ngx_feature="TCP_KEEPIDLE"
+ngx_feature_name="NGX_HAVE_KEEPALIVE_TUNABLE"
+ngx_feature_run=no
+ngx_feature_incs="#include <sys/socket.h>
+ #include <netinet/in.h>
+ #include <netinet/tcp.h>"
+ngx_feature_path=
+ngx_feature_libs=
+ngx_feature_test="setsockopt(0, IPPROTO_TCP, TCP_KEEPIDLE, NULL, 0);
+ setsockopt(0, IPPROTO_TCP, TCP_KEEPINTVL, NULL, 0);
+ setsockopt(0, IPPROTO_TCP, TCP_KEEPCNT, NULL, 0)"
+. auto/feature
+
+
+ngx_feature="TCP_FASTOPEN"
+ngx_feature_name="NGX_HAVE_TCP_FASTOPEN"
+ngx_feature_run=no
+ngx_feature_incs="#include <sys/socket.h>
+ #include <netinet/in.h>
+ #include <netinet/tcp.h>"
+ngx_feature_path=
+ngx_feature_libs=
+ngx_feature_test="setsockopt(0, IPPROTO_TCP, TCP_FASTOPEN, NULL, 0)"
+. auto/feature
+
+
+ngx_feature="TCP_INFO"
+ngx_feature_name="NGX_HAVE_TCP_INFO"
+ngx_feature_run=no
+ngx_feature_incs="#include <sys/socket.h>
+ #include <netinet/in.h>
+ #include <netinet/tcp.h>"
+ngx_feature_path=
+ngx_feature_libs=
+ngx_feature_test="socklen_t optlen = sizeof(struct tcp_info);
+ struct tcp_info ti;
+ ti.tcpi_rtt = 0;
+ ti.tcpi_rttvar = 0;
+ ti.tcpi_snd_cwnd = 0;
+ ti.tcpi_rcv_space = 0;
+ getsockopt(0, IPPROTO_TCP, TCP_INFO, &ti, &optlen)"
+. auto/feature
+
+
+ngx_feature="accept4()"
+ngx_feature_name="NGX_HAVE_ACCEPT4"
+ngx_feature_run=no
+ngx_feature_incs="#include <sys/socket.h>"
+ngx_feature_path=
+ngx_feature_libs=
+ngx_feature_test="accept4(0, NULL, NULL, SOCK_NONBLOCK)"
+. auto/feature
+
+if [ $NGX_FILE_AIO = YES ]; then
+
+ ngx_feature="kqueue AIO support"
+ ngx_feature_name="NGX_HAVE_FILE_AIO"
+ ngx_feature_run=no
+ ngx_feature_incs="#include <aio.h>"
+ ngx_feature_path=
+ ngx_feature_libs=
+ ngx_feature_test="struct aiocb iocb;
+ iocb.aio_sigevent.sigev_notify = SIGEV_KEVENT;
+ (void) aio_read(&iocb)"
+ . auto/feature
+
+ if [ $ngx_found = yes ]; then
+ CORE_SRCS="$CORE_SRCS $FILE_AIO_SRCS"
+ fi
+
+ if [ $ngx_found = no ]; then
+
+ ngx_feature="Linux AIO support"
+ ngx_feature_name="NGX_HAVE_FILE_AIO"
+ ngx_feature_run=no
+ ngx_feature_incs="#include <linux/aio_abi.h>
+ #include <sys/eventfd.h>"
+ ngx_feature_path=
+ ngx_feature_libs=
+ ngx_feature_test="struct iocb iocb;
+ iocb.aio_lio_opcode = IOCB_CMD_PREAD;
+ iocb.aio_flags = IOCB_FLAG_RESFD;
+ iocb.aio_resfd = -1;
+ (void) iocb;
+ (void) eventfd(0, 0)"
+ . auto/feature
+
+ if [ $ngx_found = yes ]; then
+ have=NGX_HAVE_EVENTFD . auto/have
+ have=NGX_HAVE_SYS_EVENTFD_H . auto/have
+ CORE_SRCS="$CORE_SRCS $LINUX_AIO_SRCS"
+ fi
+ fi
+
+ if [ $ngx_found = no ]; then
+
+ ngx_feature="Linux AIO support (SYS_eventfd)"
+ ngx_feature_incs="#include <linux/aio_abi.h>
+ #include <sys/syscall.h>"
+ ngx_feature_test="struct iocb iocb;
+ iocb.aio_lio_opcode = IOCB_CMD_PREAD;
+ iocb.aio_flags = IOCB_FLAG_RESFD;
+ iocb.aio_resfd = -1;
+ (void) iocb;
+ (void) SYS_eventfd"
+ . auto/feature
+
+ if [ $ngx_found = yes ]; then
+ have=NGX_HAVE_EVENTFD . auto/have
+ CORE_SRCS="$CORE_SRCS $LINUX_AIO_SRCS"
+ fi
+ fi
+
+ if [ $ngx_found = no ]; then
+ cat << END
+
+$0: no supported file AIO was found
+Currently file AIO is supported on FreeBSD 4.3+ and Linux 2.6.22+ only
+
+END
+ exit 1
+ fi
+
+else
+
+ ngx_feature="eventfd()"
+ ngx_feature_name="NGX_HAVE_EVENTFD"
+ ngx_feature_run=no
+ ngx_feature_incs="#include <sys/eventfd.h>"
+ ngx_feature_path=
+ ngx_feature_libs=
+ ngx_feature_test="(void) eventfd(0, 0)"
+ . auto/feature
+
+ if [ $ngx_found = yes ]; then
+ have=NGX_HAVE_SYS_EVENTFD_H . auto/have
+ fi
+
+ if [ $ngx_found = no ]; then
+
+ ngx_feature="eventfd() (SYS_eventfd)"
+ ngx_feature_incs="#include <sys/syscall.h>"
+ ngx_feature_test="(void) SYS_eventfd"
+ . auto/feature
+ fi
+fi
+
+
+have=NGX_HAVE_UNIX_DOMAIN . auto/have
+
+ngx_feature_libs=
+
+
+# C types
+
+ngx_type="int"; . auto/types/sizeof
+
+ngx_type="long"; . auto/types/sizeof
+
+ngx_type="long long"; . auto/types/sizeof
+
+ngx_type="void *"; . auto/types/sizeof; ngx_ptr_size=$ngx_size
+ngx_param=NGX_PTR_SIZE; ngx_value=$ngx_size; . auto/types/value
+
+
+# POSIX types
+
+NGX_INCLUDE_AUTO_CONFIG_H="#include \"ngx_auto_config.h\""
+
+ngx_type="uint32_t"; ngx_types="u_int32_t"; . auto/types/typedef
+ngx_type="uint64_t"; ngx_types="u_int64_t"; . auto/types/typedef
+
+ngx_type="sig_atomic_t"; ngx_types="int"; . auto/types/typedef
+. auto/types/sizeof
+ngx_param=NGX_SIG_ATOMIC_T_SIZE; ngx_value=$ngx_size; . auto/types/value
+
+ngx_type="socklen_t"; ngx_types="int"; . auto/types/typedef
+
+ngx_type="in_addr_t"; ngx_types="uint32_t u_int32_t"; . auto/types/typedef
+
+ngx_type="in_port_t"; ngx_types="u_short"; . auto/types/typedef
+
+ngx_type="rlim_t"; ngx_types="int"; . auto/types/typedef
+
+. auto/types/uintptr_t
+
+. auto/endianness
+
+ngx_type="size_t"; . auto/types/sizeof
+ngx_param=NGX_MAX_SIZE_T_VALUE; ngx_value=$ngx_max_value; . auto/types/value
+ngx_param=NGX_SIZE_T_LEN; ngx_value=$ngx_max_len; . auto/types/value
+
+ngx_type="off_t"; . auto/types/sizeof
+ngx_param=NGX_MAX_OFF_T_VALUE; ngx_value=$ngx_max_value; . auto/types/value
+ngx_param=NGX_OFF_T_LEN; ngx_value=$ngx_max_len; . auto/types/value
+
+ngx_type="time_t"; . auto/types/sizeof
+ngx_param=NGX_TIME_T_SIZE; ngx_value=$ngx_size; . auto/types/value
+ngx_param=NGX_TIME_T_LEN; ngx_value=$ngx_max_len; . auto/types/value
+ngx_param=NGX_MAX_TIME_T_VALUE; ngx_value=$ngx_max_value; . auto/types/value
+
+
+# syscalls, libc calls and some features
+
+
+ngx_feature="AF_INET6"
+ngx_feature_name="NGX_HAVE_INET6"
+ngx_feature_run=no
+ngx_feature_incs="#include <sys/socket.h>
+ #include <netinet/in.h>
+ #include <arpa/inet.h>"
+ngx_feature_path=
+ngx_feature_libs=
+ngx_feature_test="struct sockaddr_in6 sin6;
+ sin6.sin6_family = AF_INET6;
+ (void) sin6"
+. auto/feature
+
+
+ngx_feature="setproctitle()"
+ngx_feature_name="NGX_HAVE_SETPROCTITLE"
+ngx_feature_run=no
+ngx_feature_incs="#include <stdlib.h>"
+ngx_feature_path=
+ngx_feature_libs=$NGX_SETPROCTITLE_LIB
+ngx_feature_test="setproctitle(\"test\");"
+. auto/feature
+
+
+ngx_feature="pread()"
+ngx_feature_name="NGX_HAVE_PREAD"
+ngx_feature_run=no
+ngx_feature_incs=
+ngx_feature_path=
+ngx_feature_libs=
+ngx_feature_test="char buf[1]; ssize_t n; n = pread(0, buf, 1, 0);
+ if (n == -1) return 1"
+. auto/feature
+
+
+ngx_feature="pwrite()"
+ngx_feature_name="NGX_HAVE_PWRITE"
+ngx_feature_run=no
+ngx_feature_incs=
+ngx_feature_path=
+ngx_feature_libs=
+ngx_feature_test="char buf[1]; ssize_t n; n = pwrite(1, buf, 1, 0);
+ if (n == -1) return 1"
+. auto/feature
+
+
+# pwritev() was introduced in FreeBSD 6 and Linux 2.6.30, glibc 2.10
+
+ngx_feature="pwritev()"
+ngx_feature_name="NGX_HAVE_PWRITEV"
+ngx_feature_run=no
+ngx_feature_incs='#include <sys/uio.h>'
+ngx_feature_path=
+ngx_feature_libs=
+ngx_feature_test="char buf[1]; struct iovec vec[1]; ssize_t n;
+ vec[0].iov_base = buf;
+ vec[0].iov_len = 1;
+ n = pwritev(1, vec, 1, 0);
+ if (n == -1) return 1"
+. auto/feature
+
+
+ngx_feature="sys_nerr"
+ngx_feature_name="NGX_SYS_NERR"
+ngx_feature_run=value
+ngx_feature_incs='#include <errno.h>
+ #include <stdio.h>'
+ngx_feature_path=
+ngx_feature_libs=
+ngx_feature_test='printf("%d", sys_nerr);'
+. auto/feature
+
+
+if [ $ngx_found = no ]; then
+
+ # Cygiwn defines _sys_nerr
+ ngx_feature="_sys_nerr"
+ ngx_feature_name="NGX_SYS_NERR"
+ ngx_feature_run=value
+ ngx_feature_incs='#include <errno.h>
+ #include <stdio.h>'
+ ngx_feature_path=
+ ngx_feature_libs=
+ ngx_feature_test='printf("%d", _sys_nerr);'
+ . auto/feature
+fi
+
+
+if [ $ngx_found = no ]; then
+
+ # Solaris has no sys_nerr
+ ngx_feature='maximum errno'
+ ngx_feature_name=NGX_SYS_NERR
+ ngx_feature_run=value
+ ngx_feature_incs='#include <errno.h>
+ #include <string.h>
+ #include <stdio.h>'
+ ngx_feature_path=
+ ngx_feature_libs=
+ ngx_feature_test='int n;
+ char *p;
+ for (n = 1; n < 1000; n++) {
+ errno = 0;
+ p = strerror(n);
+ if (errno == EINVAL
+ || p == NULL
+ || strncmp(p, "Unknown error", 13) == 0)
+ {
+ break;
+ }
+ }
+ printf("%d", n);'
+ . auto/feature
+fi
+
+
+ngx_feature="localtime_r()"
+ngx_feature_name="NGX_HAVE_LOCALTIME_R"
+ngx_feature_run=no
+ngx_feature_incs="#include <time.h>"
+ngx_feature_path=
+ngx_feature_libs=
+ngx_feature_test="struct tm t; time_t c=0; localtime_r(&c, &t)"
+. auto/feature
+
+
+ngx_feature="posix_memalign()"
+ngx_feature_name="NGX_HAVE_POSIX_MEMALIGN"
+ngx_feature_run=no
+ngx_feature_incs="#include <stdlib.h>"
+ngx_feature_path=
+ngx_feature_libs=
+ngx_feature_test="void *p; int n; n = posix_memalign(&p, 4096, 4096);
+ if (n != 0) return 1"
+. auto/feature
+
+
+ngx_feature="memalign()"
+ngx_feature_name="NGX_HAVE_MEMALIGN"
+ngx_feature_run=no
+ngx_feature_incs="#include <stdlib.h>
+ #include <malloc.h>"
+ngx_feature_path=
+ngx_feature_libs=
+ngx_feature_test="void *p; p = memalign(4096, 4096);
+ if (p == NULL) return 1"
+. auto/feature
+
+
+ngx_feature="mmap(MAP_ANON|MAP_SHARED)"
+ngx_feature_name="NGX_HAVE_MAP_ANON"
+ngx_feature_run=yes
+ngx_feature_incs="#include <sys/mman.h>"
+ngx_feature_path=
+ngx_feature_libs=
+ngx_feature_test="void *p;
+ p = mmap(NULL, 4096, PROT_READ|PROT_WRITE,
+ MAP_ANON|MAP_SHARED, -1, 0);
+ if (p == MAP_FAILED) return 1;"
+. auto/feature
+
+
+ngx_feature='mmap("/dev/zero", MAP_SHARED)'
+ngx_feature_name="NGX_HAVE_MAP_DEVZERO"
+ngx_feature_run=yes
+ngx_feature_incs="#include <sys/mman.h>
+ #include <sys/stat.h>
+ #include <fcntl.h>"
+ngx_feature_path=
+ngx_feature_libs=
+ngx_feature_test='void *p; int fd;
+ fd = open("/dev/zero", O_RDWR);
+ p = mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0);
+ if (p == MAP_FAILED) return 1;'
+. auto/feature
+
+
+ngx_feature="System V shared memory"
+ngx_feature_name="NGX_HAVE_SYSVSHM"
+ngx_feature_run=yes
+ngx_feature_incs="#include <sys/ipc.h>
+ #include <sys/shm.h>"
+ngx_feature_path=
+ngx_feature_libs=
+ngx_feature_test="int id;
+ id = shmget(IPC_PRIVATE, 4096, (SHM_R|SHM_W|IPC_CREAT));
+ if (id == -1) return 1;
+ shmctl(id, IPC_RMID, NULL);"
+. auto/feature
+
+
+ngx_feature="POSIX semaphores"
+ngx_feature_name="NGX_HAVE_POSIX_SEM"
+ngx_feature_run=yes
+ngx_feature_incs="#include <semaphore.h>"
+ngx_feature_path=
+ngx_feature_libs=
+ngx_feature_test="sem_t sem;
+ if (sem_init(&sem, 1, 0) == -1) return 1;
+ sem_destroy(&sem);"
+. auto/feature
+
+
+if [ $ngx_found = no ]; then
+
+ # Linux has POSIX semaphores in libpthread
+ ngx_feature="POSIX semaphores in libpthread"
+ ngx_feature_libs=-lpthread
+ . auto/feature
+
+ if [ $ngx_found = yes ]; then
+ CORE_LIBS="$CORE_LIBS -lpthread"
+ fi
+fi
+
+
+if [ $ngx_found = no ]; then
+
+ # Solaris has POSIX semaphores in librt
+ ngx_feature="POSIX semaphores in librt"
+ ngx_feature_libs=-lrt
+ . auto/feature
+
+ if [ $ngx_found = yes ]; then
+ CORE_LIBS="$CORE_LIBS -lrt"
+ fi
+fi
+
+
+ngx_feature="struct msghdr.msg_control"
+ngx_feature_name="NGX_HAVE_MSGHDR_MSG_CONTROL"
+ngx_feature_run=no
+ngx_feature_incs="#include <sys/socket.h>
+ #include <stdio.h>"
+ngx_feature_path=
+ngx_feature_libs=
+ngx_feature_test="struct msghdr msg;
+ printf(\"%d\", (int) sizeof(msg.msg_control))"
+. auto/feature
+
+
+ngx_feature="ioctl(FIONBIO)"
+ngx_feature_name="NGX_HAVE_FIONBIO"
+ngx_feature_run=no
+ngx_feature_incs="#include <sys/ioctl.h>
+ #include <stdio.h>
+ $NGX_INCLUDE_SYS_FILIO_H"
+ngx_feature_path=
+ngx_feature_libs=
+ngx_feature_test="int i = FIONBIO; printf(\"%d\", i)"
+. auto/feature
+
+
+ngx_feature="struct tm.tm_gmtoff"
+ngx_feature_name="NGX_HAVE_GMTOFF"
+ngx_feature_run=no
+ngx_feature_incs="#include <time.h>
+ #include <stdio.h>"
+ngx_feature_path=
+ngx_feature_libs=
+ngx_feature_test="struct tm tm; tm.tm_gmtoff = 0;
+ printf(\"%d\", (int) tm.tm_gmtoff)"
+. auto/feature
+
+
+ngx_feature="struct dirent.d_namlen"
+ngx_feature_name="NGX_HAVE_D_NAMLEN"
+ngx_feature_run=no
+ngx_feature_incs="#include <dirent.h>
+ #include <stdio.h>"
+ngx_feature_path=
+ngx_feature_libs=
+ngx_feature_test="struct dirent dir; dir.d_namlen = 0;
+ printf(\"%d\", (int) dir.d_namlen)"
+. auto/feature
+
+
+ngx_feature="struct dirent.d_type"
+ngx_feature_name="NGX_HAVE_D_TYPE"
+ngx_feature_run=no
+ngx_feature_incs="#include <dirent.h>
+ #include <stdio.h>"
+ngx_feature_path=
+ngx_feature_libs=
+ngx_feature_test="struct dirent dir; dir.d_type = DT_REG;
+ printf(\"%d\", (int) dir.d_type)"
+. auto/feature
+
+
+ngx_feature="sysconf(_SC_NPROCESSORS_ONLN)"
+ngx_feature_name="NGX_HAVE_SC_NPROCESSORS_ONLN"
+ngx_feature_run=no
+ngx_feature_incs=
+ngx_feature_path=
+ngx_feature_libs=
+ngx_feature_test="sysconf(_SC_NPROCESSORS_ONLN)"
+. auto/feature
+
+
+ngx_feature="openat(), fstatat()"
+ngx_feature_name="NGX_HAVE_OPENAT"
+ngx_feature_run=no
+ngx_feature_incs="#include <sys/types.h>
+ #include <sys/stat.h>
+ #include <fcntl.h>"
+ngx_feature_path=
+ngx_feature_libs=
+ngx_feature_test="struct stat sb;
+ openat(AT_FDCWD, \".\", O_RDONLY|O_NOFOLLOW);
+ fstatat(AT_FDCWD, \".\", &sb, AT_SYMLINK_NOFOLLOW);"
+. auto/feature
+
+
+ngx_feature="getaddrinfo()"
+ngx_feature_name="NGX_HAVE_GETADDRINFO"
+ngx_feature_run=no
+ngx_feature_incs="#include <sys/types.h>
+ #include <sys/socket.h>
+ #include <netdb.h>"
+ngx_feature_path=
+ngx_feature_libs=
+ngx_feature_test='struct addrinfo *res;
+ if (getaddrinfo("localhost", NULL, NULL, &res) != 0) return 1;
+ freeaddrinfo(res)'
+. auto/feature
diff --git a/app/nginx/conf/fastcgi.conf b/app/nginx/conf/fastcgi.conf
new file mode 100644
index 0000000..091738c
--- /dev/null
+++ b/app/nginx/conf/fastcgi.conf
@@ -0,0 +1,26 @@
+
+fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
+fastcgi_param QUERY_STRING $query_string;
+fastcgi_param REQUEST_METHOD $request_method;
+fastcgi_param CONTENT_TYPE $content_type;
+fastcgi_param CONTENT_LENGTH $content_length;
+
+fastcgi_param SCRIPT_NAME $fastcgi_script_name;
+fastcgi_param REQUEST_URI $request_uri;
+fastcgi_param DOCUMENT_URI $document_uri;
+fastcgi_param DOCUMENT_ROOT $document_root;
+fastcgi_param SERVER_PROTOCOL $server_protocol;
+fastcgi_param REQUEST_SCHEME $scheme;
+fastcgi_param HTTPS $https if_not_empty;
+
+fastcgi_param GATEWAY_INTERFACE CGI/1.1;
+fastcgi_param SERVER_SOFTWARE nginx/$nginx_version;
+
+fastcgi_param REMOTE_ADDR $remote_addr;
+fastcgi_param REMOTE_PORT $remote_port;
+fastcgi_param SERVER_ADDR $server_addr;
+fastcgi_param SERVER_PORT $server_port;
+fastcgi_param SERVER_NAME $server_name;
+
+# PHP only, required if PHP was built with --enable-force-cgi-redirect
+fastcgi_param REDIRECT_STATUS 200;
diff --git a/app/nginx/conf/fastcgi_params b/app/nginx/conf/fastcgi_params
new file mode 100644
index 0000000..28decb9
--- /dev/null
+++ b/app/nginx/conf/fastcgi_params
@@ -0,0 +1,25 @@
+
+fastcgi_param QUERY_STRING $query_string;
+fastcgi_param REQUEST_METHOD $request_method;
+fastcgi_param CONTENT_TYPE $content_type;
+fastcgi_param CONTENT_LENGTH $content_length;
+
+fastcgi_param SCRIPT_NAME $fastcgi_script_name;
+fastcgi_param REQUEST_URI $request_uri;
+fastcgi_param DOCUMENT_URI $document_uri;
+fastcgi_param DOCUMENT_ROOT $document_root;
+fastcgi_param SERVER_PROTOCOL $server_protocol;
+fastcgi_param REQUEST_SCHEME $scheme;
+fastcgi_param HTTPS $https if_not_empty;
+
+fastcgi_param GATEWAY_INTERFACE CGI/1.1;
+fastcgi_param SERVER_SOFTWARE nginx/$nginx_version;
+
+fastcgi_param REMOTE_ADDR $remote_addr;
+fastcgi_param REMOTE_PORT $remote_port;
+fastcgi_param SERVER_ADDR $server_addr;
+fastcgi_param SERVER_PORT $server_port;
+fastcgi_param SERVER_NAME $server_name;
+
+# PHP only, required if PHP was built with --enable-force-cgi-redirect
+fastcgi_param REDIRECT_STATUS 200;
diff --git a/app/nginx/conf/koi-utf b/app/nginx/conf/koi-utf
new file mode 100644
index 0000000..e7974ff
--- /dev/null
+++ b/app/nginx/conf/koi-utf
@@ -0,0 +1,109 @@
+
+# This map is not a full koi8-r <> utf8 map: it does not contain
+# box-drawing and some other characters. Besides this map contains
+# several koi8-u and Byelorussian letters which are not in koi8-r.
+# If you need a full and standard map, use contrib/unicode2nginx/koi-utf
+# map instead.
+
+charset_map koi8-r utf-8 {
+
+ 80 E282AC ; # euro
+
+ 95 E280A2 ; # bullet
+
+ 9A C2A0 ; # &nbsp;
+
+ 9E C2B7 ; # &middot;
+
+ A3 D191 ; # small yo
+ A4 D194 ; # small Ukrainian ye
+
+ A6 D196 ; # small Ukrainian i
+ A7 D197 ; # small Ukrainian yi
+
+ AD D291 ; # small Ukrainian soft g
+ AE D19E ; # small Byelorussian short u
+
+ B0 C2B0 ; # &deg;
+
+ B3 D081 ; # capital YO
+ B4 D084 ; # capital Ukrainian YE
+
+ B6 D086 ; # capital Ukrainian I
+ B7 D087 ; # capital Ukrainian YI
+
+ B9 E28496 ; # numero sign
+
+ BD D290 ; # capital Ukrainian soft G
+ BE D18E ; # capital Byelorussian short U
+
+ BF C2A9 ; # (C)
+
+ C0 D18E ; # small yu
+ C1 D0B0 ; # small a
+ C2 D0B1 ; # small b
+ C3 D186 ; # small ts
+ C4 D0B4 ; # small d
+ C5 D0B5 ; # small ye
+ C6 D184 ; # small f
+ C7 D0B3 ; # small g
+ C8 D185 ; # small kh
+ C9 D0B8 ; # small i
+ CA D0B9 ; # small j
+ CB D0BA ; # small k
+ CC D0BB ; # small l
+ CD D0BC ; # small m
+ CE D0BD ; # small n
+ CF D0BE ; # small o
+
+ D0 D0BF ; # small p
+ D1 D18F ; # small ya
+ D2 D180 ; # small r
+ D3 D181 ; # small s
+ D4 D182 ; # small t
+ D5 D183 ; # small u
+ D6 D0B6 ; # small zh
+ D7 D0B2 ; # small v
+ D8 D18C ; # small soft sign
+ D9 D18B ; # small y
+ DA D0B7 ; # small z
+ DB D188 ; # small sh
+ DC D18D ; # small e
+ DD D189 ; # small shch
+ DE D187 ; # small ch
+ DF D18A ; # small hard sign
+
+ E0 D0AE ; # capital YU
+ E1 D090 ; # capital A
+ E2 D091 ; # capital B
+ E3 D0A6 ; # capital TS
+ E4 D094 ; # capital D
+ E5 D095 ; # capital YE
+ E6 D0A4 ; # capital F
+ E7 D093 ; # capital G
+ E8 D0A5 ; # capital KH
+ E9 D098 ; # capital I
+ EA D099 ; # capital J
+ EB D09A ; # capital K
+ EC D09B ; # capital L
+ ED D09C ; # capital M
+ EE D09D ; # capital N
+ EF D09E ; # capital O
+
+ F0 D09F ; # capital P
+ F1 D0AF ; # capital YA
+ F2 D0A0 ; # capital R
+ F3 D0A1 ; # capital S
+ F4 D0A2 ; # capital T
+ F5 D0A3 ; # capital U
+ F6 D096 ; # capital ZH
+ F7 D092 ; # capital V
+ F8 D0AC ; # capital soft sign
+ F9 D0AB ; # capital Y
+ FA D097 ; # capital Z
+ FB D0A8 ; # capital SH
+ FC D0AD ; # capital E
+ FD D0A9 ; # capital SHCH
+ FE D0A7 ; # capital CH
+ FF D0AA ; # capital hard sign
+}
diff --git a/app/nginx/conf/koi-win b/app/nginx/conf/koi-win
new file mode 100644
index 0000000..72afabe
--- /dev/null
+++ b/app/nginx/conf/koi-win
@@ -0,0 +1,103 @@
+
+charset_map koi8-r windows-1251 {
+
+ 80 88 ; # euro
+
+ 95 95 ; # bullet
+
+ 9A A0 ; # &nbsp;
+
+ 9E B7 ; # &middot;
+
+ A3 B8 ; # small yo
+ A4 BA ; # small Ukrainian ye
+
+ A6 B3 ; # small Ukrainian i
+ A7 BF ; # small Ukrainian yi
+
+ AD B4 ; # small Ukrainian soft g
+ AE A2 ; # small Byelorussian short u
+
+ B0 B0 ; # &deg;
+
+ B3 A8 ; # capital YO
+ B4 AA ; # capital Ukrainian YE
+
+ B6 B2 ; # capital Ukrainian I
+ B7 AF ; # capital Ukrainian YI
+
+ B9 B9 ; # numero sign
+
+ BD A5 ; # capital Ukrainian soft G
+ BE A1 ; # capital Byelorussian short U
+
+ BF A9 ; # (C)
+
+ C0 FE ; # small yu
+ C1 E0 ; # small a
+ C2 E1 ; # small b
+ C3 F6 ; # small ts
+ C4 E4 ; # small d
+ C5 E5 ; # small ye
+ C6 F4 ; # small f
+ C7 E3 ; # small g
+ C8 F5 ; # small kh
+ C9 E8 ; # small i
+ CA E9 ; # small j
+ CB EA ; # small k
+ CC EB ; # small l
+ CD EC ; # small m
+ CE ED ; # small n
+ CF EE ; # small o
+
+ D0 EF ; # small p
+ D1 FF ; # small ya
+ D2 F0 ; # small r
+ D3 F1 ; # small s
+ D4 F2 ; # small t
+ D5 F3 ; # small u
+ D6 E6 ; # small zh
+ D7 E2 ; # small v
+ D8 FC ; # small soft sign
+ D9 FB ; # small y
+ DA E7 ; # small z
+ DB F8 ; # small sh
+ DC FD ; # small e
+ DD F9 ; # small shch
+ DE F7 ; # small ch
+ DF FA ; # small hard sign
+
+ E0 DE ; # capital YU
+ E1 C0 ; # capital A
+ E2 C1 ; # capital B
+ E3 D6 ; # capital TS
+ E4 C4 ; # capital D
+ E5 C5 ; # capital YE
+ E6 D4 ; # capital F
+ E7 C3 ; # capital G
+ E8 D5 ; # capital KH
+ E9 C8 ; # capital I
+ EA C9 ; # capital J
+ EB CA ; # capital K
+ EC CB ; # capital L
+ ED CC ; # capital M
+ EE CD ; # capital N
+ EF CE ; # capital O
+
+ F0 CF ; # capital P
+ F1 DF ; # capital YA
+ F2 D0 ; # capital R
+ F3 D1 ; # capital S
+ F4 D2 ; # capital T
+ F5 D3 ; # capital U
+ F6 C6 ; # capital ZH
+ F7 C2 ; # capital V
+ F8 DC ; # capital soft sign
+ F9 DB ; # capital Y
+ FA C7 ; # capital Z
+ FB D8 ; # capital SH
+ FC DD ; # capital E
+ FD D9 ; # capital SHCH
+ FE D7 ; # capital CH
+ FF DA ; # capital hard sign
+}
diff --git a/app/nginx/conf/mime.types b/app/nginx/conf/mime.types
new file mode 100644
index 0000000..89be9a4
--- /dev/null
+++ b/app/nginx/conf/mime.types
@@ -0,0 +1,89 @@
+
+types {
+ text/html html htm shtml;
+ text/css css;
+ text/xml xml;
+ image/gif gif;
+ image/jpeg jpeg jpg;
+ application/javascript js;
+ application/atom+xml atom;
+ application/rss+xml rss;
+
+ text/mathml mml;
+ text/plain txt;
+ text/vnd.sun.j2me.app-descriptor jad;
+ text/vnd.wap.wml wml;
+ text/x-component htc;
+
+ image/png png;
+ image/tiff tif tiff;
+ image/vnd.wap.wbmp wbmp;
+ image/x-icon ico;
+ image/x-jng jng;
+ image/x-ms-bmp bmp;
+ image/svg+xml svg svgz;
+ image/webp webp;
+
+ application/font-woff woff;
+ application/java-archive jar war ear;
+ application/json json;
+ application/mac-binhex40 hqx;
+ application/msword doc;
+ application/pdf pdf;
+ application/postscript ps eps ai;
+ application/rtf rtf;
+ application/vnd.apple.mpegurl m3u8;
+ application/vnd.ms-excel xls;
+ application/vnd.ms-fontobject eot;
+ application/vnd.ms-powerpoint ppt;
+ application/vnd.wap.wmlc wmlc;
+ application/vnd.google-earth.kml+xml kml;
+ application/vnd.google-earth.kmz kmz;
+ application/x-7z-compressed 7z;
+ application/x-cocoa cco;
+ application/x-java-archive-diff jardiff;
+ application/x-java-jnlp-file jnlp;
+ application/x-makeself run;
+ application/x-perl pl pm;
+ application/x-pilot prc pdb;
+ application/x-rar-compressed rar;
+ application/x-redhat-package-manager rpm;
+ application/x-sea sea;
+ application/x-shockwave-flash swf;
+ application/x-stuffit sit;
+ application/x-tcl tcl tk;
+ application/x-x509-ca-cert der pem crt;
+ application/x-xpinstall xpi;
+ application/xhtml+xml xhtml;
+ application/xspf+xml xspf;
+ application/zip zip;
+
+ application/octet-stream bin exe dll;
+ application/octet-stream deb;
+ application/octet-stream dmg;
+ application/octet-stream iso img;
+ application/octet-stream msi msp msm;
+
+ application/vnd.openxmlformats-officedocument.wordprocessingml.document docx;
+ application/vnd.openxmlformats-officedocument.spreadsheetml.sheet xlsx;
+ application/vnd.openxmlformats-officedocument.presentationml.presentation pptx;
+
+ audio/midi mid midi kar;
+ audio/mpeg mp3;
+ audio/ogg ogg;
+ audio/x-m4a m4a;
+ audio/x-realaudio ra;
+
+ video/3gpp 3gpp 3gp;
+ video/mp2t ts;
+ video/mp4 mp4;
+ video/mpeg mpeg mpg;
+ video/quicktime mov;
+ video/webm webm;
+ video/x-flv flv;
+ video/x-m4v m4v;
+ video/x-mng mng;
+ video/x-ms-asf asx asf;
+ video/x-ms-wmv wmv;
+ video/x-msvideo avi;
+}
diff --git a/app/nginx/conf/nginx-tldk.conf b/app/nginx/conf/nginx-tldk.conf
new file mode 100644
index 0000000..27d6b8a
--- /dev/null
+++ b/app/nginx/conf/nginx-tldk.conf
@@ -0,0 +1,83 @@
+
+user root;
+worker_processes 2;
+
+# run nginx workers on cpus 5-6.
+worker_cpu_affinity 100000 1000000;
+
+#with TLDK daemon mode is not supported right now.
+daemon off;
+
+pid /local/nginx.cfg/logs/nginx.pid;
+
+events {
+ use epoll;
+ worker_connections 10240;
+ accept_mutex off;
+}
+
+http {
+ include mime.types;
+ default_type application/octet-stream;
+
+ access_log off;
+ error_log /local/nginx.cfg/logs/error.log emerg;
+
+ #with TLDK sendfile is not supported right now.
+ sendfile off;
+
+ keepalive_timeout 0;
+ keepalive_requests 0;
+
+ output_buffers 1 2m;
+
+ open_file_cache max=20000 inactive=1h;
+ open_file_cache_valid 1h;
+ open_file_cache_min_uses 1;
+ open_file_cache_errors on;
+
+
+ server {
+ listen 6000 backlog=4096;
+ server_name www.xz1;
+ location / {
+ root /local/nginx.cfg/html;
+ index index.html index.htm;
+ }
+ }
+}
+
+tldk_main {
+ #create 2 DPDK slave lcores on cpus 9-10.
+ eal_cmd --lcores=8-10 -n 4;
+ port 0 rx_offload 0xf tx_offload 0xf ipv4 192.168.1.60;
+}
+
+tldk_ctx {
+ worker 0;
+ lcore 9;
+ # for benchmarking purposes set TCP TIMEWAIT to zero.
+ tcp_timewait 0;
+ # remove next line to make TLDK back-end to run a DPDK slave lcore 9
+ # within nginx master process.
+ be_in_worker;
+ mbufs 0x20000;
+ streams 0x8000;
+ sbufs 0x100;
+ rbufs 0x800;
+ dev 0 port 0 queue 0;
+ dest dev 0 addr 192.168.1.0 masklen 24 mac 3C:FD:FE:9F:D1:E1;
+}
+
+tldk_ctx {
+ worker 1;
+ lcore 10;
+ tcp_timewait 0;
+ be_in_worker;
+ mbufs 0x20000;
+ streams 0x8000;
+ sbufs 0x100;
+ rbufs 0x800;
+ dev 0 port 0 queue 1;
+ dest dev 0 addr 192.168.1.0 masklen 24 mac 3C:FD:FE:9F:D1:E1;
+}
diff --git a/app/nginx/conf/nginx.conf b/app/nginx/conf/nginx.conf
new file mode 100644
index 0000000..29bc085
--- /dev/null
+++ b/app/nginx/conf/nginx.conf
@@ -0,0 +1,117 @@
+
+#user nobody;
+worker_processes 1;
+
+#error_log logs/error.log;
+#error_log logs/error.log notice;
+#error_log logs/error.log info;
+
+#pid logs/nginx.pid;
+
+
+events {
+ worker_connections 1024;
+}
+
+
+http {
+ include mime.types;
+ default_type application/octet-stream;
+
+ #log_format main '$remote_addr - $remote_user [$time_local] "$request" '
+ # '$status $body_bytes_sent "$http_referer" '
+ # '"$http_user_agent" "$http_x_forwarded_for"';
+
+ #access_log logs/access.log main;
+
+ sendfile on;
+ #tcp_nopush on;
+
+ #keepalive_timeout 0;
+ keepalive_timeout 65;
+
+ #gzip on;
+
+ server {
+ listen 80;
+ server_name localhost;
+
+ #charset koi8-r;
+
+ #access_log logs/host.access.log main;
+
+ location / {
+ root html;
+ index index.html index.htm;
+ }
+
+ #error_page 404 /404.html;
+
+ # redirect server error pages to the static page /50x.html
+ #
+ error_page 500 502 503 504 /50x.html;
+ location = /50x.html {
+ root html;
+ }
+
+ # proxy the PHP scripts to Apache listening on 127.0.0.1:80
+ #
+ #location ~ \.php$ {
+ # proxy_pass http://127.0.0.1;
+ #}
+
+ # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
+ #
+ #location ~ \.php$ {
+ # root html;
+ # fastcgi_pass 127.0.0.1:9000;
+ # fastcgi_index index.php;
+ # fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
+ # include fastcgi_params;
+ #}
+
+ # deny access to .htaccess files, if Apache's document root
+ # concurs with nginx's one
+ #
+ #location ~ /\.ht {
+ # deny all;
+ #}
+ }
+
+
+ # another virtual host using mix of IP-, name-, and port-based configuration
+ #
+ #server {
+ # listen 8000;
+ # listen somename:8080;
+ # server_name somename alias another.alias;
+
+ # location / {
+ # root html;
+ # index index.html index.htm;
+ # }
+ #}
+
+
+ # HTTPS server
+ #
+ #server {
+ # listen 443 ssl;
+ # server_name localhost;
+
+ # ssl_certificate cert.pem;
+ # ssl_certificate_key cert.key;
+
+ # ssl_session_cache shared:SSL:1m;
+ # ssl_session_timeout 5m;
+
+ # ssl_ciphers HIGH:!aNULL:!MD5;
+ # ssl_prefer_server_ciphers on;
+
+ # location / {
+ # root html;
+ # index index.html index.htm;
+ # }
+ #}
+
+}
diff --git a/app/nginx/conf/scgi_params b/app/nginx/conf/scgi_params
new file mode 100644
index 0000000..6d4ce4f
--- /dev/null
+++ b/app/nginx/conf/scgi_params
@@ -0,0 +1,17 @@
+
+scgi_param REQUEST_METHOD $request_method;
+scgi_param REQUEST_URI $request_uri;
+scgi_param QUERY_STRING $query_string;
+scgi_param CONTENT_TYPE $content_type;
+
+scgi_param DOCUMENT_URI $document_uri;
+scgi_param DOCUMENT_ROOT $document_root;
+scgi_param SCGI 1;
+scgi_param SERVER_PROTOCOL $server_protocol;
+scgi_param REQUEST_SCHEME $scheme;
+scgi_param HTTPS $https if_not_empty;
+
+scgi_param REMOTE_ADDR $remote_addr;
+scgi_param REMOTE_PORT $remote_port;
+scgi_param SERVER_PORT $server_port;
+scgi_param SERVER_NAME $server_name;
diff --git a/app/nginx/conf/uwsgi_params b/app/nginx/conf/uwsgi_params
new file mode 100644
index 0000000..09c732c
--- /dev/null
+++ b/app/nginx/conf/uwsgi_params
@@ -0,0 +1,17 @@
+
+uwsgi_param QUERY_STRING $query_string;
+uwsgi_param REQUEST_METHOD $request_method;
+uwsgi_param CONTENT_TYPE $content_type;
+uwsgi_param CONTENT_LENGTH $content_length;
+
+uwsgi_param REQUEST_URI $request_uri;
+uwsgi_param PATH_INFO $document_uri;
+uwsgi_param DOCUMENT_ROOT $document_root;
+uwsgi_param SERVER_PROTOCOL $server_protocol;
+uwsgi_param REQUEST_SCHEME $scheme;
+uwsgi_param HTTPS $https if_not_empty;
+
+uwsgi_param REMOTE_ADDR $remote_addr;
+uwsgi_param REMOTE_PORT $remote_port;
+uwsgi_param SERVER_PORT $server_port;
+uwsgi_param SERVER_NAME $server_name;
diff --git a/app/nginx/conf/win-utf b/app/nginx/conf/win-utf
new file mode 100644
index 0000000..ed8bc00
--- /dev/null
+++ b/app/nginx/conf/win-utf
@@ -0,0 +1,126 @@
+
+# This map is not a full windows-1251 <> utf8 map: it does not
+# contain Serbian and Macedonian letters. If you need a full map,
+# use contrib/unicode2nginx/win-utf map instead.
+
+charset_map windows-1251 utf-8 {
+
+ 82 E2809A ; # single low-9 quotation mark
+
+ 84 E2809E ; # double low-9 quotation mark
+ 85 E280A6 ; # ellipsis
+ 86 E280A0 ; # dagger
+ 87 E280A1 ; # double dagger
+ 88 E282AC ; # euro
+ 89 E280B0 ; # per mille
+
+ 91 E28098 ; # left single quotation mark
+ 92 E28099 ; # right single quotation mark
+ 93 E2809C ; # left double quotation mark
+ 94 E2809D ; # right double quotation mark
+ 95 E280A2 ; # bullet
+ 96 E28093 ; # en dash
+ 97 E28094 ; # em dash
+
+ 99 E284A2 ; # trade mark sign
+
+ A0 C2A0 ; # &nbsp;
+ A1 D18E ; # capital Byelorussian short U
+ A2 D19E ; # small Byelorussian short u
+
+ A4 C2A4 ; # currency sign
+ A5 D290 ; # capital Ukrainian soft G
+ A6 C2A6 ; # borken bar
+ A7 C2A7 ; # section sign
+ A8 D081 ; # capital YO
+ A9 C2A9 ; # (C)
+ AA D084 ; # capital Ukrainian YE
+ AB C2AB ; # left-pointing double angle quotation mark
+ AC C2AC ; # not sign
+ AD C2AD ; # soft hypen
+ AE C2AE ; # (R)
+ AF D087 ; # capital Ukrainian YI
+
+ B0 C2B0 ; # &deg;
+ B1 C2B1 ; # plus-minus sign
+ B2 D086 ; # capital Ukrainian I
+ B3 D196 ; # small Ukrainian i
+ B4 D291 ; # small Ukrainian soft g
+ B5 C2B5 ; # micro sign
+ B6 C2B6 ; # pilcrow sign
+ B7 C2B7 ; # &middot;
+ B8 D191 ; # small yo
+ B9 E28496 ; # numero sign
+ BA D194 ; # small Ukrainian ye
+ BB C2BB ; # right-pointing double angle quotation mark
+
+ BF D197 ; # small Ukrainian yi
+
+ C0 D090 ; # capital A
+ C1 D091 ; # capital B
+ C2 D092 ; # capital V
+ C3 D093 ; # capital G
+ C4 D094 ; # capital D
+ C5 D095 ; # capital YE
+ C6 D096 ; # capital ZH
+ C7 D097 ; # capital Z
+ C8 D098 ; # capital I
+ C9 D099 ; # capital J
+ CA D09A ; # capital K
+ CB D09B ; # capital L
+ CC D09C ; # capital M
+ CD D09D ; # capital N
+ CE D09E ; # capital O
+ CF D09F ; # capital P
+
+ D0 D0A0 ; # capital R
+ D1 D0A1 ; # capital S
+ D2 D0A2 ; # capital T
+ D3 D0A3 ; # capital U
+ D4 D0A4 ; # capital F
+ D5 D0A5 ; # capital KH
+ D6 D0A6 ; # capital TS
+ D7 D0A7 ; # capital CH
+ D8 D0A8 ; # capital SH
+ D9 D0A9 ; # capital SHCH
+ DA D0AA ; # capital hard sign
+ DB D0AB ; # capital Y
+ DC D0AC ; # capital soft sign
+ DD D0AD ; # capital E
+ DE D0AE ; # capital YU
+ DF D0AF ; # capital YA
+
+ E0 D0B0 ; # small a
+ E1 D0B1 ; # small b
+ E2 D0B2 ; # small v
+ E3 D0B3 ; # small g
+ E4 D0B4 ; # small d
+ E5 D0B5 ; # small ye
+ E6 D0B6 ; # small zh
+ E7 D0B7 ; # small z
+ E8 D0B8 ; # small i
+ E9 D0B9 ; # small j
+ EA D0BA ; # small k
+ EB D0BB ; # small l
+ EC D0BC ; # small m
+ ED D0BD ; # small n
+ EE D0BE ; # small o
+ EF D0BF ; # small p
+
+ F0 D180 ; # small r
+ F1 D181 ; # small s
+ F2 D182 ; # small t
+ F3 D183 ; # small u
+ F4 D184 ; # small f
+ F5 D185 ; # small kh
+ F6 D186 ; # small ts
+ F7 D187 ; # small ch
+ F8 D188 ; # small sh
+ F9 D189 ; # small shch
+ FA D18A ; # small hard sign
+ FB D18B ; # small y
+ FC D18C ; # small soft sign
+ FD D18D ; # small e
+ FE D18E ; # small yu
+ FF D18F ; # small ya
+}
diff --git a/app/nginx/contrib/README b/app/nginx/contrib/README
new file mode 100644
index 0000000..fec4b20
--- /dev/null
+++ b/app/nginx/contrib/README
@@ -0,0 +1,21 @@
+
+geo2nginx.pl by Andrei Nigmatulin
+
+ The perl script to convert CSV geoip database ( free download
+ at http://www.maxmind.com/app/geoip_country ) to format, suitable
+ for use by the ngx_http_geo_module.
+
+
+unicode2nginx by Maxim Dounin
+
+ The perl script to convert unicode mappings ( available
+ at http://www.unicode.org/Public/MAPPINGS/ ) to the nginx
+ configuration file format.
+ Two generated full maps for windows-1251 and koi8-r.
+
+
+vim by Evan Miller
+
+ Syntax highlighting of nginx configuration for vim, to be
+ placed into ~/.vim/.
+
diff --git a/app/nginx/contrib/geo2nginx.pl b/app/nginx/contrib/geo2nginx.pl
new file mode 100644
index 0000000..29243ec
--- /dev/null
+++ b/app/nginx/contrib/geo2nginx.pl
@@ -0,0 +1,58 @@
+#!/usr/bin/perl -w
+
+# (c) Andrei Nigmatulin, 2005
+#
+# this script provided "as is", without any warranties. use it at your own risk.
+#
+# special thanx to Andrew Sitnikov for perl port
+#
+# this script converts CSV geoip database (free download at http://www.maxmind.com/app/geoip_country)
+# to format, suitable for use with nginx_http_geo module (http://sysoev.ru/nginx)
+#
+# for example, line with ip range
+#
+# "62.16.68.0","62.16.127.255","1041253376","1041268735","RU","Russian Federation"
+#
+# will be converted to four subnetworks:
+#
+# 62.16.68.0/22 RU;
+# 62.16.72.0/21 RU;
+# 62.16.80.0/20 RU;
+# 62.16.96.0/19 RU;
+
+
+use warnings;
+use strict;
+
+while( <STDIN> ){
+ if (/"[^"]+","[^"]+","([^"]+)","([^"]+)","([^"]+)"/){
+ print_subnets($1, $2, $3);
+ }
+}
+
+sub print_subnets {
+ my ($a1, $a2, $c) = @_;
+ my $l;
+ while ($a1 <= $a2) {
+ for ($l = 0; ($a1 & (1 << $l)) == 0 && ($a1 + ((1 << ($l + 1)) - 1)) <= $a2; $l++){};
+ print long2ip($a1) . "/" . (32 - $l) . " " . $c . ";\n";
+ $a1 += (1 << $l);
+ }
+}
+
+sub long2ip {
+ my $ip = shift;
+
+ my $str = 0;
+
+ $str = ($ip & 255);
+
+ $ip >>= 8;
+ $str = ($ip & 255).".$str";
+
+ $ip >>= 8;
+ $str = ($ip & 255).".$str";
+
+ $ip >>= 8;
+ $str = ($ip & 255).".$str";
+}
diff --git a/app/nginx/contrib/unicode2nginx/koi-utf b/app/nginx/contrib/unicode2nginx/koi-utf
new file mode 100644
index 0000000..48853af
--- /dev/null
+++ b/app/nginx/contrib/unicode2nginx/koi-utf
@@ -0,0 +1,131 @@
+charset_map koi8-r utf-8 {
+
+ 80 E29480 ; # BOX DRAWINGS LIGHT HORIZONTAL
+ 81 E29482 ; # BOX DRAWINGS LIGHT VERTICAL
+ 82 E2948C ; # BOX DRAWINGS LIGHT DOWN AND RIGHT
+ 83 E29490 ; # BOX DRAWINGS LIGHT DOWN AND LEFT
+ 84 E29494 ; # BOX DRAWINGS LIGHT UP AND RIGHT
+ 85 E29498 ; # BOX DRAWINGS LIGHT UP AND LEFT
+ 86 E2949C ; # BOX DRAWINGS LIGHT VERTICAL AND RIGHT
+ 87 E294A4 ; # BOX DRAWINGS LIGHT VERTICAL AND LEFT
+ 88 E294AC ; # BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
+ 89 E294B4 ; # BOX DRAWINGS LIGHT UP AND HORIZONTAL
+ 8A E294BC ; # BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
+ 8B E29680 ; # UPPER HALF BLOCK
+ 8C E29684 ; # LOWER HALF BLOCK
+ 8D E29688 ; # FULL BLOCK
+ 8E E2968C ; # LEFT HALF BLOCK
+ 8F E29690 ; # RIGHT HALF BLOCK
+ 90 E29691 ; # LIGHT SHADE
+ 91 E29692 ; # MEDIUM SHADE
+ 92 E29693 ; # DARK SHADE
+ 93 E28CA0 ; # TOP HALF INTEGRAL
+ 94 E296A0 ; # BLACK SQUARE
+ 95 E28899 ; # BULLET OPERATOR
+ 96 E2889A ; # SQUARE ROOT
+ 97 E28988 ; # ALMOST EQUAL TO
+ 98 E289A4 ; # LESS-THAN OR EQUAL TO
+ 99 E289A5 ; # GREATER-THAN OR EQUAL TO
+ 9A C2A0 ; # NO-BREAK SPACE
+ 9B E28CA1 ; # BOTTOM HALF INTEGRAL
+ 9C C2B0 ; # DEGREE SIGN
+ 9D C2B2 ; # SUPERSCRIPT TWO
+ 9E C2B7 ; # MIDDLE DOT
+ 9F C3B7 ; # DIVISION SIGN
+ A0 E29590 ; # BOX DRAWINGS DOUBLE HORIZONTAL
+ A1 E29591 ; # BOX DRAWINGS DOUBLE VERTICAL
+ A2 E29592 ; # BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE
+ A3 D191 ; # CYRILLIC SMALL LETTER IO
+ A4 E29593 ; # BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE
+ A5 E29594 ; # BOX DRAWINGS DOUBLE DOWN AND RIGHT
+ A6 E29595 ; # BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE
+ A7 E29596 ; # BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE
+ A8 E29597 ; # BOX DRAWINGS DOUBLE DOWN AND LEFT
+ A9 E29598 ; # BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE
+ AA E29599 ; # BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE
+ AB E2959A ; # BOX DRAWINGS DOUBLE UP AND RIGHT
+ AC E2959B ; # BOX DRAWINGS UP SINGLE AND LEFT DOUBLE
+ AD E2959C ; # BOX DRAWINGS UP DOUBLE AND LEFT SINGLE
+ AE E2959D ; # BOX DRAWINGS DOUBLE UP AND LEFT
+ AF E2959E ; # BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE
+ B0 E2959F ; # BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE
+ B1 E295A0 ; # BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
+ B2 E295A1 ; # BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE
+ B3 D081 ; # CYRILLIC CAPITAL LETTER IO
+ B4 E295A2 ; # BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE
+ B5 E295A3 ; # BOX DRAWINGS DOUBLE VERTICAL AND LEFT
+ B6 E295A4 ; # BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE
+ B7 E295A5 ; # BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE
+ B8 E295A6 ; # BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
+ B9 E295A7 ; # BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE
+ BA E295A8 ; # BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE
+ BB E295A9 ; # BOX DRAWINGS DOUBLE UP AND HORIZONTAL
+ BC E295AA ; # BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE
+ BD E295AB ; # BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE
+ BE E295AC ; # BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
+ BF C2A9 ; # COPYRIGHT SIGN
+ C0 D18E ; # CYRILLIC SMALL LETTER YU
+ C1 D0B0 ; # CYRILLIC SMALL LETTER A
+ C2 D0B1 ; # CYRILLIC SMALL LETTER BE
+ C3 D186 ; # CYRILLIC SMALL LETTER TSE
+ C4 D0B4 ; # CYRILLIC SMALL LETTER DE
+ C5 D0B5 ; # CYRILLIC SMALL LETTER IE
+ C6 D184 ; # CYRILLIC SMALL LETTER EF
+ C7 D0B3 ; # CYRILLIC SMALL LETTER GHE
+ C8 D185 ; # CYRILLIC SMALL LETTER HA
+ C9 D0B8 ; # CYRILLIC SMALL LETTER I
+ CA D0B9 ; # CYRILLIC SMALL LETTER SHORT I
+ CB D0BA ; # CYRILLIC SMALL LETTER KA
+ CC D0BB ; # CYRILLIC SMALL LETTER EL
+ CD D0BC ; # CYRILLIC SMALL LETTER EM
+ CE D0BD ; # CYRILLIC SMALL LETTER EN
+ CF D0BE ; # CYRILLIC SMALL LETTER O
+ D0 D0BF ; # CYRILLIC SMALL LETTER PE
+ D1 D18F ; # CYRILLIC SMALL LETTER YA
+ D2 D180 ; # CYRILLIC SMALL LETTER ER
+ D3 D181 ; # CYRILLIC SMALL LETTER ES
+ D4 D182 ; # CYRILLIC SMALL LETTER TE
+ D5 D183 ; # CYRILLIC SMALL LETTER U
+ D6 D0B6 ; # CYRILLIC SMALL LETTER ZHE
+ D7 D0B2 ; # CYRILLIC SMALL LETTER VE
+ D8 D18C ; # CYRILLIC SMALL LETTER SOFT SIGN
+ D9 D18B ; # CYRILLIC SMALL LETTER YERU
+ DA D0B7 ; # CYRILLIC SMALL LETTER ZE
+ DB D188 ; # CYRILLIC SMALL LETTER SHA
+ DC D18D ; # CYRILLIC SMALL LETTER E
+ DD D189 ; # CYRILLIC SMALL LETTER SHCHA
+ DE D187 ; # CYRILLIC SMALL LETTER CHE
+ DF D18A ; # CYRILLIC SMALL LETTER HARD SIGN
+ E0 D0AE ; # CYRILLIC CAPITAL LETTER YU
+ E1 D090 ; # CYRILLIC CAPITAL LETTER A
+ E2 D091 ; # CYRILLIC CAPITAL LETTER BE
+ E3 D0A6 ; # CYRILLIC CAPITAL LETTER TSE
+ E4 D094 ; # CYRILLIC CAPITAL LETTER DE
+ E5 D095 ; # CYRILLIC CAPITAL LETTER IE
+ E6 D0A4 ; # CYRILLIC CAPITAL LETTER EF
+ E7 D093 ; # CYRILLIC CAPITAL LETTER GHE
+ E8 D0A5 ; # CYRILLIC CAPITAL LETTER HA
+ E9 D098 ; # CYRILLIC CAPITAL LETTER I
+ EA D099 ; # CYRILLIC CAPITAL LETTER SHORT I
+ EB D09A ; # CYRILLIC CAPITAL LETTER KA
+ EC D09B ; # CYRILLIC CAPITAL LETTER EL
+ ED D09C ; # CYRILLIC CAPITAL LETTER EM
+ EE D09D ; # CYRILLIC CAPITAL LETTER EN
+ EF D09E ; # CYRILLIC CAPITAL LETTER O
+ F0 D09F ; # CYRILLIC CAPITAL LETTER PE
+ F1 D0AF ; # CYRILLIC CAPITAL LETTER YA
+ F2 D0A0 ; # CYRILLIC CAPITAL LETTER ER
+ F3 D0A1 ; # CYRILLIC CAPITAL LETTER ES
+ F4 D0A2 ; # CYRILLIC CAPITAL LETTER TE
+ F5 D0A3 ; # CYRILLIC CAPITAL LETTER U
+ F6 D096 ; # CYRILLIC CAPITAL LETTER ZHE
+ F7 D092 ; # CYRILLIC CAPITAL LETTER VE
+ F8 D0AC ; # CYRILLIC CAPITAL LETTER SOFT SIGN
+ F9 D0AB ; # CYRILLIC CAPITAL LETTER YERU
+ FA D097 ; # CYRILLIC CAPITAL LETTER ZE
+ FB D0A8 ; # CYRILLIC CAPITAL LETTER SHA
+ FC D0AD ; # CYRILLIC CAPITAL LETTER E
+ FD D0A9 ; # CYRILLIC CAPITAL LETTER SHCHA
+ FE D0A7 ; # CYRILLIC CAPITAL LETTER CHE
+ FF D0AA ; # CYRILLIC CAPITAL LETTER HARD SIGN
+}
diff --git a/app/nginx/contrib/unicode2nginx/unicode-to-nginx.pl b/app/nginx/contrib/unicode2nginx/unicode-to-nginx.pl
new file mode 100755
index 0000000..d113fed
--- /dev/null
+++ b/app/nginx/contrib/unicode2nginx/unicode-to-nginx.pl
@@ -0,0 +1,48 @@
+#!/usr/bin/perl -w
+
+# Convert unicode mappings to nginx configuration file format.
+
+# You may find useful mappings in various places, including
+# unicode.org official site:
+#
+# http://www.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WINDOWS/CP1251.TXT
+# http://www.unicode.org/Public/MAPPINGS/VENDORS/MISC/KOI8-R.TXT
+
+# Needs perl 5.6 or later.
+
+# Written by Maxim Dounin, mdounin@mdounin.ru
+
+###############################################################################
+
+require 5.006;
+
+while (<>) {
+ # Skip comments and empty lines
+
+ next if /^#/;
+ next if /^\s*$/;
+ chomp;
+
+ # Convert mappings
+
+ if (/^\s*0x(..)\s*0x(....)\s*(#.*)/) {
+ # Mapping <from-code> <unicode-code> "#" <unicode-name>
+ my $cs_code = $1;
+ my $un_code = $2;
+ my $un_name = $3;
+
+ # Produce UTF-8 sequence from character code;
+
+ my $un_utf8 = join('',
+ map { sprintf("%02X", $_) }
+ unpack("U0C*", pack("U", hex($un_code)))
+ );
+
+ print " $cs_code $un_utf8 ; $un_name\n";
+
+ } else {
+ warn "Unrecognized line: '$_'";
+ }
+}
+
+###############################################################################
diff --git a/app/nginx/contrib/unicode2nginx/win-utf b/app/nginx/contrib/unicode2nginx/win-utf
new file mode 100644
index 0000000..af9f9aa
--- /dev/null
+++ b/app/nginx/contrib/unicode2nginx/win-utf
@@ -0,0 +1,130 @@
+charset_map windows-1251 utf-8 {
+
+ 80 D082 ; #CYRILLIC CAPITAL LETTER DJE
+ 81 D083 ; #CYRILLIC CAPITAL LETTER GJE
+ 82 E2809A ; #SINGLE LOW-9 QUOTATION MARK
+ 83 D193 ; #CYRILLIC SMALL LETTER GJE
+ 84 E2809E ; #DOUBLE LOW-9 QUOTATION MARK
+ 85 E280A6 ; #HORIZONTAL ELLIPSIS
+ 86 E280A0 ; #DAGGER
+ 87 E280A1 ; #DOUBLE DAGGER
+ 88 E282AC ; #EURO SIGN
+ 89 E280B0 ; #PER MILLE SIGN
+ 8A D089 ; #CYRILLIC CAPITAL LETTER LJE
+ 8B E280B9 ; #SINGLE LEFT-POINTING ANGLE QUOTATION MARK
+ 8C D08A ; #CYRILLIC CAPITAL LETTER NJE
+ 8D D08C ; #CYRILLIC CAPITAL LETTER KJE
+ 8E D08B ; #CYRILLIC CAPITAL LETTER TSHE
+ 8F D08F ; #CYRILLIC CAPITAL LETTER DZHE
+ 90 D192 ; #CYRILLIC SMALL LETTER DJE
+ 91 E28098 ; #LEFT SINGLE QUOTATION MARK
+ 92 E28099 ; #RIGHT SINGLE QUOTATION MARK
+ 93 E2809C ; #LEFT DOUBLE QUOTATION MARK
+ 94 E2809D ; #RIGHT DOUBLE QUOTATION MARK
+ 95 E280A2 ; #BULLET
+ 96 E28093 ; #EN DASH
+ 97 E28094 ; #EM DASH
+ 99 E284A2 ; #TRADE MARK SIGN
+ 9A D199 ; #CYRILLIC SMALL LETTER LJE
+ 9B E280BA ; #SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
+ 9C D19A ; #CYRILLIC SMALL LETTER NJE
+ 9D D19C ; #CYRILLIC SMALL LETTER KJE
+ 9E D19B ; #CYRILLIC SMALL LETTER TSHE
+ 9F D19F ; #CYRILLIC SMALL LETTER DZHE
+ A0 C2A0 ; #NO-BREAK SPACE
+ A1 D08E ; #CYRILLIC CAPITAL LETTER SHORT U
+ A2 D19E ; #CYRILLIC SMALL LETTER SHORT U
+ A3 D088 ; #CYRILLIC CAPITAL LETTER JE
+ A4 C2A4 ; #CURRENCY SIGN
+ A5 D290 ; #CYRILLIC CAPITAL LETTER GHE WITH UPTURN
+ A6 C2A6 ; #BROKEN BAR
+ A7 C2A7 ; #SECTION SIGN
+ A8 D081 ; #CYRILLIC CAPITAL LETTER IO
+ A9 C2A9 ; #COPYRIGHT SIGN
+ AA D084 ; #CYRILLIC CAPITAL LETTER UKRAINIAN IE
+ AB C2AB ; #LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+ AC C2AC ; #NOT SIGN
+ AD C2AD ; #SOFT HYPHEN
+ AE C2AE ; #REGISTERED SIGN
+ AF D087 ; #CYRILLIC CAPITAL LETTER YI
+ B0 C2B0 ; #DEGREE SIGN
+ B1 C2B1 ; #PLUS-MINUS SIGN
+ B2 D086 ; #CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I
+ B3 D196 ; #CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I
+ B4 D291 ; #CYRILLIC SMALL LETTER GHE WITH UPTURN
+ B5 C2B5 ; #MICRO SIGN
+ B6 C2B6 ; #PILCROW SIGN
+ B7 C2B7 ; #MIDDLE DOT
+ B8 D191 ; #CYRILLIC SMALL LETTER IO
+ B9 E28496 ; #NUMERO SIGN
+ BA D194 ; #CYRILLIC SMALL LETTER UKRAINIAN IE
+ BB C2BB ; #RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+ BC D198 ; #CYRILLIC SMALL LETTER JE
+ BD D085 ; #CYRILLIC CAPITAL LETTER DZE
+ BE D195 ; #CYRILLIC SMALL LETTER DZE
+ BF D197 ; #CYRILLIC SMALL LETTER YI
+ C0 D090 ; #CYRILLIC CAPITAL LETTER A
+ C1 D091 ; #CYRILLIC CAPITAL LETTER BE
+ C2 D092 ; #CYRILLIC CAPITAL LETTER VE
+ C3 D093 ; #CYRILLIC CAPITAL LETTER GHE
+ C4 D094 ; #CYRILLIC CAPITAL LETTER DE
+ C5 D095 ; #CYRILLIC CAPITAL LETTER IE
+ C6 D096 ; #CYRILLIC CAPITAL LETTER ZHE
+ C7 D097 ; #CYRILLIC CAPITAL LETTER ZE
+ C8 D098 ; #CYRILLIC CAPITAL LETTER I
+ C9 D099 ; #CYRILLIC CAPITAL LETTER SHORT I
+ CA D09A ; #CYRILLIC CAPITAL LETTER KA
+ CB D09B ; #CYRILLIC CAPITAL LETTER EL
+ CC D09C ; #CYRILLIC CAPITAL LETTER EM
+ CD D09D ; #CYRILLIC CAPITAL LETTER EN
+ CE D09E ; #CYRILLIC CAPITAL LETTER O
+ CF D09F ; #CYRILLIC CAPITAL LETTER PE
+ D0 D0A0 ; #CYRILLIC CAPITAL LETTER ER
+ D1 D0A1 ; #CYRILLIC CAPITAL LETTER ES
+ D2 D0A2 ; #CYRILLIC CAPITAL LETTER TE
+ D3 D0A3 ; #CYRILLIC CAPITAL LETTER U
+ D4 D0A4 ; #CYRILLIC CAPITAL LETTER EF
+ D5 D0A5 ; #CYRILLIC CAPITAL LETTER HA
+ D6 D0A6 ; #CYRILLIC CAPITAL LETTER TSE
+ D7 D0A7 ; #CYRILLIC CAPITAL LETTER CHE
+ D8 D0A8 ; #CYRILLIC CAPITAL LETTER SHA
+ D9 D0A9 ; #CYRILLIC CAPITAL LETTER SHCHA
+ DA D0AA ; #CYRILLIC CAPITAL LETTER HARD SIGN
+ DB D0AB ; #CYRILLIC CAPITAL LETTER YERU
+ DC D0AC ; #CYRILLIC CAPITAL LETTER SOFT SIGN
+ DD D0AD ; #CYRILLIC CAPITAL LETTER E
+ DE D0AE ; #CYRILLIC CAPITAL LETTER YU
+ DF D0AF ; #CYRILLIC CAPITAL LETTER YA
+ E0 D0B0 ; #CYRILLIC SMALL LETTER A
+ E1 D0B1 ; #CYRILLIC SMALL LETTER BE
+ E2 D0B2 ; #CYRILLIC SMALL LETTER VE
+ E3 D0B3 ; #CYRILLIC SMALL LETTER GHE
+ E4 D0B4 ; #CYRILLIC SMALL LETTER DE
+ E5 D0B5 ; #CYRILLIC SMALL LETTER IE
+ E6 D0B6 ; #CYRILLIC SMALL LETTER ZHE
+ E7 D0B7 ; #CYRILLIC SMALL LETTER ZE
+ E8 D0B8 ; #CYRILLIC SMALL LETTER I
+ E9 D0B9 ; #CYRILLIC SMALL LETTER SHORT I
+ EA D0BA ; #CYRILLIC SMALL LETTER KA
+ EB D0BB ; #CYRILLIC SMALL LETTER EL
+ EC D0BC ; #CYRILLIC SMALL LETTER EM
+ ED D0BD ; #CYRILLIC SMALL LETTER EN
+ EE D0BE ; #CYRILLIC SMALL LETTER O
+ EF D0BF ; #CYRILLIC SMALL LETTER PE
+ F0 D180 ; #CYRILLIC SMALL LETTER ER
+ F1 D181 ; #CYRILLIC SMALL LETTER ES
+ F2 D182 ; #CYRILLIC SMALL LETTER TE
+ F3 D183 ; #CYRILLIC SMALL LETTER U
+ F4 D184 ; #CYRILLIC SMALL LETTER EF
+ F5 D185 ; #CYRILLIC SMALL LETTER HA
+ F6 D186 ; #CYRILLIC SMALL LETTER TSE
+ F7 D187 ; #CYRILLIC SMALL LETTER CHE
+ F8 D188 ; #CYRILLIC SMALL LETTER SHA
+ F9 D189 ; #CYRILLIC SMALL LETTER SHCHA
+ FA D18A ; #CYRILLIC SMALL LETTER HARD SIGN
+ FB D18B ; #CYRILLIC SMALL LETTER YERU
+ FC D18C ; #CYRILLIC SMALL LETTER SOFT SIGN
+ FD D18D ; #CYRILLIC SMALL LETTER E
+ FE D18E ; #CYRILLIC SMALL LETTER YU
+ FF D18F ; #CYRILLIC SMALL LETTER YA
+}
diff --git a/app/nginx/contrib/vim/ftdetect/nginx.vim b/app/nginx/contrib/vim/ftdetect/nginx.vim
new file mode 100644
index 0000000..3ae470d
--- /dev/null
+++ b/app/nginx/contrib/vim/ftdetect/nginx.vim
@@ -0,0 +1,4 @@
+au BufRead,BufNewFile *.nginx set ft=nginx
+au BufRead,BufNewFile */etc/nginx/* set ft=nginx
+au BufRead,BufNewFile */usr/local/nginx/conf/* set ft=nginx
+au BufRead,BufNewFile nginx.conf set ft=nginx
diff --git a/app/nginx/contrib/vim/ftplugin/nginx.vim b/app/nginx/contrib/vim/ftplugin/nginx.vim
new file mode 100644
index 0000000..463eea9
--- /dev/null
+++ b/app/nginx/contrib/vim/ftplugin/nginx.vim
@@ -0,0 +1 @@
+setlocal commentstring=#\ %s
diff --git a/app/nginx/contrib/vim/indent/nginx.vim b/app/nginx/contrib/vim/indent/nginx.vim
new file mode 100644
index 0000000..8601366
--- /dev/null
+++ b/app/nginx/contrib/vim/indent/nginx.vim
@@ -0,0 +1,11 @@
+if exists("b:did_indent")
+ finish
+endif
+let b:did_indent = 1
+
+setlocal indentexpr=
+
+" cindent actually works for nginx' simple file structure
+setlocal cindent
+" Just make sure that the comments are not reset as defs would be.
+setlocal cinkeys-=0#
diff --git a/app/nginx/contrib/vim/syntax/nginx.vim b/app/nginx/contrib/vim/syntax/nginx.vim
new file mode 100644
index 0000000..a52891b
--- /dev/null
+++ b/app/nginx/contrib/vim/syntax/nginx.vim
@@ -0,0 +1,2144 @@
+" Vim syntax file
+" Language: nginx.conf
+
+if exists("b:current_syntax")
+ finish
+end
+
+setlocal iskeyword+=.
+setlocal iskeyword+=/
+setlocal iskeyword+=:
+
+syn match ngxVariable '\$\(\w\+\|{\w\+}\)'
+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=+[^:a-zA-Z>!\\@]\z(["']\)+lc=1 end=+\z1+ skip=+\\\\\|\\\z1+ contains=ngxVariableString
+syn match ngxComment ' *#.*$'
+
+syn keyword ngxBoolean on
+syn keyword ngxBoolean off
+
+syn keyword ngxDirectiveBlock http contained
+syn keyword ngxDirectiveBlock mail contained
+syn keyword ngxDirectiveBlock events contained
+syn keyword ngxDirectiveBlock server contained
+syn keyword ngxDirectiveBlock types contained
+syn keyword ngxDirectiveBlock location contained
+syn keyword ngxDirectiveBlock upstream contained
+syn keyword ngxDirectiveBlock charset_map contained
+syn keyword ngxDirectiveBlock limit_except contained
+syn keyword ngxDirectiveBlock if contained
+syn keyword ngxDirectiveBlock geo contained
+syn keyword ngxDirectiveBlock map contained
+syn keyword ngxDirectiveBlock split_clients contained
+
+syn keyword ngxDirectiveImportant include
+syn keyword ngxDirectiveImportant root
+syn keyword ngxDirectiveImportant server
+syn keyword ngxDirectiveImportant server_name
+syn keyword ngxDirectiveImportant listen contained
+syn region ngxDirectiveImportantListen matchgroup=ngxDirectiveImportant start=+listen+ skip=+\\\\\|\\\;+ end=+;+he=e-1 contains=ngxListenOptions,ngxString
+syn keyword ngxDirectiveImportant internal
+syn keyword ngxDirectiveImportant proxy_pass
+syn keyword ngxDirectiveImportant memcached_pass
+syn keyword ngxDirectiveImportant fastcgi_pass
+syn keyword ngxDirectiveImportant scgi_pass
+syn keyword ngxDirectiveImportant uwsgi_pass
+syn keyword ngxDirectiveImportant try_files
+
+syn keyword ngxListenOptions default_server contained
+syn keyword ngxListenOptions ssl contained
+syn keyword ngxListenOptions http2 contained
+syn keyword ngxListenOptions spdy contained
+syn keyword ngxListenOptions proxy_protocol contained
+syn keyword ngxListenOptions setfib contained
+syn keyword ngxListenOptions fastopen contained
+syn keyword ngxListenOptions backlog contained
+syn keyword ngxListenOptions rcvbuf contained
+syn keyword ngxListenOptions sndbuf contained
+syn keyword ngxListenOptions accept_filter contained
+syn keyword ngxListenOptions deferred contained
+syn keyword ngxListenOptions bind contained
+syn keyword ngxListenOptions ipv6only contained
+syn keyword ngxListenOptions reuseport contained
+syn keyword ngxListenOptions so_keepalive contained
+syn keyword ngxListenOptions keepidle contained
+
+syn keyword ngxDirectiveControl break
+syn keyword ngxDirectiveControl return
+syn keyword ngxDirectiveControl rewrite
+syn keyword ngxDirectiveControl set
+
+syn keyword ngxDirectiveError error_page
+syn keyword ngxDirectiveError post_action
+
+syn keyword ngxDirectiveDeprecated connections
+syn keyword ngxDirectiveDeprecated imap
+syn keyword ngxDirectiveDeprecated limit_zone
+syn keyword ngxDirectiveDeprecated mysql_test
+syn keyword ngxDirectiveDeprecated open_file_cache_retest
+syn keyword ngxDirectiveDeprecated optimize_server_names
+syn keyword ngxDirectiveDeprecated satisfy_any
+syn keyword ngxDirectiveDeprecated so_keepalive
+
+syn keyword ngxDirective absolute_redirect
+syn keyword ngxDirective accept_mutex
+syn keyword ngxDirective accept_mutex_delay
+syn keyword ngxDirective acceptex_read
+syn keyword ngxDirective access_log
+syn keyword ngxDirective add_after_body
+syn keyword ngxDirective add_before_body
+syn keyword ngxDirective add_header
+syn keyword ngxDirective addition_types
+syn keyword ngxDirective aio
+syn keyword ngxDirective aio_write
+syn keyword ngxDirective alias
+syn keyword ngxDirective allow
+syn keyword ngxDirective ancient_browser
+syn keyword ngxDirective ancient_browser_value
+syn keyword ngxDirective auth_basic
+syn keyword ngxDirective auth_basic_user_file
+syn keyword ngxDirective auth_http
+syn keyword ngxDirective auth_http_header
+syn keyword ngxDirective auth_http_pass_client_cert
+syn keyword ngxDirective auth_http_timeout
+syn keyword ngxDirective auth_jwt
+syn keyword ngxDirective auth_jwt_key_file
+syn keyword ngxDirective auth_request
+syn keyword ngxDirective auth_request_set
+syn keyword ngxDirective autoindex
+syn keyword ngxDirective autoindex_exact_size
+syn keyword ngxDirective autoindex_format
+syn keyword ngxDirective autoindex_localtime
+syn keyword ngxDirective charset
+syn keyword ngxDirective charset_map
+syn keyword ngxDirective charset_types
+syn keyword ngxDirective chunked_transfer_encoding
+syn keyword ngxDirective client_body_buffer_size
+syn keyword ngxDirective client_body_in_file_only
+syn keyword ngxDirective client_body_in_single_buffer
+syn keyword ngxDirective client_body_temp_path
+syn keyword ngxDirective client_body_timeout
+syn keyword ngxDirective client_header_buffer_size
+syn keyword ngxDirective client_header_timeout
+syn keyword ngxDirective client_max_body_size
+syn keyword ngxDirective connection_pool_size
+syn keyword ngxDirective create_full_put_path
+syn keyword ngxDirective daemon
+syn keyword ngxDirective dav_access
+syn keyword ngxDirective dav_methods
+syn keyword ngxDirective debug_connection
+syn keyword ngxDirective debug_points
+syn keyword ngxDirective default_type
+syn keyword ngxDirective degradation
+syn keyword ngxDirective degrade
+syn keyword ngxDirective deny
+syn keyword ngxDirective devpoll_changes
+syn keyword ngxDirective devpoll_events
+syn keyword ngxDirective directio
+syn keyword ngxDirective directio_alignment
+syn keyword ngxDirective disable_symlinks
+syn keyword ngxDirective empty_gif
+syn keyword ngxDirective env
+syn keyword ngxDirective epoll_events
+syn keyword ngxDirective error_log
+syn keyword ngxDirective etag
+syn keyword ngxDirective eventport_events
+syn keyword ngxDirective expires
+syn keyword ngxDirective f4f
+syn keyword ngxDirective f4f_buffer_size
+syn keyword ngxDirective fastcgi_bind
+syn keyword ngxDirective fastcgi_buffer_size
+syn keyword ngxDirective fastcgi_buffering
+syn keyword ngxDirective fastcgi_buffers
+syn keyword ngxDirective fastcgi_busy_buffers_size
+syn keyword ngxDirective fastcgi_cache
+syn keyword ngxDirective fastcgi_cache_bypass
+syn keyword ngxDirective fastcgi_cache_key
+syn keyword ngxDirective fastcgi_cache_lock
+syn keyword ngxDirective fastcgi_cache_lock_age
+syn keyword ngxDirective fastcgi_cache_lock_timeout
+syn keyword ngxDirective fastcgi_cache_max_range_offset
+syn keyword ngxDirective fastcgi_cache_methods
+syn keyword ngxDirective fastcgi_cache_min_uses
+syn keyword ngxDirective fastcgi_cache_path
+syn keyword ngxDirective fastcgi_cache_purge
+syn keyword ngxDirective fastcgi_cache_revalidate
+syn keyword ngxDirective fastcgi_cache_use_stale
+syn keyword ngxDirective fastcgi_cache_valid
+syn keyword ngxDirective fastcgi_catch_stderr
+syn keyword ngxDirective fastcgi_connect_timeout
+syn keyword ngxDirective fastcgi_force_ranges
+syn keyword ngxDirective fastcgi_hide_header
+syn keyword ngxDirective fastcgi_ignore_client_abort
+syn keyword ngxDirective fastcgi_ignore_headers
+syn keyword ngxDirective fastcgi_index
+syn keyword ngxDirective fastcgi_intercept_errors
+syn keyword ngxDirective fastcgi_keep_conn
+syn keyword ngxDirective fastcgi_limit_rate
+syn keyword ngxDirective fastcgi_max_temp_file_size
+syn keyword ngxDirective fastcgi_next_upstream
+syn keyword ngxDirective fastcgi_next_upstream_timeout
+syn keyword ngxDirective fastcgi_next_upstream_tries
+syn keyword ngxDirective fastcgi_no_cache
+syn keyword ngxDirective fastcgi_param
+syn keyword ngxDirective fastcgi_pass_header
+syn keyword ngxDirective fastcgi_pass_request_body
+syn keyword ngxDirective fastcgi_pass_request_headers
+syn keyword ngxDirective fastcgi_read_timeout
+syn keyword ngxDirective fastcgi_request_buffering
+syn keyword ngxDirective fastcgi_send_lowat
+syn keyword ngxDirective fastcgi_send_timeout
+syn keyword ngxDirective fastcgi_split_path_info
+syn keyword ngxDirective fastcgi_store
+syn keyword ngxDirective fastcgi_store_access
+syn keyword ngxDirective fastcgi_temp_file_write_size
+syn keyword ngxDirective fastcgi_temp_path
+syn keyword ngxDirective flv
+syn keyword ngxDirective geoip_city
+syn keyword ngxDirective geoip_country
+syn keyword ngxDirective geoip_org
+syn keyword ngxDirective geoip_proxy
+syn keyword ngxDirective geoip_proxy_recursive
+syn keyword ngxDirective google_perftools_profiles
+syn keyword ngxDirective gunzip
+syn keyword ngxDirective gunzip_buffers
+syn keyword ngxDirective gzip
+syn keyword ngxDirective gzip_buffers
+syn keyword ngxDirective gzip_comp_level
+syn keyword ngxDirective gzip_disable
+syn keyword ngxDirective gzip_hash
+syn keyword ngxDirective gzip_http_version
+syn keyword ngxDirective gzip_min_length
+syn keyword ngxDirective gzip_no_buffer
+syn keyword ngxDirective gzip_proxied
+syn keyword ngxDirective gzip_static
+syn keyword ngxDirective gzip_types
+syn keyword ngxDirective gzip_vary
+syn keyword ngxDirective gzip_window
+syn keyword ngxDirective hash
+syn keyword ngxDirective health_check
+syn keyword ngxDirective health_check_timeout
+syn keyword ngxDirective hls
+syn keyword ngxDirective hls_buffers
+syn keyword ngxDirective hls_forward_args
+syn keyword ngxDirective hls_fragment
+syn keyword ngxDirective hls_mp4_buffer_size
+syn keyword ngxDirective hls_mp4_max_buffer_size
+syn keyword ngxDirective http2_chunk_size
+syn keyword ngxDirective http2_body_preread_size
+syn keyword ngxDirective http2_idle_timeout
+syn keyword ngxDirective http2_max_concurrent_streams
+syn keyword ngxDirective http2_max_field_size
+syn keyword ngxDirective http2_max_header_size
+syn keyword ngxDirective http2_max_requests
+syn keyword ngxDirective http2_recv_buffer_size
+syn keyword ngxDirective http2_recv_timeout
+syn keyword ngxDirective if_modified_since
+syn keyword ngxDirective ignore_invalid_headers
+syn keyword ngxDirective image_filter
+syn keyword ngxDirective image_filter_buffer
+syn keyword ngxDirective image_filter_interlace
+syn keyword ngxDirective image_filter_jpeg_quality
+syn keyword ngxDirective image_filter_sharpen
+syn keyword ngxDirective image_filter_transparency
+syn keyword ngxDirective image_filter_webp_quality
+syn keyword ngxDirective imap_auth
+syn keyword ngxDirective imap_capabilities
+syn keyword ngxDirective imap_client_buffer
+syn keyword ngxDirective index
+syn keyword ngxDirective iocp_threads
+syn keyword ngxDirective ip_hash
+syn keyword ngxDirective js_access
+syn keyword ngxDirective js_content
+syn keyword ngxDirective js_filter
+syn keyword ngxDirective js_include
+syn keyword ngxDirective js_preread
+syn keyword ngxDirective js_set
+syn keyword ngxDirective keepalive
+syn keyword ngxDirective keepalive_disable
+syn keyword ngxDirective keepalive_requests
+syn keyword ngxDirective keepalive_timeout
+syn keyword ngxDirective kqueue_changes
+syn keyword ngxDirective kqueue_events
+syn keyword ngxDirective large_client_header_buffers
+syn keyword ngxDirective least_conn
+syn keyword ngxDirective least_time
+syn keyword ngxDirective limit_conn
+syn keyword ngxDirective limit_conn_log_level
+syn keyword ngxDirective limit_conn_status
+syn keyword ngxDirective limit_conn_zone
+syn keyword ngxDirective limit_rate
+syn keyword ngxDirective limit_rate_after
+syn keyword ngxDirective limit_req
+syn keyword ngxDirective limit_req_log_level
+syn keyword ngxDirective limit_req_status
+syn keyword ngxDirective limit_req_zone
+syn keyword ngxDirective lingering_close
+syn keyword ngxDirective lingering_time
+syn keyword ngxDirective lingering_timeout
+syn keyword ngxDirective load_module
+syn keyword ngxDirective lock_file
+syn keyword ngxDirective log_format
+syn keyword ngxDirective log_not_found
+syn keyword ngxDirective log_subrequest
+syn keyword ngxDirective map_hash_bucket_size
+syn keyword ngxDirective map_hash_max_size
+syn keyword ngxDirective match
+syn keyword ngxDirective master_process
+syn keyword ngxDirective max_ranges
+syn keyword ngxDirective memcached_bind
+syn keyword ngxDirective memcached_buffer_size
+syn keyword ngxDirective memcached_connect_timeout
+syn keyword ngxDirective memcached_force_ranges
+syn keyword ngxDirective memcached_gzip_flag
+syn keyword ngxDirective memcached_next_upstream
+syn keyword ngxDirective memcached_next_upstream_timeout
+syn keyword ngxDirective memcached_next_upstream_tries
+syn keyword ngxDirective memcached_read_timeout
+syn keyword ngxDirective memcached_send_timeout
+syn keyword ngxDirective merge_slashes
+syn keyword ngxDirective min_delete_depth
+syn keyword ngxDirective modern_browser
+syn keyword ngxDirective modern_browser_value
+syn keyword ngxDirective mp4
+syn keyword ngxDirective mp4_buffer_size
+syn keyword ngxDirective mp4_max_buffer_size
+syn keyword ngxDirective mp4_limit_rate
+syn keyword ngxDirective mp4_limit_rate_after
+syn keyword ngxDirective msie_padding
+syn keyword ngxDirective msie_refresh
+syn keyword ngxDirective multi_accept
+syn keyword ngxDirective ntlm
+syn keyword ngxDirective open_file_cache
+syn keyword ngxDirective open_file_cache_errors
+syn keyword ngxDirective open_file_cache_events
+syn keyword ngxDirective open_file_cache_min_uses
+syn keyword ngxDirective open_file_cache_valid
+syn keyword ngxDirective open_log_file_cache
+syn keyword ngxDirective output_buffers
+syn keyword ngxDirective override_charset
+syn keyword ngxDirective pcre_jit
+syn keyword ngxDirective perl
+syn keyword ngxDirective perl_modules
+syn keyword ngxDirective perl_require
+syn keyword ngxDirective perl_set
+syn keyword ngxDirective pid
+syn keyword ngxDirective pop3_auth
+syn keyword ngxDirective pop3_capabilities
+syn keyword ngxDirective port_in_redirect
+syn keyword ngxDirective post_acceptex
+syn keyword ngxDirective postpone_gzipping
+syn keyword ngxDirective postpone_output
+syn keyword ngxDirective preread_buffer_size
+syn keyword ngxDirective preread_timeout
+syn keyword ngxDirective protocol nextgroup=ngxMailProtocol skipwhite
+syn keyword ngxMailProtocol imap pop3 smtp contained
+syn keyword ngxDirective proxy
+syn keyword ngxDirective proxy_bind
+syn keyword ngxDirective proxy_buffer
+syn keyword ngxDirective proxy_buffer_size
+syn keyword ngxDirective proxy_buffering
+syn keyword ngxDirective proxy_buffers
+syn keyword ngxDirective proxy_busy_buffers_size
+syn keyword ngxDirective proxy_cache
+syn keyword ngxDirective proxy_cache_bypass
+syn keyword ngxDirective proxy_cache_convert_head
+syn keyword ngxDirective proxy_cache_key
+syn keyword ngxDirective proxy_cache_lock
+syn keyword ngxDirective proxy_cache_lock_age
+syn keyword ngxDirective proxy_cache_lock_timeout
+syn keyword ngxDirective proxy_cache_max_range_offset
+syn keyword ngxDirective proxy_cache_methods
+syn keyword ngxDirective proxy_cache_min_uses
+syn keyword ngxDirective proxy_cache_path
+syn keyword ngxDirective proxy_cache_purge
+syn keyword ngxDirective proxy_cache_revalidate
+syn keyword ngxDirective proxy_cache_use_stale
+syn keyword ngxDirective proxy_cache_valid
+syn keyword ngxDirective proxy_connect_timeout
+syn keyword ngxDirective proxy_cookie_domain
+syn keyword ngxDirective proxy_cookie_path
+syn keyword ngxDirective proxy_download_rate
+syn keyword ngxDirective proxy_force_ranges
+syn keyword ngxDirective proxy_headers_hash_bucket_size
+syn keyword ngxDirective proxy_headers_hash_max_size
+syn keyword ngxDirective proxy_hide_header
+syn keyword ngxDirective proxy_http_version
+syn keyword ngxDirective proxy_ignore_client_abort
+syn keyword ngxDirective proxy_ignore_headers
+syn keyword ngxDirective proxy_intercept_errors
+syn keyword ngxDirective proxy_limit_rate
+syn keyword ngxDirective proxy_max_temp_file_size
+syn keyword ngxDirective proxy_method
+syn keyword ngxDirective proxy_next_upstream
+syn keyword ngxDirective proxy_next_upstream_timeout
+syn keyword ngxDirective proxy_next_upstream_tries
+syn keyword ngxDirective proxy_no_cache
+syn keyword ngxDirective proxy_pass_error_message
+syn keyword ngxDirective proxy_pass_header
+syn keyword ngxDirective proxy_pass_request_body
+syn keyword ngxDirective proxy_pass_request_headers
+syn keyword ngxDirective proxy_protocol
+syn keyword ngxDirective proxy_protocol_timeout
+syn keyword ngxDirective proxy_read_timeout
+syn keyword ngxDirective proxy_redirect
+syn keyword ngxDirective proxy_request_buffering
+syn keyword ngxDirective proxy_responses
+syn keyword ngxDirective proxy_send_lowat
+syn keyword ngxDirective proxy_send_timeout
+syn keyword ngxDirective proxy_set_body
+syn keyword ngxDirective proxy_set_header
+syn keyword ngxDirective proxy_ssl_certificate
+syn keyword ngxDirective proxy_ssl_certificate_key
+syn keyword ngxDirective proxy_ssl_ciphers
+syn keyword ngxDirective proxy_ssl_crl
+syn keyword ngxDirective proxy_ssl_name
+syn keyword ngxDirective proxy_ssl_password_file
+syn keyword ngxDirective proxy_ssl_protocols nextgroup=ngxSSLProtocol skipwhite
+syn keyword ngxDirective proxy_ssl_server_name
+syn keyword ngxDirective proxy_ssl_session_reuse
+syn keyword ngxDirective proxy_ssl_trusted_certificate
+syn keyword ngxDirective proxy_ssl_verify
+syn keyword ngxDirective proxy_ssl_verify_depth
+syn keyword ngxDirective proxy_store
+syn keyword ngxDirective proxy_store_access
+syn keyword ngxDirective proxy_temp_file_write_size
+syn keyword ngxDirective proxy_temp_path
+syn keyword ngxDirective proxy_timeout
+syn keyword ngxDirective proxy_upload_rate
+syn keyword ngxDirective queue
+syn keyword ngxDirective random_index
+syn keyword ngxDirective read_ahead
+syn keyword ngxDirective real_ip_header
+syn keyword ngxDirective real_ip_recursive
+syn keyword ngxDirective recursive_error_pages
+syn keyword ngxDirective referer_hash_bucket_size
+syn keyword ngxDirective referer_hash_max_size
+syn keyword ngxDirective request_pool_size
+syn keyword ngxDirective reset_timedout_connection
+syn keyword ngxDirective resolver
+syn keyword ngxDirective resolver_timeout
+syn keyword ngxDirective rewrite_log
+syn keyword ngxDirective rtsig_overflow_events
+syn keyword ngxDirective rtsig_overflow_test
+syn keyword ngxDirective rtsig_overflow_threshold
+syn keyword ngxDirective rtsig_signo
+syn keyword ngxDirective satisfy
+syn keyword ngxDirective scgi_bind
+syn keyword ngxDirective scgi_buffer_size
+syn keyword ngxDirective scgi_buffering
+syn keyword ngxDirective scgi_buffers
+syn keyword ngxDirective scgi_busy_buffers_size
+syn keyword ngxDirective scgi_cache
+syn keyword ngxDirective scgi_cache_bypass
+syn keyword ngxDirective scgi_cache_key
+syn keyword ngxDirective scgi_cache_lock
+syn keyword ngxDirective scgi_cache_lock_age
+syn keyword ngxDirective scgi_cache_lock_timeout
+syn keyword ngxDirective scgi_cache_max_range_offset
+syn keyword ngxDirective scgi_cache_methods
+syn keyword ngxDirective scgi_cache_min_uses
+syn keyword ngxDirective scgi_cache_path
+syn keyword ngxDirective scgi_cache_purge
+syn keyword ngxDirective scgi_cache_revalidate
+syn keyword ngxDirective scgi_cache_use_stale
+syn keyword ngxDirective scgi_cache_valid
+syn keyword ngxDirective scgi_connect_timeout
+syn keyword ngxDirective scgi_force_ranges
+syn keyword ngxDirective scgi_hide_header
+syn keyword ngxDirective scgi_ignore_client_abort
+syn keyword ngxDirective scgi_ignore_headers
+syn keyword ngxDirective scgi_intercept_errors
+syn keyword ngxDirective scgi_limit_rate
+syn keyword ngxDirective scgi_max_temp_file_size
+syn keyword ngxDirective scgi_next_upstream
+syn keyword ngxDirective scgi_next_upstream_timeout
+syn keyword ngxDirective scgi_next_upstream_tries
+syn keyword ngxDirective scgi_no_cache
+syn keyword ngxDirective scgi_param
+syn keyword ngxDirective scgi_pass_header
+syn keyword ngxDirective scgi_pass_request_body
+syn keyword ngxDirective scgi_pass_request_headers
+syn keyword ngxDirective scgi_read_timeout
+syn keyword ngxDirective scgi_request_buffering
+syn keyword ngxDirective scgi_send_timeout
+syn keyword ngxDirective scgi_store
+syn keyword ngxDirective scgi_store_access
+syn keyword ngxDirective scgi_temp_file_write_size
+syn keyword ngxDirective scgi_temp_path
+syn keyword ngxDirective secure_link
+syn keyword ngxDirective secure_link_md5
+syn keyword ngxDirective secure_link_secret
+syn keyword ngxDirective send_lowat
+syn keyword ngxDirective send_timeout
+syn keyword ngxDirective sendfile
+syn keyword ngxDirective sendfile_max_chunk
+syn keyword ngxDirective server_name_in_redirect
+syn keyword ngxDirective server_names_hash_bucket_size
+syn keyword ngxDirective server_names_hash_max_size
+syn keyword ngxDirective server_tokens
+syn keyword ngxDirective session_log
+syn keyword ngxDirective session_log_format
+syn keyword ngxDirective session_log_zone
+syn keyword ngxDirective set_real_ip_from
+syn keyword ngxDirective slice
+syn keyword ngxDirective smtp_auth
+syn keyword ngxDirective smtp_capabilities
+syn keyword ngxDirective smtp_client_buffer
+syn keyword ngxDirective smtp_greeting_delay
+syn keyword ngxDirective source_charset
+syn keyword ngxDirective spdy_chunk_size
+syn keyword ngxDirective spdy_headers_comp
+syn keyword ngxDirective spdy_keepalive_timeout
+syn keyword ngxDirective spdy_max_concurrent_streams
+syn keyword ngxDirective spdy_pool_size
+syn keyword ngxDirective spdy_recv_buffer_size
+syn keyword ngxDirective spdy_recv_timeout
+syn keyword ngxDirective spdy_streams_index_size
+syn keyword ngxDirective ssi
+syn keyword ngxDirective ssi_ignore_recycled_buffers
+syn keyword ngxDirective ssi_last_modified
+syn keyword ngxDirective ssi_min_file_chunk
+syn keyword ngxDirective ssi_silent_errors
+syn keyword ngxDirective ssi_types
+syn keyword ngxDirective ssi_value_length
+syn keyword ngxDirective ssl
+syn keyword ngxDirective ssl_buffer_size
+syn keyword ngxDirective ssl_certificate
+syn keyword ngxDirective ssl_certificate_key
+syn keyword ngxDirective ssl_ciphers
+syn keyword ngxDirective ssl_client_certificate
+syn keyword ngxDirective ssl_crl
+syn keyword ngxDirective ssl_dhparam
+syn keyword ngxDirective ssl_ecdh_curve
+syn keyword ngxDirective ssl_engine
+syn keyword ngxDirective ssl_handshake_timeout
+syn keyword ngxDirective ssl_password_file
+syn keyword ngxDirective ssl_prefer_server_ciphers
+syn keyword ngxDirective ssl_preread
+syn keyword ngxDirective ssl_protocols nextgroup=ngxSSLProtocol skipwhite
+syn keyword ngxSSLProtocol SSLv2 SSLv3 TLSv1 TLSv1.1 TLSv1.2 contained nextgroup=ngxSSLProtocol skipwhite
+syn keyword ngxDirective ssl_session_cache
+syn keyword ngxDirective ssl_session_ticket_key
+syn keyword ngxDirective ssl_session_tickets
+syn keyword ngxDirective ssl_session_timeout
+syn keyword ngxDirective ssl_stapling
+syn keyword ngxDirective ssl_stapling_file
+syn keyword ngxDirective ssl_stapling_responder
+syn keyword ngxDirective ssl_stapling_verify
+syn keyword ngxDirective ssl_trusted_certificate
+syn keyword ngxDirective ssl_verify_client
+syn keyword ngxDirective ssl_verify_depth
+syn keyword ngxDirective starttls
+syn keyword ngxDirective state
+syn keyword ngxDirective status
+syn keyword ngxDirective status_format
+syn keyword ngxDirective status_zone
+syn keyword ngxDirective sticky
+syn keyword ngxDirective sticky_cookie_insert
+syn keyword ngxDirective stub_status
+syn keyword ngxDirective sub_filter
+syn keyword ngxDirective sub_filter_last_modified
+syn keyword ngxDirective sub_filter_once
+syn keyword ngxDirective sub_filter_types
+syn keyword ngxDirective tcp_nodelay
+syn keyword ngxDirective tcp_nopush
+syn keyword ngxDirective thread_pool
+syn keyword ngxDirective thread_stack_size
+syn keyword ngxDirective timeout
+syn keyword ngxDirective timer_resolution
+syn keyword ngxDirective types_hash_bucket_size
+syn keyword ngxDirective types_hash_max_size
+syn keyword ngxDirective underscores_in_headers
+syn keyword ngxDirective uninitialized_variable_warn
+syn keyword ngxDirective upstream_conf
+syn keyword ngxDirective use
+syn keyword ngxDirective user
+syn keyword ngxDirective userid
+syn keyword ngxDirective userid_domain
+syn keyword ngxDirective userid_expires
+syn keyword ngxDirective userid_mark
+syn keyword ngxDirective userid_name
+syn keyword ngxDirective userid_p3p
+syn keyword ngxDirective userid_path
+syn keyword ngxDirective userid_service
+syn keyword ngxDirective uwsgi_bind
+syn keyword ngxDirective uwsgi_buffer_size
+syn keyword ngxDirective uwsgi_buffering
+syn keyword ngxDirective uwsgi_buffers
+syn keyword ngxDirective uwsgi_busy_buffers_size
+syn keyword ngxDirective uwsgi_cache
+syn keyword ngxDirective uwsgi_cache_bypass
+syn keyword ngxDirective uwsgi_cache_key
+syn keyword ngxDirective uwsgi_cache_lock
+syn keyword ngxDirective uwsgi_cache_lock_age
+syn keyword ngxDirective uwsgi_cache_lock_timeout
+syn keyword ngxDirective uwsgi_cache_methods
+syn keyword ngxDirective uwsgi_cache_min_uses
+syn keyword ngxDirective uwsgi_cache_path
+syn keyword ngxDirective uwsgi_cache_purge
+syn keyword ngxDirective uwsgi_cache_revalidate
+syn keyword ngxDirective uwsgi_cache_use_stale
+syn keyword ngxDirective uwsgi_cache_valid
+syn keyword ngxDirective uwsgi_connect_timeout
+syn keyword ngxDirective uwsgi_force_ranges
+syn keyword ngxDirective uwsgi_hide_header
+syn keyword ngxDirective uwsgi_ignore_client_abort
+syn keyword ngxDirective uwsgi_ignore_headers
+syn keyword ngxDirective uwsgi_intercept_errors
+syn keyword ngxDirective uwsgi_limit_rate
+syn keyword ngxDirective uwsgi_max_temp_file_size
+syn keyword ngxDirective uwsgi_modifier1
+syn keyword ngxDirective uwsgi_modifier2
+syn keyword ngxDirective uwsgi_next_upstream
+syn keyword ngxDirective uwsgi_next_upstream_timeout
+syn keyword ngxDirective uwsgi_next_upstream_tries
+syn keyword ngxDirective uwsgi_no_cache
+syn keyword ngxDirective uwsgi_param
+syn keyword ngxDirective uwsgi_pass
+syn keyword ngxDirective uwsgi_pass_header
+syn keyword ngxDirective uwsgi_pass_request_body
+syn keyword ngxDirective uwsgi_pass_request_headers
+syn keyword ngxDirective uwsgi_read_timeout
+syn keyword ngxDirective uwsgi_request_buffering
+syn keyword ngxDirective uwsgi_send_timeout
+syn keyword ngxDirective uwsgi_ssl_certificate
+syn keyword ngxDirective uwsgi_ssl_certificate_key
+syn keyword ngxDirective uwsgi_ssl_ciphers
+syn keyword ngxDirective uwsgi_ssl_crl
+syn keyword ngxDirective uwsgi_ssl_name
+syn keyword ngxDirective uwsgi_ssl_password_file
+syn keyword ngxDirective uwsgi_ssl_protocols nextgroup=ngxSSLProtocol skipwhite
+syn keyword ngxDirective uwsgi_ssl_server_name
+syn keyword ngxDirective uwsgi_ssl_session_reuse
+syn keyword ngxDirective uwsgi_ssl_trusted_certificate
+syn keyword ngxDirective uwsgi_ssl_verify
+syn keyword ngxDirective uwsgi_ssl_verify_depth
+syn keyword ngxDirective uwsgi_store
+syn keyword ngxDirective uwsgi_store_access
+syn keyword ngxDirective uwsgi_string
+syn keyword ngxDirective uwsgi_temp_file_write_size
+syn keyword ngxDirective uwsgi_temp_path
+syn keyword ngxDirective valid_referers
+syn keyword ngxDirective variables_hash_bucket_size
+syn keyword ngxDirective variables_hash_max_size
+syn keyword ngxDirective worker_aio_requests
+syn keyword ngxDirective worker_connections
+syn keyword ngxDirective worker_cpu_affinity
+syn keyword ngxDirective worker_priority
+syn keyword ngxDirective worker_processes
+syn keyword ngxDirective worker_rlimit_core
+syn keyword ngxDirective worker_rlimit_nofile
+syn keyword ngxDirective worker_rlimit_sigpending
+syn keyword ngxDirective worker_threads
+syn keyword ngxDirective working_directory
+syn keyword ngxDirective xclient
+syn keyword ngxDirective xml_entities
+syn keyword ngxDirective xslt_last_modified
+syn keyword ngxDirective xslt_param
+syn keyword ngxDirective xslt_string_param
+syn keyword ngxDirective xslt_stylesheet
+syn keyword ngxDirective xslt_types
+syn keyword ngxDirective zone
+
+" 3rd party module list:
+" https://www.nginx.com/resources/wiki/modules/
+
+" Accept Language Module <https://www.nginx.com/resources/wiki/modules/accept_language/>
+" Parses the Accept-Language header and gives the most suitable locale from a list of supported locales.
+syn keyword ngxDirectiveThirdParty set_from_accept_language
+
+" Access Key Module (DEPRECATED) <http://wiki.nginx.org/NginxHttpAccessKeyModule>
+" Denies access unless the request URL contains an access key.
+syn keyword ngxDirectiveDeprecated 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 <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 (DEPRECATED) <http://wiki.nginx.org/NginxHttpChunkinModule>
+" HTTP 1.1 chunked-encoding request body support for Nginx.
+syn keyword ngxDirectiveDeprecated chunkin
+syn keyword ngxDirectiveDeprecated chunkin_keepalive
+syn keyword ngxDirectiveDeprecated chunkin_max_chunks_per_buf
+syn keyword ngxDirectiveDeprecated chunkin_resume
+
+" Circle GIF Module <https://github.com/evanmiller/nginx_circle_gif>
+" Generates simple circle images with the colors and size specified in the URL.
+syn keyword ngxDirectiveThirdParty circle_gif
+syn keyword ngxDirectiveThirdParty circle_gif_max_radius
+syn keyword ngxDirectiveThirdParty circle_gif_min_radius
+syn keyword ngxDirectiveThirdParty circle_gif_step_radius
+
+" Nginx-Clojure Module <http://nginx-clojure.github.io/index.html>
+" Parses the Accept-Language header and gives the most suitable locale from a list of supported locales.
+syn keyword ngxDirectiveThirdParty 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_query
+syn keyword ngxDirectiveThirdParty drizzle_pass
+syn keyword ngxDirectiveThirdParty drizzle_connect_timeout
+syn keyword ngxDirectiveThirdParty drizzle_send_query_timeout
+syn keyword ngxDirectiveThirdParty drizzle_recv_cols_timeout
+syn keyword ngxDirectiveThirdParty drizzle_recv_rows_timeout
+syn keyword ngxDirectiveThirdParty drizzle_buffer_size
+syn keyword ngxDirectiveThirdParty drizzle_module_header
+syn keyword ngxDirectiveThirdParty drizzle_status
+
+" Dynamic ETags Module <https://github.com/kali/nginx-dynamic-etags>
+" Attempt at handling ETag / If-None-Match on proxied content.
+syn keyword ngxDirectiveThirdParty 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_duplicate
+syn keyword ngxDirectiveThirdParty echo_flush
+syn keyword ngxDirectiveThirdParty echo_sleep
+syn keyword ngxDirectiveThirdParty echo_blocking_sleep
+syn keyword ngxDirectiveThirdParty echo_reset_timer
+syn keyword ngxDirectiveThirdParty echo_read_request_body
+syn keyword ngxDirectiveThirdParty echo_location_async
+syn keyword ngxDirectiveThirdParty echo_location
+syn keyword ngxDirectiveThirdParty echo_subrequest_async
+syn keyword ngxDirectiveThirdParty echo_subrequest
+syn keyword ngxDirectiveThirdParty echo_foreach_split
+syn keyword ngxDirectiveThirdParty echo_end
+syn keyword ngxDirectiveThirdParty echo_request_body
+syn keyword ngxDirectiveThirdParty echo_exec
+syn keyword ngxDirectiveThirdParty echo_status
+syn keyword ngxDirectiveThirdParty echo_before_body
+syn keyword ngxDirectiveThirdParty echo_after_body
+
+" Encrypted Session Module <https://github.com/openresty/encrypted-session-nginx-module>
+" Encrypt and decrypt nginx variable values
+syn keyword ngxDirectiveThirdParty 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 (DEPRECATED) <http://docs.dutov.org/nginx_modules_events_en.html>
+" Provides options for start/stop events.
+syn keyword ngxDirectiveDeprecated on_start
+syn keyword ngxDirectiveDeprecated on_stop
+
+" EY Balancer Module <https://github.com/ezmobius/nginx-ey-balancer>
+" Adds a request queue to Nginx that allows the limiting of concurrent requests passed to the upstream.
+syn keyword ngxDirectiveThirdParty max_connections
+syn keyword ngxDirectiveThirdParty max_connections_max_queue_length
+syn keyword ngxDirectiveThirdParty max_connections_queue_timeout
+
+" Upstream Fair Balancer <https://www.nginx.com/resources/wiki/modules/fair_balancer/>
+" Sends an incoming request to the least-busy backend server, rather than distributing requests round-robin.
+syn keyword ngxDirectiveThirdParty 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_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 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
+
+" 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
+
+" 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 ngxDirectiveDeprecated push_buffer_size
+syn keyword ngxDirectiveDeprecated push_listener
+syn keyword ngxDirectiveDeprecated push_message_timeout
+syn keyword ngxDirectiveDeprecated push_queue_messages
+syn keyword ngxDirectiveDeprecated push_sender
+
+" HTTP Redis Module <https://www.nginx.com/resources/wiki/modules/redis/>
+" Redis <http://code.google.com/p/redis/> support.
+syn keyword ngxDirectiveThirdParty redis_bind
+syn keyword ngxDirectiveThirdParty redis_buffer_size
+syn keyword ngxDirectiveThirdParty redis_connect_timeout
+syn keyword ngxDirectiveThirdParty redis_next_upstream
+syn keyword ngxDirectiveThirdParty redis_pass
+syn keyword ngxDirectiveThirdParty redis_read_timeout
+syn keyword ngxDirectiveThirdParty redis_send_timeout
+
+" Iconv Module <https://github.com/calio/iconv-nginx-module>
+" A character conversion nginx module using libiconv
+syn keyword ngxDirectiveThirdParty 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_access
+syn keyword ngxDirectiveThirdParty js_load
+syn keyword ngxDirectiveThirdParty js_set
+
+" Limit Upload Rate Module <https://github.com/cfsego/limit_upload_rate>
+" Limit client-upload rate when they are sending request bodies to you
+syn keyword ngxDirectiveThirdParty 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 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 <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
+syn keyword ngxDirectiveThirdParty memc_connect_timeout
+syn keyword ngxDirectiveThirdParty memc_flags_to_last_modified
+syn keyword ngxDirectiveThirdParty memc_next_upstream
+syn keyword ngxDirectiveThirdParty memc_pass
+syn keyword ngxDirectiveThirdParty memc_read_timeout
+syn keyword ngxDirectiveThirdParty memc_send_timeout
+syn keyword ngxDirectiveThirdParty memc_upstream_fail_timeout
+syn keyword ngxDirectiveThirdParty memc_upstream_max_fails
+
+" Mod Security Module <https://github.com/SpiderLabs/ModSecurity>
+" ModSecurity is an open source, cross platform web application firewall (WAF) engine
+syn keyword ngxDirectiveThirdParty ModSecurityConfig
+syn keyword ngxDirectiveThirdParty ModSecurityEnabled
+syn keyword ngxDirectiveThirdParty pool_context
+syn keyword ngxDirectiveThirdParty pool_context_hash_size
+
+" Mogilefs Module <http://www.grid.net.ru/nginx/mogilefs.en.html>
+" MogileFS client for nginx web server.
+syn keyword ngxDirectiveThirdParty mogilefs_pass
+syn keyword ngxDirectiveThirdParty mogilefs_methods
+syn keyword ngxDirectiveThirdParty mogilefs_domain
+syn keyword ngxDirectiveThirdParty mogilefs_class
+syn keyword ngxDirectiveThirdParty mogilefs_tracker
+syn keyword ngxDirectiveThirdParty mogilefs_noverify
+syn keyword ngxDirectiveThirdParty mogilefs_connect_timeout
+syn keyword ngxDirectiveThirdParty mogilefs_send_timeout
+syn keyword ngxDirectiveThirdParty mogilefs_read_timeout
+
+" Mongo Module <https://github.com/simpl/ngx_mongo>
+" Upstream module that allows nginx to communicate directly with MongoDB database.
+syn keyword ngxDirectiveThirdParty 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
+
+" 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 <https://github.com/kr/nginx-notice>
+" Serve static file to POST requests.
+syn keyword ngxDirectiveThirdParty notice
+syn keyword ngxDirectiveThirdParty notice_type
+
+" OCSP Proxy Module <https://github.com/kyprizel/nginx_ocsp_proxy-module>
+" Nginx OCSP processing module designed for response caching
+syn keyword ngxDirectiveThirdParty 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_default_group
+syn keyword ngxDirectiveThirdParty passenger_show_version_in_header
+syn keyword ngxDirectiveThirdParty passenger_friendly_error_pages
+syn keyword ngxDirectiveThirdParty passenger_disable_security_update_check
+syn keyword ngxDirectiveThirdParty passenger_security_update_check_proxy
+syn keyword ngxDirectiveThirdParty passenger_max_pool_size
+syn keyword ngxDirectiveThirdParty passenger_min_instances
+syn keyword ngxDirectiveThirdParty passenger_max_instances
+syn keyword ngxDirectiveThirdParty passenger_max_instances_per_app
+syn keyword ngxDirectiveThirdParty passenger_pool_idle_time
+syn keyword ngxDirectiveThirdParty passenger_max_preloader_idle_time
+syn keyword ngxDirectiveThirdParty passenger_force_max_concurrent_requests_per_process
+syn keyword ngxDirectiveThirdParty passenger_start_timeout
+syn keyword ngxDirectiveThirdParty passenger_concurrency_model
+syn keyword ngxDirectiveThirdParty passenger_thread_count
+syn keyword ngxDirectiveThirdParty passenger_max_requests
+syn keyword ngxDirectiveThirdParty passenger_max_request_time
+syn keyword ngxDirectiveThirdParty passenger_memory_limit
+syn keyword ngxDirectiveThirdParty passenger_stat_throttle_rate
+syn keyword ngxDirectiveThirdParty passenger_core_file_descriptor_ulimit
+syn keyword ngxDirectiveThirdParty passenger_app_file_descriptor_ulimit
+syn keyword ngxDirectiveThirdParty passenger_pre_start
+syn keyword ngxDirectiveThirdParty passenger_set_header
+syn keyword ngxDirectiveThirdParty passenger_max_request_queue_size
+syn keyword ngxDirectiveThirdParty passenger_request_queue_overflow_status_code
+syn keyword ngxDirectiveThirdParty passenger_sticky_sessions
+syn keyword ngxDirectiveThirdParty passenger_sticky_sessions_cookie_name
+syn keyword ngxDirectiveThirdParty passenger_abort_websockets_on_process_shutdown
+syn keyword ngxDirectiveThirdParty passenger_ignore_client_abort
+syn keyword ngxDirectiveThirdParty passenger_intercept_errors
+syn keyword ngxDirectiveThirdParty passenger_pass_header
+syn keyword ngxDirectiveThirdParty passenger_ignore_headers
+syn keyword ngxDirectiveThirdParty passenger_headers_hash_bucket_size
+syn keyword ngxDirectiveThirdParty passenger_headers_hash_max_size
+syn keyword ngxDirectiveThirdParty passenger_buffer_response
+syn keyword ngxDirectiveThirdParty passenger_response_buffer_high_watermark
+syn keyword ngxDirectiveThirdParty passenger_buffer_size, passenger_buffers, passenger_busy_buffers_size
+syn keyword ngxDirectiveThirdParty passenger_socket_backlog
+syn keyword ngxDirectiveThirdParty passenger_log_level
+syn keyword ngxDirectiveThirdParty passenger_log_file
+syn keyword ngxDirectiveThirdParty passenger_file_descriptor_log_file
+syn keyword ngxDirectiveThirdParty passenger_debugger
+syn keyword ngxDirectiveThirdParty passenger_instance_registry_dir
+syn keyword ngxDirectiveThirdParty passenger_data_buffer_dir
+syn keyword ngxDirectiveThirdParty passenger_fly_with
+syn keyword ngxDirectiveThirdParty union_station_support
+syn keyword ngxDirectiveThirdParty union_station_key
+syn keyword ngxDirectiveThirdParty union_station_proxy_address
+syn keyword ngxDirectiveThirdParty union_station_filter
+syn keyword ngxDirectiveThirdParty union_station_gateway_address
+syn keyword ngxDirectiveThirdParty union_station_gateway_port
+syn keyword ngxDirectiveThirdParty union_station_gateway_cert
+syn keyword ngxDirectiveDeprecated rails_spawn_method
+syn keyword ngxDirectiveDeprecated passenger_debug_log_file
+
+" Postgres Module <http://labs.frickle.com/nginx_ngx_postgres/>
+" Upstream module that allows nginx to communicate directly with PostgreSQL database.
+syn keyword ngxDirectiveThirdParty 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 <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_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 <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
+
+" 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_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 <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
+syn keyword ngxDirectiveThirdParty slowfs_cache_key
+syn keyword ngxDirectiveThirdParty slowfs_cache_min_uses
+syn keyword ngxDirectiveThirdParty slowfs_cache_path
+syn keyword ngxDirectiveThirdParty slowfs_cache_purge
+syn keyword ngxDirectiveThirdParty slowfs_cache_valid
+syn keyword ngxDirectiveThirdParty slowfs_temp_path
+
+" Small Light Module <https://github.com/cubicdaiya/ngx_small_light>
+" Dynamic Image Transformation Module For nginx.
+syn keyword ngxDirectiveThirdParty 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
+
+" 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
+
+" 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
+syn keyword ngxDirectiveThirdParty supervisord_name
+syn keyword ngxDirectiveThirdParty supervisord_start
+syn keyword ngxDirectiveThirdParty supervisord_stop
+
+" Tarantool Upstream Module <https://github.com/tarantool/nginx_upstream_module>
+" Tarantool NginX upstream module (REST, JSON API, websockets, load balancing)
+syn keyword ngxDirectiveThirdParty 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 <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
+
+" 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 Hash Module (DEPRECATED) <http://wiki.nginx.org/NginxHttpUpstreamRequestHashModule>
+" Provides simple upstream load distribution by hashing a configurable variable.
+" 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 <https://github.com/openresty/xss-nginx-module>
+" Native support for cross-site scripting (XSS) in an nginx.
+syn keyword ngxDirectiveThirdParty xss_get
+syn keyword ngxDirectiveThirdParty xss_callback_arg
+syn keyword ngxDirectiveThirdParty xss_override_status
+syn keyword ngxDirectiveThirdParty xss_check_status
+syn keyword ngxDirectiveThirdParty xss_input_types
+
+" ZIP Module <https://www.nginx.com/resources/wiki/modules/zip/>
+" ZIP archiver for nginx
+
+
+" highlight
+
+hi link ngxComment Comment
+hi link ngxVariable Identifier
+hi link ngxVariableBlock Identifier
+hi link ngxVariableString PreProc
+hi link ngxBlock Normal
+hi link ngxString String
+
+hi link ngxBoolean Boolean
+hi link ngxDirectiveBlock Statement
+hi link ngxDirectiveImportant Type
+hi link ngxDirectiveControl Keyword
+hi link ngxDirectiveError Constant
+hi link ngxDirectiveDeprecated Error
+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"
diff --git a/app/nginx/docs/GNUmakefile b/app/nginx/docs/GNUmakefile
new file mode 100644
index 0000000..9a920fe
--- /dev/null
+++ b/app/nginx/docs/GNUmakefile
@@ -0,0 +1,41 @@
+
+VER= $(shell grep 'define NGINX_VERSION' src/core/nginx.h \
+ | sed -e 's/^.*"\(.*\)".*/\1/')
+NGINX= nginx-$(VER)
+TEMP= tmp
+XSLS?= xslscript.pl
+
+
+all: changes
+
+changes: $(TEMP)/$(NGINX)/CHANGES.ru \
+ $(TEMP)/$(NGINX)/CHANGES
+
+
+$(TEMP)/$(NGINX)/CHANGES.ru: docs/dtd/changes.dtd \
+ docs/xml/nginx/changes.xml \
+ docs/xml/change_log_conf.xml \
+ docs/xslt/changes.xslt
+
+ mkdir -p $(TEMP)/$(NGINX)
+
+ xmllint --noout --valid docs/xml/nginx/changes.xml
+ xsltproc --stringparam lang ru \
+ -o $@ docs/xslt/changes.xslt docs/xml/nginx/changes.xml
+
+
+$(TEMP)/$(NGINX)/CHANGES: docs/dtd/changes.dtd \
+ docs/xml/nginx/changes.xml \
+ docs/xml/change_log_conf.xml \
+ docs/xslt/changes.xslt
+
+ mkdir -p $(TEMP)/$(NGINX)
+
+ xmllint --noout --valid docs/xml/nginx/changes.xml
+ xsltproc --stringparam lang en \
+ -o $@ docs/xslt/changes.xslt docs/xml/nginx/changes.xml
+
+
+docs/xslt/changes.xslt: docs/xsls/changes.xsls
+
+ $(XSLS) -o $@ $<
diff --git a/app/nginx/docs/dtd/change_log_conf.dtd b/app/nginx/docs/dtd/change_log_conf.dtd
new file mode 100644
index 0000000..40a0123
--- /dev/null
+++ b/app/nginx/docs/dtd/change_log_conf.dtd
@@ -0,0 +1,22 @@
+
+<!ELEMENT configuration (length, start, indent, changes+) >
+
+<!ELEMENT length (#PCDATA) >
+<!ELEMENT start (#PCDATA) >
+<!ELEMENT indent (#PCDATA) >
+
+<!ELEMENT changes (title, length,
+ bugfix, feature, change, workaround,
+ (month, month, month, month, month, month,
+ month, month, month, month, month, month)?) >
+
+<!ATTLIST changes lang ( ru | en) #REQUIRED>
+
+<!ELEMENT title (#PCDATA) >
+
+<!ELEMENT bugfix (#PCDATA) >
+<!ELEMENT feature (#PCDATA) >
+<!ELEMENT change (#PCDATA) >
+<!ELEMENT workaround (#PCDATA) >
+
+<!ELEMENT month (#PCDATA) >
diff --git a/app/nginx/docs/dtd/changes.dtd b/app/nginx/docs/dtd/changes.dtd
new file mode 100644
index 0000000..e14518a
--- /dev/null
+++ b/app/nginx/docs/dtd/changes.dtd
@@ -0,0 +1,22 @@
+
+<!ENTITY nbsp "&#xA0;" >
+<!ENTITY mdash "&#xA0;- " >
+
+
+<!ELEMENT change_log (changes)* >
+<!ATTLIST change_log title CDATA #REQUIRED >
+
+<!ELEMENT changes (change)* >
+<!ATTLIST changes ver CDATA #REQUIRED
+ date CDATA #REQUIRED
+>
+
+<!ELEMENT change (para)* >
+<!ATTLIST change type (bugfix | feature | change | security | workaround) #IMPLIED >
+
+<!ELEMENT para (#PCDATA | at | br | nobr)* >
+<!ATTLIST para lang (ru | en) #REQUIRED >
+
+<!ELEMENT at EMPTY >
+<!ELEMENT br EMPTY >
+<!ELEMENT nobr (#PCDATA) >
diff --git a/app/nginx/docs/html/50x.html b/app/nginx/docs/html/50x.html
new file mode 100644
index 0000000..f60f5e7
--- /dev/null
+++ b/app/nginx/docs/html/50x.html
@@ -0,0 +1,21 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>Error</title>
+<style>
+ body {
+ width: 35em;
+ margin: 0 auto;
+ font-family: Tahoma, Verdana, Arial, sans-serif;
+ }
+</style>
+</head>
+<body>
+<h1>An error occurred.</h1>
+<p>Sorry, the page you are looking for is currently unavailable.<br/>
+Please try again later.</p>
+<p>If you are the system administrator of this resource then you should check
+the <a href="http://nginx.org/r/error_log">error log</a> for details.</p>
+<p><em>Faithfully yours, nginx.</em></p>
+</body>
+</html>
diff --git a/app/nginx/docs/html/index.html b/app/nginx/docs/html/index.html
new file mode 100644
index 0000000..2ca3b95
--- /dev/null
+++ b/app/nginx/docs/html/index.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>Welcome to nginx!</title>
+<style>
+ body {
+ width: 35em;
+ margin: 0 auto;
+ font-family: Tahoma, Verdana, Arial, sans-serif;
+ }
+</style>
+</head>
+<body>
+<h1>Welcome to nginx!</h1>
+<p>If you see this page, the nginx web server is successfully installed and
+working. Further configuration is required.</p>
+
+<p>For online documentation and support please refer to
+<a href="http://nginx.org/">nginx.org</a>.<br/>
+Commercial support is available at
+<a href="http://nginx.com/">nginx.com</a>.</p>
+
+<p><em>Thank you for using nginx.</em></p>
+</body>
+</html>
diff --git a/app/nginx/docs/man/nginx.8 b/app/nginx/docs/man/nginx.8
new file mode 100644
index 0000000..1f4dc89
--- /dev/null
+++ b/app/nginx/docs/man/nginx.8
@@ -0,0 +1,206 @@
+.\"
+.\" Copyright (C) 2010 Sergey A. Osokin
+.\" Copyright (C) Nginx, Inc.
+.\" All rights reserved.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\" notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\" notice, this list of conditions and the following disclaimer in the
+.\" documentation and/or other materials provided with the distribution.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+.\" SUCH DAMAGE.
+.\"
+.\"
+.Dd June 16, 2015
+.Dt NGINX 8
+.Os
+.Sh NAME
+.Nm nginx
+.Nd "HTTP and reverse proxy server, mail proxy server"
+.Sh SYNOPSIS
+.Nm
+.Op Fl ?hqTtVv
+.Op Fl c Ar file
+.Op Fl g Ar directives
+.Op Fl p Ar prefix
+.Op Fl s Ar signal
+.Sh DESCRIPTION
+.Nm
+(pronounced
+.Dq engine x )
+is an HTTP and reverse proxy server, as well as a mail proxy server.
+It is known for its high performance, stability, rich feature set, simple
+configuration, and low resource consumption.
+.Pp
+The options are as follows:
+.Bl -tag -width ".Fl d Ar directives"
+.It Fl ?\& , h
+Print help.
+.It Fl c Ar file
+Use an alternative configuration
+.Ar file .
+.It Fl g Ar directives
+Set global configuration directives.
+See
+.Sx EXAMPLES
+for details.
+.It Fl p Ar prefix
+Set the prefix path.
+The default value is
+.Pa %%PREFIX%% .
+.It Fl q
+Suppress non-error messages during configuration testing.
+.It Fl s Ar signal
+Send a signal to the master process.
+The argument
+.Ar signal
+can be one of:
+.Cm stop , quit , reopen , reload .
+The following table shows the corresponding system signals:
+.Pp
+.Bl -tag -width ".Cm reopen" -compact
+.It Cm stop
+.Dv SIGTERM
+.It Cm quit
+.Dv SIGQUIT
+.It Cm reopen
+.Dv SIGUSR1
+.It Cm reload
+.Dv SIGHUP
+.El
+.It Fl t
+Do not run, just test the configuration file.
+.Nm
+checks the configuration file syntax and then tries to open files
+referenced in the configuration file.
+.It Fl T
+Same as
+.Fl t ,
+but additionally dump configuration files to standard output.
+.It Fl V
+Print the
+.Nm
+version, compiler version, and
+.Pa configure
+script parameters.
+.It Fl v
+Print the
+.Nm
+version.
+.El
+.Sh SIGNALS
+The master process of
+.Nm
+can handle the following signals:
+.Pp
+.Bl -tag -width ".Dv SIGINT , SIGTERM" -compact
+.It Dv SIGINT , SIGTERM
+Shut down quickly.
+.It Dv SIGHUP
+Reload configuration, start the new worker process with a new
+configuration, and gracefully shut down old worker processes.
+.It Dv SIGQUIT
+Shut down gracefully.
+.It Dv SIGUSR1
+Reopen log files.
+.It Dv SIGUSR2
+Upgrade the
+.Nm
+executable on the fly.
+.It Dv SIGWINCH
+Shut down worker processes gracefully.
+.El
+.Pp
+While there is no need to explicitly control worker processes normally,
+they support some signals too:
+.Pp
+.Bl -tag -width ".Dv SIGINT , SIGTERM" -compact
+.It Dv SIGTERM
+Shut down quickly.
+.It Dv SIGQUIT
+Shut down gracefully.
+.It Dv SIGUSR1
+Reopen log files.
+.El
+.Sh DEBUGGING LOG
+To enable a debugging log, reconfigure
+.Nm
+to build with debugging:
+.Pp
+.Dl "./configure --with-debug ..."
+.Pp
+and then set the
+.Cm debug
+level of the
+.Va error_log :
+.Pp
+.Dl "error_log /path/to/log debug;"
+.Pp
+It is also possible to enable the debugging for a particular IP address:
+.Bd -literal -offset indent
+events {
+ debug_connection 127.0.0.1;
+}
+.Ed
+.Sh ENVIRONMENT
+The
+.Ev NGINX
+environment variable is used internally by
+.Nm
+and should not be set directly by the user.
+.Sh FILES
+.Bl -tag -width indent
+.It Pa %%PID_PATH%%
+Contains the process ID of
+.Nm .
+The contents of this file are not sensitive, so it can be world-readable.
+.It Pa %%CONF_PATH%%
+The main configuration file.
+.It Pa %%ERROR_LOG_PATH%%
+Error log file.
+.El
+.Sh EXIT STATUS
+Exit status is 0 on success, or 1 if the command fails.
+.Sh EXAMPLES
+Test configuration file
+.Pa ~/mynginx.conf
+with global directives for PID and quantity of worker processes:
+.Bd -literal -offset indent
+nginx -t -c ~/mynginx.conf \e
+ -g "pid /var/run/mynginx.pid; worker_processes 2;"
+.Ed
+.Sh SEE ALSO
+.\"Xr nginx.conf 5
+.\"Pp
+Documentation at
+.Pa http://nginx.org/en/docs/ .
+.Pp
+For questions and technical support, please refer to
+.Pa http://nginx.org/en/support.html .
+.Sh HISTORY
+Development of
+.Nm
+started in 2002, with the first public release on October 4, 2004.
+.Sh AUTHORS
+.An -nosplit
+.An Igor Sysoev Aq igor@sysoev.ru .
+.Pp
+This manual page was originally written by
+.An Sergey A. Osokin Aq osa@FreeBSD.org.ru
+as a result of compiling many
+.Nm
+documents from all over the world.
diff --git a/app/nginx/docs/text/LICENSE b/app/nginx/docs/text/LICENSE
new file mode 100644
index 0000000..3f29d93
--- /dev/null
+++ b/app/nginx/docs/text/LICENSE
@@ -0,0 +1,26 @@
+/*
+ * 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
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
diff --git a/app/nginx/docs/text/README b/app/nginx/docs/text/README
new file mode 100644
index 0000000..2f68e14
--- /dev/null
+++ b/app/nginx/docs/text/README
@@ -0,0 +1,3 @@
+
+Documentation is available at http://nginx.org
+
diff --git a/app/nginx/docs/xml/change_log_conf.xml b/app/nginx/docs/xml/change_log_conf.xml
new file mode 100644
index 0000000..c03dc34
--- /dev/null
+++ b/app/nginx/docs/xml/change_log_conf.xml
@@ -0,0 +1,47 @@
+<?xml version="1.0" ?>
+<!DOCTYPE configuration SYSTEM "../dtd/change_log_conf.dtd" >
+
+<configuration>
+
+<length>76</length>
+
+<start> *) </start>
+<indent> </indent>
+
+<changes lang="ru">
+ <title>Изменения в </title>
+ <length>66</length>
+
+ <bugfix>Исправление</bugfix>
+ <feature>Добавление</feature>
+ <change>Изменение</change>
+ <security>Безопасность</security>
+ <workaround>Изменение</workaround>
+</changes>
+
+<changes lang="en">
+ <title>Changes with </title>
+ <length>65</length>
+
+ <bugfix>Bugfix</bugfix>
+ <feature>Feature</feature>
+ <change>Change</change>
+ <security>Security</security>
+ <workaround>Workaround</workaround>
+
+ <month> Jan </month>
+ <month> Feb </month>
+ <month> Mar </month>
+ <month> Apr </month>
+ <month> May </month>
+ <month> Jun </month>
+ <month> Jul </month>
+ <month> Aug </month>
+ <month> Sep </month>
+ <month> Oct </month>
+ <month> Nov </month>
+ <month> Dec </month>
+
+</changes>
+
+</configuration>
diff --git a/app/nginx/docs/xml/nginx/changes.xml b/app/nginx/docs/xml/nginx/changes.xml
new file mode 100644
index 0000000..ea39ab2
--- /dev/null
+++ b/app/nginx/docs/xml/nginx/changes.xml
@@ -0,0 +1,25676 @@
+<?xml version="1.0" ?>
+<!DOCTYPE change_log SYSTEM "../../dtd/changes.dtd" >
+
+
+<change_log title="nginx">
+
+
+<changes ver="1.11.13" date="2017-04-04">
+
+<change type="feature">
+<para lang="ru">
+параметр http_429 в директивах proxy_next_upstream, fastcgi_next_upstream,
+scgi_next_upstream и uwsgi_next_upstream.<br/>
+Спасибо Piotr Sikora.
+</para>
+<para lang="en">
+the "http_429" parameter of the "proxy_next_upstream", "fastcgi_next_upstream",
+"scgi_next_upstream", and "uwsgi_next_upstream" directives.<br/>
+Thanks to Piotr Sikora.
+</para>
+</change>
+
+<change type="bugfix">
+<para lang="ru">
+в обработке ошибок выделения памяти.
+</para>
+<para lang="en">
+in memory allocation error handling.
+</para>
+</change>
+
+<change type="bugfix">
+<para lang="ru">
+при использовании директив sendfile и timer_resolution на Linux
+запросы могли зависать.
+</para>
+<para lang="en">
+requests might hang
+when using the "sendfile" and "timer_resolution" directives on Linux.
+</para>
+</change>
+
+<change type="bugfix">
+<para lang="ru">
+при использовании с подзапросами директив sendfile и aio_write
+запросы могли зависать.
+</para>
+<para lang="en">
+requests might hang
+when using the "sendfile" and "aio_write" directives with subrequests.
+</para>
+</change>
+
+<change type="bugfix">
+<para lang="ru">
+в модуле ngx_http_v2_module.<br/>
+Спасибо Piotr Sikora.
+</para>
+<para lang="en">
+in the ngx_http_v2_module.<br/>
+Thanks to Piotr Sikora.
+</para>
+</change>
+
+<change type="bugfix">
+<para lang="ru">
+при использовании HTTP/2 в рабочем процессе мог произойти segmentation fault.
+</para>
+<para lang="en">
+a segmentation fault might occur in a worker process when using HTTP/2.
+</para>
+</change>
+
+<change type="bugfix">
+<para lang="ru">
+запросы могли зависать
+при использовании с подзапросами директив limit_rate, sendfile_max_chunk,
+limit_req или метода $r->sleep() встроенного перла.
+</para>
+<para lang="en">
+requests might hang
+when using the "limit_rate", "sendfile_max_chunk", "limit_req" directives,
+or the $r->sleep() embedded perl method with subrequests.
+</para>
+</change>
+
+<change type="bugfix">
+<para lang="ru">
+в модуле ngx_http_slice_module.
+</para>
+<para lang="en">
+in the ngx_http_slice_module.
+</para>
+</change>
+
+</changes>
+
+
+<changes ver="1.11.12" date="2017-03-24">
+
+<change type="bugfix">
+<para lang="ru">
+nginx мог нагружать процессор;
+ошибка появилась в 1.11.11.
+</para>
+<para lang="en">
+nginx might hog CPU;
+the bug had appeared in 1.11.11.
+</para>
+</change>
+
+</changes>
+
+
+<changes ver="1.11.11" date="2017-03-21">
+
+<change type="feature">
+<para lang="ru">
+директива worker_shutdown_timeout.
+</para>
+<para lang="en">
+the "worker_shutdown_timeout" directive.
+</para>
+</change>
+
+<change type="feature">
+<para lang="ru">
+улучшения в скриптах подсветки синтаксиса для vim.<br/>
+Спасибо Wei-Ko Kao.
+</para>
+<para lang="en">
+vim syntax highlighting scripts improvements.<br/>
+Thanks to Wei-Ko Kao.
+</para>
+</change>
+
+<change type="bugfix">
+<para lang="ru">
+при попытке установить переменную $limit_rate в пустую строку
+в рабочем процессе мог произойти segmentation fault.
+</para>
+<para lang="en">
+a segmentation fault might occur in a worker process
+if the $limit_rate variable was set to an empty string.
+</para>
+</change>
+
+<change type="bugfix">
+<para lang="ru">
+директивы proxy_cache_background_update, fastcgi_cache_background_update,
+scgi_cache_background_update и uwsgi_cache_background_update
+могли работать некорректно, если использовалась директива if.
+</para>
+<para lang="en">
+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.
+</para>
+</change>
+
+<change type="bugfix">
+<para lang="ru">
+в рабочем процессе мог произойти segmentation fault,
+если количество large_client_header_buffers в виртуальном сервере
+отличалось от такового в сервере по умолчанию.
+</para>
+<para lang="en">
+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.
+</para>
+</change>
+
+<change type="bugfix">
+<para lang="ru">
+в почтовом прокси-сервере.
+</para>
+<para lang="en">
+in the mail proxy server.
+</para>
+</change>
+
+</changes>
+
+
+<changes ver="1.11.10" date="2017-02-14">
+
+<change type="change">
+<para lang="ru">
+формат заголовка кэша был изменен,
+ранее закэшированные ответы будут загружены заново.
+</para>
+<para lang="en">
+cache header format has been changed,
+previously cached responses will be invalidated.
+</para>
+</change>
+
+<change type="feature">
+<para lang="ru">
+поддержка расширений stale-while-revalidate и stale-if-error
+в строке "Cache-Control" в заголовке ответа бэкенда.
+</para>
+<para lang="en">
+support of "stale-while-revalidate" and "stale-if-error" extensions
+in the "Cache-Control" backend response header line.
+</para>
+</change>
+
+<change type="feature">
+<para lang="ru">
+директивы proxy_cache_background_update, fastcgi_cache_background_update,
+scgi_cache_background_update и uwsgi_cache_background_update.
+</para>
+<para lang="en">
+the "proxy_cache_background_update", "fastcgi_cache_background_update",
+"scgi_cache_background_update", and "uwsgi_cache_background_update" directives.
+</para>
+</change>
+
+<change type="feature">
+<para lang="ru">
+теперь nginx может кэшировать ответы
+со строкой Vary заголовка длиной до 128 символов
+(вместо 42 символов в предыдущих версиях).
+</para>
+<para lang="en">
+nginx is now able to cache responses
+with the "Vary" header line up to 128 characters long
+(instead of 42 characters in previous versions).
+</para>
+</change>
+
+<change type="feature">
+<para lang="ru">
+параметр build директивы server_tokens.<br/>
+Спасибо Tom Thorogood.
+</para>
+<para lang="en">
+the "build" parameter of the "server_tokens" directive.<br/>
+Thanks to Tom Thorogood.
+</para>
+</change>
+
+<change type="bugfix">
+<para lang="ru">
+при обработке запросов со строкой "Expect: 100-continue" в заголовке запроса
+в логах могли появляться сообщения "[crit] SSL_write() failed".
+</para>
+<para lang="en">
+"[crit] SSL_write() failed" messages might appear in logs
+when handling requests with the "Expect: 100-continue" request header line.
+</para>
+</change>
+
+<change type="bugfix">
+<para lang="ru">
+модуль ngx_http_slice_module не работал в именованных location'ах.
+</para>
+<para lang="en">
+the ngx_http_slice_module did not work in named locations.
+</para>
+</change>
+
+<change type="bugfix">
+<para lang="ru">
+при использовании AIO после перенаправления запроса с помощью X-Accel-Redirect
+в рабочем процессе мог произойти segmentation fault.
+</para>
+<para lang="en">
+a segmentation fault might occur in a worker process
+when using AIO after an "X-Accel-Redirect" redirection.
+</para>
+</change>
+
+<change type="bugfix">
+<para lang="ru">
+уменьшено потребление памяти для долгоживущих запросов, использующих сжатие.
+</para>
+<para lang="en">
+reduced memory consumption for long-lived requests using gzipping.
+</para>
+</change>
+
+</changes>
+
+
+<changes ver="1.11.9" date="2017-01-24">
+
+<change type="bugfix">
+<para lang="ru">
+при использовании модуля stream nginx мог нагружать процессор;
+ошибка появилась в 1.11.5.
+</para>
+<para lang="en">
+nginx might hog CPU when using the stream module;
+the bug had appeared in 1.11.5.
+</para>
+</change>
+
+<change type="bugfix">
+<para lang="ru">
+метод аутентификации EXTERNAL в почтовом прокси-сервере
+можно было использовать, даже если он не был разрешён в конфигурации.
+</para>
+<para lang="en">
+EXTERNAL authentication mechanism in mail proxy
+was accepted even if it was not enabled in the configuration.
+</para>
+</change>
+
+<change type="bugfix">
+<para lang="ru">
+при использовании директивы ssl_verify_client модуля stream
+в рабочем процессе мог произойти segmentation fault.
+</para>
+<para lang="en">
+a segmentation fault might occur in a worker process
+if the "ssl_verify_client" directive of the stream module was used.
+</para>
+</change>
+
+<change type="bugfix">
+<para lang="ru">
+директива ssl_verify_client модуля stream могла не работать.
+</para>
+<para lang="en">
+the "ssl_verify_client" directive of the stream module might not work.
+</para>
+</change>
+
+<change type="bugfix">
+<para lang="ru">
+при исчерпании рабочим процессом свободных соединений
+keepalive-соединения могли закрываться излишне агрессивно.<br/>
+Спасибо Joel Cunningham.
+</para>
+<para lang="en">
+closing keepalive connections due to no free worker connections
+might be too aggressive.<br/>
+Thanks to Joel Cunningham.
+</para>
+</change>
+
+<change type="bugfix">
+<para lang="ru">
+при использовании директивы sendfile на FreeBSD и macOS
+мог возвращаться некорректный ответ;
+ошибка появилась в 1.7.8.
+</para>
+<para lang="en">
+an incorrect response might be returned
+when using the "sendfile" directive on FreeBSD and macOS;
+the bug had appeared in 1.7.8.
+</para>
+</change>
+
+<change type="bugfix">
+<para lang="ru">
+при использовании директивы aio_write
+ответ мог сохраняться в кэш не полностью.
+</para>
+<para lang="en">
+a truncated response might be stored in cache
+when using the "aio_write" directive.
+</para>
+</change>
+
+<change type="bugfix">
+<para lang="ru">
+при использовании директивы aio_write
+могла происходить утечка сокетов.
+</para>
+<para lang="en">
+a socket leak might occur
+when using the "aio_write" directive.
+</para>
+</change>
+
+</changes>
+
+
+<changes ver="1.11.8" date="2016-12-27">
+
+<change type="feature">
+<para lang="ru">
+директива absolute_redirect.
+</para>
+<para lang="en">
+the "absolute_redirect" directive.
+</para>
+</change>
+
+<change type="feature">
+<para lang="ru">
+параметр escape директивы log_format.
+</para>
+<para lang="en">
+the "escape" parameter of the "log_format" directive.
+</para>
+</change>
+
+<change type="feature">
+<para lang="ru">
+проверка клиентских SSL-сертификатов в модуле stream.
+</para>
+<para lang="en">
+client SSL certificates verification in the stream module.
+</para>
+</change>
+
+<change type="feature">
+<para lang="ru">
+директива ssl_session_ticket_key поддерживает
+шифрование TLS session tickets с помощью AES256
+при использовании с 80-байтными ключами.
+</para>
+<para lang="en">
+the "ssl_session_ticket_key" directive supports
+AES256 encryption of TLS session tickets
+when used with 80-byte keys.
+</para>
+</change>
+
+<change type="feature">
+<para lang="ru">
+поддержка vim-commentary в скриптах для vim.<br/>
+Спасибо Armin Grodon.
+</para>
+<para lang="en">
+vim-commentary support in vim scripts.<br/>
+Thanks to Armin Grodon.
+</para>
+</change>
+
+<change type="bugfix">
+<para lang="ru">
+рекурсия при получении значений переменных не ограничивалась.
+</para>
+<para lang="en">
+recursion when evaluating variables was not limited.
+</para>
+</change>
+
+<change type="bugfix">
+<para lang="ru">
+в модуле ngx_stream_ssl_preread_module.
+</para>
+<para lang="en">
+in the ngx_stream_ssl_preread_module.
+</para>
+</change>
+
+<change type="bugfix">
+<para lang="ru">
+если сервер, описанный в блоке upstream в модуле stream,
+был признан неработающим, то после истечения fail_timeout он
+признавался работающим только после завершения тестового соединения;
+теперь достаточно, чтобы соединение было успешно установлено.
+</para>
+<para lang="en">
+if a server in an upstream in the stream module failed,
+it was considered alive only when a test connection sent
+to it after fail_timeout was closed;
+now a successfully established connection is enough.
+</para>
+</change>
+
+<change type="bugfix">
+<para lang="ru">
+nginx/Windows не собирался с 64-битным Visual Studio.
+</para>
+<para lang="en">
+nginx/Windows could not be built with 64-bit Visual Studio.
+</para>
+</change>
+
+<change type="bugfix">
+<para lang="ru">
+nginx/Windows не собирался с OpenSSL 1.1.0.
+</para>
+<para lang="en">
+nginx/Windows could not be built with OpenSSL 1.1.0.
+</para>
+</change>
+
+</changes>
+
+
+<changes ver="1.11.7" date="2016-12-13">
+
+<change type="change">
+<para lang="ru">
+переменная $ssl_client_verify теперь
+в случае ошибки проверки клиентского сертификата
+содержит строку с описанием ошибки,
+например, "FAILED:certificate has expired".
+</para>
+<para lang="en">
+now in case of a client certificate verification error
+the $ssl_client_verify variable contains a string with the failure reason,
+for example, "FAILED:certificate has expired".
+</para>
+</change>
+
+<change type="feature">
+<para lang="ru">
+переменные $ssl_ciphers, $ssl_curves,
+$ssl_client_v_start, $ssl_client_v_end и $ssl_client_v_remain.
+</para>
+<para lang="en">
+the $ssl_ciphers, $ssl_curves,
+$ssl_client_v_start, $ssl_client_v_end, and $ssl_client_v_remain variables.
+</para>
+</change>
+
+<change type="feature">
+<para lang="ru">
+параметр volatile директивы map.
+</para>
+<para lang="en">
+the "volatile" parameter of the "map" directive.
+</para>
+</change>
+
+<change type="bugfix">
+<para lang="ru">
+при сборке динамических модулей
+не учитывались заданные для модуля зависимости.
+</para>
+<para lang="en">
+dependencies specified for a module
+were ignored while building dynamic modules.
+</para>
+</change>
+
+<change type="bugfix">
+<para lang="ru">
+при использовании HTTP/2 и директив limit_req или auth_request
+тело запроса могло быть повреждено;
+ошибка появилась в 1.11.0.
+</para>
+<para lang="en">
+when using HTTP/2 and the "limit_req" or "auth_request" directives
+client request body might be corrupted;
+the bug had appeared in 1.11.0.
+</para>
+</change>
+
+<change type="bugfix">
+<para lang="ru">
+при использовании HTTP/2 в рабочем процессе мог произойти segmentation fault;
+ошибка появилась в 1.11.3.
+</para>
+<para lang="en">
+a segmentation fault might occur in a worker process when using HTTP/2;
+the bug had appeared in 1.11.3.
+</para>
+</change>
+
+<change type="bugfix">
+<para lang="ru">
+в модуле ngx_http_mp4_module.<br/>
+Спасибо Congcong Hu.
+</para>
+<para lang="en">
+in the ngx_http_mp4_module.<br/>
+Thanks to Congcong Hu.
+</para>
+</change>
+
+<change type="bugfix">
+<para lang="ru">
+в модуле ngx_http_perl_module.
+</para>
+<para lang="en">
+in the ngx_http_perl_module.
+</para>
+</change>
+
+</changes>
+
+
+<changes ver="1.11.6" date="2016-11-15">
+
+<change type="change">
+<para lang="ru">
+формат переменных $ssl_client_s_dn и $ssl_client_i_dn
+изменён на соответствующий RFC 2253 (RFC 4514);
+значения в старом формате доступны через переменные
+$ssl_client_s_dn_legacy и $ssl_client_i_dn_legacy.
+</para>
+<para lang="en">
+format of the $ssl_client_s_dn and $ssl_client_i_dn variables
+has been changed to follow RFC 2253 (RFC 4514);
+values in the old format are available in
+the $ssl_client_s_dn_legacy and $ssl_client_i_dn_legacy variables.
+</para>
+</change>
+
+<change type="change">
+<para lang="ru">
+при сохранении временных файлов в каталоге кэша
+они теперь располагаются не в отдельном подкаталоге для временных файлов,
+а в том же подкаталоге, что и соответствующие файлы в кэше.
+</para>
+<para lang="en">
+when storing temporary files in a cache directory
+they will be stored in the same subdirectories as corresponding cache files
+instead of a separate subdirectory for temporary files.
+</para>
+</change>
+
+<change type="feature">
+<para lang="ru">
+поддержка метода аутентификации EXTERNAL
+в почтовом прокси-сервере.<br/>
+Спасибо Robert Norris.
+</para>
+<para lang="en">
+EXTERNAL authentication mechanism support
+in mail proxy.<br/>
+Thanks to Robert Norris.
+</para>
+</change>
+
+<change type="feature">
+<para lang="ru">
+поддержка WebP в модуле ngx_http_image_filter_module.
+</para>
+<para lang="en">
+WebP support in the ngx_http_image_filter_module.
+</para>
+</change>
+
+<change type="feature">
+<para lang="ru">
+директива proxy_method поддерживает переменные.<br/>
+Спасибо Дмитрию Лазуркину.
+</para>
+<para lang="en">
+variables support in the "proxy_method" directive.<br/>
+Thanks to Dmitry Lazurkin.
+</para>
+</change>
+
+<change type="feature">
+<para lang="ru">
+директива http2_max_requests в модуле ngx_http_v2_module.
+</para>
+<para lang="en">
+the "http2_max_requests" directive in the ngx_http_v2_module.
+</para>
+</change>
+
+<change type="feature">
+<para lang="ru">
+директивы proxy_cache_max_range_offset, fastcgi_cache_max_range_offset,
+scgi_cache_max_range_offset и uwsgi_cache_max_range_offset.
+</para>
+<para lang="en">
+the "proxy_cache_max_range_offset", "fastcgi_cache_max_range_offset",
+"scgi_cache_max_range_offset", and "uwsgi_cache_max_range_offset" directives.
+</para>
+</change>
+
+<change type="bugfix">
+<para lang="ru">
+плавное завершение старых рабочих процессов могло занимать бесконечное время
+при использовании HTTP/2.
+</para>
+<para lang="en">
+graceful shutdown of old worker processes might require infinite time
+when using HTTP/2.
+</para>
+</change>
+
+<change type="bugfix">
+<para lang="ru">
+в модуле ngx_http_mp4_module.
+</para>
+<para lang="en">
+in the ngx_http_mp4_module.
+</para>
+</change>
+
+<change type="bugfix">
+<para lang="ru">
+при проксировании WebSocket-соединений и включённом кэшировании
+в логах могли появляться сообщения "ignore long locked inactive cache entry".
+</para>
+<para lang="en">
+"ignore long locked inactive cache entry" alerts might appear in logs
+when proxying WebSocket connections with caching enabled.
+</para>
+</change>
+
+<change type="bugfix">
+<para lang="ru">
+если во время SSL handshake с бэкендом происходил таймаут,
+nginx ничего не писал в лог
+и возвращал ответ с кодом 502 вместо 504.
+</para>
+<para lang="en">
+nginx did not write anything to log
+and returned a response with code 502 instead of 504
+when a timeout occurred during an SSL handshake to a backend.
+</para>
+</change>
+
+</changes>
+
+
+<changes ver="1.11.5" date="2016-10-11">
+
+<change type="change">
+<para lang="ru">
+параметр configure --with-ipv6 упразднён,
+поддержка IPv6 теперь собирается автоматически.
+</para>
+<para lang="en">
+the --with-ipv6 configure option was removed,
+now IPv6 support is configured automatically.
+</para>
+</change>
+
+<change type="change">
+<para lang="ru">
+теперь, если в блоке upstream не оказалось доступных серверов,
+nginx не сбрасывает статистику ошибок всех серверов, как делал ранее,
+а ожидает истечения fail_timeout.
+</para>
+<para lang="en">
+now if there are no available servers in an upstream,
+nginx will not reset number of failures of all servers as it previously did,
+but will wait for fail_timeout to expire.
+</para>
+</change>
+
+<change type="feature">
+<para lang="ru">
+модуль ngx_stream_ssl_preread_module.
+</para>
+<para lang="en">
+the ngx_stream_ssl_preread_module.
+</para>
+</change>
+
+<change type="feature">
+<para lang="ru">
+директива server в блоке upstream поддерживает параметр max_conns.
+</para>
+<para lang="en">
+the "server" directive in the "upstream" context supports
+the "max_conns" parameter.
+</para>
+</change>
+
+<change type="feature">
+<para lang="ru">
+параметр configure --with-compat.
+</para>
+<para lang="en">
+the --with-compat configure option.
+</para>
+</change>
+
+<change type="feature">
+<para lang="ru">
+параметры manager_files, manager_threshold и manager_sleep
+директив proxy_cache_path, fastcgi_cache_path, scgi_cache_path и
+uwsgi_cache_path.
+</para>
+<para lang="en">
+"manager_files", "manager_threshold", and "manager_sleep" parameters
+of the "proxy_cache_path", "fastcgi_cache_path", "scgi_cache_path", and
+"uwsgi_cache_path" directives.
+</para>
+</change>
+
+<change type="bugfix">
+<para lang="ru">
+при сборке perl-модуля не использовались флаги,
+заданные с помощью параметра configure --with-ld-opt.
+</para>
+<para lang="en">
+flags passed by the --with-ld-opt configure option
+were not used while building perl module.
+</para>
+</change>
+
+<change type="bugfix">
+<para lang="ru">
+в директиве add_after_body при использовании совместно с директивой sub_filter.
+</para>
+<para lang="en">
+in the "add_after_body" directive when used with the "sub_filter" directive.
+</para>
+</change>
+
+<change type="bugfix">
+<para lang="ru">
+в переменной $realip_remote_addr.
+</para>
+<para lang="en">
+in the $realip_remote_addr variable.
+</para>
+</change>
+
+<change type="bugfix">
+<para lang="ru">
+директивы dav_access, proxy_store_access, fastcgi_store_access,
+scgi_store_access и uwsgi_store_access
+игнорировали права, заданные для пользователя.
+</para>
+<para lang="en">
+the "dav_access", "proxy_store_access", "fastcgi_store_access",
+"scgi_store_access", and "uwsgi_store_access" directives
+ignored permissions specified for user.
+</para>
+</change>
+
+<change type="bugfix">
+<para lang="ru">
+unix domain listen-сокеты могли не наследоваться
+при обновлении исполняемого файла на Linux.
+</para>
+<para lang="en">
+unix domain listen sockets might not be inherited
+during binary upgrade on Linux.
+</para>
+</change>
+
+<change type="bugfix">
+<para lang="ru">
+nginx возвращал ошибку 400 на запросы
+с символом "-" в HTTP-методе.
+</para>
+<para lang="en">
+nginx returned the 400 response on requests
+with the "-" character in the HTTP method.
+</para>
+</change>
+
+</changes>
+
+
+<changes ver="1.11.4" date="2016-09-13">
+
+<change type="feature">
+<para lang="ru">
+переменная $upstream_bytes_received.
+</para>
+<para lang="en">
+the $upstream_bytes_received variable.
+</para>
+</change>
+
+<change type="feature">
+<para lang="ru">
+переменные $bytes_received, $session_time, $protocol, $status,
+$upstream_addr, $upstream_bytes_sent, $upstream_bytes_received,
+$upstream_connect_time, $upstream_first_byte_time
+и $upstream_session_time в модуле stream.
+</para>
+<para lang="en">
+the $bytes_received, $session_time, $protocol, $status,
+$upstream_addr, $upstream_bytes_sent, $upstream_bytes_received,
+$upstream_connect_time, $upstream_first_byte_time,
+and $upstream_session_time variables in the stream module.
+</para>
+</change>
+
+<change type="feature">
+<para lang="ru">
+модуль ngx_stream_log_module.
+</para>
+<para lang="en">
+the ngx_stream_log_module.
+</para>
+</change>
+
+<change type="feature">
+<para lang="ru">
+параметр proxy_protocol в директиве listen,
+переменные $proxy_protocol_addr и $proxy_protocol_port
+в модуле stream.
+</para>
+<para lang="en">
+the "proxy_protocol" parameter of the "listen" directive,
+the $proxy_protocol_addr and $proxy_protocol_port variables
+in the stream module.
+</para>
+</change>
+
+<change type="feature">
+<para lang="ru">
+модуль ngx_stream_realip_module.
+</para>
+<para lang="en">
+the ngx_stream_realip_module.
+</para>
+</change>
+
+<change type="bugfix">
+<para lang="ru">
+nginx не собирался с модулем stream и модулем ngx_http_ssl_module,
+но без модуля ngx_stream_ssl_module;
+ошибка появилась в 1.11.3.
+</para>
+<para lang="en">
+nginx could not be built with the stream module and the ngx_http_ssl_module,
+but without ngx_stream_ssl_module;
+the bug had appeared in 1.11.3.
+</para>
+</change>
+
+<change type="feature">
+<para lang="ru">
+опция сокета IP_BIND_ADDRESS_NO_PORT не использовалась;
+ошибка появилась в 1.11.2.
+</para>
+<para lang="en">
+the IP_BIND_ADDRESS_NO_PORT socket option was not used;
+the bug had appeared in 1.11.2.
+</para>
+</change>
+
+<change type="bugfix">
+<para lang="ru">
+в параметре ranges директивы geo.
+</para>
+<para lang="en">
+in the "ranges" parameter of the "geo" directive.
+</para>
+</change>
+
+<change type="bugfix">
+<para lang="ru">
+при использовании директив "aio threads" и sendfile
+мог возвращаться некорректный ответ; ошибка появилась в 1.9.13.
+</para>
+<para lang="en">
+an incorrect response might be returned
+when using the "aio threads" and "sendfile" directives;
+the bug had appeared in 1.9.13.
+</para>
+</change>
+
+</changes>
+
+
+<changes ver="1.11.3" date="2016-07-26">
+
+<change type="change">
+<para lang="ru">
+теперь accept_mutex по умолчанию выключен.
+</para>
+<para lang="en">
+now the "accept_mutex" directive is turned off by default.
+</para>
+</change>
+
+<change type="feature">
+<para lang="ru">
+теперь nginx использует EPOLLEXCLUSIVE на Linux.
+</para>
+<para lang="en">
+now nginx uses EPOLLEXCLUSIVE on Linux.
+</para>
+</change>
+
+<change type="feature">
+<para lang="ru">
+модуль ngx_stream_geo_module.
+</para>
+<para lang="en">
+the ngx_stream_geo_module.
+</para>
+</change>
+
+<change type="feature">
+<para lang="ru">
+модуль ngx_stream_geoip_module.
+</para>
+<para lang="en">
+the ngx_stream_geoip_module.
+</para>
+</change>
+
+<change type="feature">
+<para lang="ru">
+модуль ngx_stream_split_clients_module.
+</para>
+<para lang="en">
+the ngx_stream_split_clients_module.
+</para>
+</change>
+
+<change type="feature">
+<para lang="ru">
+директивы proxy_pass и proxy_ssl_name в модуле stream
+поддерживают переменные.
+</para>
+<para lang="en">
+variables support
+in the "proxy_pass" and "proxy_ssl_name" directives in the stream module.
+</para>
+</change>
+
+<change type="bugfix">
+<para lang="ru">
+утечки сокетов при использовании HTTP/2.
+</para>
+<para lang="en">
+socket leak when using HTTP/2.
+</para>
+</change>
+
+<change type="bugfix">
+<para lang="ru">
+в configure.<br/>
+Спасибо Piotr Sikora.
+</para>
+<para lang="en">
+in configure tests.<br/>
+Thanks to Piotr Sikora.
+</para>
+</change>
+
+</changes>
+
+
+<changes ver="1.11.2" date="2016-07-05">
+
+<change type="change">
+<para lang="ru">
+теперь nginx всегда использует внутренние реализации MD5 и SHA1;
+параметры configure --with-md5 и --with-sha1 упразднены.
+</para>
+<para lang="en">
+now nginx always uses internal MD5 and SHA1 implementations;
+the --with-md5 and --with-sha1 configure options were canceled.
+</para>
+</change>
+
+<change type="feature">
+<para lang="ru">
+поддержка переменных в модуле stream.
+</para>
+<para lang="en">
+variables support in the stream module.
+</para>
+</change>
+
+<change type="feature">
+<para lang="ru">
+модуль ngx_stream_map_module.
+</para>
+<para lang="en">
+the ngx_stream_map_module.
+</para>
+</change>
+
+<change type="feature">
+<para lang="ru">
+модуль ngx_stream_return_module.
+</para>
+<para lang="en">
+the ngx_stream_return_module.
+</para>
+</change>
+
+<change type="feature">
+<para lang="ru">
+в директивах proxy_bind, fastcgi_bind, memcached_bind, scgi_bind и uwsgi_bind
+теперь можно указывать порт.
+</para>
+<para lang="en">
+a port can be specified in the "proxy_bind", "fastcgi_bind",
+"memcached_bind", "scgi_bind", and "uwsgi_bind" directives.
+</para>
+</change>
+
+<change type="feature">
+<para lang="ru">
+теперь nginx использует опцию сокета IP_BIND_ADDRESS_NO_PORT, если она доступна.
+</para>
+<para lang="en">
+now nginx uses the IP_BIND_ADDRESS_NO_PORT socket option when available.
+</para>
+</change>
+
+<change type="bugfix">
+<para lang="ru">
+при использовании HTTP/2 и директивы proxy_request_buffering
+в рабочем процессе мог произойти segmentation fault.
+</para>
+<para lang="en">
+a segmentation fault might occur in a worker process
+when using HTTP/2 and the "proxy_request_buffering" directive.
+</para>
+</change>
+
+<change type="bugfix">
+<para lang="ru">
+при использовании HTTP/2
+к запросам, передаваемым на бэкенд,
+всегда добавлялась строка заголовка "Content-Length",
+даже если у запроса не было тела.
+</para>
+<para lang="en">
+the "Content-Length" request header line
+was always added to requests passed to backends,
+including requests without body,
+when using HTTP/2.
+</para>
+</change>
+
+<change type="bugfix">
+<para lang="ru">
+при использовании HTTP/2
+в логах могли появляться сообщения "http request count is zero".
+</para>
+<para lang="en">
+"http request count is zero" alerts might appear in logs
+when using HTTP/2.
+</para>
+</change>
+
+<change type="bugfix">
+<para lang="ru">
+при использовании директивы sub_filter
+могло буферизироваться больше данных, чем это необходимо;
+проблема появилась в 1.9.4.
+</para>
+<para lang="en">
+unnecessary buffering might occur
+when using the "sub_filter" directive;
+the issue had appeared in 1.9.4.
+</para>
+</change>
+
+</changes>
+
+
+<changes ver="1.11.1" date="2016-05-31">
+
+<change type="security">
+<para lang="ru">
+при записи тела специально созданного запроса во временный файл
+в рабочем процессе мог происходить segmentation fault
+(CVE-2016-4450);
+ошибка появилась в 1.3.9.
+</para>
+<para lang="en">
+a segmentation fault might occur in a worker process
+while writing a specially crafted request body to a temporary file
+(CVE-2016-4450);
+the bug had appeared in 1.3.9.
+</para>
+</change>
+
+</changes>
+
+
+<changes ver="1.11.0" date="2016-05-24">
+
+<change type="feature">
+<para lang="ru">
+параметр transparent директив proxy_bind, fastcgi_bind,
+memcached_bind, scgi_bind и uwsgi_bind.
+</para>
+<para lang="en">
+the "transparent" parameter of the "proxy_bind", "fastcgi_bind",
+"memcached_bind", "scgi_bind", and "uwsgi_bind" directives.
+</para>
+</change>
+
+<change type="feature">
+<para lang="ru">
+переменная $request_id.
+</para>
+<para lang="en">
+the $request_id variable.
+</para>
+</change>
+
+<change type="feature">
+<para lang="ru">
+директива map поддерживает комбинации нескольких переменных
+в качестве результирующих значений.
+</para>
+<para lang="en">
+the "map" directive supports combinations of multiple variables
+as resulting values.
+</para>
+</change>
+
+<change type="feature">
+<para lang="ru">
+теперь при использовании метода epoll
+nginx проверяет, поддерживает ли ядро события EPOLLRDHUP,
+и соответственно оптимизирует обработку соединений.
+</para>
+<para lang="en">
+now nginx checks if EPOLLRDHUP events are supported by kernel,
+and optimizes connection handling accordingly
+if the "epoll" method is used.
+</para>
+</change>
+
+<change type="feature">
+<para lang="ru">
+директивы ssl_certificate и ssl_certificate_key
+теперь можно указывать несколько раз
+для загрузки сертификатов разных типов (например, RSA и ECDSA).
+</para>
+<para lang="en">
+the "ssl_certificate" and "ssl_certificate_key" directives
+can be specified multiple times
+to load certificates of different types (for example, RSA and ECDSA).
+</para>
+</change>
+
+<change type="feature">
+<para lang="ru">
+при использовании OpenSSL 1.0.2 и новее
+с помощью директивы ssl_ecdh_curve теперь можно задать список кривых;
+по умолчанию используется встроенный в OpenSSL список кривых.
+</para>
+<para lang="en">
+the "ssl_ecdh_curve" directive now allows specifying a list of curves
+when using OpenSSL 1.0.2 or newer;
+by default a list built into OpenSSL is used.
+</para>
+</change>
+
+<change type="change">
+<para lang="ru">
+для использования DHE-шифров теперь надо явно задавать файл параметров
+с помощью директивы ssl_dhparam.
+</para>
+<para lang="en">
+to use DHE ciphers it is now required to specify parameters
+using the "ssl_dhparam" directive.
+</para>
+</change>
+
+<change type="feature">
+<para lang="ru">
+переменная $proxy_protocol_port.
+</para>
+<para lang="en">
+the $proxy_protocol_port variable.
+</para>
+</change>
+
+<change type="feature">
+<para lang="ru">
+переменная $realip_remote_port в модуле ngx_http_realip_module.
+</para>
+<para lang="en">
+the $realip_remote_port variable in the ngx_http_realip_module.
+</para>
+</change>
+
+<change type="feature">
+<para lang="ru">
+модуль ngx_http_realip_module теперь позволяет устанавливать
+не только адрес, но и порт клиента.
+</para>
+<para lang="en">
+the ngx_http_realip_module is now able to set the client port
+in addition to the address.
+</para>
+</change>
+
+<change type="change">
+<para lang="ru">
+при попытке запросить виртуальный сервер,
+отличающийся от согласованного в процессе SSL handshake,
+теперь возвращается ответ "421 Misdirected Request";
+это улучшает совместимость с некоторыми HTTP/2-клиентами
+в случае использования клиентских сертификатов.
+</para>
+<para lang="en">
+the "421 Misdirected Request" response now used
+when rejecting requests to a virtual server
+different from one negotiated during an SSL handshake;
+this improves interoperability with some HTTP/2 clients
+when using client certificates.
+</para>
+</change>
+
+<change type="change">
+<para lang="ru">
+HTTP/2-клиенты теперь могут сразу присылать тело запроса;
+директива http2_body_preread_size позволяет указать размер буфера, который
+будет использоваться до того, как nginx начнёт читать тело.
+</para>
+<para lang="en">
+HTTP/2 clients can now start sending request body immediately;
+the "http2_body_preread_size" directive controls size of the buffer used
+before nginx will start reading client request body.
+</para>
+</change>
+
+<change type="bugfix">
+<para lang="ru">
+при использовании директивы proxy_cache_bypass
+не обновлялись закэшированные ошибочные ответы.
+</para>
+<para lang="en">
+cached error responses were not updated
+when using the "proxy_cache_bypass" directive.
+</para>
+</change>
+
+</changes>
+
+
+<changes ver="1.9.15" date="2016-04-19">
+
+<change type="bugfix">
+<para lang="ru">
+при использовании HHVM в качестве FastCGI-сервера
+могли возникать ошибки "recv() failed".
+</para>
+<para lang="en">
+"recv() failed" errors might occur
+when using HHVM as a FastCGI server.
+</para>
+</change>
+
+<change type="bugfix">
+<para lang="ru">
+при использовании HTTP/2 и директив limit_req или auth_request
+при чтении тела запроса мог произойти таймаут
+или ошибка "client violated flow control";
+ошибка появилась в 1.9.14.
+</para>
+<para lang="en">
+when using HTTP/2 and the "limit_req" or "auth_request" directives
+a timeout or a "client violated flow control" error
+might occur while reading client request body;
+the bug had appeared in 1.9.14.
+</para>
+</change>
+
+<change type="workaround">
+<para lang="ru">
+при использовании HTTP/2 ответ мог не показываться некоторыми браузерами,
+если тело запроса было прочитано не целиком;
+ошибка появилась в 1.9.14.
+</para>
+<para lang="en">
+a response might not be shown by some browsers
+if HTTP/2 was used and client request body was not fully read;
+the bug had appeared in 1.9.14.
+</para>
+</change>
+
+<change type="bugfix">
+<para lang="ru">
+при использовании директивы "aio threads" соединения могли зависать.<br/>
+Спасибо Mindaugas Rasiukevicius.
+</para>
+<para lang="en">
+connections might hang when using the "aio threads" directive.<br/>
+Thanks to Mindaugas Rasiukevicius.
+</para>
+</change>
+
+</changes>
+
+
+<changes ver="1.9.14" date="2016-04-05">
+
+<change type="feature">
+<para lang="ru">
+совместимость с OpenSSL 1.1.0.
+</para>
+<para lang="en">
+OpenSSL 1.1.0 compatibility.
+</para>
+</change>
+
+<change type="feature">
+<para lang="ru">
+директивы proxy_request_buffering, fastcgi_request_buffering,
+scgi_request_buffering и uwsgi_request_buffering
+теперь работают при использовании HTTP/2.
+</para>
+<para lang="en">
+the "proxy_request_buffering", "fastcgi_request_buffering",
+"scgi_request_buffering", and "uwsgi_request_buffering" directives
+now work with HTTP/2.
+</para>
+</change>
+
+<change type="bugfix">
+<para lang="ru">
+при использовании HTTP/2
+в логах могли появляться сообщения "zero size buf in output".
+</para>
+<para lang="en">
+"zero size buf in output" alerts might appear in logs
+when using HTTP/2.
+</para>
+</change>
+
+<change type="bugfix">
+<para lang="ru">
+при использовании HTTP/2
+директива client_max_body_size могла работать неверно.
+</para>
+<para lang="en">
+the "client_max_body_size" directive might work incorrectly
+when using HTTP/2.
+</para>
+</change>
+
+<change type="bugfix">
+<para lang="ru">
+незначительных ошибок логгирования.
+</para>
+<para lang="en">
+of minor bugs in logging.
+</para>
+</change>
+
+</changes>
+
+
+<changes ver="1.9.13" date="2016-03-29">
+
+<change type="change">
+<para lang="ru">
+неидемпотентные запросы (POST, LOCK, PATCH)
+теперь по умолчанию не передаются на другой сервер,
+если запрос уже был отправлен на бэкенд;
+параметр non_idempotent директивы proxy_next_upstream
+явно разрешает повторять такие запросы.
+</para>
+<para lang="en">
+non-idempotent requests (POST, LOCK, PATCH)
+are no longer passed to the next server by default
+if a request has been sent to a backend;
+the "non_idempotent" parameter of the "proxy_next_upstream" directive
+explicitly allows retrying such requests.
+</para>
+</change>
+
+<change type="feature">
+<para lang="ru">
+модуль ngx_http_perl_module теперь можно собрать динамически.
+</para>
+<para lang="en">
+the ngx_http_perl_module can be built dynamically.
+</para>
+</change>
+
+<change type="feature">
+<para lang="ru">
+поддержка UDP в модуле stream.
+</para>
+<para lang="en">
+UDP support in the stream module.
+</para>
+</change>
+
+<change type="feature">
+<para lang="ru">
+директива aio_write.
+</para>
+<para lang="en">
+the "aio_write" directive.
+</para>
+</change>
+
+<change type="feature">
+<para lang="ru">
+теперь cache manager следит за количеством элементов в кэше
+и старается не допускать переполнений зоны разделяемой памяти.
+</para>
+<para lang="en">
+now cache manager monitors number of elements in caches
+and tries to avoid cache keys zone overflows.
+</para>
+</change>
+
+<change type="bugfix">
+<para lang="ru">
+при использовании директив sendfile и aio с подзапросами
+в логах могли появляться сообщения "task already active" и "second aio post".
+</para>
+<para lang="en">
+"task already active" and "second aio post" alerts might appear in logs
+when using the "sendfile" and "aio" directives with subrequests.
+</para>
+</change>
+
+<change type="bugfix">
+<para lang="ru">
+при использовании кэширования
+в логах могли появляться сообщения "zero size buf in output",
+если клиент закрывал соединение преждевременно.
+</para>
+<para lang="en">
+"zero size buf in output" alerts might appear in logs
+if caching was used
+and a client closed a connection prematurely.
+</para>
+</change>
+
+<change type="bugfix">
+<para lang="ru">
+при использовании кэширования
+соединения с клиентами могли закрываться без необходимости.<br/>
+Спасибо Justin Li.
+</para>
+<para lang="en">
+connections with clients might be closed needlessly
+if caching was used.<br/>
+Thanks to Justin Li.
+</para>
+</change>
+
+<change type="bugfix">
+<para lang="ru">
+nginx мог нагружать процессор
+при использовании директивы sendfile на Linux и Solaris,
+если отправляемый файл был изменён в процессе отправки.
+</para>
+<para lang="en">
+nginx might hog CPU
+if the "sendfile" directive was used on Linux or Solaris
+and a file being sent was changed during sending.
+</para>
+</change>
+
+<change type="bugfix">
+<para lang="ru">
+при использовании директив sendfile и "aio threads"
+соединения могли зависать.
+</para>
+<para lang="en">
+connections might hang
+when using the "sendfile" and "aio threads" directives.
+</para>
+</change>
+
+<change type="bugfix">
+<para lang="ru">
+в директивах proxy_pass, fastcgi_pass, scgi_pass и uwsgi_pass
+при использовании переменных.<br/>
+Спасибо Piotr Sikora.
+</para>
+<para lang="en">
+in the "proxy_pass", "fastcgi_pass", "scgi_pass", and "uwsgi_pass" directives
+when using variables.<br/>
+Thanks to Piotr Sikora.
+</para>
+</change>
+
+<change type="bugfix">
+<para lang="ru">
+в модуле ngx_http_sub_filter_module.
+</para>
+<para lang="en">
+in the ngx_http_sub_filter_module.
+</para>
+</change>
+
+<change type="bugfix">
+<para lang="ru">
+если в закэшированном соединении к бэкенду происходила ошибка,
+запрос передавался на другой сервер
+без учёта директивы proxy_next_upstream.
+</para>
+<para lang="en">
+if an error occurred in a cached backend connection,
+the request was passed to the next server
+regardless of the proxy_next_upstream directive.
+</para>
+</change>
+
+<change type="bugfix">
+<para lang="ru">
+ошибки "CreateFile() failed" при создании временных файлов на Windows.
+</para>
+<para lang="en">
+"CreateFile() failed" errors when creating temporary files on Windows.
+</para>
+</change>
+
+</changes>
+
+
+<changes ver="1.9.12" date="2016-02-24">
+
+<change type="feature">
+<para lang="ru">
+кодирование Хаффмана заголовков ответов в HTTP/2.<br/>
+Спасибо Владу Краснову.
+</para>
+<para lang="en">
+Huffman encoding of response headers in HTTP/2.<br/>
+Thanks to Vlad Krasnov.
+</para>
+</change>
+
+<change type="feature">
+<para lang="ru">
+директива worker_cpu_affinity теперь поддерживает более 64 процессоров.
+</para>
+<para lang="en">
+the "worker_cpu_affinity" directive now supports more than 64 CPUs.
+</para>
+</change>
+
+<change type="bugfix">
+<para lang="ru">
+совместимость со сторонними модулями на C++;
+ошибка появилась в 1.9.11.<br/>
+Спасибо Piotr Sikora.
+</para>
+<para lang="en">
+compatibility with 3rd party C++ modules;
+the bug had appeared in 1.9.11.<br/>
+Thanks to Piotr Sikora.
+</para>
+</change>
+
+<change type="bugfix">
+<para lang="ru">
+nginx не собирался статически с OpenSSL на Linux;
+ошибка появилась в 1.9.11.
+</para>
+<para lang="en">
+nginx could not be built statically with OpenSSL on Linux;
+the bug had appeared in 1.9.11.
+</para>
+</change>
+
+<change type="bugfix">
+<para lang="ru">
+директива "add_header ... always" с пустым значением
+не удаляла из заголовков ошибочных ответов
+строки Last-Modified и ETag.
+</para>
+<para lang="en">
+the "add_header ... always" directive with an empty value
+did not delete "Last-Modified" and "ETag" header lines
+from error responses.
+</para>
+</change>
+
+<change type="workaround">
+<para lang="ru">
+при использовании OpenSSL 1.0.2f в логах могли появляться
+сообщения "called a function you should not call" и
+"shutdown while in init".
+</para>
+<para lang="en">
+"called a function you should not call"
+and "shutdown while in init" messages might appear in logs
+when using OpenSSL 1.0.2f.
+</para>
+</change>
+
+<change type="bugfix">
+<para lang="ru">
+ошибочные заголовки могли логгироваться некорректно.
+</para>
+<para lang="en">
+invalid headers might be logged incorrectly.
+</para>
+</change>
+
+<change type="bugfix">
+<para lang="ru">
+утечки сокетов при использовании HTTP/2.
+</para>
+<para lang="en">
+socket leak when using HTTP/2.
+</para>
+</change>
+
+<change type="bugfix">
+<para lang="ru">
+в модуле ngx_http_v2_module.
+</para>
+<para lang="en">
+in the ngx_http_v2_module.
+</para>
+</change>
+
+</changes>
+
+
+<changes ver="1.9.11" date="2016-02-09">
+
+<change type="feature">
+<para lang="ru">
+теперь resolver поддерживает TCP.
+</para>
+<para lang="en">
+TCP support in resolver.
+</para>
+</change>
+
+<change type="feature">
+<para lang="ru">
+динамические модули.
+</para>
+<para lang="en">
+dynamic modules.
+</para>
+</change>
+
+<change type="bugfix">
+<para lang="ru">
+при использовании HTTP/2
+переменная $request_length не учитывала размер заголовков запроса.
+</para>
+<para lang="en">
+the $request_length variable did not include size of request headers
+when using HTTP/2.
+</para>
+</change>
+
+<change type="bugfix">
+<para lang="ru">
+в модуле ngx_http_v2_module.
+</para>
+<para lang="en">
+in the ngx_http_v2_module.
+</para>
+</change>
+
+</changes>
+
+
+<changes ver="1.9.10" date="2016-01-26">
+
+<change type="security">
+<para lang="ru">
+при использовании директивы resolver
+во время обработки ответов DNS-сервера
+могло происходить разыменование некорректного адреса,
+что позволяло атакующему,
+имеющему возможность подделывать UDP-пакеты от DNS-сервера,
+вызвать segmentation fault в рабочем процессе (CVE-2016-0742).
+</para>
+<para lang="en">
+invalid pointer dereference might occur
+during DNS server response processing
+if the "resolver" directive was used,
+allowing an attacker who is able to forge UDP packets from the DNS server
+to cause segmentation fault in a worker process (CVE-2016-0742).
+</para>
+</change>
+
+<change type="security">
+<para lang="ru">
+при использовании директивы resolver
+во время обработки CNAME-записей
+могло произойти обращение к ранее освобождённой памяти,
+что позволяло атакующему,
+имеющему возможность инициировать преобразование произвольных имён в адреса,
+вызвать segmentation fault в рабочем процессе,
+а также потенциально могло иметь другие последствия (CVE-2016-0746).
+</para>
+<para lang="en">
+use-after-free condition might occur
+during CNAME response processing
+if the "resolver" directive was used,
+allowing an attacker who is able to trigger name resolution
+to cause segmentation fault in a worker process,
+or might have potential other impact (CVE-2016-0746).
+</para>
+</change>
+
+<change type="security">
+<para lang="ru">
+при использовании директивы resolver
+во время обработки CNAME-записей
+не во всех случаях проверялось ограничение
+на максимальное количество записей в цепочке,
+что позволяло атакующему,
+имеющему возможность инициировать преобразование произвольных имён в адреса,
+вызвать чрезмерное потребление ресурсов рабочими процессами (CVE-2016-0747).
+</para>
+<para lang="en">
+CNAME resolution was insufficiently limited
+if the "resolver" directive was used,
+allowing an attacker who is able to trigger arbitrary name resolution
+to cause excessive resource consumption in worker processes (CVE-2016-0747).
+</para>
+</change>
+
+<change type="feature">
+<para lang="ru">
+параметр auto директивы worker_cpu_affinity.
+</para>
+<para lang="en">
+the "auto" parameter of the "worker_cpu_affinity" directive.
+</para>
+</change>
+
+<change type="bugfix">
+<para lang="ru">
+параметр proxy_protocol директивы listen не работал
+с IPv6 listen-сокетами.
+</para>
+<para lang="en">
+the "proxy_protocol" parameter of the "listen" directive did not work
+with IPv6 listen sockets.
+</para>
+</change>
+
+<change type="bugfix">
+<para lang="ru">
+при использовании директивы keepalive
+соединения к бэкендам могли кэшироваться некорректно.
+</para>
+<para lang="en">
+connections to upstream servers might be cached incorrectly
+when using the "keepalive" directive.
+</para>
+</change>
+
+<change type="bugfix">
+<par