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.

Files changed (579) hide show
  1. checksums.yaml +8 -8
  2. checksums.yaml.gz.asc +7 -7
  3. data.tar.gz.asc +7 -7
  4. data/CHANGELOG +15 -0
  5. data/bin/passenger-install-apache2-module +2 -1
  6. data/bin/passenger-install-nginx-module +8 -2
  7. data/ext/apache2/Hooks.cpp +21 -2
  8. data/ext/apache2/MergeDirConfig.cpp +40 -40
  9. data/ext/common/ApplicationPool2/Group.h +14 -10
  10. data/ext/common/ApplicationPool2/Implementation.cpp +13 -7
  11. data/ext/common/ApplicationPool2/SmartSpawner.h +4 -1
  12. data/ext/common/Constants.h +1 -1
  13. data/ext/nginx/ContentHandler.c +17 -1
  14. data/lib/phusion_passenger.rb +4 -5
  15. data/lib/phusion_passenger/platform_info/depcheck_specs/libs.rb +4 -3
  16. data/lib/phusion_passenger/platform_info/openssl.rb +61 -0
  17. data/lib/phusion_passenger/standalone/runtime_installer.rb +27 -22
  18. data/packaging/debian/LICENSE.md +19 -0
  19. data/packaging/debian/README.md +320 -0
  20. data/packaging/debian/Vagrantfile +25 -0
  21. data/packaging/debian/build +210 -0
  22. data/packaging/debian/debian_specs/nginx/changelog +1989 -0
  23. data/packaging/debian/debian_specs/nginx/compat.erb +5 -0
  24. data/packaging/debian/debian_specs/nginx/conf/fastcgi.conf +25 -0
  25. data/packaging/debian/debian_specs/nginx/conf/fastcgi_params +24 -0
  26. data/packaging/debian/debian_specs/nginx/conf/koi-utf +109 -0
  27. data/packaging/debian/debian_specs/nginx/conf/koi-win +103 -0
  28. data/packaging/debian/debian_specs/nginx/conf/mime.types +89 -0
  29. data/packaging/debian/debian_specs/nginx/conf/nginx.conf.erb +97 -0
  30. data/packaging/debian/debian_specs/nginx/conf/proxy_params +4 -0
  31. data/packaging/debian/debian_specs/nginx/conf/scgi_params +16 -0
  32. data/packaging/debian/debian_specs/nginx/conf/sites-available/default.erb +93 -0
  33. data/packaging/debian/debian_specs/nginx/conf/snippets/fastcgi-php.conf +13 -0
  34. data/packaging/debian/debian_specs/nginx/conf/snippets/snakeoil.conf +5 -0
  35. data/packaging/debian/debian_specs/nginx/conf/uwsgi_params +16 -0
  36. data/packaging/debian/debian_specs/nginx/conf/win-utf +125 -0
  37. data/packaging/debian/debian_specs/nginx/control.erb +226 -0
  38. data/packaging/debian/debian_specs/nginx/copyright +196 -0
  39. data/packaging/debian/debian_specs/nginx/debian-full.lintian-overrides +1 -0
  40. data/packaging/debian/debian_specs/nginx/gbp.conf +2 -0
  41. data/packaging/debian/debian_specs/nginx/help/docs/fcgiwrap +14 -0
  42. data/packaging/debian/debian_specs/nginx/help/docs/php +119 -0
  43. data/packaging/debian/debian_specs/nginx/help/docs/support-irc +28 -0
  44. data/packaging/debian/debian_specs/nginx/help/docs/upstream +51 -0
  45. data/packaging/debian/debian_specs/nginx/help/examples/drupal +114 -0
  46. data/packaging/debian/debian_specs/nginx/help/examples/http +59 -0
  47. data/packaging/debian/debian_specs/nginx/help/examples/mail +30 -0
  48. data/packaging/debian/debian_specs/nginx/help/examples/mailman +59 -0
  49. data/packaging/debian/debian_specs/nginx/help/examples/nginx.conf +34 -0
  50. data/packaging/debian/debian_specs/nginx/help/examples/nginx_modsite +162 -0
  51. data/packaging/debian/debian_specs/nginx/help/examples/virtual_hosts +155 -0
  52. data/packaging/debian/debian_specs/nginx/help/examples/wordpress +74 -0
  53. data/packaging/debian/debian_specs/nginx/helpers.rb +41 -0
  54. data/packaging/debian/debian_specs/nginx/index-debian.html.in +32 -0
  55. data/packaging/debian/debian_specs/nginx/index-ubuntu.html.in +32 -0
  56. data/packaging/debian/debian_specs/nginx/index.html.erb +10 -0
  57. data/packaging/debian/debian_specs/nginx/modules/README.Modules-versions +65 -0
  58. data/packaging/debian/debian_specs/nginx/modules/headers-more-nginx-module/README.markdown +510 -0
  59. data/packaging/debian/debian_specs/nginx/modules/headers-more-nginx-module/config +5 -0
  60. data/packaging/debian/debian_specs/nginx/modules/headers-more-nginx-module/doc/HttpHeadersMoreModule.wiki +395 -0
  61. data/packaging/debian/debian_specs/nginx/modules/headers-more-nginx-module/src/ddebug.h +119 -0
  62. data/packaging/debian/debian_specs/nginx/modules/headers-more-nginx-module/src/ngx_http_headers_more_filter_module.c +348 -0
  63. data/packaging/debian/debian_specs/nginx/modules/headers-more-nginx-module/src/ngx_http_headers_more_filter_module.h +80 -0
  64. data/packaging/debian/debian_specs/nginx/modules/headers-more-nginx-module/src/ngx_http_headers_more_headers_in.c +826 -0
  65. data/packaging/debian/debian_specs/nginx/modules/headers-more-nginx-module/src/ngx_http_headers_more_headers_in.h +26 -0
  66. data/packaging/debian/debian_specs/nginx/modules/headers-more-nginx-module/src/ngx_http_headers_more_headers_out.c +716 -0
  67. data/packaging/debian/debian_specs/nginx/modules/headers-more-nginx-module/src/ngx_http_headers_more_headers_out.h +26 -0
  68. data/packaging/debian/debian_specs/nginx/modules/headers-more-nginx-module/src/ngx_http_headers_more_util.c +380 -0
  69. data/packaging/debian/debian_specs/nginx/modules/headers-more-nginx-module/src/ngx_http_headers_more_util.h +52 -0
  70. data/packaging/debian/debian_specs/nginx/modules/headers-more-nginx-module/util/build.sh +32 -0
  71. data/packaging/debian/debian_specs/nginx/modules/headers-more-nginx-module/valgrind.suppress +215 -0
  72. data/packaging/debian/debian_specs/nginx/modules/nginx-auth-pam/ChangeLog +35 -0
  73. data/packaging/debian/debian_specs/nginx/modules/nginx-auth-pam/LICENSE +25 -0
  74. data/packaging/debian/debian_specs/nginx/modules/nginx-auth-pam/README.md +93 -0
  75. data/packaging/debian/debian_specs/nginx/modules/nginx-auth-pam/config +4 -0
  76. data/packaging/debian/debian_specs/nginx/modules/nginx-auth-pam/ngx_http_auth_pam_module.c +462 -0
  77. data/packaging/debian/debian_specs/nginx/modules/nginx-cache-purge/CHANGES +66 -0
  78. data/packaging/debian/debian_specs/nginx/modules/nginx-cache-purge/LICENSE +26 -0
  79. data/packaging/debian/debian_specs/nginx/modules/nginx-cache-purge/README.md +171 -0
  80. data/packaging/debian/debian_specs/nginx/modules/nginx-cache-purge/TODO.md +7 -0
  81. data/packaging/debian/debian_specs/nginx/modules/nginx-cache-purge/config +21 -0
  82. data/packaging/debian/debian_specs/nginx/modules/nginx-cache-purge/ngx_cache_purge_module.c +1803 -0
  83. data/packaging/debian/debian_specs/nginx/modules/nginx-dav-ext-module/README +29 -0
  84. data/packaging/debian/debian_specs/nginx/modules/nginx-dav-ext-module/config +9 -0
  85. data/packaging/debian/debian_specs/nginx/modules/nginx-dav-ext-module/ngx_http_dav_ext_module.c +824 -0
  86. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/README +139 -0
  87. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/README_AUTO_LIB +395 -0
  88. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/TODO +1 -0
  89. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/actions/array +10 -0
  90. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/actions/palloc +8 -0
  91. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/build +597 -0
  92. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/data/action_replacements +5 -0
  93. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/data/action_types +12 -0
  94. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/data/conf_args +22 -0
  95. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/data/conf_locs +25 -0
  96. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/data/conf_macros +35 -0
  97. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/data/contexts +22 -0
  98. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/data/header_files +3 -0
  99. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/data/headers +4 -0
  100. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/data/module_dependencies +5 -0
  101. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/data/modules_optional +15 -0
  102. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/data/prefixes +2 -0
  103. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/src/array.h +7 -0
  104. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/src/conf_cmd_basic.h +43 -0
  105. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/src/conf_merge.h +78 -0
  106. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/src/palloc.h +6 -0
  107. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/text/autogen +12 -0
  108. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/config +49 -0
  109. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/docs/core/action_macros +63 -0
  110. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/docs/core/conf_cmds +62 -0
  111. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/docs/modules/set_var +124 -0
  112. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/docs/patches/more_logging_info +48 -0
  113. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/docs/upstream/list +45 -0
  114. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/examples/README +12 -0
  115. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/examples/http/set_var/config +4 -0
  116. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/examples/http/set_var/ngx_http_set_var_examples_module.c +136 -0
  117. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/ngx_auto_lib_core +797 -0
  118. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/notes/CHANGES +17 -0
  119. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/notes/LICENSE +24 -0
  120. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/objs/ndk_array.h +113 -0
  121. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/objs/ndk_conf_cmd_basic.h +2203 -0
  122. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/objs/ndk_conf_cmd_extra.h +5423 -0
  123. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/objs/ndk_conf_merge.h +227 -0
  124. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/objs/ndk_config.c +72 -0
  125. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/objs/ndk_config.h +98 -0
  126. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/objs/ndk_includes.h +66 -0
  127. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/objs/ndk_palloc.h +112 -0
  128. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/patches/auto_config +16 -0
  129. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/patches/expose_rewrite_functions +291 -0
  130. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/patches/rewrite_phase_handler +19 -0
  131. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/hash/md5.h +117 -0
  132. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/hash/murmurhash2.c +77 -0
  133. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/hash/sha.h +200 -0
  134. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk.c +155 -0
  135. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk.h +58 -0
  136. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_buf.c +43 -0
  137. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_buf.h +5 -0
  138. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_complex_path.c +129 -0
  139. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_complex_path.h +30 -0
  140. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_complex_value.c +192 -0
  141. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_complex_value.h +21 -0
  142. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_conf_file.c +396 -0
  143. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_conf_file.h +44 -0
  144. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_debug.c +72 -0
  145. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_debug.h +171 -0
  146. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_encoding.c +57 -0
  147. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_encoding.h +12 -0
  148. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_hash.c +82 -0
  149. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_hash.h +45 -0
  150. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_http.c +138 -0
  151. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_http.h +3 -0
  152. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_http_headers.h +35 -0
  153. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_log.c +3 -0
  154. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_log.h +165 -0
  155. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_parse.h +67 -0
  156. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_path.c +583 -0
  157. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_path.h +22 -0
  158. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_process.c +20 -0
  159. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_process.h +12 -0
  160. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_regex.c +215 -0
  161. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_regex.h +7 -0
  162. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_rewrite.c +103 -0
  163. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_rewrite.h +26 -0
  164. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_set_var.c +602 -0
  165. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_set_var.h +44 -0
  166. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_string.c +434 -0
  167. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_string.h +37 -0
  168. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_string_util.h +14 -0
  169. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_upstream_list.c +205 -0
  170. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_upstream_list.h +27 -0
  171. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_uri.c +45 -0
  172. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_uri.h +6 -0
  173. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/LICENSE +25 -0
  174. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/README.markdown +1850 -0
  175. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/config +5 -0
  176. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/doc/HttpEchoModule.wiki +1558 -0
  177. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ddebug.h +109 -0
  178. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_echo.c +344 -0
  179. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_echo.h +25 -0
  180. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_filter.c +282 -0
  181. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_filter.h +15 -0
  182. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_foreach.c +183 -0
  183. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_foreach.h +16 -0
  184. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_handler.c +429 -0
  185. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_handler.h +18 -0
  186. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_location.c +178 -0
  187. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_location.h +13 -0
  188. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_module.c +667 -0
  189. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_module.h +137 -0
  190. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_request_info.c +452 -0
  191. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_request_info.h +31 -0
  192. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_sleep.c +208 -0
  193. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_sleep.h +16 -0
  194. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_subrequest.c +788 -0
  195. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_subrequest.h +19 -0
  196. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_timer.c +96 -0
  197. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_timer.h +13 -0
  198. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_util.c +298 -0
  199. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_util.h +58 -0
  200. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_var.c +110 -0
  201. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_var.h +9 -0
  202. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/util/build.sh +45 -0
  203. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/util/releng +8 -0
  204. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/util/wiki2pod.pl +131 -0
  205. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/valgrind.suppress +38 -0
  206. data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/LICENCE +24 -0
  207. data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/README +206 -0
  208. data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/changelog.txt +54 -0
  209. data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/config +26 -0
  210. data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/protocol.txt +191 -0
  211. data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/ngx_http_push_defs.c +59 -0
  212. data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/ngx_http_push_defs.h +73 -0
  213. data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/ngx_http_push_module.c +783 -0
  214. data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/ngx_http_push_module.h +31 -0
  215. data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/ngx_http_push_module_setup.c +361 -0
  216. data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/ngx_http_push_types.h +120 -0
  217. data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/store/memory/store.c +1180 -0
  218. data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/store/memory/store.h +1 -0
  219. data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/store/ngx_http_push_module_ipc.c +146 -0
  220. data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/store/ngx_http_push_module_ipc.h +5 -0
  221. data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/store/ngx_http_push_store.h +51 -0
  222. data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/store/ngx_rwlock.c +178 -0
  223. data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/store/ngx_rwlock.h +5 -0
  224. data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/store/rbtree_util.c +246 -0
  225. data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/store/rbtree_util.h +9 -0
  226. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/Changes +51 -0
  227. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/README.markdown +6954 -0
  228. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/config +363 -0
  229. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/doc/HttpLuaModule.wiki +5898 -0
  230. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/dtrace/ngx_lua_provider.d +61 -0
  231. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/misc/recv-until-pm/Makefile +3 -0
  232. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/misc/recv-until-pm/lib/RecvUntil.pm +138 -0
  233. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/misc/recv-until-pm/t/sanity.t +140 -0
  234. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/api/ngx_http_lua_api.h +52 -0
  235. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ddebug.h +82 -0
  236. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_accessby.c +377 -0
  237. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_accessby.h +22 -0
  238. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_api.c +77 -0
  239. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_args.c +537 -0
  240. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_args.h +20 -0
  241. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_bodyfilterby.c +632 -0
  242. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_bodyfilterby.h +31 -0
  243. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_cache.c +296 -0
  244. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_cache.h +24 -0
  245. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_capturefilter.c +175 -0
  246. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_capturefilter.h +20 -0
  247. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_clfactory.c +887 -0
  248. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_clfactory.h +22 -0
  249. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_common.h +478 -0
  250. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_config.c +67 -0
  251. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_config.h +19 -0
  252. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_consts.c +148 -0
  253. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_consts.h +20 -0
  254. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_contentby.c +369 -0
  255. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_contentby.h +26 -0
  256. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_control.c +483 -0
  257. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_control.h +20 -0
  258. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_coroutine.c +379 -0
  259. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_coroutine.h +23 -0
  260. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_ctx.c +216 -0
  261. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_ctx.h +23 -0
  262. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_directive.c +1081 -0
  263. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_directive.h +56 -0
  264. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_exception.c +58 -0
  265. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_exception.h +33 -0
  266. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_headerfilterby.c +302 -0
  267. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_headerfilterby.h +29 -0
  268. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_headers.c +1370 -0
  269. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_headers.h +22 -0
  270. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_headers_in.c +782 -0
  271. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_headers_in.h +22 -0
  272. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_headers_out.c +625 -0
  273. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_headers_out.h +23 -0
  274. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_initby.c +42 -0
  275. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_initby.h +23 -0
  276. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_initworkerby.c +320 -0
  277. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_initworkerby.h +25 -0
  278. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_log.c +300 -0
  279. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_log.h +20 -0
  280. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_logby.c +227 -0
  281. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_logby.h +22 -0
  282. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_misc.c +252 -0
  283. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_misc.h +20 -0
  284. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_module.c +924 -0
  285. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_ndk.c +184 -0
  286. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_ndk.h +21 -0
  287. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_output.c +794 -0
  288. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_output.h +28 -0
  289. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_pcrefix.c +106 -0
  290. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_pcrefix.h +23 -0
  291. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_phase.c +94 -0
  292. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_phase.h +13 -0
  293. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_probe.h +85 -0
  294. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_regex.c +2468 -0
  295. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_regex.h +22 -0
  296. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_req_body.c +1169 -0
  297. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_req_body.h +20 -0
  298. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_req_method.c +252 -0
  299. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_req_method.h +19 -0
  300. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_rewriteby.c +351 -0
  301. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_rewriteby.h +22 -0
  302. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_script.c +538 -0
  303. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_script.h +86 -0
  304. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_setby.c +216 -0
  305. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_setby.h +15 -0
  306. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_shdict.c +1844 -0
  307. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_shdict.h +52 -0
  308. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_sleep.c +191 -0
  309. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_sleep.h +20 -0
  310. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_socket_tcp.c +5314 -0
  311. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_socket_tcp.h +156 -0
  312. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_socket_udp.c +1624 -0
  313. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_socket_udp.h +56 -0
  314. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_string.c +704 -0
  315. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_string.h +20 -0
  316. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_subrequest.c +1741 -0
  317. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_subrequest.h +46 -0
  318. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_time.c +278 -0
  319. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_time.h +21 -0
  320. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_timer.c +661 -0
  321. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_timer.h +20 -0
  322. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_uri.c +110 -0
  323. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_uri.h +20 -0
  324. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_uthread.c +283 -0
  325. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_uthread.h +36 -0
  326. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_util.c +3972 -0
  327. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_util.h +423 -0
  328. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_variable.c +499 -0
  329. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_variable.h +20 -0
  330. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_worker.c +64 -0
  331. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_worker.h +17 -0
  332. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/tapset/ngx_lua.stp +5 -0
  333. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/util/build.sh +39 -0
  334. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/util/build2.sh +55 -0
  335. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/util/fix-comments +27 -0
  336. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/util/gdbinit +415 -0
  337. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/util/ngx-links +62 -0
  338. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/util/reindex +64 -0
  339. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/util/releng +8 -0
  340. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/util/retab +8 -0
  341. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/util/revim +102 -0
  342. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/util/run_test.sh +10 -0
  343. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/util/update-readme.sh +4 -0
  344. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/valgrind.suppress +144 -0
  345. data/packaging/debian/debian_specs/nginx/modules/nginx-upload-progress/CHANGES +107 -0
  346. data/packaging/debian/debian_specs/nginx/modules/nginx-upload-progress/LICENSE +25 -0
  347. data/packaging/debian/debian_specs/nginx/modules/nginx-upload-progress/Makefile +8 -0
  348. data/packaging/debian/debian_specs/nginx/modules/nginx-upload-progress/README +329 -0
  349. data/packaging/debian/debian_specs/nginx/modules/nginx-upload-progress/config +3 -0
  350. data/packaging/debian/debian_specs/nginx/modules/nginx-upload-progress/ngx_http_uploadprogress_module.c +1774 -0
  351. data/packaging/debian/debian_specs/nginx/modules/nginx-upstream-fair/README +53 -0
  352. data/packaging/debian/debian_specs/nginx/modules/nginx-upstream-fair/config +3 -0
  353. data/packaging/debian/debian_specs/nginx/modules/nginx-upstream-fair/ngx_http_upstream_fair_module.c +1356 -0
  354. data/packaging/debian/debian_specs/nginx/modules/ngx-fancyindex/CHANGELOG.md +37 -0
  355. data/packaging/debian/debian_specs/nginx/modules/ngx-fancyindex/HACKING.md +24 -0
  356. data/packaging/debian/debian_specs/nginx/modules/ngx-fancyindex/LICENSE +20 -0
  357. data/packaging/debian/debian_specs/nginx/modules/ngx-fancyindex/README.rst +182 -0
  358. data/packaging/debian/debian_specs/nginx/modules/ngx-fancyindex/config +8 -0
  359. data/packaging/debian/debian_specs/nginx/modules/ngx-fancyindex/nginx-0.6-support.patch +23 -0
  360. data/packaging/debian/debian_specs/nginx/modules/ngx-fancyindex/ngx_http_fancyindex_module.c +1305 -0
  361. data/packaging/debian/debian_specs/nginx/modules/ngx-fancyindex/template.awk +52 -0
  362. data/packaging/debian/debian_specs/nginx/modules/ngx-fancyindex/template.h +103 -0
  363. data/packaging/debian/debian_specs/nginx/modules/ngx-fancyindex/template.html +102 -0
  364. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/CHANGES +37 -0
  365. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/README +141 -0
  366. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/config +3 -0
  367. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/doc/README.google_code_home_page.wiki +120 -0
  368. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/doc/README.html +199 -0
  369. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/doc/README.wiki +123 -0
  370. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/ngx_http_subs_filter_module.c +1298 -0
  371. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/README +275 -0
  372. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Module/AutoInstall.pm +820 -0
  373. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Module/Install.pm +470 -0
  374. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Module/Install/AutoInstall.pm +82 -0
  375. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Module/Install/Base.pm +83 -0
  376. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Module/Install/Can.pm +81 -0
  377. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Module/Install/Fetch.pm +93 -0
  378. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Module/Install/Include.pm +34 -0
  379. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Module/Install/Makefile.pm +415 -0
  380. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Module/Install/Metadata.pm +716 -0
  381. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Module/Install/TestBase.pm +29 -0
  382. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Module/Install/Win32.pm +64 -0
  383. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Module/Install/WriteAll.pm +63 -0
  384. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Spiffy.pm +539 -0
  385. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Test/Base.pm +682 -0
  386. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Test/Base/Filter.pm +341 -0
  387. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Test/Builder.pm +1413 -0
  388. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Test/Builder/Module.pm +81 -0
  389. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Test/More.pm +735 -0
  390. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/lib/Test/Nginx.pm +315 -0
  391. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/lib/Test/Nginx/LWP.pm +524 -0
  392. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/lib/Test/Nginx/Socket.pm +1749 -0
  393. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/lib/Test/Nginx/Util.pm +874 -0
  394. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/t/subs.t +136 -0
  395. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/t/subs_capture.t +32 -0
  396. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/t/subs_fix_string.t +32 -0
  397. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/t/subs_regex.t +108 -0
  398. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/t/subs_types.t +59 -0
  399. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/test.sh +5 -0
  400. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/util/update-readme.sh +7 -0
  401. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/util/wiki2google_code_homepage.pl +29 -0
  402. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/util/wiki2pod.pl +129 -0
  403. data/packaging/debian/debian_specs/nginx/nginx-common.NEWS +135 -0
  404. data/packaging/debian/debian_specs/nginx/nginx-common.README.Debian +45 -0
  405. data/packaging/debian/debian_specs/nginx/nginx-common.dirs.erb +32 -0
  406. data/packaging/debian/debian_specs/nginx/nginx-common.install +3 -0
  407. data/packaging/debian/debian_specs/nginx/nginx-common.lintian-overrides +2 -0
  408. data/packaging/debian/debian_specs/nginx/nginx-common.manpages +1 -0
  409. data/packaging/debian/debian_specs/nginx/nginx-common.nginx.default +10 -0
  410. data/packaging/debian/debian_specs/nginx/nginx-common.nginx.init.erb +214 -0
  411. data/packaging/debian/debian_specs/nginx/nginx-common.nginx.logrotate +18 -0
  412. data/packaging/debian/debian_specs/nginx/nginx-common.nginx.service.erb +37 -0
  413. data/packaging/debian/debian_specs/nginx/nginx-common.postinst.erb +66 -0
  414. data/packaging/debian/debian_specs/nginx/nginx-common.postrm.erb +46 -0
  415. data/packaging/debian/debian_specs/nginx/nginx-common.preinst +47 -0
  416. data/packaging/debian/debian_specs/nginx/nginx-common.prerm.erb +28 -0
  417. data/packaging/debian/debian_specs/nginx/nginx-doc.docs +2 -0
  418. data/packaging/debian/debian_specs/nginx/nginx-doc.examples +1 -0
  419. data/packaging/debian/debian_specs/nginx/nginx-extras.install.erb +17 -0
  420. data/packaging/debian/debian_specs/nginx/nginx-extras.lintian-overrides +1 -0
  421. data/packaging/debian/debian_specs/nginx/nginx-extras.postinst.erb +44 -0
  422. data/packaging/debian/debian_specs/nginx/nginx-extras.prerm +22 -0
  423. data/packaging/debian/debian_specs/nginx/nginx.1 +47 -0
  424. data/packaging/debian/debian_specs/nginx/patches/perl-use-dpkg-buildflags.patch +23 -0
  425. data/packaging/debian/debian_specs/nginx/patches/series +1 -0
  426. data/packaging/debian/debian_specs/nginx/rules.erb +185 -0
  427. data/packaging/debian/debian_specs/nginx/source/format +1 -0
  428. data/packaging/debian/debian_specs/nginx/tests/control +4 -0
  429. data/packaging/debian/debian_specs/nginx/ufw/nginx +14 -0
  430. data/packaging/debian/debian_specs/nginx/upstream/signing-key.asc +34 -0
  431. data/packaging/debian/debian_specs/nginx/watch +3 -0
  432. data/packaging/debian/debian_specs/passenger/README.Debian +12 -0
  433. data/packaging/debian/debian_specs/passenger/changelog +316 -0
  434. data/packaging/debian/debian_specs/passenger/compat +1 -0
  435. data/packaging/debian/debian_specs/passenger/control.erb +123 -0
  436. data/packaging/debian/debian_specs/passenger/copyright +385 -0
  437. data/packaging/debian/debian_specs/passenger/helpers.rb +24 -0
  438. data/packaging/debian/debian_specs/passenger/libapache2-mod-passenger.install +3 -0
  439. data/packaging/debian/debian_specs/passenger/libapache2-mod-passenger.postinst +36 -0
  440. data/packaging/debian/debian_specs/passenger/libapache2-mod-passenger.prerm +15 -0
  441. data/packaging/debian/debian_specs/passenger/locations.ini.erb +14 -0
  442. data/packaging/debian/debian_specs/passenger/passenger-dev.install.erb +3 -0
  443. data/packaging/debian/debian_specs/passenger/passenger-doc.install.erb +2 -0
  444. data/packaging/debian/debian_specs/passenger/passenger.conf +6 -0
  445. data/packaging/debian/debian_specs/passenger/passenger.docs +4 -0
  446. data/packaging/debian/debian_specs/passenger/passenger.install.erb +16 -0
  447. data/packaging/debian/debian_specs/passenger/passenger.load +3 -0
  448. data/packaging/debian/debian_specs/passenger/passenger.manpages +3 -0
  449. data/packaging/debian/debian_specs/passenger/passenger_free_ruby.c +29 -0
  450. data/packaging/debian/debian_specs/passenger/passenger_ruby_utils.c +54 -0
  451. data/packaging/debian/debian_specs/passenger/passenger_system_ruby.c.erb +37 -0
  452. data/packaging/debian/debian_specs/passenger/patches/series +0 -0
  453. data/packaging/debian/debian_specs/passenger/rules.erb +84 -0
  454. data/packaging/debian/debian_specs/passenger/source/format +1 -0
  455. data/packaging/debian/debian_specs/passenger_enterprise/README.Debian +12 -0
  456. data/packaging/debian/debian_specs/passenger_enterprise/changelog +316 -0
  457. data/packaging/debian/debian_specs/passenger_enterprise/compat +1 -0
  458. data/packaging/debian/debian_specs/passenger_enterprise/control.erb +123 -0
  459. data/packaging/debian/debian_specs/passenger_enterprise/copyright +385 -0
  460. data/packaging/debian/debian_specs/passenger_enterprise/helpers.rb +2 -0
  461. data/packaging/debian/debian_specs/passenger_enterprise/libapache2-mod-passenger-enterprise.install +3 -0
  462. data/packaging/debian/debian_specs/passenger_enterprise/libapache2-mod-passenger-enterprise.postinst +36 -0
  463. data/packaging/debian/debian_specs/passenger_enterprise/libapache2-mod-passenger-enterprise.prerm +15 -0
  464. data/packaging/debian/debian_specs/passenger_enterprise/locations.ini.erb +14 -0
  465. data/packaging/debian/debian_specs/passenger_enterprise/passenger-enterprise-dev.install.erb +3 -0
  466. data/packaging/debian/debian_specs/passenger_enterprise/passenger-enterprise-doc.install.erb +2 -0
  467. data/packaging/debian/debian_specs/passenger_enterprise/passenger-enterprise.docs +4 -0
  468. data/packaging/debian/debian_specs/passenger_enterprise/passenger-enterprise.install.erb +14 -0
  469. data/packaging/debian/debian_specs/passenger_enterprise/passenger-enterprise.manpages +3 -0
  470. data/packaging/debian/debian_specs/passenger_enterprise/passenger.conf +6 -0
  471. data/packaging/debian/debian_specs/passenger_enterprise/passenger.load +3 -0
  472. data/packaging/debian/debian_specs/passenger_enterprise/passenger_free_ruby.c.erb +1 -0
  473. data/packaging/debian/debian_specs/passenger_enterprise/passenger_ruby_utils.c.erb +1 -0
  474. data/packaging/debian/debian_specs/passenger_enterprise/passenger_system_ruby.c.erb +1 -0
  475. data/packaging/debian/debian_specs/passenger_enterprise/patches/series +0 -0
  476. data/packaging/debian/debian_specs/passenger_enterprise/rules.erb +84 -0
  477. data/packaging/debian/debian_specs/passenger_enterprise/source/format +1 -0
  478. data/packaging/debian/docker_images/Makefile +38 -0
  479. data/packaging/debian/docker_images/buildbox/CONTAINER_VERSION.txt +0 -0
  480. data/packaging/debian/docker_images/buildbox/Dockerfile +3 -0
  481. data/packaging/debian/docker_images/buildbox/Gemfile +9 -0
  482. data/packaging/debian/docker_images/buildbox/Gemfile.lock +42 -0
  483. data/packaging/debian/docker_images/buildbox/install.sh +85 -0
  484. data/packaging/debian/docker_images/buildbox/pbuilderrc +4 -0
  485. data/packaging/debian/docker_images/buildbox/sudoers.conf +6 -0
  486. data/packaging/debian/docker_images/setup-buildbox-docker-image +7 -0
  487. data/packaging/debian/docker_images/setup-testbox-docker-image-debian-6 +7 -0
  488. data/packaging/debian/docker_images/setup-testbox-docker-image-debian-7 +7 -0
  489. data/packaging/debian/docker_images/setup-testbox-docker-image-debian-8 +7 -0
  490. data/packaging/debian/docker_images/setup-testbox-docker-image-ubuntu-12.04 +7 -0
  491. data/packaging/debian/docker_images/setup-testbox-docker-image-ubuntu-14.04 +7 -0
  492. data/packaging/debian/docker_images/setup-testbox-docker-image-ubuntu-15.04 +7 -0
  493. data/packaging/debian/docker_images/setup-testbox-docker-image-ubuntu-15.10 +7 -0
  494. data/packaging/debian/docker_images/testbox-debian-6/Dockerfile +3 -0
  495. data/packaging/debian/docker_images/testbox-debian-6/Gemfile +2 -0
  496. data/packaging/debian/docker_images/testbox-debian-6/Gemfile.lock +23 -0
  497. data/packaging/debian/docker_images/testbox-debian-6/argparse.py +2374 -0
  498. data/packaging/debian/docker_images/testbox-debian-6/install.sh +78 -0
  499. data/packaging/debian/docker_images/testbox-debian-7/Dockerfile +3 -0
  500. data/packaging/debian/docker_images/testbox-debian-7/Gemfile +2 -0
  501. data/packaging/debian/docker_images/testbox-debian-7/Gemfile.lock +23 -0
  502. data/packaging/debian/docker_images/testbox-debian-7/install.sh +71 -0
  503. data/packaging/debian/docker_images/testbox-debian-8/Dockerfile +3 -0
  504. data/packaging/debian/docker_images/testbox-debian-8/Gemfile +2 -0
  505. data/packaging/debian/docker_images/testbox-debian-8/Gemfile.lock +23 -0
  506. data/packaging/debian/docker_images/testbox-debian-8/install.sh +70 -0
  507. data/packaging/debian/docker_images/testbox-ubuntu-12.04/Dockerfile +3 -0
  508. data/packaging/debian/docker_images/testbox-ubuntu-12.04/Gemfile +2 -0
  509. data/packaging/debian/docker_images/testbox-ubuntu-12.04/Gemfile.lock +23 -0
  510. data/packaging/debian/docker_images/testbox-ubuntu-12.04/install.sh +69 -0
  511. data/packaging/debian/docker_images/testbox-ubuntu-14.04/Dockerfile +3 -0
  512. data/packaging/debian/docker_images/testbox-ubuntu-14.04/Gemfile +2 -0
  513. data/packaging/debian/docker_images/testbox-ubuntu-14.04/Gemfile.lock +23 -0
  514. data/packaging/debian/docker_images/testbox-ubuntu-14.04/install.sh +69 -0
  515. data/packaging/debian/docker_images/testbox-ubuntu-15.04/Dockerfile +3 -0
  516. data/packaging/debian/docker_images/testbox-ubuntu-15.04/Gemfile +2 -0
  517. data/packaging/debian/docker_images/testbox-ubuntu-15.04/Gemfile.lock +23 -0
  518. data/packaging/debian/docker_images/testbox-ubuntu-15.04/install.sh +69 -0
  519. data/packaging/debian/docker_images/testbox-ubuntu-15.10/Dockerfile +3 -0
  520. data/packaging/debian/docker_images/testbox-ubuntu-15.10/Gemfile +2 -0
  521. data/packaging/debian/docker_images/testbox-ubuntu-15.10/Gemfile.lock +23 -0
  522. data/packaging/debian/docker_images/testbox-ubuntu-15.10/install.sh +69 -0
  523. data/packaging/debian/internal/build/Rakefile +235 -0
  524. data/packaging/debian/internal/build/build-passenger-orig-tarball.sh +76 -0
  525. data/packaging/debian/internal/build/build-source-package.rb +121 -0
  526. data/packaging/debian/internal/build/download-nginx-orig-tarball.sh +17 -0
  527. data/packaging/debian/internal/build/rakefile_support.rb +96 -0
  528. data/packaging/debian/internal/build/setup-environment-essentials.sh +15 -0
  529. data/packaging/debian/internal/build/setup-environment.sh +29 -0
  530. data/packaging/debian/internal/lib/distro_info.rb +82 -0
  531. data/packaging/debian/internal/lib/distro_info.sh +303 -0
  532. data/packaging/debian/internal/lib/distro_info.sh.erb +65 -0
  533. data/packaging/debian/internal/lib/library.sh +83 -0
  534. data/packaging/debian/internal/lib/preprocessor.rb +173 -0
  535. data/packaging/debian/internal/lib/tracking.rb +95 -0
  536. data/packaging/debian/internal/lib/tracking_category.rb +45 -0
  537. data/packaging/debian/internal/lib/tracking_database.rb +132 -0
  538. data/packaging/debian/internal/lib/tracking_task.rb +148 -0
  539. data/packaging/debian/internal/lib/utils.rb +78 -0
  540. data/packaging/debian/internal/publish/Rakefile +97 -0
  541. data/packaging/debian/internal/publish/oss-binaries.phusionpassenger.com-fingerprint.txt +1 -0
  542. data/packaging/debian/internal/publish/packagecloud_fingerprint.txt +1 -0
  543. data/packaging/debian/internal/publish/passenger_website_fingerprint.txt +1 -0
  544. data/packaging/debian/internal/publish/preinit.sh +7 -0
  545. data/packaging/debian/internal/publish/rakefile_support.rb +183 -0
  546. data/packaging/debian/internal/scripts/gpg_noninteractive/gpg +11 -0
  547. data/packaging/debian/internal/scripts/initccache.sh +35 -0
  548. data/packaging/debian/internal/scripts/inituidgid.sh +19 -0
  549. data/packaging/debian/internal/scripts/my_init +340 -0
  550. data/packaging/debian/internal/scripts/pin_certificates +34 -0
  551. data/packaging/debian/internal/scripts/regen_distro_info_script.sh +3 -0
  552. data/packaging/debian/internal/scripts/setup-vagrant.sh +12 -0
  553. data/packaging/debian/internal/scripts/setuser +31 -0
  554. data/packaging/debian/internal/shell/initpbuilder.sh +3 -0
  555. data/packaging/debian/internal/shell/preinit.sh +28 -0
  556. data/packaging/debian/internal/shell/sudoers.conf +1 -0
  557. data/packaging/debian/internal/test/apache/apache-24.conf +5 -0
  558. data/packaging/debian/internal/test/apache/apache-pre-24.conf +4 -0
  559. data/packaging/debian/internal/test/apache/vhost.conf +17 -0
  560. data/packaging/debian/internal/test/misc/config.json +15 -0
  561. data/packaging/debian/internal/test/misc/hosts.conf +4 -0
  562. data/packaging/debian/internal/test/misc/init.sh +25 -0
  563. data/packaging/debian/internal/test/misc/nodejs_test_app.js +6 -0
  564. data/packaging/debian/internal/test/misc/python_test_app.py +3 -0
  565. data/packaging/debian/internal/test/misc/ruby_test_app.rb +5 -0
  566. data/packaging/debian/internal/test/misc/test_support.rb +61 -0
  567. data/packaging/debian/internal/test/nginx/vhost.conf +23 -0
  568. data/packaging/debian/internal/test/system_web_server_test.rb +126 -0
  569. data/packaging/debian/internal/test/test.sh +141 -0
  570. data/packaging/debian/jenkins/publish/clear_caches.rb +48 -0
  571. data/packaging/debian/jenkins/publish/publish.sh +69 -0
  572. data/packaging/debian/jenkins/test/test.sh +63 -0
  573. data/packaging/debian/passenger_apt_automation.sublime-project +14 -0
  574. data/packaging/debian/publish +172 -0
  575. data/packaging/debian/shell +116 -0
  576. data/packaging/debian/test +142 -0
  577. metadata +563 -3
  578. metadata.gz.asc +7 -7
  579. 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 */