[BULK] Re: Ways to control the gzip_vary directive from nginx 0.6.34 and above?

Igor Sysoev is at rambler-co.ru
Tue Sep 15 15:20:33 MSD 2009


On Tue, Sep 15, 2009 at 08:04:49PM +0900, Zev Blut wrote:

> On 09/15/2009 07:28 PM, Igor Sysoev wrote:
> >On Tue, Sep 15, 2009 at 02:05:35PM +0400, Igor Sysoev wrote:
> >
> >>On Tue, Sep 15, 2009 at 01:54:53PM +0400, Igor Sysoev wrote:
> >>
> >>>On Tue, Sep 15, 2009 at 06:33:38PM +0900, Zev Blut wrote:
> >>>
> >>>>Hello,
> >>>>
> >>>>
> >>>>On 09/15/2009 05:23 PM, Igor Sysoev wrote:
> >>>>>On Tue, Sep 15, 2009 at 04:20:48PM +0900, Zev Blut wrote:
> >>>>
> >>>>>>I have attached a debug log from 0.6.39 that has the Vary when it 
> >>>>>>should
> >>>>>>not.  If you would like I can also attach a debug log from 0.6.32 that
> >>>>>>does not include the Vary (which is what I need).
> >>>>>
> >>>>>This bug was fixed in 0.7.9.
> >>>>>The attached patch fixes it in 0.6.x, if you prefer to stay on this
> >>>>>version.
> >>>>
> >>>>Thank you for the patch!
> >>>>Unfortunately, it nor does the latest 0.7.62 seem to fix it.
> >>>>I am still getting the Vary: Accept-Encoding header for non gzip stuff.
> >>>>In both this patch and with 0.7.62
> >
> >>>I could not reproduce these responses on 0.8.15, 0.7.62 and patched 
> >>>0.6.39.
> >>>Are you sure that you have no "image/png" in gzip_types ?
> >>
> >>Sorry, I missed "gzip_static on": it caused the problem.
> >
> >The attached patch fixes this bug on 0.8.15 and 0.7.62.
> 
> Cool!
> This seems to work, although now requests from browsers that do not 
> support compression get the Vary header.  This is probably fine for our CDN.
> 
> curl -o /dev/null -D - --compress 
> http://localhost:8989/images/sprites/badge.png
> 
> HTTP/1.1 200 OK
> Server: nginx/0.7.62
> Date: Tue, 15 Sep 2009 10:55:18 GMT
> Content-Type: image/png
> Content-Length: 20031
> Last-Modified: Tue, 08 Sep 2009 07:50:52 GMT
> Connection: keep-alive
> Expires: Wed, 16 Sep 2009 10:55:18 GMT
> Cache-Control: max-age=86400
> Accept-Ranges: bytes
> 
> 
> wget -S -O /dev/null http://localhost:8989/images/sprites/badge.png 
> 
> 
> HTTP/1.1 200 OK
> Server: nginx/0.7.62
> Date: Tue, 15 Sep 2009 10:54:43 GMT
> Content-Type: image/png
> Content-Length: 20031
> Last-Modified: Tue, 08 Sep 2009 07:50:52 GMT
> Connection: keep-alive
> Vary: Accept-Encoding
> Expires: Wed, 16 Sep 2009 10:54:43 GMT
> Cache-Control: max-age=86400
> Accept-Ranges: bytes
> 
> 
> Any chance of getting a patch for 0.6?

The combined patch is attached (including the first one).


-- 
Igor Sysoev
http://sysoev.ru/en/
-------------- next part --------------
Index: src/http/modules/ngx_http_gzip_filter_module.c
===================================================================
--- src/http/modules/ngx_http_gzip_filter_module.c	(revision 2448)
+++ src/http/modules/ngx_http_gzip_filter_module.c	(working copy)
@@ -221,8 +221,7 @@
         || (r->headers_out.content_encoding
             && r->headers_out.content_encoding->value.len)
         || (r->headers_out.content_length_n != -1
-            && r->headers_out.content_length_n < conf->min_length)
-        || ngx_http_gzip_ok(r) != NGX_OK)
+            && r->headers_out.content_length_n < conf->min_length))
     {
         return ngx_http_next_header_filter(r);
     }
@@ -241,6 +240,10 @@
 
 found:
 
+    if (ngx_http_gzip_ok(r) != NGX_OK) {
+        return ngx_http_next_header_filter(r);
+    }
+
     ctx = ngx_pcalloc(r->pool, sizeof(ngx_http_gzip_ctx_t));
     if (ctx == NULL) {
         return NGX_ERROR;
Index: src/http/modules/ngx_http_gzip_static_module.c
===================================================================
--- src/http/modules/ngx_http_gzip_static_module.c	(revision 2448)
+++ src/http/modules/ngx_http_gzip_static_module.c	(working copy)
@@ -96,10 +96,16 @@
 
     gzcf = ngx_http_get_module_loc_conf(r, ngx_http_gzip_static_module);
 
-    if (!gzcf->enable || ngx_http_gzip_ok(r) != NGX_OK) {
+    if (!gzcf->enable) {
         return NGX_DECLINED;
     }
 
+    clcf = ngx_http_get_module_loc_conf(r, ngx_http_core_module);
+
+    if (clcf->gzip_vary && ngx_http_gzip_ok(r) != NGX_OK) {
+        return NGX_DECLINED;
+    }
+
     log = r->connection->log;
 
     p = ngx_http_map_uri_to_path(r, &path, &root, sizeof(".gz") - 1);
@@ -117,8 +123,6 @@
     ngx_log_debug1(NGX_LOG_DEBUG_HTTP, log, 0,
                    "http filename: \"%s\"", path.data);
 
-    clcf = ngx_http_get_module_loc_conf(r, ngx_http_core_module);
-
     of.test_dir = 0;
     of.valid = clcf->open_file_cache_valid;
     of.min_uses = clcf->open_file_cache_min_uses;
@@ -137,6 +141,7 @@
         case NGX_ENOTDIR:
         case NGX_ENAMETOOLONG:
 
+            r->gzip = 0;
             return NGX_DECLINED;
 
         case NGX_EACCES:


More information about the nginx mailing list