passenger 4.0.59 → 4.0.60
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of passenger might be problematic. Click here for more details.
- checksums.yaml +8 -8
- checksums.yaml.gz.asc +7 -7
- data.tar.gz.asc +7 -7
- data/CHANGELOG +15 -0
- data/bin/passenger-install-apache2-module +2 -1
- data/bin/passenger-install-nginx-module +8 -2
- data/ext/apache2/Hooks.cpp +21 -2
- data/ext/apache2/MergeDirConfig.cpp +40 -40
- data/ext/common/ApplicationPool2/Group.h +14 -10
- data/ext/common/ApplicationPool2/Implementation.cpp +13 -7
- data/ext/common/ApplicationPool2/SmartSpawner.h +4 -1
- data/ext/common/Constants.h +1 -1
- data/ext/nginx/ContentHandler.c +17 -1
- data/lib/phusion_passenger.rb +4 -5
- data/lib/phusion_passenger/platform_info/depcheck_specs/libs.rb +4 -3
- data/lib/phusion_passenger/platform_info/openssl.rb +61 -0
- data/lib/phusion_passenger/standalone/runtime_installer.rb +27 -22
- data/packaging/debian/LICENSE.md +19 -0
- data/packaging/debian/README.md +320 -0
- data/packaging/debian/Vagrantfile +25 -0
- data/packaging/debian/build +210 -0
- data/packaging/debian/debian_specs/nginx/changelog +1989 -0
- data/packaging/debian/debian_specs/nginx/compat.erb +5 -0
- data/packaging/debian/debian_specs/nginx/conf/fastcgi.conf +25 -0
- data/packaging/debian/debian_specs/nginx/conf/fastcgi_params +24 -0
- data/packaging/debian/debian_specs/nginx/conf/koi-utf +109 -0
- data/packaging/debian/debian_specs/nginx/conf/koi-win +103 -0
- data/packaging/debian/debian_specs/nginx/conf/mime.types +89 -0
- data/packaging/debian/debian_specs/nginx/conf/nginx.conf.erb +97 -0
- data/packaging/debian/debian_specs/nginx/conf/proxy_params +4 -0
- data/packaging/debian/debian_specs/nginx/conf/scgi_params +16 -0
- data/packaging/debian/debian_specs/nginx/conf/sites-available/default.erb +93 -0
- data/packaging/debian/debian_specs/nginx/conf/snippets/fastcgi-php.conf +13 -0
- data/packaging/debian/debian_specs/nginx/conf/snippets/snakeoil.conf +5 -0
- data/packaging/debian/debian_specs/nginx/conf/uwsgi_params +16 -0
- data/packaging/debian/debian_specs/nginx/conf/win-utf +125 -0
- data/packaging/debian/debian_specs/nginx/control.erb +226 -0
- data/packaging/debian/debian_specs/nginx/copyright +196 -0
- data/packaging/debian/debian_specs/nginx/debian-full.lintian-overrides +1 -0
- data/packaging/debian/debian_specs/nginx/gbp.conf +2 -0
- data/packaging/debian/debian_specs/nginx/help/docs/fcgiwrap +14 -0
- data/packaging/debian/debian_specs/nginx/help/docs/php +119 -0
- data/packaging/debian/debian_specs/nginx/help/docs/support-irc +28 -0
- data/packaging/debian/debian_specs/nginx/help/docs/upstream +51 -0
- data/packaging/debian/debian_specs/nginx/help/examples/drupal +114 -0
- data/packaging/debian/debian_specs/nginx/help/examples/http +59 -0
- data/packaging/debian/debian_specs/nginx/help/examples/mail +30 -0
- data/packaging/debian/debian_specs/nginx/help/examples/mailman +59 -0
- data/packaging/debian/debian_specs/nginx/help/examples/nginx.conf +34 -0
- data/packaging/debian/debian_specs/nginx/help/examples/nginx_modsite +162 -0
- data/packaging/debian/debian_specs/nginx/help/examples/virtual_hosts +155 -0
- data/packaging/debian/debian_specs/nginx/help/examples/wordpress +74 -0
- data/packaging/debian/debian_specs/nginx/helpers.rb +41 -0
- data/packaging/debian/debian_specs/nginx/index-debian.html.in +32 -0
- data/packaging/debian/debian_specs/nginx/index-ubuntu.html.in +32 -0
- data/packaging/debian/debian_specs/nginx/index.html.erb +10 -0
- data/packaging/debian/debian_specs/nginx/modules/README.Modules-versions +65 -0
- data/packaging/debian/debian_specs/nginx/modules/headers-more-nginx-module/README.markdown +510 -0
- data/packaging/debian/debian_specs/nginx/modules/headers-more-nginx-module/config +5 -0
- data/packaging/debian/debian_specs/nginx/modules/headers-more-nginx-module/doc/HttpHeadersMoreModule.wiki +395 -0
- data/packaging/debian/debian_specs/nginx/modules/headers-more-nginx-module/src/ddebug.h +119 -0
- data/packaging/debian/debian_specs/nginx/modules/headers-more-nginx-module/src/ngx_http_headers_more_filter_module.c +348 -0
- data/packaging/debian/debian_specs/nginx/modules/headers-more-nginx-module/src/ngx_http_headers_more_filter_module.h +80 -0
- data/packaging/debian/debian_specs/nginx/modules/headers-more-nginx-module/src/ngx_http_headers_more_headers_in.c +826 -0
- data/packaging/debian/debian_specs/nginx/modules/headers-more-nginx-module/src/ngx_http_headers_more_headers_in.h +26 -0
- data/packaging/debian/debian_specs/nginx/modules/headers-more-nginx-module/src/ngx_http_headers_more_headers_out.c +716 -0
- data/packaging/debian/debian_specs/nginx/modules/headers-more-nginx-module/src/ngx_http_headers_more_headers_out.h +26 -0
- data/packaging/debian/debian_specs/nginx/modules/headers-more-nginx-module/src/ngx_http_headers_more_util.c +380 -0
- data/packaging/debian/debian_specs/nginx/modules/headers-more-nginx-module/src/ngx_http_headers_more_util.h +52 -0
- data/packaging/debian/debian_specs/nginx/modules/headers-more-nginx-module/util/build.sh +32 -0
- data/packaging/debian/debian_specs/nginx/modules/headers-more-nginx-module/valgrind.suppress +215 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-auth-pam/ChangeLog +35 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-auth-pam/LICENSE +25 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-auth-pam/README.md +93 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-auth-pam/config +4 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-auth-pam/ngx_http_auth_pam_module.c +462 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-cache-purge/CHANGES +66 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-cache-purge/LICENSE +26 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-cache-purge/README.md +171 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-cache-purge/TODO.md +7 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-cache-purge/config +21 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-cache-purge/ngx_cache_purge_module.c +1803 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-dav-ext-module/README +29 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-dav-ext-module/config +9 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-dav-ext-module/ngx_http_dav_ext_module.c +824 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/README +139 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/README_AUTO_LIB +395 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/TODO +1 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/actions/array +10 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/actions/palloc +8 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/build +597 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/data/action_replacements +5 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/data/action_types +12 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/data/conf_args +22 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/data/conf_locs +25 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/data/conf_macros +35 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/data/contexts +22 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/data/header_files +3 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/data/headers +4 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/data/module_dependencies +5 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/data/modules_optional +15 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/data/prefixes +2 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/src/array.h +7 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/src/conf_cmd_basic.h +43 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/src/conf_merge.h +78 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/src/palloc.h +6 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/text/autogen +12 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/config +49 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/docs/core/action_macros +63 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/docs/core/conf_cmds +62 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/docs/modules/set_var +124 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/docs/patches/more_logging_info +48 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/docs/upstream/list +45 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/examples/README +12 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/examples/http/set_var/config +4 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/examples/http/set_var/ngx_http_set_var_examples_module.c +136 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/ngx_auto_lib_core +797 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/notes/CHANGES +17 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/notes/LICENSE +24 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/objs/ndk_array.h +113 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/objs/ndk_conf_cmd_basic.h +2203 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/objs/ndk_conf_cmd_extra.h +5423 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/objs/ndk_conf_merge.h +227 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/objs/ndk_config.c +72 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/objs/ndk_config.h +98 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/objs/ndk_includes.h +66 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/objs/ndk_palloc.h +112 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/patches/auto_config +16 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/patches/expose_rewrite_functions +291 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/patches/rewrite_phase_handler +19 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/hash/md5.h +117 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/hash/murmurhash2.c +77 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/hash/sha.h +200 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk.c +155 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk.h +58 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_buf.c +43 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_buf.h +5 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_complex_path.c +129 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_complex_path.h +30 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_complex_value.c +192 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_complex_value.h +21 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_conf_file.c +396 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_conf_file.h +44 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_debug.c +72 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_debug.h +171 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_encoding.c +57 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_encoding.h +12 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_hash.c +82 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_hash.h +45 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_http.c +138 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_http.h +3 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_http_headers.h +35 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_log.c +3 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_log.h +165 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_parse.h +67 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_path.c +583 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_path.h +22 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_process.c +20 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_process.h +12 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_regex.c +215 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_regex.h +7 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_rewrite.c +103 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_rewrite.h +26 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_set_var.c +602 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_set_var.h +44 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_string.c +434 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_string.h +37 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_string_util.h +14 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_upstream_list.c +205 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_upstream_list.h +27 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_uri.c +45 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_uri.h +6 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-echo/LICENSE +25 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-echo/README.markdown +1850 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-echo/config +5 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-echo/doc/HttpEchoModule.wiki +1558 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ddebug.h +109 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_echo.c +344 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_echo.h +25 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_filter.c +282 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_filter.h +15 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_foreach.c +183 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_foreach.h +16 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_handler.c +429 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_handler.h +18 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_location.c +178 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_location.h +13 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_module.c +667 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_module.h +137 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_request_info.c +452 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_request_info.h +31 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_sleep.c +208 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_sleep.h +16 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_subrequest.c +788 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_subrequest.h +19 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_timer.c +96 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_timer.h +13 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_util.c +298 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_util.h +58 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_var.c +110 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_var.h +9 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-echo/util/build.sh +45 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-echo/util/releng +8 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-echo/util/wiki2pod.pl +131 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-echo/valgrind.suppress +38 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/LICENCE +24 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/README +206 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/changelog.txt +54 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/config +26 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/protocol.txt +191 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/ngx_http_push_defs.c +59 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/ngx_http_push_defs.h +73 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/ngx_http_push_module.c +783 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/ngx_http_push_module.h +31 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/ngx_http_push_module_setup.c +361 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/ngx_http_push_types.h +120 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/store/memory/store.c +1180 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/store/memory/store.h +1 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/store/ngx_http_push_module_ipc.c +146 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/store/ngx_http_push_module_ipc.h +5 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/store/ngx_http_push_store.h +51 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/store/ngx_rwlock.c +178 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/store/ngx_rwlock.h +5 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/store/rbtree_util.c +246 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/store/rbtree_util.h +9 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/Changes +51 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/README.markdown +6954 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/config +363 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/doc/HttpLuaModule.wiki +5898 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/dtrace/ngx_lua_provider.d +61 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/misc/recv-until-pm/Makefile +3 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/misc/recv-until-pm/lib/RecvUntil.pm +138 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/misc/recv-until-pm/t/sanity.t +140 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/api/ngx_http_lua_api.h +52 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ddebug.h +82 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_accessby.c +377 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_accessby.h +22 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_api.c +77 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_args.c +537 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_args.h +20 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_bodyfilterby.c +632 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_bodyfilterby.h +31 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_cache.c +296 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_cache.h +24 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_capturefilter.c +175 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_capturefilter.h +20 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_clfactory.c +887 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_clfactory.h +22 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_common.h +478 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_config.c +67 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_config.h +19 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_consts.c +148 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_consts.h +20 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_contentby.c +369 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_contentby.h +26 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_control.c +483 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_control.h +20 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_coroutine.c +379 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_coroutine.h +23 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_ctx.c +216 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_ctx.h +23 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_directive.c +1081 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_directive.h +56 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_exception.c +58 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_exception.h +33 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_headerfilterby.c +302 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_headerfilterby.h +29 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_headers.c +1370 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_headers.h +22 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_headers_in.c +782 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_headers_in.h +22 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_headers_out.c +625 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_headers_out.h +23 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_initby.c +42 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_initby.h +23 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_initworkerby.c +320 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_initworkerby.h +25 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_log.c +300 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_log.h +20 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_logby.c +227 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_logby.h +22 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_misc.c +252 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_misc.h +20 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_module.c +924 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_ndk.c +184 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_ndk.h +21 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_output.c +794 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_output.h +28 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_pcrefix.c +106 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_pcrefix.h +23 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_phase.c +94 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_phase.h +13 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_probe.h +85 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_regex.c +2468 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_regex.h +22 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_req_body.c +1169 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_req_body.h +20 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_req_method.c +252 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_req_method.h +19 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_rewriteby.c +351 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_rewriteby.h +22 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_script.c +538 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_script.h +86 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_setby.c +216 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_setby.h +15 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_shdict.c +1844 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_shdict.h +52 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_sleep.c +191 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_sleep.h +20 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_socket_tcp.c +5314 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_socket_tcp.h +156 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_socket_udp.c +1624 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_socket_udp.h +56 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_string.c +704 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_string.h +20 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_subrequest.c +1741 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_subrequest.h +46 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_time.c +278 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_time.h +21 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_timer.c +661 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_timer.h +20 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_uri.c +110 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_uri.h +20 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_uthread.c +283 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_uthread.h +36 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_util.c +3972 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_util.h +423 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_variable.c +499 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_variable.h +20 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_worker.c +64 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_worker.h +17 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/tapset/ngx_lua.stp +5 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/util/build.sh +39 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/util/build2.sh +55 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/util/fix-comments +27 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/util/gdbinit +415 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/util/ngx-links +62 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/util/reindex +64 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/util/releng +8 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/util/retab +8 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/util/revim +102 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/util/run_test.sh +10 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/util/update-readme.sh +4 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-lua/valgrind.suppress +144 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-upload-progress/CHANGES +107 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-upload-progress/LICENSE +25 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-upload-progress/Makefile +8 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-upload-progress/README +329 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-upload-progress/config +3 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-upload-progress/ngx_http_uploadprogress_module.c +1774 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-upstream-fair/README +53 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-upstream-fair/config +3 -0
- data/packaging/debian/debian_specs/nginx/modules/nginx-upstream-fair/ngx_http_upstream_fair_module.c +1356 -0
- data/packaging/debian/debian_specs/nginx/modules/ngx-fancyindex/CHANGELOG.md +37 -0
- data/packaging/debian/debian_specs/nginx/modules/ngx-fancyindex/HACKING.md +24 -0
- data/packaging/debian/debian_specs/nginx/modules/ngx-fancyindex/LICENSE +20 -0
- data/packaging/debian/debian_specs/nginx/modules/ngx-fancyindex/README.rst +182 -0
- data/packaging/debian/debian_specs/nginx/modules/ngx-fancyindex/config +8 -0
- data/packaging/debian/debian_specs/nginx/modules/ngx-fancyindex/nginx-0.6-support.patch +23 -0
- data/packaging/debian/debian_specs/nginx/modules/ngx-fancyindex/ngx_http_fancyindex_module.c +1305 -0
- data/packaging/debian/debian_specs/nginx/modules/ngx-fancyindex/template.awk +52 -0
- data/packaging/debian/debian_specs/nginx/modules/ngx-fancyindex/template.h +103 -0
- data/packaging/debian/debian_specs/nginx/modules/ngx-fancyindex/template.html +102 -0
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/CHANGES +37 -0
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/README +141 -0
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/config +3 -0
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/doc/README.google_code_home_page.wiki +120 -0
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/doc/README.html +199 -0
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/doc/README.wiki +123 -0
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/ngx_http_subs_filter_module.c +1298 -0
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/README +275 -0
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Module/AutoInstall.pm +820 -0
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Module/Install.pm +470 -0
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Module/Install/AutoInstall.pm +82 -0
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Module/Install/Base.pm +83 -0
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Module/Install/Can.pm +81 -0
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Module/Install/Fetch.pm +93 -0
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Module/Install/Include.pm +34 -0
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Module/Install/Makefile.pm +415 -0
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Module/Install/Metadata.pm +716 -0
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Module/Install/TestBase.pm +29 -0
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Module/Install/Win32.pm +64 -0
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Module/Install/WriteAll.pm +63 -0
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Spiffy.pm +539 -0
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Test/Base.pm +682 -0
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Test/Base/Filter.pm +341 -0
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Test/Builder.pm +1413 -0
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Test/Builder/Module.pm +81 -0
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Test/More.pm +735 -0
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/lib/Test/Nginx.pm +315 -0
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/lib/Test/Nginx/LWP.pm +524 -0
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/lib/Test/Nginx/Socket.pm +1749 -0
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/lib/Test/Nginx/Util.pm +874 -0
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/t/subs.t +136 -0
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/t/subs_capture.t +32 -0
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/t/subs_fix_string.t +32 -0
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/t/subs_regex.t +108 -0
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/t/subs_types.t +59 -0
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/test.sh +5 -0
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/util/update-readme.sh +7 -0
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/util/wiki2google_code_homepage.pl +29 -0
- data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/util/wiki2pod.pl +129 -0
- data/packaging/debian/debian_specs/nginx/nginx-common.NEWS +135 -0
- data/packaging/debian/debian_specs/nginx/nginx-common.README.Debian +45 -0
- data/packaging/debian/debian_specs/nginx/nginx-common.dirs.erb +32 -0
- data/packaging/debian/debian_specs/nginx/nginx-common.install +3 -0
- data/packaging/debian/debian_specs/nginx/nginx-common.lintian-overrides +2 -0
- data/packaging/debian/debian_specs/nginx/nginx-common.manpages +1 -0
- data/packaging/debian/debian_specs/nginx/nginx-common.nginx.default +10 -0
- data/packaging/debian/debian_specs/nginx/nginx-common.nginx.init.erb +214 -0
- data/packaging/debian/debian_specs/nginx/nginx-common.nginx.logrotate +18 -0
- data/packaging/debian/debian_specs/nginx/nginx-common.nginx.service.erb +37 -0
- data/packaging/debian/debian_specs/nginx/nginx-common.postinst.erb +66 -0
- data/packaging/debian/debian_specs/nginx/nginx-common.postrm.erb +46 -0
- data/packaging/debian/debian_specs/nginx/nginx-common.preinst +47 -0
- data/packaging/debian/debian_specs/nginx/nginx-common.prerm.erb +28 -0
- data/packaging/debian/debian_specs/nginx/nginx-doc.docs +2 -0
- data/packaging/debian/debian_specs/nginx/nginx-doc.examples +1 -0
- data/packaging/debian/debian_specs/nginx/nginx-extras.install.erb +17 -0
- data/packaging/debian/debian_specs/nginx/nginx-extras.lintian-overrides +1 -0
- data/packaging/debian/debian_specs/nginx/nginx-extras.postinst.erb +44 -0
- data/packaging/debian/debian_specs/nginx/nginx-extras.prerm +22 -0
- data/packaging/debian/debian_specs/nginx/nginx.1 +47 -0
- data/packaging/debian/debian_specs/nginx/patches/perl-use-dpkg-buildflags.patch +23 -0
- data/packaging/debian/debian_specs/nginx/patches/series +1 -0
- data/packaging/debian/debian_specs/nginx/rules.erb +185 -0
- data/packaging/debian/debian_specs/nginx/source/format +1 -0
- data/packaging/debian/debian_specs/nginx/tests/control +4 -0
- data/packaging/debian/debian_specs/nginx/ufw/nginx +14 -0
- data/packaging/debian/debian_specs/nginx/upstream/signing-key.asc +34 -0
- data/packaging/debian/debian_specs/nginx/watch +3 -0
- data/packaging/debian/debian_specs/passenger/README.Debian +12 -0
- data/packaging/debian/debian_specs/passenger/changelog +316 -0
- data/packaging/debian/debian_specs/passenger/compat +1 -0
- data/packaging/debian/debian_specs/passenger/control.erb +123 -0
- data/packaging/debian/debian_specs/passenger/copyright +385 -0
- data/packaging/debian/debian_specs/passenger/helpers.rb +24 -0
- data/packaging/debian/debian_specs/passenger/libapache2-mod-passenger.install +3 -0
- data/packaging/debian/debian_specs/passenger/libapache2-mod-passenger.postinst +36 -0
- data/packaging/debian/debian_specs/passenger/libapache2-mod-passenger.prerm +15 -0
- data/packaging/debian/debian_specs/passenger/locations.ini.erb +14 -0
- data/packaging/debian/debian_specs/passenger/passenger-dev.install.erb +3 -0
- data/packaging/debian/debian_specs/passenger/passenger-doc.install.erb +2 -0
- data/packaging/debian/debian_specs/passenger/passenger.conf +6 -0
- data/packaging/debian/debian_specs/passenger/passenger.docs +4 -0
- data/packaging/debian/debian_specs/passenger/passenger.install.erb +16 -0
- data/packaging/debian/debian_specs/passenger/passenger.load +3 -0
- data/packaging/debian/debian_specs/passenger/passenger.manpages +3 -0
- data/packaging/debian/debian_specs/passenger/passenger_free_ruby.c +29 -0
- data/packaging/debian/debian_specs/passenger/passenger_ruby_utils.c +54 -0
- data/packaging/debian/debian_specs/passenger/passenger_system_ruby.c.erb +37 -0
- data/packaging/debian/debian_specs/passenger/patches/series +0 -0
- data/packaging/debian/debian_specs/passenger/rules.erb +84 -0
- data/packaging/debian/debian_specs/passenger/source/format +1 -0
- data/packaging/debian/debian_specs/passenger_enterprise/README.Debian +12 -0
- data/packaging/debian/debian_specs/passenger_enterprise/changelog +316 -0
- data/packaging/debian/debian_specs/passenger_enterprise/compat +1 -0
- data/packaging/debian/debian_specs/passenger_enterprise/control.erb +123 -0
- data/packaging/debian/debian_specs/passenger_enterprise/copyright +385 -0
- data/packaging/debian/debian_specs/passenger_enterprise/helpers.rb +2 -0
- data/packaging/debian/debian_specs/passenger_enterprise/libapache2-mod-passenger-enterprise.install +3 -0
- data/packaging/debian/debian_specs/passenger_enterprise/libapache2-mod-passenger-enterprise.postinst +36 -0
- data/packaging/debian/debian_specs/passenger_enterprise/libapache2-mod-passenger-enterprise.prerm +15 -0
- data/packaging/debian/debian_specs/passenger_enterprise/locations.ini.erb +14 -0
- data/packaging/debian/debian_specs/passenger_enterprise/passenger-enterprise-dev.install.erb +3 -0
- data/packaging/debian/debian_specs/passenger_enterprise/passenger-enterprise-doc.install.erb +2 -0
- data/packaging/debian/debian_specs/passenger_enterprise/passenger-enterprise.docs +4 -0
- data/packaging/debian/debian_specs/passenger_enterprise/passenger-enterprise.install.erb +14 -0
- data/packaging/debian/debian_specs/passenger_enterprise/passenger-enterprise.manpages +3 -0
- data/packaging/debian/debian_specs/passenger_enterprise/passenger.conf +6 -0
- data/packaging/debian/debian_specs/passenger_enterprise/passenger.load +3 -0
- data/packaging/debian/debian_specs/passenger_enterprise/passenger_free_ruby.c.erb +1 -0
- data/packaging/debian/debian_specs/passenger_enterprise/passenger_ruby_utils.c.erb +1 -0
- data/packaging/debian/debian_specs/passenger_enterprise/passenger_system_ruby.c.erb +1 -0
- data/packaging/debian/debian_specs/passenger_enterprise/patches/series +0 -0
- data/packaging/debian/debian_specs/passenger_enterprise/rules.erb +84 -0
- data/packaging/debian/debian_specs/passenger_enterprise/source/format +1 -0
- data/packaging/debian/docker_images/Makefile +38 -0
- data/packaging/debian/docker_images/buildbox/CONTAINER_VERSION.txt +0 -0
- data/packaging/debian/docker_images/buildbox/Dockerfile +3 -0
- data/packaging/debian/docker_images/buildbox/Gemfile +9 -0
- data/packaging/debian/docker_images/buildbox/Gemfile.lock +42 -0
- data/packaging/debian/docker_images/buildbox/install.sh +85 -0
- data/packaging/debian/docker_images/buildbox/pbuilderrc +4 -0
- data/packaging/debian/docker_images/buildbox/sudoers.conf +6 -0
- data/packaging/debian/docker_images/setup-buildbox-docker-image +7 -0
- data/packaging/debian/docker_images/setup-testbox-docker-image-debian-6 +7 -0
- data/packaging/debian/docker_images/setup-testbox-docker-image-debian-7 +7 -0
- data/packaging/debian/docker_images/setup-testbox-docker-image-debian-8 +7 -0
- data/packaging/debian/docker_images/setup-testbox-docker-image-ubuntu-12.04 +7 -0
- data/packaging/debian/docker_images/setup-testbox-docker-image-ubuntu-14.04 +7 -0
- data/packaging/debian/docker_images/setup-testbox-docker-image-ubuntu-15.04 +7 -0
- data/packaging/debian/docker_images/setup-testbox-docker-image-ubuntu-15.10 +7 -0
- data/packaging/debian/docker_images/testbox-debian-6/Dockerfile +3 -0
- data/packaging/debian/docker_images/testbox-debian-6/Gemfile +2 -0
- data/packaging/debian/docker_images/testbox-debian-6/Gemfile.lock +23 -0
- data/packaging/debian/docker_images/testbox-debian-6/argparse.py +2374 -0
- data/packaging/debian/docker_images/testbox-debian-6/install.sh +78 -0
- data/packaging/debian/docker_images/testbox-debian-7/Dockerfile +3 -0
- data/packaging/debian/docker_images/testbox-debian-7/Gemfile +2 -0
- data/packaging/debian/docker_images/testbox-debian-7/Gemfile.lock +23 -0
- data/packaging/debian/docker_images/testbox-debian-7/install.sh +71 -0
- data/packaging/debian/docker_images/testbox-debian-8/Dockerfile +3 -0
- data/packaging/debian/docker_images/testbox-debian-8/Gemfile +2 -0
- data/packaging/debian/docker_images/testbox-debian-8/Gemfile.lock +23 -0
- data/packaging/debian/docker_images/testbox-debian-8/install.sh +70 -0
- data/packaging/debian/docker_images/testbox-ubuntu-12.04/Dockerfile +3 -0
- data/packaging/debian/docker_images/testbox-ubuntu-12.04/Gemfile +2 -0
- data/packaging/debian/docker_images/testbox-ubuntu-12.04/Gemfile.lock +23 -0
- data/packaging/debian/docker_images/testbox-ubuntu-12.04/install.sh +69 -0
- data/packaging/debian/docker_images/testbox-ubuntu-14.04/Dockerfile +3 -0
- data/packaging/debian/docker_images/testbox-ubuntu-14.04/Gemfile +2 -0
- data/packaging/debian/docker_images/testbox-ubuntu-14.04/Gemfile.lock +23 -0
- data/packaging/debian/docker_images/testbox-ubuntu-14.04/install.sh +69 -0
- data/packaging/debian/docker_images/testbox-ubuntu-15.04/Dockerfile +3 -0
- data/packaging/debian/docker_images/testbox-ubuntu-15.04/Gemfile +2 -0
- data/packaging/debian/docker_images/testbox-ubuntu-15.04/Gemfile.lock +23 -0
- data/packaging/debian/docker_images/testbox-ubuntu-15.04/install.sh +69 -0
- data/packaging/debian/docker_images/testbox-ubuntu-15.10/Dockerfile +3 -0
- data/packaging/debian/docker_images/testbox-ubuntu-15.10/Gemfile +2 -0
- data/packaging/debian/docker_images/testbox-ubuntu-15.10/Gemfile.lock +23 -0
- data/packaging/debian/docker_images/testbox-ubuntu-15.10/install.sh +69 -0
- data/packaging/debian/internal/build/Rakefile +235 -0
- data/packaging/debian/internal/build/build-passenger-orig-tarball.sh +76 -0
- data/packaging/debian/internal/build/build-source-package.rb +121 -0
- data/packaging/debian/internal/build/download-nginx-orig-tarball.sh +17 -0
- data/packaging/debian/internal/build/rakefile_support.rb +96 -0
- data/packaging/debian/internal/build/setup-environment-essentials.sh +15 -0
- data/packaging/debian/internal/build/setup-environment.sh +29 -0
- data/packaging/debian/internal/lib/distro_info.rb +82 -0
- data/packaging/debian/internal/lib/distro_info.sh +303 -0
- data/packaging/debian/internal/lib/distro_info.sh.erb +65 -0
- data/packaging/debian/internal/lib/library.sh +83 -0
- data/packaging/debian/internal/lib/preprocessor.rb +173 -0
- data/packaging/debian/internal/lib/tracking.rb +95 -0
- data/packaging/debian/internal/lib/tracking_category.rb +45 -0
- data/packaging/debian/internal/lib/tracking_database.rb +132 -0
- data/packaging/debian/internal/lib/tracking_task.rb +148 -0
- data/packaging/debian/internal/lib/utils.rb +78 -0
- data/packaging/debian/internal/publish/Rakefile +97 -0
- data/packaging/debian/internal/publish/oss-binaries.phusionpassenger.com-fingerprint.txt +1 -0
- data/packaging/debian/internal/publish/packagecloud_fingerprint.txt +1 -0
- data/packaging/debian/internal/publish/passenger_website_fingerprint.txt +1 -0
- data/packaging/debian/internal/publish/preinit.sh +7 -0
- data/packaging/debian/internal/publish/rakefile_support.rb +183 -0
- data/packaging/debian/internal/scripts/gpg_noninteractive/gpg +11 -0
- data/packaging/debian/internal/scripts/initccache.sh +35 -0
- data/packaging/debian/internal/scripts/inituidgid.sh +19 -0
- data/packaging/debian/internal/scripts/my_init +340 -0
- data/packaging/debian/internal/scripts/pin_certificates +34 -0
- data/packaging/debian/internal/scripts/regen_distro_info_script.sh +3 -0
- data/packaging/debian/internal/scripts/setup-vagrant.sh +12 -0
- data/packaging/debian/internal/scripts/setuser +31 -0
- data/packaging/debian/internal/shell/initpbuilder.sh +3 -0
- data/packaging/debian/internal/shell/preinit.sh +28 -0
- data/packaging/debian/internal/shell/sudoers.conf +1 -0
- data/packaging/debian/internal/test/apache/apache-24.conf +5 -0
- data/packaging/debian/internal/test/apache/apache-pre-24.conf +4 -0
- data/packaging/debian/internal/test/apache/vhost.conf +17 -0
- data/packaging/debian/internal/test/misc/config.json +15 -0
- data/packaging/debian/internal/test/misc/hosts.conf +4 -0
- data/packaging/debian/internal/test/misc/init.sh +25 -0
- data/packaging/debian/internal/test/misc/nodejs_test_app.js +6 -0
- data/packaging/debian/internal/test/misc/python_test_app.py +3 -0
- data/packaging/debian/internal/test/misc/ruby_test_app.rb +5 -0
- data/packaging/debian/internal/test/misc/test_support.rb +61 -0
- data/packaging/debian/internal/test/nginx/vhost.conf +23 -0
- data/packaging/debian/internal/test/system_web_server_test.rb +126 -0
- data/packaging/debian/internal/test/test.sh +141 -0
- data/packaging/debian/jenkins/publish/clear_caches.rb +48 -0
- data/packaging/debian/jenkins/publish/publish.sh +69 -0
- data/packaging/debian/jenkins/test/test.sh +63 -0
- data/packaging/debian/passenger_apt_automation.sublime-project +14 -0
- data/packaging/debian/publish +172 -0
- data/packaging/debian/shell +116 -0
- data/packaging/debian/test +142 -0
- metadata +563 -3
- metadata.gz.asc +7 -7
- data/resources/oss-binaries.phusionpassenger.com.crt +0 -208
@@ -0,0 +1,66 @@
|
|
1
|
+
2014-12-23 VERSION 2.3
|
2
|
+
* Fix compatibility with nginx-1.7.9+.
|
3
|
+
|
4
|
+
2014-12-02 VERSION 2.2
|
5
|
+
* Fix compatibility with nginx-1.7.8+.
|
6
|
+
|
7
|
+
2014-05-19
|
8
|
+
* Fix build on Solaris with SunCC (Solaris Studio).
|
9
|
+
Reported by Jussi Sallinen.
|
10
|
+
|
11
|
+
2013-03-19 VERSION 2.1
|
12
|
+
* When enabled, cache purge will now catch all requests with
|
13
|
+
PURGE (or specified) method, even if cache isn't configured.
|
14
|
+
Previously, it would pass such requests to the upstream.
|
15
|
+
|
16
|
+
2012-12-07 VERSION 2.0
|
17
|
+
* Add alternative "same location" syntax.
|
18
|
+
From CloudFlare.
|
19
|
+
|
20
|
+
2012-07-02 VERSION 1.6
|
21
|
+
* Fix compatibility with nginx-1.3.2+.
|
22
|
+
Reported by MagicBear, patch from Ruslan Ermilov.
|
23
|
+
|
24
|
+
2011-12-20 VERSION 1.5
|
25
|
+
* Fix on-disk cache size calculation.
|
26
|
+
Since the initial release, recorded on-disk cache size was
|
27
|
+
decreased twice for purged content (once during cache purge
|
28
|
+
and once during subsequent cache update).
|
29
|
+
This resulted in recorded on-disk cache size being much
|
30
|
+
smaller than in reality, which could lead to on-disk cache
|
31
|
+
outgrowing defined "max_size" parameter.
|
32
|
+
Patch from Pyry Hakulinen.
|
33
|
+
|
34
|
+
2011-10-05 VERSION 1.4
|
35
|
+
* Add AIO support.
|
36
|
+
Requested by Emin Hasanov.
|
37
|
+
|
38
|
+
2011-05-03 VERSION 1.3
|
39
|
+
* Fix compatibility with nginx-1.0.1.
|
40
|
+
Reported by Sergey A. Osokin and Markus Linnala.
|
41
|
+
|
42
|
+
2010-08-29
|
43
|
+
* Fix compatibility with nginx-0.8.0 and versions older than
|
44
|
+
nginx-0.7.60.
|
45
|
+
|
46
|
+
2010-08-11 VERSION 1.2
|
47
|
+
* Fix various build scenarios with disabled upstream modules.
|
48
|
+
Reported by Johan Bergstroem.
|
49
|
+
|
50
|
+
* Add ability to purge content from SCGI's cache.
|
51
|
+
Requested by Johan Bergstroem.
|
52
|
+
|
53
|
+
2010-06-08 VERSION 1.1
|
54
|
+
* Fix compatibility with nginx-0.8.40+.
|
55
|
+
|
56
|
+
* Add ability to purge content from uWSGI's cache.
|
57
|
+
|
58
|
+
2010-01-10 VERSION 1.0
|
59
|
+
* Initial module release.
|
60
|
+
|
61
|
+
2009-11-17
|
62
|
+
* Fix patch compatibility with nginx-0.8.11+.
|
63
|
+
Reported by Bing Ran.
|
64
|
+
|
65
|
+
2009-08-11
|
66
|
+
* Initial patch release.
|
@@ -0,0 +1,26 @@
|
|
1
|
+
Copyright (c) 2009-2014, FRiCKLE <info@frickle.com>
|
2
|
+
Copyright (c) 2009-2014, Piotr Sikora <piotr.sikora@frickle.com>
|
3
|
+
All rights reserved.
|
4
|
+
|
5
|
+
This project was fully funded by yo.se.
|
6
|
+
|
7
|
+
Redistribution and use in source and binary forms, with or without
|
8
|
+
modification, are permitted provided that the following conditions
|
9
|
+
are met:
|
10
|
+
1. Redistributions of source code must retain the above copyright
|
11
|
+
notice, this list of conditions and the following disclaimer.
|
12
|
+
2. Redistributions in binary form must reproduce the above copyright
|
13
|
+
notice, this list of conditions and the following disclaimer in the
|
14
|
+
documentation and/or other materials provided with the distribution.
|
15
|
+
|
16
|
+
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
17
|
+
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
18
|
+
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
19
|
+
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
20
|
+
HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
21
|
+
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
22
|
+
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
23
|
+
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
24
|
+
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
25
|
+
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
26
|
+
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
@@ -0,0 +1,171 @@
|
|
1
|
+
About
|
2
|
+
=====
|
3
|
+
`ngx_cache_purge` is `nginx` module which adds ability to purge content from
|
4
|
+
`FastCGI`, `proxy`, `SCGI` and `uWSGI` caches.
|
5
|
+
|
6
|
+
|
7
|
+
Sponsors
|
8
|
+
========
|
9
|
+
Work on the original patch was fully funded by [yo.se](http://yo.se).
|
10
|
+
|
11
|
+
|
12
|
+
Status
|
13
|
+
======
|
14
|
+
This module is production-ready.
|
15
|
+
|
16
|
+
|
17
|
+
Configuration directives (same location syntax)
|
18
|
+
===============================================
|
19
|
+
fastcgi_cache_purge
|
20
|
+
-------------------
|
21
|
+
* **syntax**: `fastcgi_cache_purge on|off|<method> [from all|<ip> [.. <ip>]]`
|
22
|
+
* **default**: `none`
|
23
|
+
* **context**: `http`, `server`, `location`
|
24
|
+
|
25
|
+
Allow purging of selected pages from `FastCGI`'s cache.
|
26
|
+
|
27
|
+
|
28
|
+
proxy_cache_purge
|
29
|
+
-----------------
|
30
|
+
* **syntax**: `proxy_cache_purge on|off|<method> [from all|<ip> [.. <ip>]]`
|
31
|
+
* **default**: `none`
|
32
|
+
* **context**: `http`, `server`, `location`
|
33
|
+
|
34
|
+
Allow purging of selected pages from `proxy`'s cache.
|
35
|
+
|
36
|
+
|
37
|
+
scgi_cache_purge
|
38
|
+
----------------
|
39
|
+
* **syntax**: `scgi_cache_purge on|off|<method> [from all|<ip> [.. <ip>]]`
|
40
|
+
* **default**: `none`
|
41
|
+
* **context**: `http`, `server`, `location`
|
42
|
+
|
43
|
+
Allow purging of selected pages from `SCGI`'s cache.
|
44
|
+
|
45
|
+
|
46
|
+
uwsgi_cache_purge
|
47
|
+
-----------------
|
48
|
+
* **syntax**: `uwsgi_cache_purge on|off|<method> [from all|<ip> [.. <ip>]]`
|
49
|
+
* **default**: `none`
|
50
|
+
* **context**: `http`, `server`, `location`
|
51
|
+
|
52
|
+
Allow purging of selected pages from `uWSGI`'s cache.
|
53
|
+
|
54
|
+
|
55
|
+
Configuration directives (separate location syntax)
|
56
|
+
===================================================
|
57
|
+
fastcgi_cache_purge
|
58
|
+
-------------------
|
59
|
+
* **syntax**: `fastcgi_cache_purge zone_name key`
|
60
|
+
* **default**: `none`
|
61
|
+
* **context**: `location`
|
62
|
+
|
63
|
+
Sets area and key used for purging selected pages from `FastCGI`'s cache.
|
64
|
+
|
65
|
+
|
66
|
+
proxy_cache_purge
|
67
|
+
-----------------
|
68
|
+
* **syntax**: `proxy_cache_purge zone_name key`
|
69
|
+
* **default**: `none`
|
70
|
+
* **context**: `location`
|
71
|
+
|
72
|
+
Sets area and key used for purging selected pages from `proxy`'s cache.
|
73
|
+
|
74
|
+
|
75
|
+
scgi_cache_purge
|
76
|
+
----------------
|
77
|
+
* **syntax**: `scgi_cache_purge zone_name key`
|
78
|
+
* **default**: `none`
|
79
|
+
* **context**: `location`
|
80
|
+
|
81
|
+
Sets area and key used for purging selected pages from `SCGI`'s cache.
|
82
|
+
|
83
|
+
|
84
|
+
uwsgi_cache_purge
|
85
|
+
-----------------
|
86
|
+
* **syntax**: `uwsgi_cache_purge zone_name key`
|
87
|
+
* **default**: `none`
|
88
|
+
* **context**: `location`
|
89
|
+
|
90
|
+
Sets area and key used for purging selected pages from `uWSGI`'s cache.
|
91
|
+
|
92
|
+
|
93
|
+
Sample configuration (same location syntax)
|
94
|
+
===========================================
|
95
|
+
http {
|
96
|
+
proxy_cache_path /tmp/cache keys_zone=tmpcache:10m;
|
97
|
+
|
98
|
+
server {
|
99
|
+
location / {
|
100
|
+
proxy_pass http://127.0.0.1:8000;
|
101
|
+
proxy_cache tmpcache;
|
102
|
+
proxy_cache_key $uri$is_args$args;
|
103
|
+
proxy_cache_purge PURGE from 127.0.0.1;
|
104
|
+
}
|
105
|
+
}
|
106
|
+
}
|
107
|
+
|
108
|
+
|
109
|
+
Sample configuration (separate location syntax)
|
110
|
+
===============================================
|
111
|
+
http {
|
112
|
+
proxy_cache_path /tmp/cache keys_zone=tmpcache:10m;
|
113
|
+
|
114
|
+
server {
|
115
|
+
location / {
|
116
|
+
proxy_pass http://127.0.0.1:8000;
|
117
|
+
proxy_cache tmpcache;
|
118
|
+
proxy_cache_key $uri$is_args$args;
|
119
|
+
}
|
120
|
+
|
121
|
+
location ~ /purge(/.*) {
|
122
|
+
allow 127.0.0.1;
|
123
|
+
deny all;
|
124
|
+
proxy_cache_purge tmpcache $1$is_args$args;
|
125
|
+
}
|
126
|
+
}
|
127
|
+
}
|
128
|
+
|
129
|
+
|
130
|
+
Testing
|
131
|
+
=======
|
132
|
+
`ngx_cache_purge` comes with complete test suite based on [Test::Nginx](http://github.com/agentzh/test-nginx).
|
133
|
+
|
134
|
+
You can test it by running:
|
135
|
+
|
136
|
+
`$ prove`
|
137
|
+
|
138
|
+
|
139
|
+
License
|
140
|
+
=======
|
141
|
+
Copyright (c) 2009-2014, FRiCKLE <info@frickle.com>
|
142
|
+
Copyright (c) 2009-2014, Piotr Sikora <piotr.sikora@frickle.com>
|
143
|
+
All rights reserved.
|
144
|
+
|
145
|
+
This project was fully funded by yo.se.
|
146
|
+
|
147
|
+
Redistribution and use in source and binary forms, with or without
|
148
|
+
modification, are permitted provided that the following conditions
|
149
|
+
are met:
|
150
|
+
1. Redistributions of source code must retain the above copyright
|
151
|
+
notice, this list of conditions and the following disclaimer.
|
152
|
+
2. Redistributions in binary form must reproduce the above copyright
|
153
|
+
notice, this list of conditions and the following disclaimer in the
|
154
|
+
documentation and/or other materials provided with the distribution.
|
155
|
+
|
156
|
+
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
157
|
+
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
158
|
+
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
159
|
+
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
160
|
+
HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
161
|
+
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
162
|
+
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
163
|
+
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
164
|
+
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
165
|
+
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
166
|
+
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
167
|
+
|
168
|
+
|
169
|
+
See also
|
170
|
+
========
|
171
|
+
- [ngx_slowfs_cache](http://github.com/FRiCKLE/ngx_slowfs_cache).
|
@@ -0,0 +1,7 @@
|
|
1
|
+
Features that __will not__ be added to `ngx_cache_purge`:
|
2
|
+
|
3
|
+
* Support for prefixed purges (`/purge/images/*`).
|
4
|
+
Reason: Impossible with current cache implementation.
|
5
|
+
|
6
|
+
* Support for wildcard/regex purges (`/purge/*.jpg`).
|
7
|
+
Reason: Impossible with current cache implementation.
|
@@ -0,0 +1,21 @@
|
|
1
|
+
if [ "$HTTP_PROXY" = "YES" ]; then
|
2
|
+
have=NGX_HTTP_PROXY . auto/have
|
3
|
+
fi
|
4
|
+
|
5
|
+
if [ "$HTTP_FASTCGI" = "YES" ]; then
|
6
|
+
have=NGX_HTTP_FASTCGI . auto/have
|
7
|
+
fi
|
8
|
+
|
9
|
+
if [ "$HTTP_SCGI" = "YES" ]; then
|
10
|
+
have=NGX_HTTP_SCGI . auto/have
|
11
|
+
fi
|
12
|
+
|
13
|
+
if [ "$HTTP_UWSGI" = "YES" ]; then
|
14
|
+
have=NGX_HTTP_UWSGI . auto/have
|
15
|
+
fi
|
16
|
+
|
17
|
+
ngx_addon_name=ngx_http_cache_purge_module
|
18
|
+
HTTP_MODULES="$HTTP_MODULES ngx_http_cache_purge_module"
|
19
|
+
NGX_ADDON_SRCS="$NGX_ADDON_SRCS $ngx_addon_dir/ngx_cache_purge_module.c"
|
20
|
+
|
21
|
+
have=NGX_CACHE_PURGE_MODULE . auto/have
|
@@ -0,0 +1,1803 @@
|
|
1
|
+
/*
|
2
|
+
* Copyright (c) 2009-2014, FRiCKLE <info@frickle.com>
|
3
|
+
* Copyright (c) 2009-2014, Piotr Sikora <piotr.sikora@frickle.com>
|
4
|
+
* All rights reserved.
|
5
|
+
*
|
6
|
+
* This project was fully funded by yo.se.
|
7
|
+
*
|
8
|
+
* Redistribution and use in source and binary forms, with or without
|
9
|
+
* modification, are permitted provided that the following conditions
|
10
|
+
* are met:
|
11
|
+
* 1. Redistributions of source code must retain the above copyright
|
12
|
+
* notice, this list of conditions and the following disclaimer.
|
13
|
+
* 2. Redistributions in binary form must reproduce the above copyright
|
14
|
+
* notice, this list of conditions and the following disclaimer in the
|
15
|
+
* documentation and/or other materials provided with the distribution.
|
16
|
+
*
|
17
|
+
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
18
|
+
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
19
|
+
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
20
|
+
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
21
|
+
* HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
22
|
+
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
23
|
+
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
24
|
+
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
25
|
+
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
26
|
+
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
27
|
+
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
28
|
+
*/
|
29
|
+
|
30
|
+
#include <nginx.h>
|
31
|
+
#include <ngx_config.h>
|
32
|
+
#include <ngx_core.h>
|
33
|
+
#include <ngx_http.h>
|
34
|
+
|
35
|
+
|
36
|
+
#ifndef nginx_version
|
37
|
+
#error This module cannot be build against an unknown nginx version.
|
38
|
+
#endif
|
39
|
+
|
40
|
+
|
41
|
+
#if (NGX_HTTP_CACHE)
|
42
|
+
|
43
|
+
typedef struct {
|
44
|
+
ngx_flag_t enable;
|
45
|
+
ngx_str_t method;
|
46
|
+
ngx_array_t *access; /* array of ngx_in_cidr_t */
|
47
|
+
ngx_array_t *access6; /* array of ngx_in6_cidr_t */
|
48
|
+
} ngx_http_cache_purge_conf_t;
|
49
|
+
|
50
|
+
typedef struct {
|
51
|
+
# if (NGX_HTTP_FASTCGI)
|
52
|
+
ngx_http_cache_purge_conf_t fastcgi;
|
53
|
+
# endif /* NGX_HTTP_FASTCGI */
|
54
|
+
# if (NGX_HTTP_PROXY)
|
55
|
+
ngx_http_cache_purge_conf_t proxy;
|
56
|
+
# endif /* NGX_HTTP_PROXY */
|
57
|
+
# if (NGX_HTTP_SCGI)
|
58
|
+
ngx_http_cache_purge_conf_t scgi;
|
59
|
+
# endif /* NGX_HTTP_SCGI */
|
60
|
+
# if (NGX_HTTP_UWSGI)
|
61
|
+
ngx_http_cache_purge_conf_t uwsgi;
|
62
|
+
# endif /* NGX_HTTP_UWSGI */
|
63
|
+
|
64
|
+
ngx_http_cache_purge_conf_t *conf;
|
65
|
+
ngx_http_handler_pt handler;
|
66
|
+
ngx_http_handler_pt original_handler;
|
67
|
+
} ngx_http_cache_purge_loc_conf_t;
|
68
|
+
|
69
|
+
# if (NGX_HTTP_FASTCGI)
|
70
|
+
char *ngx_http_fastcgi_cache_purge_conf(ngx_conf_t *cf,
|
71
|
+
ngx_command_t *cmd, void *conf);
|
72
|
+
ngx_int_t ngx_http_fastcgi_cache_purge_handler(ngx_http_request_t *r);
|
73
|
+
# endif /* NGX_HTTP_FASTCGI */
|
74
|
+
|
75
|
+
# if (NGX_HTTP_PROXY)
|
76
|
+
char *ngx_http_proxy_cache_purge_conf(ngx_conf_t *cf,
|
77
|
+
ngx_command_t *cmd, void *conf);
|
78
|
+
ngx_int_t ngx_http_proxy_cache_purge_handler(ngx_http_request_t *r);
|
79
|
+
# endif /* NGX_HTTP_PROXY */
|
80
|
+
|
81
|
+
# if (NGX_HTTP_SCGI)
|
82
|
+
char *ngx_http_scgi_cache_purge_conf(ngx_conf_t *cf,
|
83
|
+
ngx_command_t *cmd, void *conf);
|
84
|
+
ngx_int_t ngx_http_scgi_cache_purge_handler(ngx_http_request_t *r);
|
85
|
+
# endif /* NGX_HTTP_SCGI */
|
86
|
+
|
87
|
+
# if (NGX_HTTP_UWSGI)
|
88
|
+
char *ngx_http_uwsgi_cache_purge_conf(ngx_conf_t *cf,
|
89
|
+
ngx_command_t *cmd, void *conf);
|
90
|
+
ngx_int_t ngx_http_uwsgi_cache_purge_handler(ngx_http_request_t *r);
|
91
|
+
# endif /* NGX_HTTP_UWSGI */
|
92
|
+
|
93
|
+
ngx_int_t ngx_http_cache_purge_access_handler(ngx_http_request_t *r);
|
94
|
+
ngx_int_t ngx_http_cache_purge_access(ngx_array_t *a, ngx_array_t *a6,
|
95
|
+
struct sockaddr *s);
|
96
|
+
|
97
|
+
ngx_int_t ngx_http_cache_purge_send_response(ngx_http_request_t *r);
|
98
|
+
# if (nginx_version >= 1007009)
|
99
|
+
ngx_int_t ngx_http_cache_purge_cache_get(ngx_http_request_t *r,
|
100
|
+
ngx_http_upstream_t *u, ngx_http_file_cache_t **cache);
|
101
|
+
# endif /* nginx_version >= 1007009 */
|
102
|
+
ngx_int_t ngx_http_cache_purge_init(ngx_http_request_t *r,
|
103
|
+
ngx_http_file_cache_t *cache, ngx_http_complex_value_t *cache_key);
|
104
|
+
void ngx_http_cache_purge_handler(ngx_http_request_t *r);
|
105
|
+
|
106
|
+
ngx_int_t ngx_http_file_cache_purge(ngx_http_request_t *r);
|
107
|
+
|
108
|
+
char *ngx_http_cache_purge_conf(ngx_conf_t *cf,
|
109
|
+
ngx_http_cache_purge_conf_t *cpcf);
|
110
|
+
|
111
|
+
void *ngx_http_cache_purge_create_loc_conf(ngx_conf_t *cf);
|
112
|
+
char *ngx_http_cache_purge_merge_loc_conf(ngx_conf_t *cf,
|
113
|
+
void *parent, void *child);
|
114
|
+
|
115
|
+
static ngx_command_t ngx_http_cache_purge_module_commands[] = {
|
116
|
+
|
117
|
+
# if (NGX_HTTP_FASTCGI)
|
118
|
+
{ ngx_string("fastcgi_cache_purge"),
|
119
|
+
NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_1MORE,
|
120
|
+
ngx_http_fastcgi_cache_purge_conf,
|
121
|
+
NGX_HTTP_LOC_CONF_OFFSET,
|
122
|
+
0,
|
123
|
+
NULL },
|
124
|
+
# endif /* NGX_HTTP_FASTCGI */
|
125
|
+
|
126
|
+
# if (NGX_HTTP_PROXY)
|
127
|
+
{ ngx_string("proxy_cache_purge"),
|
128
|
+
NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_1MORE,
|
129
|
+
ngx_http_proxy_cache_purge_conf,
|
130
|
+
NGX_HTTP_LOC_CONF_OFFSET,
|
131
|
+
0,
|
132
|
+
NULL },
|
133
|
+
# endif /* NGX_HTTP_PROXY */
|
134
|
+
|
135
|
+
# if (NGX_HTTP_SCGI)
|
136
|
+
{ ngx_string("scgi_cache_purge"),
|
137
|
+
NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_1MORE,
|
138
|
+
ngx_http_scgi_cache_purge_conf,
|
139
|
+
NGX_HTTP_LOC_CONF_OFFSET,
|
140
|
+
0,
|
141
|
+
NULL },
|
142
|
+
# endif /* NGX_HTTP_SCGI */
|
143
|
+
|
144
|
+
# if (NGX_HTTP_UWSGI)
|
145
|
+
{ ngx_string("uwsgi_cache_purge"),
|
146
|
+
NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_1MORE,
|
147
|
+
ngx_http_uwsgi_cache_purge_conf,
|
148
|
+
NGX_HTTP_LOC_CONF_OFFSET,
|
149
|
+
0,
|
150
|
+
NULL },
|
151
|
+
# endif /* NGX_HTTP_UWSGI */
|
152
|
+
|
153
|
+
ngx_null_command
|
154
|
+
};
|
155
|
+
|
156
|
+
static ngx_http_module_t ngx_http_cache_purge_module_ctx = {
|
157
|
+
NULL, /* preconfiguration */
|
158
|
+
NULL, /* postconfiguration */
|
159
|
+
|
160
|
+
NULL, /* create main configuration */
|
161
|
+
NULL, /* init main configuration */
|
162
|
+
|
163
|
+
NULL, /* create server configuration */
|
164
|
+
NULL, /* merge server configuration */
|
165
|
+
|
166
|
+
ngx_http_cache_purge_create_loc_conf, /* create location configuration */
|
167
|
+
ngx_http_cache_purge_merge_loc_conf /* merge location configuration */
|
168
|
+
};
|
169
|
+
|
170
|
+
ngx_module_t ngx_http_cache_purge_module = {
|
171
|
+
NGX_MODULE_V1,
|
172
|
+
&ngx_http_cache_purge_module_ctx, /* module context */
|
173
|
+
ngx_http_cache_purge_module_commands, /* module directives */
|
174
|
+
NGX_HTTP_MODULE, /* module type */
|
175
|
+
NULL, /* init master */
|
176
|
+
NULL, /* init module */
|
177
|
+
NULL, /* init process */
|
178
|
+
NULL, /* init thread */
|
179
|
+
NULL, /* exit thread */
|
180
|
+
NULL, /* exit process */
|
181
|
+
NULL, /* exit master */
|
182
|
+
NGX_MODULE_V1_PADDING
|
183
|
+
};
|
184
|
+
|
185
|
+
static char ngx_http_cache_purge_success_page_top[] =
|
186
|
+
"<html>" CRLF
|
187
|
+
"<head><title>Successful purge</title></head>" CRLF
|
188
|
+
"<body bgcolor=\"white\">" CRLF
|
189
|
+
"<center><h1>Successful purge</h1>" CRLF
|
190
|
+
;
|
191
|
+
|
192
|
+
static char ngx_http_cache_purge_success_page_tail[] =
|
193
|
+
CRLF "</center>" CRLF
|
194
|
+
"<hr><center>" NGINX_VER "</center>" CRLF
|
195
|
+
"</body>" CRLF
|
196
|
+
"</html>" CRLF
|
197
|
+
;
|
198
|
+
|
199
|
+
# if (NGX_HTTP_FASTCGI)
|
200
|
+
extern ngx_module_t ngx_http_fastcgi_module;
|
201
|
+
|
202
|
+
# if (nginx_version >= 1007009)
|
203
|
+
|
204
|
+
typedef struct {
|
205
|
+
ngx_array_t caches; /* ngx_http_file_cache_t * */
|
206
|
+
} ngx_http_fastcgi_main_conf_t;
|
207
|
+
|
208
|
+
# endif /* nginx_version >= 1007009 */
|
209
|
+
|
210
|
+
# if (nginx_version >= 1007008)
|
211
|
+
|
212
|
+
typedef struct {
|
213
|
+
ngx_array_t *flushes;
|
214
|
+
ngx_array_t *lengths;
|
215
|
+
ngx_array_t *values;
|
216
|
+
ngx_uint_t number;
|
217
|
+
ngx_hash_t hash;
|
218
|
+
} ngx_http_fastcgi_params_t;
|
219
|
+
|
220
|
+
# endif /* nginx_version >= 1007008 */
|
221
|
+
|
222
|
+
typedef struct {
|
223
|
+
ngx_http_upstream_conf_t upstream;
|
224
|
+
|
225
|
+
ngx_str_t index;
|
226
|
+
|
227
|
+
# if (nginx_version >= 1007008)
|
228
|
+
ngx_http_fastcgi_params_t params;
|
229
|
+
ngx_http_fastcgi_params_t params_cache;
|
230
|
+
# else
|
231
|
+
ngx_array_t *flushes;
|
232
|
+
ngx_array_t *params_len;
|
233
|
+
ngx_array_t *params;
|
234
|
+
# endif /* nginx_version >= 1007008 */
|
235
|
+
|
236
|
+
ngx_array_t *params_source;
|
237
|
+
ngx_array_t *catch_stderr;
|
238
|
+
|
239
|
+
ngx_array_t *fastcgi_lengths;
|
240
|
+
ngx_array_t *fastcgi_values;
|
241
|
+
|
242
|
+
# if (nginx_version >= 8040) && (nginx_version < 1007008)
|
243
|
+
ngx_hash_t headers_hash;
|
244
|
+
ngx_uint_t header_params;
|
245
|
+
# endif /* nginx_version >= 8040 && nginx_version < 1007008 */
|
246
|
+
|
247
|
+
# if (nginx_version >= 1001004)
|
248
|
+
ngx_flag_t keep_conn;
|
249
|
+
# endif /* nginx_version >= 1001004 */
|
250
|
+
|
251
|
+
ngx_http_complex_value_t cache_key;
|
252
|
+
|
253
|
+
# if (NGX_PCRE)
|
254
|
+
ngx_regex_t *split_regex;
|
255
|
+
ngx_str_t split_name;
|
256
|
+
# endif /* NGX_PCRE */
|
257
|
+
} ngx_http_fastcgi_loc_conf_t;
|
258
|
+
|
259
|
+
char *
|
260
|
+
ngx_http_fastcgi_cache_purge_conf(ngx_conf_t *cf, ngx_command_t *cmd,
|
261
|
+
void *conf)
|
262
|
+
{
|
263
|
+
ngx_http_compile_complex_value_t ccv;
|
264
|
+
ngx_http_cache_purge_loc_conf_t *cplcf;
|
265
|
+
ngx_http_core_loc_conf_t *clcf;
|
266
|
+
ngx_http_fastcgi_loc_conf_t *flcf;
|
267
|
+
ngx_str_t *value;
|
268
|
+
# if (nginx_version >= 1007009)
|
269
|
+
ngx_http_complex_value_t cv;
|
270
|
+
# endif /* nginx_version >= 1007009 */
|
271
|
+
|
272
|
+
cplcf = ngx_http_conf_get_module_loc_conf(cf, ngx_http_cache_purge_module);
|
273
|
+
|
274
|
+
/* check for duplicates / collisions */
|
275
|
+
if (cplcf->fastcgi.enable != NGX_CONF_UNSET) {
|
276
|
+
return "is duplicate";
|
277
|
+
}
|
278
|
+
|
279
|
+
if (cf->args->nelts != 3) {
|
280
|
+
return ngx_http_cache_purge_conf(cf, &cplcf->fastcgi);
|
281
|
+
}
|
282
|
+
|
283
|
+
if (cf->cmd_type & (NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF)) {
|
284
|
+
return "(separate location syntax) is not allowed here";
|
285
|
+
}
|
286
|
+
|
287
|
+
flcf = ngx_http_conf_get_module_loc_conf(cf, ngx_http_fastcgi_module);
|
288
|
+
|
289
|
+
# if (nginx_version >= 1007009)
|
290
|
+
if (flcf->upstream.cache > 0)
|
291
|
+
# else
|
292
|
+
if (flcf->upstream.cache != NGX_CONF_UNSET_PTR
|
293
|
+
&& flcf->upstream.cache != NULL)
|
294
|
+
# endif /* nginx_version >= 1007009 */
|
295
|
+
{
|
296
|
+
return "is incompatible with \"fastcgi_cache\"";
|
297
|
+
}
|
298
|
+
|
299
|
+
if (flcf->upstream.upstream || flcf->fastcgi_lengths) {
|
300
|
+
return "is incompatible with \"fastcgi_pass\"";
|
301
|
+
}
|
302
|
+
|
303
|
+
if (flcf->upstream.store > 0
|
304
|
+
# if (nginx_version < 1007009)
|
305
|
+
|| flcf->upstream.store_lengths
|
306
|
+
# endif /* nginx_version >= 1007009 */
|
307
|
+
)
|
308
|
+
{
|
309
|
+
return "is incompatible with \"fastcgi_store\"";
|
310
|
+
}
|
311
|
+
|
312
|
+
value = cf->args->elts;
|
313
|
+
|
314
|
+
/* set fastcgi_cache part */
|
315
|
+
# if (nginx_version >= 1007009)
|
316
|
+
|
317
|
+
flcf->upstream.cache = 1;
|
318
|
+
|
319
|
+
ngx_memzero(&ccv, sizeof(ngx_http_compile_complex_value_t));
|
320
|
+
|
321
|
+
ccv.cf = cf;
|
322
|
+
ccv.value = &value[1];
|
323
|
+
ccv.complex_value = &cv;
|
324
|
+
|
325
|
+
if (ngx_http_compile_complex_value(&ccv) != NGX_OK) {
|
326
|
+
return NGX_CONF_ERROR;
|
327
|
+
}
|
328
|
+
|
329
|
+
if (cv.lengths != NULL) {
|
330
|
+
|
331
|
+
flcf->upstream.cache_value = ngx_palloc(cf->pool,
|
332
|
+
sizeof(ngx_http_complex_value_t));
|
333
|
+
if (flcf->upstream.cache_value == NULL) {
|
334
|
+
return NGX_CONF_ERROR;
|
335
|
+
}
|
336
|
+
|
337
|
+
*flcf->upstream.cache_value = cv;
|
338
|
+
|
339
|
+
} else {
|
340
|
+
|
341
|
+
flcf->upstream.cache_zone = ngx_shared_memory_add(cf, &value[1], 0,
|
342
|
+
&ngx_http_fastcgi_module);
|
343
|
+
if (flcf->upstream.cache_zone == NULL) {
|
344
|
+
return NGX_CONF_ERROR;
|
345
|
+
}
|
346
|
+
}
|
347
|
+
|
348
|
+
# else
|
349
|
+
|
350
|
+
flcf->upstream.cache = ngx_shared_memory_add(cf, &value[1], 0,
|
351
|
+
&ngx_http_fastcgi_module);
|
352
|
+
if (flcf->upstream.cache == NULL) {
|
353
|
+
return NGX_CONF_ERROR;
|
354
|
+
}
|
355
|
+
|
356
|
+
# endif /* nginx_version >= 1007009 */
|
357
|
+
|
358
|
+
/* set fastcgi_cache_key part */
|
359
|
+
ngx_memzero(&ccv, sizeof(ngx_http_compile_complex_value_t));
|
360
|
+
|
361
|
+
ccv.cf = cf;
|
362
|
+
ccv.value = &value[2];
|
363
|
+
ccv.complex_value = &flcf->cache_key;
|
364
|
+
|
365
|
+
if (ngx_http_compile_complex_value(&ccv) != NGX_OK) {
|
366
|
+
return NGX_CONF_ERROR;
|
367
|
+
}
|
368
|
+
|
369
|
+
/* set handler */
|
370
|
+
clcf = ngx_http_conf_get_module_loc_conf(cf, ngx_http_core_module);
|
371
|
+
|
372
|
+
cplcf->fastcgi.enable = 0;
|
373
|
+
clcf->handler = ngx_http_fastcgi_cache_purge_handler;
|
374
|
+
|
375
|
+
return NGX_CONF_OK;
|
376
|
+
}
|
377
|
+
|
378
|
+
ngx_int_t
|
379
|
+
ngx_http_fastcgi_cache_purge_handler(ngx_http_request_t *r)
|
380
|
+
{
|
381
|
+
ngx_http_file_cache_t *cache;
|
382
|
+
ngx_http_fastcgi_loc_conf_t *flcf;
|
383
|
+
# if (nginx_version >= 1007009)
|
384
|
+
ngx_http_fastcgi_main_conf_t *fmcf;
|
385
|
+
ngx_int_t rc;
|
386
|
+
# endif /* nginx_version >= 1007009 */
|
387
|
+
|
388
|
+
if (ngx_http_upstream_create(r) != NGX_OK) {
|
389
|
+
return NGX_HTTP_INTERNAL_SERVER_ERROR;
|
390
|
+
}
|
391
|
+
|
392
|
+
flcf = ngx_http_get_module_loc_conf(r, ngx_http_fastcgi_module);
|
393
|
+
|
394
|
+
r->upstream->conf = &flcf->upstream;
|
395
|
+
|
396
|
+
# if (nginx_version >= 1007009)
|
397
|
+
|
398
|
+
fmcf = ngx_http_get_module_main_conf(r, ngx_http_fastcgi_module);
|
399
|
+
|
400
|
+
r->upstream->caches = &fmcf->caches;
|
401
|
+
|
402
|
+
rc = ngx_http_cache_purge_cache_get(r, r->upstream, &cache);
|
403
|
+
if (rc != NGX_OK) {
|
404
|
+
return rc;
|
405
|
+
}
|
406
|
+
|
407
|
+
# else
|
408
|
+
|
409
|
+
cache = flcf->upstream.cache->data;
|
410
|
+
|
411
|
+
# endif /* nginx_version >= 1007009 */
|
412
|
+
|
413
|
+
if (ngx_http_cache_purge_init(r, cache, &flcf->cache_key) != NGX_OK) {
|
414
|
+
return NGX_HTTP_INTERNAL_SERVER_ERROR;
|
415
|
+
}
|
416
|
+
|
417
|
+
# if (nginx_version >= 8011)
|
418
|
+
r->main->count++;
|
419
|
+
# endif
|
420
|
+
|
421
|
+
ngx_http_cache_purge_handler(r);
|
422
|
+
|
423
|
+
return NGX_DONE;
|
424
|
+
}
|
425
|
+
# endif /* NGX_HTTP_FASTCGI */
|
426
|
+
|
427
|
+
# if (NGX_HTTP_PROXY)
|
428
|
+
extern ngx_module_t ngx_http_proxy_module;
|
429
|
+
|
430
|
+
typedef struct {
|
431
|
+
ngx_str_t key_start;
|
432
|
+
ngx_str_t schema;
|
433
|
+
ngx_str_t host_header;
|
434
|
+
ngx_str_t port;
|
435
|
+
ngx_str_t uri;
|
436
|
+
} ngx_http_proxy_vars_t;
|
437
|
+
|
438
|
+
# if (nginx_version >= 1007009)
|
439
|
+
|
440
|
+
typedef struct {
|
441
|
+
ngx_array_t caches; /* ngx_http_file_cache_t * */
|
442
|
+
} ngx_http_proxy_main_conf_t;
|
443
|
+
|
444
|
+
# endif /* nginx_version >= 1007009 */
|
445
|
+
|
446
|
+
# if (nginx_version >= 1007008)
|
447
|
+
|
448
|
+
typedef struct {
|
449
|
+
ngx_array_t *flushes;
|
450
|
+
ngx_array_t *lengths;
|
451
|
+
ngx_array_t *values;
|
452
|
+
ngx_hash_t hash;
|
453
|
+
} ngx_http_proxy_headers_t;
|
454
|
+
|
455
|
+
# endif /* nginx_version >= 1007008 */
|
456
|
+
|
457
|
+
typedef struct {
|
458
|
+
ngx_http_upstream_conf_t upstream;
|
459
|
+
|
460
|
+
# if (nginx_version >= 1007008)
|
461
|
+
ngx_array_t *body_flushes;
|
462
|
+
ngx_array_t *body_lengths;
|
463
|
+
ngx_array_t *body_values;
|
464
|
+
ngx_str_t body_source;
|
465
|
+
|
466
|
+
ngx_http_proxy_headers_t headers;
|
467
|
+
ngx_http_proxy_headers_t headers_cache;
|
468
|
+
# else
|
469
|
+
ngx_array_t *flushes;
|
470
|
+
ngx_array_t *body_set_len;
|
471
|
+
ngx_array_t *body_set;
|
472
|
+
ngx_array_t *headers_set_len;
|
473
|
+
ngx_array_t *headers_set;
|
474
|
+
ngx_hash_t headers_set_hash;
|
475
|
+
# endif /* nginx_version >= 1007008 */
|
476
|
+
|
477
|
+
ngx_array_t *headers_source;
|
478
|
+
# if (nginx_version < 8040)
|
479
|
+
ngx_array_t *headers_names;
|
480
|
+
# endif /* nginx_version < 8040 */
|
481
|
+
|
482
|
+
ngx_array_t *proxy_lengths;
|
483
|
+
ngx_array_t *proxy_values;
|
484
|
+
|
485
|
+
ngx_array_t *redirects;
|
486
|
+
# if (nginx_version >= 1001015)
|
487
|
+
ngx_array_t *cookie_domains;
|
488
|
+
ngx_array_t *cookie_paths;
|
489
|
+
# endif /* nginx_version >= 1001015 */
|
490
|
+
|
491
|
+
# if (nginx_version < 1007008)
|
492
|
+
ngx_str_t body_source;
|
493
|
+
# endif /* nginx_version < 1007008 */
|
494
|
+
|
495
|
+
ngx_str_t method;
|
496
|
+
ngx_str_t location;
|
497
|
+
ngx_str_t url;
|
498
|
+
|
499
|
+
ngx_http_complex_value_t cache_key;
|
500
|
+
|
501
|
+
ngx_http_proxy_vars_t vars;
|
502
|
+
|
503
|
+
ngx_flag_t redirect;
|
504
|
+
|
505
|
+
# if (nginx_version >= 1001004)
|
506
|
+
ngx_uint_t http_version;
|
507
|
+
# endif /* nginx_version >= 1001004 */
|
508
|
+
|
509
|
+
ngx_uint_t headers_hash_max_size;
|
510
|
+
ngx_uint_t headers_hash_bucket_size;
|
511
|
+
|
512
|
+
# if (NGX_HTTP_SSL)
|
513
|
+
# if (nginx_version >= 1005006)
|
514
|
+
ngx_uint_t ssl;
|
515
|
+
ngx_uint_t ssl_protocols;
|
516
|
+
ngx_str_t ssl_ciphers;
|
517
|
+
# endif /* nginx_version >= 1005006 */
|
518
|
+
# if (nginx_version >= 1007000)
|
519
|
+
ngx_uint_t ssl_verify_depth;
|
520
|
+
ngx_str_t ssl_trusted_certificate;
|
521
|
+
ngx_str_t ssl_crl;
|
522
|
+
# endif /* nginx_version >= 1007000 */
|
523
|
+
# if (nginx_version >= 1007008)
|
524
|
+
ngx_str_t ssl_certificate;
|
525
|
+
ngx_str_t ssl_certificate_key;
|
526
|
+
ngx_array_t *ssl_passwords;
|
527
|
+
# endif /* nginx_version >= 1007008 */
|
528
|
+
# endif
|
529
|
+
} ngx_http_proxy_loc_conf_t;
|
530
|
+
|
531
|
+
char *
|
532
|
+
ngx_http_proxy_cache_purge_conf(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
|
533
|
+
{
|
534
|
+
ngx_http_compile_complex_value_t ccv;
|
535
|
+
ngx_http_cache_purge_loc_conf_t *cplcf;
|
536
|
+
ngx_http_core_loc_conf_t *clcf;
|
537
|
+
ngx_http_proxy_loc_conf_t *plcf;
|
538
|
+
ngx_str_t *value;
|
539
|
+
# if (nginx_version >= 1007009)
|
540
|
+
ngx_http_complex_value_t cv;
|
541
|
+
# endif /* nginx_version >= 1007009 */
|
542
|
+
|
543
|
+
cplcf = ngx_http_conf_get_module_loc_conf(cf, ngx_http_cache_purge_module);
|
544
|
+
|
545
|
+
/* check for duplicates / collisions */
|
546
|
+
if (cplcf->proxy.enable != NGX_CONF_UNSET) {
|
547
|
+
return "is duplicate";
|
548
|
+
}
|
549
|
+
|
550
|
+
if (cf->args->nelts != 3) {
|
551
|
+
return ngx_http_cache_purge_conf(cf, &cplcf->proxy);
|
552
|
+
}
|
553
|
+
|
554
|
+
if (cf->cmd_type & (NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF)) {
|
555
|
+
return "(separate location syntax) is not allowed here";
|
556
|
+
}
|
557
|
+
|
558
|
+
plcf = ngx_http_conf_get_module_loc_conf(cf, ngx_http_proxy_module);
|
559
|
+
|
560
|
+
# if (nginx_version >= 1007009)
|
561
|
+
if (plcf->upstream.cache > 0)
|
562
|
+
# else
|
563
|
+
if (plcf->upstream.cache != NGX_CONF_UNSET_PTR
|
564
|
+
&& plcf->upstream.cache != NULL)
|
565
|
+
# endif /* nginx_version >= 1007009 */
|
566
|
+
{
|
567
|
+
return "is incompatible with \"proxy_cache\"";
|
568
|
+
}
|
569
|
+
|
570
|
+
if (plcf->upstream.upstream || plcf->proxy_lengths) {
|
571
|
+
return "is incompatible with \"proxy_pass\"";
|
572
|
+
}
|
573
|
+
|
574
|
+
if (plcf->upstream.store > 0
|
575
|
+
# if (nginx_version < 1007009)
|
576
|
+
|| plcf->upstream.store_lengths
|
577
|
+
# endif /* nginx_version >= 1007009 */
|
578
|
+
)
|
579
|
+
{
|
580
|
+
return "is incompatible with \"proxy_store\"";
|
581
|
+
}
|
582
|
+
|
583
|
+
value = cf->args->elts;
|
584
|
+
|
585
|
+
/* set proxy_cache part */
|
586
|
+
# if (nginx_version >= 1007009)
|
587
|
+
|
588
|
+
plcf->upstream.cache = 1;
|
589
|
+
|
590
|
+
ngx_memzero(&ccv, sizeof(ngx_http_compile_complex_value_t));
|
591
|
+
|
592
|
+
ccv.cf = cf;
|
593
|
+
ccv.value = &value[1];
|
594
|
+
ccv.complex_value = &cv;
|
595
|
+
|
596
|
+
if (ngx_http_compile_complex_value(&ccv) != NGX_OK) {
|
597
|
+
return NGX_CONF_ERROR;
|
598
|
+
}
|
599
|
+
|
600
|
+
if (cv.lengths != NULL) {
|
601
|
+
|
602
|
+
plcf->upstream.cache_value = ngx_palloc(cf->pool,
|
603
|
+
sizeof(ngx_http_complex_value_t));
|
604
|
+
if (plcf->upstream.cache_value == NULL) {
|
605
|
+
return NGX_CONF_ERROR;
|
606
|
+
}
|
607
|
+
|
608
|
+
*plcf->upstream.cache_value = cv;
|
609
|
+
|
610
|
+
} else {
|
611
|
+
|
612
|
+
plcf->upstream.cache_zone = ngx_shared_memory_add(cf, &value[1], 0,
|
613
|
+
&ngx_http_proxy_module);
|
614
|
+
if (plcf->upstream.cache_zone == NULL) {
|
615
|
+
return NGX_CONF_ERROR;
|
616
|
+
}
|
617
|
+
}
|
618
|
+
|
619
|
+
# else
|
620
|
+
|
621
|
+
plcf->upstream.cache = ngx_shared_memory_add(cf, &value[1], 0,
|
622
|
+
&ngx_http_proxy_module);
|
623
|
+
if (plcf->upstream.cache == NULL) {
|
624
|
+
return NGX_CONF_ERROR;
|
625
|
+
}
|
626
|
+
|
627
|
+
# endif /* nginx_version >= 1007009 */
|
628
|
+
|
629
|
+
/* set proxy_cache_key part */
|
630
|
+
ngx_memzero(&ccv, sizeof(ngx_http_compile_complex_value_t));
|
631
|
+
|
632
|
+
ccv.cf = cf;
|
633
|
+
ccv.value = &value[2];
|
634
|
+
ccv.complex_value = &plcf->cache_key;
|
635
|
+
|
636
|
+
if (ngx_http_compile_complex_value(&ccv) != NGX_OK) {
|
637
|
+
return NGX_CONF_ERROR;
|
638
|
+
}
|
639
|
+
|
640
|
+
/* set handler */
|
641
|
+
clcf = ngx_http_conf_get_module_loc_conf(cf, ngx_http_core_module);
|
642
|
+
|
643
|
+
cplcf->proxy.enable = 0;
|
644
|
+
clcf->handler = ngx_http_proxy_cache_purge_handler;
|
645
|
+
|
646
|
+
return NGX_CONF_OK;
|
647
|
+
}
|
648
|
+
|
649
|
+
ngx_int_t
|
650
|
+
ngx_http_proxy_cache_purge_handler(ngx_http_request_t *r)
|
651
|
+
{
|
652
|
+
ngx_http_file_cache_t *cache;
|
653
|
+
ngx_http_proxy_loc_conf_t *plcf;
|
654
|
+
# if (nginx_version >= 1007009)
|
655
|
+
ngx_http_proxy_main_conf_t *pmcf;
|
656
|
+
ngx_int_t rc;
|
657
|
+
# endif /* nginx_version >= 1007009 */
|
658
|
+
|
659
|
+
if (ngx_http_upstream_create(r) != NGX_OK) {
|
660
|
+
return NGX_HTTP_INTERNAL_SERVER_ERROR;
|
661
|
+
}
|
662
|
+
|
663
|
+
plcf = ngx_http_get_module_loc_conf(r, ngx_http_proxy_module);
|
664
|
+
|
665
|
+
r->upstream->conf = &plcf->upstream;
|
666
|
+
|
667
|
+
# if (nginx_version >= 1007009)
|
668
|
+
|
669
|
+
pmcf = ngx_http_get_module_main_conf(r, ngx_http_proxy_module);
|
670
|
+
|
671
|
+
r->upstream->caches = &pmcf->caches;
|
672
|
+
|
673
|
+
rc = ngx_http_cache_purge_cache_get(r, r->upstream, &cache);
|
674
|
+
if (rc != NGX_OK) {
|
675
|
+
return rc;
|
676
|
+
}
|
677
|
+
|
678
|
+
# else
|
679
|
+
|
680
|
+
cache = plcf->upstream.cache->data;
|
681
|
+
|
682
|
+
# endif /* nginx_version >= 1007009 */
|
683
|
+
|
684
|
+
if (ngx_http_cache_purge_init(r, cache, &plcf->cache_key) != NGX_OK) {
|
685
|
+
return NGX_HTTP_INTERNAL_SERVER_ERROR;
|
686
|
+
}
|
687
|
+
|
688
|
+
# if (nginx_version >= 8011)
|
689
|
+
r->main->count++;
|
690
|
+
# endif
|
691
|
+
|
692
|
+
ngx_http_cache_purge_handler(r);
|
693
|
+
|
694
|
+
return NGX_DONE;
|
695
|
+
}
|
696
|
+
# endif /* NGX_HTTP_PROXY */
|
697
|
+
|
698
|
+
# if (NGX_HTTP_SCGI)
|
699
|
+
extern ngx_module_t ngx_http_scgi_module;
|
700
|
+
|
701
|
+
# if (nginx_version >= 1007009)
|
702
|
+
|
703
|
+
typedef struct {
|
704
|
+
ngx_array_t caches; /* ngx_http_file_cache_t * */
|
705
|
+
} ngx_http_scgi_main_conf_t;
|
706
|
+
|
707
|
+
# endif /* nginx_version >= 1007009 */
|
708
|
+
|
709
|
+
# if (nginx_version >= 1007008)
|
710
|
+
|
711
|
+
typedef struct {
|
712
|
+
ngx_array_t *flushes;
|
713
|
+
ngx_array_t *lengths;
|
714
|
+
ngx_array_t *values;
|
715
|
+
ngx_uint_t number;
|
716
|
+
ngx_hash_t hash;
|
717
|
+
} ngx_http_scgi_params_t;
|
718
|
+
|
719
|
+
# endif /* nginx_version >= 1007008 */
|
720
|
+
|
721
|
+
typedef struct {
|
722
|
+
ngx_http_upstream_conf_t upstream;
|
723
|
+
|
724
|
+
# if (nginx_version >= 1007008)
|
725
|
+
ngx_http_scgi_params_t params;
|
726
|
+
ngx_http_scgi_params_t params_cache;
|
727
|
+
ngx_array_t *params_source;
|
728
|
+
# else
|
729
|
+
ngx_array_t *flushes;
|
730
|
+
ngx_array_t *params_len;
|
731
|
+
ngx_array_t *params;
|
732
|
+
ngx_array_t *params_source;
|
733
|
+
|
734
|
+
ngx_hash_t headers_hash;
|
735
|
+
ngx_uint_t header_params;
|
736
|
+
# endif /* nginx_version >= 1007008 */
|
737
|
+
|
738
|
+
ngx_array_t *scgi_lengths;
|
739
|
+
ngx_array_t *scgi_values;
|
740
|
+
|
741
|
+
ngx_http_complex_value_t cache_key;
|
742
|
+
} ngx_http_scgi_loc_conf_t;
|
743
|
+
|
744
|
+
char *
|
745
|
+
ngx_http_scgi_cache_purge_conf(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
|
746
|
+
{
|
747
|
+
ngx_http_compile_complex_value_t ccv;
|
748
|
+
ngx_http_cache_purge_loc_conf_t *cplcf;
|
749
|
+
ngx_http_core_loc_conf_t *clcf;
|
750
|
+
ngx_http_scgi_loc_conf_t *slcf;
|
751
|
+
ngx_str_t *value;
|
752
|
+
# if (nginx_version >= 1007009)
|
753
|
+
ngx_http_complex_value_t cv;
|
754
|
+
# endif /* nginx_version >= 1007009 */
|
755
|
+
|
756
|
+
cplcf = ngx_http_conf_get_module_loc_conf(cf, ngx_http_cache_purge_module);
|
757
|
+
|
758
|
+
/* check for duplicates / collisions */
|
759
|
+
if (cplcf->scgi.enable != NGX_CONF_UNSET) {
|
760
|
+
return "is duplicate";
|
761
|
+
}
|
762
|
+
|
763
|
+
if (cf->args->nelts != 3) {
|
764
|
+
return ngx_http_cache_purge_conf(cf, &cplcf->scgi);
|
765
|
+
}
|
766
|
+
|
767
|
+
if (cf->cmd_type & (NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF)) {
|
768
|
+
return "(separate location syntax) is not allowed here";
|
769
|
+
}
|
770
|
+
|
771
|
+
slcf = ngx_http_conf_get_module_loc_conf(cf, ngx_http_scgi_module);
|
772
|
+
|
773
|
+
# if (nginx_version >= 1007009)
|
774
|
+
if (slcf->upstream.cache > 0)
|
775
|
+
# else
|
776
|
+
if (slcf->upstream.cache != NGX_CONF_UNSET_PTR
|
777
|
+
&& slcf->upstream.cache != NULL)
|
778
|
+
# endif /* nginx_version >= 1007009 */
|
779
|
+
{
|
780
|
+
return "is incompatible with \"scgi_cache\"";
|
781
|
+
}
|
782
|
+
|
783
|
+
if (slcf->upstream.upstream || slcf->scgi_lengths) {
|
784
|
+
return "is incompatible with \"scgi_pass\"";
|
785
|
+
}
|
786
|
+
|
787
|
+
if (slcf->upstream.store > 0
|
788
|
+
# if (nginx_version < 1007009)
|
789
|
+
|| slcf->upstream.store_lengths
|
790
|
+
# endif /* nginx_version >= 1007009 */
|
791
|
+
)
|
792
|
+
{
|
793
|
+
return "is incompatible with \"scgi_store\"";
|
794
|
+
}
|
795
|
+
|
796
|
+
value = cf->args->elts;
|
797
|
+
|
798
|
+
/* set scgi_cache part */
|
799
|
+
# if (nginx_version >= 1007009)
|
800
|
+
|
801
|
+
slcf->upstream.cache = 1;
|
802
|
+
|
803
|
+
ngx_memzero(&ccv, sizeof(ngx_http_compile_complex_value_t));
|
804
|
+
|
805
|
+
ccv.cf = cf;
|
806
|
+
ccv.value = &value[1];
|
807
|
+
ccv.complex_value = &cv;
|
808
|
+
|
809
|
+
if (ngx_http_compile_complex_value(&ccv) != NGX_OK) {
|
810
|
+
return NGX_CONF_ERROR;
|
811
|
+
}
|
812
|
+
|
813
|
+
if (cv.lengths != NULL) {
|
814
|
+
|
815
|
+
slcf->upstream.cache_value = ngx_palloc(cf->pool,
|
816
|
+
sizeof(ngx_http_complex_value_t));
|
817
|
+
if (slcf->upstream.cache_value == NULL) {
|
818
|
+
return NGX_CONF_ERROR;
|
819
|
+
}
|
820
|
+
|
821
|
+
*slcf->upstream.cache_value = cv;
|
822
|
+
|
823
|
+
} else {
|
824
|
+
|
825
|
+
slcf->upstream.cache_zone = ngx_shared_memory_add(cf, &value[1], 0,
|
826
|
+
&ngx_http_scgi_module);
|
827
|
+
if (slcf->upstream.cache_zone == NULL) {
|
828
|
+
return NGX_CONF_ERROR;
|
829
|
+
}
|
830
|
+
}
|
831
|
+
|
832
|
+
# else
|
833
|
+
|
834
|
+
slcf->upstream.cache = ngx_shared_memory_add(cf, &value[1], 0,
|
835
|
+
&ngx_http_scgi_module);
|
836
|
+
if (slcf->upstream.cache == NULL) {
|
837
|
+
return NGX_CONF_ERROR;
|
838
|
+
}
|
839
|
+
|
840
|
+
# endif /* nginx_version >= 1007009 */
|
841
|
+
|
842
|
+
/* set scgi_cache_key part */
|
843
|
+
ngx_memzero(&ccv, sizeof(ngx_http_compile_complex_value_t));
|
844
|
+
|
845
|
+
ccv.cf = cf;
|
846
|
+
ccv.value = &value[2];
|
847
|
+
ccv.complex_value = &slcf->cache_key;
|
848
|
+
|
849
|
+
if (ngx_http_compile_complex_value(&ccv) != NGX_OK) {
|
850
|
+
return NGX_CONF_ERROR;
|
851
|
+
}
|
852
|
+
|
853
|
+
/* set handler */
|
854
|
+
clcf = ngx_http_conf_get_module_loc_conf(cf, ngx_http_core_module);
|
855
|
+
|
856
|
+
cplcf->scgi.enable = 0;
|
857
|
+
clcf->handler = ngx_http_scgi_cache_purge_handler;
|
858
|
+
|
859
|
+
return NGX_CONF_OK;
|
860
|
+
}
|
861
|
+
|
862
|
+
ngx_int_t
|
863
|
+
ngx_http_scgi_cache_purge_handler(ngx_http_request_t *r)
|
864
|
+
{
|
865
|
+
ngx_http_file_cache_t *cache;
|
866
|
+
ngx_http_scgi_loc_conf_t *slcf;
|
867
|
+
# if (nginx_version >= 1007009)
|
868
|
+
ngx_http_scgi_main_conf_t *smcf;
|
869
|
+
ngx_int_t rc;
|
870
|
+
# endif /* nginx_version >= 1007009 */
|
871
|
+
|
872
|
+
if (ngx_http_upstream_create(r) != NGX_OK) {
|
873
|
+
return NGX_HTTP_INTERNAL_SERVER_ERROR;
|
874
|
+
}
|
875
|
+
|
876
|
+
slcf = ngx_http_get_module_loc_conf(r, ngx_http_scgi_module);
|
877
|
+
|
878
|
+
r->upstream->conf = &slcf->upstream;
|
879
|
+
|
880
|
+
# if (nginx_version >= 1007009)
|
881
|
+
|
882
|
+
smcf = ngx_http_get_module_main_conf(r, ngx_http_scgi_module);
|
883
|
+
|
884
|
+
r->upstream->caches = &smcf->caches;
|
885
|
+
|
886
|
+
rc = ngx_http_cache_purge_cache_get(r, r->upstream, &cache);
|
887
|
+
if (rc != NGX_OK) {
|
888
|
+
return rc;
|
889
|
+
}
|
890
|
+
|
891
|
+
# else
|
892
|
+
|
893
|
+
cache = slcf->upstream.cache->data;
|
894
|
+
|
895
|
+
# endif /* nginx_version >= 1007009 */
|
896
|
+
|
897
|
+
if (ngx_http_cache_purge_init(r, cache, &slcf->cache_key) != NGX_OK) {
|
898
|
+
return NGX_HTTP_INTERNAL_SERVER_ERROR;
|
899
|
+
}
|
900
|
+
|
901
|
+
# if (nginx_version >= 8011)
|
902
|
+
r->main->count++;
|
903
|
+
# endif
|
904
|
+
|
905
|
+
ngx_http_cache_purge_handler(r);
|
906
|
+
|
907
|
+
return NGX_DONE;
|
908
|
+
}
|
909
|
+
# endif /* NGX_HTTP_SCGI */
|
910
|
+
|
911
|
+
# if (NGX_HTTP_UWSGI)
|
912
|
+
extern ngx_module_t ngx_http_uwsgi_module;
|
913
|
+
|
914
|
+
# if (nginx_version >= 1007009)
|
915
|
+
|
916
|
+
typedef struct {
|
917
|
+
ngx_array_t caches; /* ngx_http_file_cache_t * */
|
918
|
+
} ngx_http_uwsgi_main_conf_t;
|
919
|
+
|
920
|
+
# endif /* nginx_version >= 1007009 */
|
921
|
+
|
922
|
+
# if (nginx_version >= 1007008)
|
923
|
+
|
924
|
+
typedef struct {
|
925
|
+
ngx_array_t *flushes;
|
926
|
+
ngx_array_t *lengths;
|
927
|
+
ngx_array_t *values;
|
928
|
+
ngx_uint_t number;
|
929
|
+
ngx_hash_t hash;
|
930
|
+
} ngx_http_uwsgi_params_t;
|
931
|
+
|
932
|
+
# endif /* nginx_version >= 1007008 */
|
933
|
+
|
934
|
+
typedef struct {
|
935
|
+
ngx_http_upstream_conf_t upstream;
|
936
|
+
|
937
|
+
# if (nginx_version >= 1007008)
|
938
|
+
ngx_http_uwsgi_params_t params;
|
939
|
+
ngx_http_uwsgi_params_t params_cache;
|
940
|
+
ngx_array_t *params_source;
|
941
|
+
# else
|
942
|
+
ngx_array_t *flushes;
|
943
|
+
ngx_array_t *params_len;
|
944
|
+
ngx_array_t *params;
|
945
|
+
ngx_array_t *params_source;
|
946
|
+
|
947
|
+
ngx_hash_t headers_hash;
|
948
|
+
ngx_uint_t header_params;
|
949
|
+
# endif /* nginx_version >= 1007008 */
|
950
|
+
|
951
|
+
ngx_array_t *uwsgi_lengths;
|
952
|
+
ngx_array_t *uwsgi_values;
|
953
|
+
|
954
|
+
ngx_http_complex_value_t cache_key;
|
955
|
+
|
956
|
+
ngx_str_t uwsgi_string;
|
957
|
+
|
958
|
+
ngx_uint_t modifier1;
|
959
|
+
ngx_uint_t modifier2;
|
960
|
+
|
961
|
+
# if (NGX_HTTP_SSL)
|
962
|
+
# if (nginx_version >= 1005008)
|
963
|
+
ngx_uint_t ssl;
|
964
|
+
ngx_uint_t ssl_protocols;
|
965
|
+
ngx_str_t ssl_ciphers;
|
966
|
+
# endif /* nginx_version >= 1005008 */
|
967
|
+
# if (nginx_version >= 1007000)
|
968
|
+
ngx_uint_t ssl_verify_depth;
|
969
|
+
ngx_str_t ssl_trusted_certificate;
|
970
|
+
ngx_str_t ssl_crl;
|
971
|
+
# endif /* nginx_version >= 1007000 */
|
972
|
+
# if (nginx_version >= 1007008)
|
973
|
+
ngx_str_t ssl_certificate;
|
974
|
+
ngx_str_t ssl_certificate_key;
|
975
|
+
ngx_array_t *ssl_passwords;
|
976
|
+
# endif /* nginx_version >= 1007008 */
|
977
|
+
# endif
|
978
|
+
} ngx_http_uwsgi_loc_conf_t;
|
979
|
+
|
980
|
+
char *
|
981
|
+
ngx_http_uwsgi_cache_purge_conf(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
|
982
|
+
{
|
983
|
+
ngx_http_compile_complex_value_t ccv;
|
984
|
+
ngx_http_cache_purge_loc_conf_t *cplcf;
|
985
|
+
ngx_http_core_loc_conf_t *clcf;
|
986
|
+
ngx_http_uwsgi_loc_conf_t *ulcf;
|
987
|
+
ngx_str_t *value;
|
988
|
+
# if (nginx_version >= 1007009)
|
989
|
+
ngx_http_complex_value_t cv;
|
990
|
+
# endif /* nginx_version >= 1007009 */
|
991
|
+
|
992
|
+
cplcf = ngx_http_conf_get_module_loc_conf(cf, ngx_http_cache_purge_module);
|
993
|
+
|
994
|
+
/* check for duplicates / collisions */
|
995
|
+
if (cplcf->uwsgi.enable != NGX_CONF_UNSET) {
|
996
|
+
return "is duplicate";
|
997
|
+
}
|
998
|
+
|
999
|
+
if (cf->args->nelts != 3) {
|
1000
|
+
return ngx_http_cache_purge_conf(cf, &cplcf->uwsgi);
|
1001
|
+
}
|
1002
|
+
|
1003
|
+
if (cf->cmd_type & (NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF)) {
|
1004
|
+
return "(separate location syntax) is not allowed here";
|
1005
|
+
}
|
1006
|
+
|
1007
|
+
ulcf = ngx_http_conf_get_module_loc_conf(cf, ngx_http_uwsgi_module);
|
1008
|
+
|
1009
|
+
# if (nginx_version >= 1007009)
|
1010
|
+
if (ulcf->upstream.cache > 0)
|
1011
|
+
# else
|
1012
|
+
if (ulcf->upstream.cache != NGX_CONF_UNSET_PTR
|
1013
|
+
&& ulcf->upstream.cache != NULL)
|
1014
|
+
# endif /* nginx_version >= 1007009 */
|
1015
|
+
{
|
1016
|
+
return "is incompatible with \"uwsgi_cache\"";
|
1017
|
+
}
|
1018
|
+
|
1019
|
+
if (ulcf->upstream.upstream || ulcf->uwsgi_lengths) {
|
1020
|
+
return "is incompatible with \"uwsgi_pass\"";
|
1021
|
+
}
|
1022
|
+
|
1023
|
+
if (ulcf->upstream.store > 0
|
1024
|
+
# if (nginx_version < 1007009)
|
1025
|
+
|| ulcf->upstream.store_lengths
|
1026
|
+
# endif /* nginx_version >= 1007009 */
|
1027
|
+
)
|
1028
|
+
{
|
1029
|
+
return "is incompatible with \"uwsgi_store\"";
|
1030
|
+
}
|
1031
|
+
|
1032
|
+
value = cf->args->elts;
|
1033
|
+
|
1034
|
+
/* set uwsgi_cache part */
|
1035
|
+
# if (nginx_version >= 1007009)
|
1036
|
+
|
1037
|
+
ulcf->upstream.cache = 1;
|
1038
|
+
|
1039
|
+
ngx_memzero(&ccv, sizeof(ngx_http_compile_complex_value_t));
|
1040
|
+
|
1041
|
+
ccv.cf = cf;
|
1042
|
+
ccv.value = &value[1];
|
1043
|
+
ccv.complex_value = &cv;
|
1044
|
+
|
1045
|
+
if (ngx_http_compile_complex_value(&ccv) != NGX_OK) {
|
1046
|
+
return NGX_CONF_ERROR;
|
1047
|
+
}
|
1048
|
+
|
1049
|
+
if (cv.lengths != NULL) {
|
1050
|
+
|
1051
|
+
ulcf->upstream.cache_value = ngx_palloc(cf->pool,
|
1052
|
+
sizeof(ngx_http_complex_value_t));
|
1053
|
+
if (ulcf->upstream.cache_value == NULL) {
|
1054
|
+
return NGX_CONF_ERROR;
|
1055
|
+
}
|
1056
|
+
|
1057
|
+
*ulcf->upstream.cache_value = cv;
|
1058
|
+
|
1059
|
+
} else {
|
1060
|
+
|
1061
|
+
ulcf->upstream.cache_zone = ngx_shared_memory_add(cf, &value[1], 0,
|
1062
|
+
&ngx_http_uwsgi_module);
|
1063
|
+
if (ulcf->upstream.cache_zone == NULL) {
|
1064
|
+
return NGX_CONF_ERROR;
|
1065
|
+
}
|
1066
|
+
}
|
1067
|
+
|
1068
|
+
# else
|
1069
|
+
|
1070
|
+
ulcf->upstream.cache = ngx_shared_memory_add(cf, &value[1], 0,
|
1071
|
+
&ngx_http_uwsgi_module);
|
1072
|
+
if (ulcf->upstream.cache == NULL) {
|
1073
|
+
return NGX_CONF_ERROR;
|
1074
|
+
}
|
1075
|
+
|
1076
|
+
# endif /* nginx_version >= 1007009 */
|
1077
|
+
|
1078
|
+
/* set uwsgi_cache_key part */
|
1079
|
+
ngx_memzero(&ccv, sizeof(ngx_http_compile_complex_value_t));
|
1080
|
+
|
1081
|
+
ccv.cf = cf;
|
1082
|
+
ccv.value = &value[2];
|
1083
|
+
ccv.complex_value = &ulcf->cache_key;
|
1084
|
+
|
1085
|
+
if (ngx_http_compile_complex_value(&ccv) != NGX_OK) {
|
1086
|
+
return NGX_CONF_ERROR;
|
1087
|
+
}
|
1088
|
+
|
1089
|
+
/* set handler */
|
1090
|
+
clcf = ngx_http_conf_get_module_loc_conf(cf, ngx_http_core_module);
|
1091
|
+
|
1092
|
+
cplcf->uwsgi.enable = 0;
|
1093
|
+
clcf->handler = ngx_http_uwsgi_cache_purge_handler;
|
1094
|
+
|
1095
|
+
return NGX_CONF_OK;
|
1096
|
+
}
|
1097
|
+
|
1098
|
+
ngx_int_t
|
1099
|
+
ngx_http_uwsgi_cache_purge_handler(ngx_http_request_t *r)
|
1100
|
+
{
|
1101
|
+
ngx_http_file_cache_t *cache;
|
1102
|
+
ngx_http_uwsgi_loc_conf_t *ulcf;
|
1103
|
+
# if (nginx_version >= 1007009)
|
1104
|
+
ngx_http_uwsgi_main_conf_t *umcf;
|
1105
|
+
ngx_int_t rc;
|
1106
|
+
# endif /* nginx_version >= 1007009 */
|
1107
|
+
|
1108
|
+
if (ngx_http_upstream_create(r) != NGX_OK) {
|
1109
|
+
return NGX_HTTP_INTERNAL_SERVER_ERROR;
|
1110
|
+
}
|
1111
|
+
|
1112
|
+
ulcf = ngx_http_get_module_loc_conf(r, ngx_http_uwsgi_module);
|
1113
|
+
|
1114
|
+
r->upstream->conf = &ulcf->upstream;
|
1115
|
+
|
1116
|
+
# if (nginx_version >= 1007009)
|
1117
|
+
|
1118
|
+
umcf = ngx_http_get_module_main_conf(r, ngx_http_uwsgi_module);
|
1119
|
+
|
1120
|
+
r->upstream->caches = &umcf->caches;
|
1121
|
+
|
1122
|
+
rc = ngx_http_cache_purge_cache_get(r, r->upstream, &cache);
|
1123
|
+
if (rc != NGX_OK) {
|
1124
|
+
return rc;
|
1125
|
+
}
|
1126
|
+
|
1127
|
+
# else
|
1128
|
+
|
1129
|
+
cache = ulcf->upstream.cache->data;
|
1130
|
+
|
1131
|
+
# endif /* nginx_version >= 1007009 */
|
1132
|
+
|
1133
|
+
if (ngx_http_cache_purge_init(r, cache, &ulcf->cache_key) != NGX_OK) {
|
1134
|
+
return NGX_HTTP_INTERNAL_SERVER_ERROR;
|
1135
|
+
}
|
1136
|
+
|
1137
|
+
# if (nginx_version >= 8011)
|
1138
|
+
r->main->count++;
|
1139
|
+
# endif
|
1140
|
+
|
1141
|
+
ngx_http_cache_purge_handler(r);
|
1142
|
+
|
1143
|
+
return NGX_DONE;
|
1144
|
+
}
|
1145
|
+
# endif /* NGX_HTTP_UWSGI */
|
1146
|
+
|
1147
|
+
ngx_int_t
|
1148
|
+
ngx_http_cache_purge_access_handler(ngx_http_request_t *r)
|
1149
|
+
{
|
1150
|
+
ngx_http_cache_purge_loc_conf_t *cplcf;
|
1151
|
+
|
1152
|
+
cplcf = ngx_http_get_module_loc_conf(r, ngx_http_cache_purge_module);
|
1153
|
+
|
1154
|
+
if (r->method_name.len != cplcf->conf->method.len
|
1155
|
+
|| (ngx_strncmp(r->method_name.data, cplcf->conf->method.data,
|
1156
|
+
r->method_name.len)))
|
1157
|
+
{
|
1158
|
+
return cplcf->original_handler(r);
|
1159
|
+
}
|
1160
|
+
|
1161
|
+
if ((cplcf->conf->access || cplcf->conf->access6)
|
1162
|
+
&& ngx_http_cache_purge_access(cplcf->conf->access,
|
1163
|
+
cplcf->conf->access6,
|
1164
|
+
r->connection->sockaddr) != NGX_OK)
|
1165
|
+
{
|
1166
|
+
return NGX_HTTP_FORBIDDEN;
|
1167
|
+
}
|
1168
|
+
|
1169
|
+
if (cplcf->handler == NULL) {
|
1170
|
+
return NGX_HTTP_NOT_FOUND;
|
1171
|
+
}
|
1172
|
+
|
1173
|
+
return cplcf->handler(r);
|
1174
|
+
}
|
1175
|
+
|
1176
|
+
ngx_int_t
|
1177
|
+
ngx_http_cache_purge_access(ngx_array_t *access, ngx_array_t *access6,
|
1178
|
+
struct sockaddr *s)
|
1179
|
+
{
|
1180
|
+
in_addr_t inaddr;
|
1181
|
+
ngx_in_cidr_t *a;
|
1182
|
+
ngx_uint_t i;
|
1183
|
+
# if (NGX_HAVE_INET6)
|
1184
|
+
struct in6_addr *inaddr6;
|
1185
|
+
ngx_in6_cidr_t *a6;
|
1186
|
+
u_char *p;
|
1187
|
+
ngx_uint_t n;
|
1188
|
+
# endif /* NGX_HAVE_INET6 */
|
1189
|
+
|
1190
|
+
switch (s->sa_family) {
|
1191
|
+
case AF_INET:
|
1192
|
+
if (access == NULL) {
|
1193
|
+
return NGX_DECLINED;
|
1194
|
+
}
|
1195
|
+
|
1196
|
+
inaddr = ((struct sockaddr_in *) s)->sin_addr.s_addr;
|
1197
|
+
|
1198
|
+
# if (NGX_HAVE_INET6)
|
1199
|
+
ipv4:
|
1200
|
+
# endif /* NGX_HAVE_INET6 */
|
1201
|
+
|
1202
|
+
a = access->elts;
|
1203
|
+
for (i = 0; i < access->nelts; i++) {
|
1204
|
+
if ((inaddr & a[i].mask) == a[i].addr) {
|
1205
|
+
return NGX_OK;
|
1206
|
+
}
|
1207
|
+
}
|
1208
|
+
|
1209
|
+
return NGX_DECLINED;
|
1210
|
+
|
1211
|
+
# if (NGX_HAVE_INET6)
|
1212
|
+
case AF_INET6:
|
1213
|
+
inaddr6 = &((struct sockaddr_in6 *) s)->sin6_addr;
|
1214
|
+
p = inaddr6->s6_addr;
|
1215
|
+
|
1216
|
+
if (access && IN6_IS_ADDR_V4MAPPED(inaddr6)) {
|
1217
|
+
inaddr = p[12] << 24;
|
1218
|
+
inaddr += p[13] << 16;
|
1219
|
+
inaddr += p[14] << 8;
|
1220
|
+
inaddr += p[15];
|
1221
|
+
inaddr = htonl(inaddr);
|
1222
|
+
|
1223
|
+
goto ipv4;
|
1224
|
+
}
|
1225
|
+
|
1226
|
+
if (access6 == NULL) {
|
1227
|
+
return NGX_DECLINED;
|
1228
|
+
}
|
1229
|
+
|
1230
|
+
a6 = access6->elts;
|
1231
|
+
for (i = 0; i < access6->nelts; i++) {
|
1232
|
+
for (n = 0; n < 16; n++) {
|
1233
|
+
if ((p[n] & a6[i].mask.s6_addr[n]) != a6[i].addr.s6_addr[n]) {
|
1234
|
+
goto next;
|
1235
|
+
}
|
1236
|
+
}
|
1237
|
+
|
1238
|
+
return NGX_OK;
|
1239
|
+
|
1240
|
+
next:
|
1241
|
+
continue;
|
1242
|
+
}
|
1243
|
+
|
1244
|
+
return NGX_DECLINED;
|
1245
|
+
# endif /* NGX_HAVE_INET6 */
|
1246
|
+
}
|
1247
|
+
|
1248
|
+
return NGX_DECLINED;
|
1249
|
+
}
|
1250
|
+
|
1251
|
+
ngx_int_t
|
1252
|
+
ngx_http_cache_purge_send_response(ngx_http_request_t *r)
|
1253
|
+
{
|
1254
|
+
ngx_chain_t out;
|
1255
|
+
ngx_buf_t *b;
|
1256
|
+
ngx_str_t *key;
|
1257
|
+
ngx_int_t rc;
|
1258
|
+
size_t len;
|
1259
|
+
|
1260
|
+
key = r->cache->keys.elts;
|
1261
|
+
|
1262
|
+
len = sizeof(ngx_http_cache_purge_success_page_top) - 1
|
1263
|
+
+ sizeof(ngx_http_cache_purge_success_page_tail) - 1
|
1264
|
+
+ sizeof("<br>Key : ") - 1 + sizeof(CRLF "<br>Path: ") - 1
|
1265
|
+
+ key[0].len + r->cache->file.name.len;
|
1266
|
+
|
1267
|
+
r->headers_out.content_type.len = sizeof("text/html") - 1;
|
1268
|
+
r->headers_out.content_type.data = (u_char *) "text/html";
|
1269
|
+
r->headers_out.status = NGX_HTTP_OK;
|
1270
|
+
r->headers_out.content_length_n = len;
|
1271
|
+
|
1272
|
+
if (r->method == NGX_HTTP_HEAD) {
|
1273
|
+
rc = ngx_http_send_header(r);
|
1274
|
+
if (rc == NGX_ERROR || rc > NGX_OK || r->header_only) {
|
1275
|
+
return rc;
|
1276
|
+
}
|
1277
|
+
}
|
1278
|
+
|
1279
|
+
b = ngx_create_temp_buf(r->pool, len);
|
1280
|
+
if (b == NULL) {
|
1281
|
+
return NGX_HTTP_INTERNAL_SERVER_ERROR;
|
1282
|
+
}
|
1283
|
+
|
1284
|
+
out.buf = b;
|
1285
|
+
out.next = NULL;
|
1286
|
+
|
1287
|
+
b->last = ngx_cpymem(b->last, ngx_http_cache_purge_success_page_top,
|
1288
|
+
sizeof(ngx_http_cache_purge_success_page_top) - 1);
|
1289
|
+
b->last = ngx_cpymem(b->last, "<br>Key : ", sizeof("<br>Key : ") - 1);
|
1290
|
+
b->last = ngx_cpymem(b->last, key[0].data, key[0].len);
|
1291
|
+
b->last = ngx_cpymem(b->last, CRLF "<br>Path: ",
|
1292
|
+
sizeof(CRLF "<br>Path: ") - 1);
|
1293
|
+
b->last = ngx_cpymem(b->last, r->cache->file.name.data,
|
1294
|
+
r->cache->file.name.len);
|
1295
|
+
b->last = ngx_cpymem(b->last, ngx_http_cache_purge_success_page_tail,
|
1296
|
+
sizeof(ngx_http_cache_purge_success_page_tail) - 1);
|
1297
|
+
b->last_buf = 1;
|
1298
|
+
|
1299
|
+
rc = ngx_http_send_header(r);
|
1300
|
+
if (rc == NGX_ERROR || rc > NGX_OK || r->header_only) {
|
1301
|
+
return rc;
|
1302
|
+
}
|
1303
|
+
|
1304
|
+
return ngx_http_output_filter(r, &out);
|
1305
|
+
}
|
1306
|
+
|
1307
|
+
# if (nginx_version >= 1007009)
|
1308
|
+
|
1309
|
+
/*
|
1310
|
+
* Based on: ngx_http_upstream.c/ngx_http_upstream_cache_get
|
1311
|
+
* Copyright (C) Igor Sysoev
|
1312
|
+
* Copyright (C) Nginx, Inc.
|
1313
|
+
*/
|
1314
|
+
ngx_int_t
|
1315
|
+
ngx_http_cache_purge_cache_get(ngx_http_request_t *r, ngx_http_upstream_t *u,
|
1316
|
+
ngx_http_file_cache_t **cache)
|
1317
|
+
{
|
1318
|
+
ngx_str_t *name, val;
|
1319
|
+
ngx_uint_t i;
|
1320
|
+
ngx_http_file_cache_t **caches;
|
1321
|
+
|
1322
|
+
if (u->conf->cache_zone) {
|
1323
|
+
*cache = u->conf->cache_zone->data;
|
1324
|
+
return NGX_OK;
|
1325
|
+
}
|
1326
|
+
|
1327
|
+
if (ngx_http_complex_value(r, u->conf->cache_value, &val) != NGX_OK) {
|
1328
|
+
return NGX_ERROR;
|
1329
|
+
}
|
1330
|
+
|
1331
|
+
if (val.len == 0
|
1332
|
+
|| (val.len == 3 && ngx_strncmp(val.data, "off", 3) == 0))
|
1333
|
+
{
|
1334
|
+
return NGX_DECLINED;
|
1335
|
+
}
|
1336
|
+
|
1337
|
+
caches = u->caches->elts;
|
1338
|
+
|
1339
|
+
for (i = 0; i < u->caches->nelts; i++) {
|
1340
|
+
name = &caches[i]->shm_zone->shm.name;
|
1341
|
+
|
1342
|
+
if (name->len == val.len
|
1343
|
+
&& ngx_strncmp(name->data, val.data, val.len) == 0)
|
1344
|
+
{
|
1345
|
+
*cache = caches[i];
|
1346
|
+
return NGX_OK;
|
1347
|
+
}
|
1348
|
+
}
|
1349
|
+
|
1350
|
+
ngx_log_error(NGX_LOG_ERR, r->connection->log, 0,
|
1351
|
+
"cache \"%V\" not found", &val);
|
1352
|
+
|
1353
|
+
return NGX_ERROR;
|
1354
|
+
}
|
1355
|
+
|
1356
|
+
# endif /* nginx_version >= 1007009 */
|
1357
|
+
|
1358
|
+
ngx_int_t
|
1359
|
+
ngx_http_cache_purge_init(ngx_http_request_t *r, ngx_http_file_cache_t *cache,
|
1360
|
+
ngx_http_complex_value_t *cache_key)
|
1361
|
+
{
|
1362
|
+
ngx_http_cache_t *c;
|
1363
|
+
ngx_str_t *key;
|
1364
|
+
ngx_int_t rc;
|
1365
|
+
|
1366
|
+
rc = ngx_http_discard_request_body(r);
|
1367
|
+
if (rc != NGX_OK) {
|
1368
|
+
return NGX_ERROR;
|
1369
|
+
}
|
1370
|
+
|
1371
|
+
c = ngx_pcalloc(r->pool, sizeof(ngx_http_cache_t));
|
1372
|
+
if (c == NULL) {
|
1373
|
+
return NGX_ERROR;
|
1374
|
+
}
|
1375
|
+
|
1376
|
+
rc = ngx_array_init(&c->keys, r->pool, 1, sizeof(ngx_str_t));
|
1377
|
+
if (rc != NGX_OK) {
|
1378
|
+
return NGX_ERROR;
|
1379
|
+
}
|
1380
|
+
|
1381
|
+
key = ngx_array_push(&c->keys);
|
1382
|
+
if (key == NULL) {
|
1383
|
+
return NGX_ERROR;
|
1384
|
+
}
|
1385
|
+
|
1386
|
+
rc = ngx_http_complex_value(r, cache_key, key);
|
1387
|
+
if (rc != NGX_OK) {
|
1388
|
+
return NGX_ERROR;
|
1389
|
+
}
|
1390
|
+
|
1391
|
+
r->cache = c;
|
1392
|
+
c->body_start = ngx_pagesize;
|
1393
|
+
c->file_cache = cache;
|
1394
|
+
c->file.log = r->connection->log;
|
1395
|
+
|
1396
|
+
ngx_http_file_cache_create_key(r);
|
1397
|
+
|
1398
|
+
return NGX_OK;
|
1399
|
+
}
|
1400
|
+
|
1401
|
+
void
|
1402
|
+
ngx_http_cache_purge_handler(ngx_http_request_t *r)
|
1403
|
+
{
|
1404
|
+
ngx_int_t rc;
|
1405
|
+
|
1406
|
+
# if (NGX_HAVE_FILE_AIO)
|
1407
|
+
if (r->aio) {
|
1408
|
+
return;
|
1409
|
+
}
|
1410
|
+
# endif
|
1411
|
+
|
1412
|
+
rc = ngx_http_file_cache_purge(r);
|
1413
|
+
|
1414
|
+
ngx_log_debug2(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
|
1415
|
+
"http file cache purge: %i, \"%s\"",
|
1416
|
+
rc, r->cache->file.name.data);
|
1417
|
+
|
1418
|
+
switch (rc) {
|
1419
|
+
case NGX_OK:
|
1420
|
+
r->write_event_handler = ngx_http_request_empty_handler;
|
1421
|
+
ngx_http_finalize_request(r, ngx_http_cache_purge_send_response(r));
|
1422
|
+
return;
|
1423
|
+
case NGX_DECLINED:
|
1424
|
+
ngx_http_finalize_request(r, NGX_HTTP_NOT_FOUND);
|
1425
|
+
return;
|
1426
|
+
# if (NGX_HAVE_FILE_AIO)
|
1427
|
+
case NGX_AGAIN:
|
1428
|
+
r->write_event_handler = ngx_http_cache_purge_handler;
|
1429
|
+
return;
|
1430
|
+
# endif
|
1431
|
+
default:
|
1432
|
+
ngx_http_finalize_request(r, NGX_HTTP_INTERNAL_SERVER_ERROR);
|
1433
|
+
}
|
1434
|
+
}
|
1435
|
+
|
1436
|
+
ngx_int_t
|
1437
|
+
ngx_http_file_cache_purge(ngx_http_request_t *r)
|
1438
|
+
{
|
1439
|
+
ngx_http_file_cache_t *cache;
|
1440
|
+
ngx_http_cache_t *c;
|
1441
|
+
|
1442
|
+
switch (ngx_http_file_cache_open(r)) {
|
1443
|
+
case NGX_OK:
|
1444
|
+
case NGX_HTTP_CACHE_STALE:
|
1445
|
+
# if (nginx_version >= 8001) \
|
1446
|
+
|| ((nginx_version < 8000) && (nginx_version >= 7060))
|
1447
|
+
case NGX_HTTP_CACHE_UPDATING:
|
1448
|
+
# endif
|
1449
|
+
break;
|
1450
|
+
case NGX_DECLINED:
|
1451
|
+
return NGX_DECLINED;
|
1452
|
+
# if (NGX_HAVE_FILE_AIO)
|
1453
|
+
case NGX_AGAIN:
|
1454
|
+
return NGX_AGAIN;
|
1455
|
+
# endif
|
1456
|
+
default:
|
1457
|
+
return NGX_ERROR;
|
1458
|
+
}
|
1459
|
+
|
1460
|
+
c = r->cache;
|
1461
|
+
cache = c->file_cache;
|
1462
|
+
|
1463
|
+
/*
|
1464
|
+
* delete file from disk but *keep* in-memory node,
|
1465
|
+
* because other requests might still point to it.
|
1466
|
+
*/
|
1467
|
+
|
1468
|
+
ngx_shmtx_lock(&cache->shpool->mutex);
|
1469
|
+
|
1470
|
+
if (!c->node->exists) {
|
1471
|
+
/* race between concurrent purges, backoff */
|
1472
|
+
ngx_shmtx_unlock(&cache->shpool->mutex);
|
1473
|
+
return NGX_DECLINED;
|
1474
|
+
}
|
1475
|
+
|
1476
|
+
# if (nginx_version >= 1000001)
|
1477
|
+
cache->sh->size -= c->node->fs_size;
|
1478
|
+
c->node->fs_size = 0;
|
1479
|
+
# else
|
1480
|
+
cache->sh->size -= (c->node->length + cache->bsize - 1) / cache->bsize;
|
1481
|
+
c->node->length = 0;
|
1482
|
+
# endif
|
1483
|
+
|
1484
|
+
c->node->exists = 0;
|
1485
|
+
# if (nginx_version >= 8001) \
|
1486
|
+
|| ((nginx_version < 8000) && (nginx_version >= 7060))
|
1487
|
+
c->node->updating = 0;
|
1488
|
+
# endif
|
1489
|
+
|
1490
|
+
ngx_shmtx_unlock(&cache->shpool->mutex);
|
1491
|
+
|
1492
|
+
if (ngx_delete_file(c->file.name.data) == NGX_FILE_ERROR) {
|
1493
|
+
/* entry in error log is enough, don't notice client */
|
1494
|
+
ngx_log_error(NGX_LOG_CRIT, r->connection->log, ngx_errno,
|
1495
|
+
ngx_delete_file_n " \"%s\" failed", c->file.name.data);
|
1496
|
+
}
|
1497
|
+
|
1498
|
+
/* file deleted from cache */
|
1499
|
+
return NGX_OK;
|
1500
|
+
}
|
1501
|
+
|
1502
|
+
char *
|
1503
|
+
ngx_http_cache_purge_conf(ngx_conf_t *cf, ngx_http_cache_purge_conf_t *cpcf)
|
1504
|
+
{
|
1505
|
+
ngx_cidr_t cidr;
|
1506
|
+
ngx_in_cidr_t *access;
|
1507
|
+
# if (NGX_HAVE_INET6)
|
1508
|
+
ngx_in6_cidr_t *access6;
|
1509
|
+
# endif /* NGX_HAVE_INET6 */
|
1510
|
+
ngx_str_t *value;
|
1511
|
+
ngx_int_t rc;
|
1512
|
+
ngx_uint_t i;
|
1513
|
+
|
1514
|
+
value = cf->args->elts;
|
1515
|
+
|
1516
|
+
if (ngx_strcmp(value[1].data, "off") == 0) {
|
1517
|
+
cpcf->enable = 0;
|
1518
|
+
return NGX_CONF_OK;
|
1519
|
+
|
1520
|
+
} else if (ngx_strcmp(value[1].data, "on") == 0) {
|
1521
|
+
ngx_str_set(&cpcf->method, "PURGE");
|
1522
|
+
|
1523
|
+
} else {
|
1524
|
+
cpcf->method = value[1];
|
1525
|
+
}
|
1526
|
+
|
1527
|
+
if (cf->args->nelts < 4) {
|
1528
|
+
cpcf->enable = 1;
|
1529
|
+
return NGX_CONF_OK;
|
1530
|
+
}
|
1531
|
+
|
1532
|
+
/* sanity check */
|
1533
|
+
if (ngx_strcmp(value[2].data, "from") != 0) {
|
1534
|
+
ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
|
1535
|
+
"invalid parameter \"%V\", expected"
|
1536
|
+
" \"from\" keyword", &value[2]);
|
1537
|
+
return NGX_CONF_ERROR;
|
1538
|
+
}
|
1539
|
+
|
1540
|
+
if (ngx_strcmp(value[3].data, "all") == 0) {
|
1541
|
+
cpcf->enable = 1;
|
1542
|
+
return NGX_CONF_OK;
|
1543
|
+
}
|
1544
|
+
|
1545
|
+
for (i = 3; i < cf->args->nelts; i++) {
|
1546
|
+
rc = ngx_ptocidr(&value[i], &cidr);
|
1547
|
+
|
1548
|
+
if (rc == NGX_ERROR) {
|
1549
|
+
ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
|
1550
|
+
"invalid parameter \"%V\"", &value[i]);
|
1551
|
+
return NGX_CONF_ERROR;
|
1552
|
+
}
|
1553
|
+
|
1554
|
+
if (rc == NGX_DONE) {
|
1555
|
+
ngx_conf_log_error(NGX_LOG_WARN, cf, 0,
|
1556
|
+
"low address bits of %V are meaningless",
|
1557
|
+
&value[i]);
|
1558
|
+
}
|
1559
|
+
|
1560
|
+
switch (cidr.family) {
|
1561
|
+
case AF_INET:
|
1562
|
+
if (cpcf->access == NULL) {
|
1563
|
+
cpcf->access = ngx_array_create(cf->pool, cf->args->nelts - 3,
|
1564
|
+
sizeof(ngx_in_cidr_t));
|
1565
|
+
if (cpcf->access == NULL) {
|
1566
|
+
return NGX_CONF_ERROR;
|
1567
|
+
}
|
1568
|
+
}
|
1569
|
+
|
1570
|
+
access = ngx_array_push(cpcf->access);
|
1571
|
+
if (access == NULL) {
|
1572
|
+
return NGX_CONF_ERROR;
|
1573
|
+
}
|
1574
|
+
|
1575
|
+
access->mask = cidr.u.in.mask;
|
1576
|
+
access->addr = cidr.u.in.addr;
|
1577
|
+
|
1578
|
+
break;
|
1579
|
+
|
1580
|
+
# if (NGX_HAVE_INET6)
|
1581
|
+
case AF_INET6:
|
1582
|
+
if (cpcf->access6 == NULL) {
|
1583
|
+
cpcf->access6 = ngx_array_create(cf->pool, cf->args->nelts - 3,
|
1584
|
+
sizeof(ngx_in6_cidr_t));
|
1585
|
+
if (cpcf->access6 == NULL) {
|
1586
|
+
return NGX_CONF_ERROR;
|
1587
|
+
}
|
1588
|
+
}
|
1589
|
+
|
1590
|
+
access6 = ngx_array_push(cpcf->access6);
|
1591
|
+
if (access6 == NULL) {
|
1592
|
+
return NGX_CONF_ERROR;
|
1593
|
+
}
|
1594
|
+
|
1595
|
+
access6->mask = cidr.u.in6.mask;
|
1596
|
+
access6->addr = cidr.u.in6.addr;
|
1597
|
+
|
1598
|
+
break;
|
1599
|
+
# endif /* NGX_HAVE_INET6 */
|
1600
|
+
}
|
1601
|
+
}
|
1602
|
+
|
1603
|
+
cpcf->enable = 1;
|
1604
|
+
|
1605
|
+
return NGX_CONF_OK;
|
1606
|
+
}
|
1607
|
+
|
1608
|
+
void
|
1609
|
+
ngx_http_cache_purge_merge_conf(ngx_http_cache_purge_conf_t *conf,
|
1610
|
+
ngx_http_cache_purge_conf_t *prev)
|
1611
|
+
{
|
1612
|
+
if (conf->enable == NGX_CONF_UNSET) {
|
1613
|
+
if (prev->enable == 1) {
|
1614
|
+
conf->enable = prev->enable;
|
1615
|
+
conf->method = prev->method;
|
1616
|
+
conf->access = prev->access;
|
1617
|
+
conf->access6 = prev->access6;
|
1618
|
+
|
1619
|
+
} else {
|
1620
|
+
conf->enable = 0;
|
1621
|
+
}
|
1622
|
+
}
|
1623
|
+
}
|
1624
|
+
|
1625
|
+
void *
|
1626
|
+
ngx_http_cache_purge_create_loc_conf(ngx_conf_t *cf)
|
1627
|
+
{
|
1628
|
+
ngx_http_cache_purge_loc_conf_t *conf;
|
1629
|
+
|
1630
|
+
conf = ngx_pcalloc(cf->pool, sizeof(ngx_http_cache_purge_loc_conf_t));
|
1631
|
+
if (conf == NULL) {
|
1632
|
+
return NULL;
|
1633
|
+
}
|
1634
|
+
|
1635
|
+
/*
|
1636
|
+
* set by ngx_pcalloc():
|
1637
|
+
*
|
1638
|
+
* conf->*.method = { 0, NULL }
|
1639
|
+
* conf->*.access = NULL
|
1640
|
+
* conf->*.access6 = NULL
|
1641
|
+
* conf->handler = NULL
|
1642
|
+
* conf->original_handler = NULL
|
1643
|
+
*/
|
1644
|
+
|
1645
|
+
# if (NGX_HTTP_FASTCGI)
|
1646
|
+
conf->fastcgi.enable = NGX_CONF_UNSET;
|
1647
|
+
# endif /* NGX_HTTP_FASTCGI */
|
1648
|
+
# if (NGX_HTTP_PROXY)
|
1649
|
+
conf->proxy.enable = NGX_CONF_UNSET;
|
1650
|
+
# endif /* NGX_HTTP_PROXY */
|
1651
|
+
# if (NGX_HTTP_SCGI)
|
1652
|
+
conf->scgi.enable = NGX_CONF_UNSET;
|
1653
|
+
# endif /* NGX_HTTP_SCGI */
|
1654
|
+
# if (NGX_HTTP_UWSGI)
|
1655
|
+
conf->uwsgi.enable = NGX_CONF_UNSET;
|
1656
|
+
# endif /* NGX_HTTP_UWSGI */
|
1657
|
+
|
1658
|
+
conf->conf = NGX_CONF_UNSET_PTR;
|
1659
|
+
|
1660
|
+
return conf;
|
1661
|
+
}
|
1662
|
+
|
1663
|
+
char *
|
1664
|
+
ngx_http_cache_purge_merge_loc_conf(ngx_conf_t *cf, void *parent, void *child)
|
1665
|
+
{
|
1666
|
+
ngx_http_cache_purge_loc_conf_t *prev = parent;
|
1667
|
+
ngx_http_cache_purge_loc_conf_t *conf = child;
|
1668
|
+
ngx_http_core_loc_conf_t *clcf;
|
1669
|
+
# if (NGX_HTTP_FASTCGI)
|
1670
|
+
ngx_http_fastcgi_loc_conf_t *flcf;
|
1671
|
+
# endif /* NGX_HTTP_FASTCGI */
|
1672
|
+
# if (NGX_HTTP_PROXY)
|
1673
|
+
ngx_http_proxy_loc_conf_t *plcf;
|
1674
|
+
# endif /* NGX_HTTP_PROXY */
|
1675
|
+
# if (NGX_HTTP_SCGI)
|
1676
|
+
ngx_http_scgi_loc_conf_t *slcf;
|
1677
|
+
# endif /* NGX_HTTP_SCGI */
|
1678
|
+
# if (NGX_HTTP_UWSGI)
|
1679
|
+
ngx_http_uwsgi_loc_conf_t *ulcf;
|
1680
|
+
# endif /* NGX_HTTP_UWSGI */
|
1681
|
+
|
1682
|
+
clcf = ngx_http_conf_get_module_loc_conf(cf, ngx_http_core_module);
|
1683
|
+
|
1684
|
+
# if (NGX_HTTP_FASTCGI)
|
1685
|
+
ngx_http_cache_purge_merge_conf(&conf->fastcgi, &prev->fastcgi);
|
1686
|
+
|
1687
|
+
if (conf->fastcgi.enable && clcf->handler != NULL) {
|
1688
|
+
flcf = ngx_http_conf_get_module_loc_conf(cf, ngx_http_fastcgi_module);
|
1689
|
+
|
1690
|
+
if (flcf->upstream.upstream || flcf->fastcgi_lengths) {
|
1691
|
+
conf->conf = &conf->fastcgi;
|
1692
|
+
conf->handler = flcf->upstream.cache
|
1693
|
+
? ngx_http_fastcgi_cache_purge_handler : NULL;
|
1694
|
+
conf->original_handler = clcf->handler;
|
1695
|
+
|
1696
|
+
clcf->handler = ngx_http_cache_purge_access_handler;
|
1697
|
+
|
1698
|
+
return NGX_CONF_OK;
|
1699
|
+
}
|
1700
|
+
}
|
1701
|
+
# endif /* NGX_HTTP_FASTCGI */
|
1702
|
+
|
1703
|
+
# if (NGX_HTTP_PROXY)
|
1704
|
+
ngx_http_cache_purge_merge_conf(&conf->proxy, &prev->proxy);
|
1705
|
+
|
1706
|
+
if (conf->proxy.enable && clcf->handler != NULL) {
|
1707
|
+
plcf = ngx_http_conf_get_module_loc_conf(cf, ngx_http_proxy_module);
|
1708
|
+
|
1709
|
+
if (plcf->upstream.upstream || plcf->proxy_lengths) {
|
1710
|
+
conf->conf = &conf->proxy;
|
1711
|
+
conf->handler = plcf->upstream.cache
|
1712
|
+
? ngx_http_proxy_cache_purge_handler : NULL;
|
1713
|
+
conf->original_handler = clcf->handler;
|
1714
|
+
|
1715
|
+
clcf->handler = ngx_http_cache_purge_access_handler;
|
1716
|
+
|
1717
|
+
return NGX_CONF_OK;
|
1718
|
+
}
|
1719
|
+
}
|
1720
|
+
# endif /* NGX_HTTP_PROXY */
|
1721
|
+
|
1722
|
+
# if (NGX_HTTP_SCGI)
|
1723
|
+
ngx_http_cache_purge_merge_conf(&conf->scgi, &prev->scgi);
|
1724
|
+
|
1725
|
+
if (conf->scgi.enable && clcf->handler != NULL) {
|
1726
|
+
slcf = ngx_http_conf_get_module_loc_conf(cf, ngx_http_scgi_module);
|
1727
|
+
|
1728
|
+
if (slcf->upstream.upstream || slcf->scgi_lengths) {
|
1729
|
+
conf->conf = &conf->scgi;
|
1730
|
+
conf->handler = slcf->upstream.cache
|
1731
|
+
? ngx_http_scgi_cache_purge_handler : NULL;
|
1732
|
+
conf->original_handler = clcf->handler;
|
1733
|
+
clcf->handler = ngx_http_cache_purge_access_handler;
|
1734
|
+
|
1735
|
+
return NGX_CONF_OK;
|
1736
|
+
}
|
1737
|
+
}
|
1738
|
+
# endif /* NGX_HTTP_SCGI */
|
1739
|
+
|
1740
|
+
# if (NGX_HTTP_UWSGI)
|
1741
|
+
ngx_http_cache_purge_merge_conf(&conf->uwsgi, &prev->uwsgi);
|
1742
|
+
|
1743
|
+
if (conf->uwsgi.enable && clcf->handler != NULL) {
|
1744
|
+
ulcf = ngx_http_conf_get_module_loc_conf(cf, ngx_http_uwsgi_module);
|
1745
|
+
|
1746
|
+
if (ulcf->upstream.upstream || ulcf->uwsgi_lengths) {
|
1747
|
+
conf->conf = &conf->uwsgi;
|
1748
|
+
conf->handler = ulcf->upstream.cache
|
1749
|
+
? ngx_http_uwsgi_cache_purge_handler : NULL;
|
1750
|
+
conf->original_handler = clcf->handler;
|
1751
|
+
|
1752
|
+
clcf->handler = ngx_http_cache_purge_access_handler;
|
1753
|
+
|
1754
|
+
return NGX_CONF_OK;
|
1755
|
+
}
|
1756
|
+
}
|
1757
|
+
# endif /* NGX_HTTP_UWSGI */
|
1758
|
+
|
1759
|
+
ngx_conf_merge_ptr_value(conf->conf, prev->conf, NULL);
|
1760
|
+
|
1761
|
+
if (conf->handler == NULL) {
|
1762
|
+
conf->handler = prev->handler;
|
1763
|
+
}
|
1764
|
+
|
1765
|
+
if (conf->original_handler == NULL) {
|
1766
|
+
conf->original_handler = prev->original_handler;
|
1767
|
+
}
|
1768
|
+
|
1769
|
+
return NGX_CONF_OK;
|
1770
|
+
}
|
1771
|
+
|
1772
|
+
#else /* !NGX_HTTP_CACHE */
|
1773
|
+
|
1774
|
+
static ngx_http_module_t ngx_http_cache_purge_module_ctx = {
|
1775
|
+
NULL, /* preconfiguration */
|
1776
|
+
NULL, /* postconfiguration */
|
1777
|
+
|
1778
|
+
NULL, /* create main configuration */
|
1779
|
+
NULL, /* init main configuration */
|
1780
|
+
|
1781
|
+
NULL, /* create server configuration */
|
1782
|
+
NULL, /* merge server configuration */
|
1783
|
+
|
1784
|
+
NULL, /* create location configuration */
|
1785
|
+
NULL, /* merge location configuration */
|
1786
|
+
};
|
1787
|
+
|
1788
|
+
ngx_module_t ngx_http_cache_purge_module = {
|
1789
|
+
NGX_MODULE_V1,
|
1790
|
+
&ngx_http_cache_purge_module_ctx, /* module context */
|
1791
|
+
NULL, /* module directives */
|
1792
|
+
NGX_HTTP_MODULE, /* module type */
|
1793
|
+
NULL, /* init master */
|
1794
|
+
NULL, /* init module */
|
1795
|
+
NULL, /* init process */
|
1796
|
+
NULL, /* init thread */
|
1797
|
+
NULL, /* exit thread */
|
1798
|
+
NULL, /* exit process */
|
1799
|
+
NULL, /* exit master */
|
1800
|
+
NGX_MODULE_V1_PADDING
|
1801
|
+
};
|
1802
|
+
|
1803
|
+
#endif /* NGX_HTTP_CACHE */
|