gzip_disable degradation
diff --git a/auto/modules b/auto/modules
index 9880b99..9ac1ddd 100644
--- a/auto/modules
+++ b/auto/modules
@@ -322,6 +322,7 @@
fi
if [ $HTTP_DEGRADATION = YES ]; then
+ have=NGX_HTTP_DEGRADATION . auto/have
HTTP_MODULES="$HTTP_MODULES $HTTP_DEGRADATION_MODULE"
HTTP_SRCS="$HTTP_SRCS $HTTP_DEGRADATION_SRCS"
fi
diff --git a/src/http/modules/ngx_http_gzip_filter_module.c b/src/http/modules/ngx_http_gzip_filter_module.c
index e2b204b..d624e36 100644
--- a/src/http/modules/ngx_http_gzip_filter_module.c
+++ b/src/http/modules/ngx_http_gzip_filter_module.c
@@ -258,6 +258,18 @@
r->gzip_vary = 1;
+#if (NGX_HTTP_DEGRADATION)
+ {
+ ngx_http_core_loc_conf_t *clcf;
+
+ clcf = ngx_http_get_module_loc_conf(r, ngx_http_core_module);
+
+ if (clcf->gzip_disable_degradation && ngx_http_degraded(r)) {
+ return ngx_http_next_header_filter(r);
+ }
+ }
+#endif
+
if (!r->gzip_tested) {
if (ngx_http_gzip_ok(r) != NGX_OK) {
return ngx_http_next_header_filter(r);
diff --git a/src/http/ngx_http_core_module.c b/src/http/ngx_http_core_module.c
index 73cde3d..f6d2248 100644
--- a/src/http/ngx_http_core_module.c
+++ b/src/http/ngx_http_core_module.c
@@ -3113,6 +3113,9 @@
clcf->gzip_disable = NGX_CONF_UNSET_PTR;
#endif
clcf->gzip_disable_msie6 = 3;
+#if (NGX_HTTP_DEGRADATION)
+ clcf->gzip_disable_degradation = 3;
+#endif
#endif
return clcf;
@@ -3373,6 +3376,15 @@
(prev->gzip_disable_msie6 == 3) ? 0 : prev->gzip_disable_msie6;
}
+#if (NGX_HTTP_DEGRADATION)
+
+ if (conf->gzip_disable_degradation == 3) {
+ conf->gzip_disable_degradation =
+ (prev->gzip_disable_degradation == 3) ?
+ 0 : prev->gzip_disable_degradation;
+ }
+
+#endif
#endif
return NGX_CONF_OK;
@@ -4394,6 +4406,15 @@
continue;
}
+#if (NGX_HTTP_DEGRADATION)
+
+ if (ngx_strcmp(value[i].data, "degradation") == 0) {
+ clcf->gzip_disable_degradation = 1;
+ continue;
+ }
+
+#endif
+
re = ngx_array_push(clcf->gzip_disable);
if (re == NULL) {
return NGX_CONF_ERROR;
@@ -4414,20 +4435,35 @@
return NGX_CONF_OK;
#else
- ngx_str_t *value;
+ ngx_str_t *value;
+ ngx_uint_t i;
value = cf->args->elts;
- if (cf->args->nelts == 2 && ngx_strcmp(value[1].data, "msie6") == 0) {
- clcf->gzip_disable_msie6 = 1;
- return NGX_CONF_OK;
+ for (i = 1; i < cf->args->nelts; i++) {
+ if (ngx_strcmp(value[i].data, "msie6") == 0) {
+ clcf->gzip_disable_msie6 = 1;
+ continue;
+ }
+
+#if (NGX_HTTP_DEGRADATION)
+
+ if (ngx_strcmp(value[i].data, "degradation") == 0) {
+ clcf->gzip_disable_degradation = 1;
+ continue;
+ }
+
+#endif
+
+ ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
+ "without PCRE library \"gzip_disable\" supports "
+ "builtin \"msie6\" and \"degradation\" mask only");
+
+ return NGX_CONF_ERROR;
}
- ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
- "without PCRE library \"gzip_disable\" supports "
- "builtin \"msie6\" mask only");
+ return NGX_CONF_OK;
- return NGX_CONF_ERROR;
#endif
}
diff --git a/src/http/ngx_http_core_module.h b/src/http/ngx_http_core_module.h
index f163e9a..273586b 100644
--- a/src/http/ngx_http_core_module.h
+++ b/src/http/ngx_http_core_module.h
@@ -295,6 +295,9 @@
unsigned auto_redirect:1;
#if (NGX_HTTP_GZIP)
unsigned gzip_disable_msie6:2;
+#if (NGX_HTTP_DEGRADATION)
+ unsigned gzip_disable_degradation:2;
+#endif
#endif
ngx_http_location_tree_node_t *static_locations;