[PATCH 17 of 31] Gzip static: "always" parameter in "gzip_static" directive
Maxim Dounin
mdounin at mdounin.ru
Tue Jun 28 14:32:02 MSD 2011
Hello!
On Mon, Jun 27, 2011 at 11:01:01AM -0700, Zhu Qun-Ying wrote:
> It would be more readable if numerical definition of off/on/always
> use enum type in stead of plain number directly,
> like:
> enum {
> NGX_HTTP_GZIP_STATIC_OFF,
> NGX_HTTP_GZIP_STATIC_ON,
> NGX_HTTP_GZIP_STATIC_ALWAYS,
> };
>
> Do you think so?
nginx generally don't use enum's for this, but defines or bare
numbers. I was lazy and tried to minimize diffs, so used bare
numbers. Attached patch uses defines instead, it's probably
results in more readable code.
Switching to enums may be somewhat beneficial, but it should be
tested carefully on old-but-still-alive compilers (not sure what
we still support though). I suspect there may be problems with
enum constants in static initializers (and with trailing comma,
btw, it only appeared in C99).
Maxim Dounin
-------------- next part --------------
# HG changeset patch
# User Maxim Dounin <mdounin at mdounin.ru>
# Date 1309255342 -14400
# Node ID ff0e12ab4a4f597e349ab4545e2f448f457bc279
# Parent 49f71170fdaab701888666047d93ca8f27072b6a
Gzip static: "always" parameter in "gzip_static" directive.
With "always" gzip static returns gzipped content in all cases, without
checking if client supports it. It is usefull if you has no gunzipped files
on disk anyway.
diff --git a/src/http/modules/ngx_http_gzip_static_module.c b/src/http/modules/ngx_http_gzip_static_module.c
--- a/src/http/modules/ngx_http_gzip_static_module.c
+++ b/src/http/modules/ngx_http_gzip_static_module.c
@@ -9,8 +9,13 @@
#include <ngx_http.h>
+#define NGX_HTTP_GZIP_STATIC_OFF 0
+#define NGX_HTTP_GZIP_STATIC_ON 1
+#define NGX_HTTP_GZIP_STATIC_ALWAYS 2
+
+
typedef struct {
- ngx_flag_t enable;
+ ngx_uint_t enable;
} ngx_http_gzip_static_conf_t;
@@ -21,14 +26,22 @@ static char *ngx_http_gzip_static_merge_
static ngx_int_t ngx_http_gzip_static_init(ngx_conf_t *cf);
+static ngx_conf_enum_t ngx_http_gzip_static[] = {
+ { ngx_string("off"), NGX_HTTP_GZIP_STATIC_OFF },
+ { ngx_string("on"), NGX_HTTP_GZIP_STATIC_ON },
+ { ngx_string("always"), NGX_HTTP_GZIP_STATIC_ALWAYS },
+ { ngx_null_string, 0 }
+};
+
+
static ngx_command_t ngx_http_gzip_static_commands[] = {
{ ngx_string("gzip_static"),
NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_FLAG,
- ngx_conf_set_flag_slot,
+ ngx_conf_set_enum_slot,
NGX_HTTP_LOC_CONF_OFFSET,
offsetof(ngx_http_gzip_static_conf_t, enable),
- NULL },
+ &ngx_http_gzip_static },
ngx_null_command
};
@@ -91,11 +104,17 @@ ngx_http_gzip_static_handler(ngx_http_re
gzcf = ngx_http_get_module_loc_conf(r, ngx_http_gzip_static_module);
- if (!gzcf->enable) {
+ if (gzcf->enable == NGX_HTTP_GZIP_STATIC_OFF) {
return NGX_DECLINED;
}
- rc = ngx_http_gzip_ok(r);
+ if (gzcf->enable == NGX_HTTP_GZIP_STATIC_ON) {
+ rc = ngx_http_gzip_ok(r);
+
+ } else {
+ /* always */
+ rc = NGX_OK;
+ }
clcf = ngx_http_get_module_loc_conf(r, ngx_http_core_module);
@@ -160,10 +179,12 @@ ngx_http_gzip_static_handler(ngx_http_re
return NGX_DECLINED;
}
- r->gzip_vary = 1;
+ if (gzcf->enable == NGX_HTTP_GZIP_STATIC_ON) {
+ r->gzip_vary = 1;
- if (rc != NGX_OK) {
- return NGX_DECLINED;
+ if (rc != NGX_OK) {
+ return NGX_DECLINED;
+ }
}
ngx_log_debug1(NGX_LOG_DEBUG_HTTP, log, 0, "http static fd: %d", of.fd);
@@ -261,7 +282,7 @@ ngx_http_gzip_static_create_conf(ngx_con
return NULL;
}
- conf->enable = NGX_CONF_UNSET;
+ conf->enable = NGX_CONF_UNSET_UINT;
return conf;
}
@@ -273,7 +294,8 @@ ngx_http_gzip_static_merge_conf(ngx_conf
ngx_http_gzip_static_conf_t *prev = parent;
ngx_http_gzip_static_conf_t *conf = child;
- ngx_conf_merge_value(conf->enable, prev->enable, 0);
+ ngx_conf_merge_uint_value(conf->enable, prev->enable,
+ NGX_HTTP_GZIP_STATIC_OFF);
return NGX_CONF_OK;
}
More information about the nginx-devel
mailing list