代码之家  ›  专栏  ›  技术社区  ›  Milan BabuÅ¡kov

如何告诉gzip_static不要查找图像文件?

  •  3
  • Milan BabuÅ¡kov  · 技术社区  · 14 年前

    我已经安装了nginx,并激活了gzip_static。它可以很好地处理CSS和JavaScript文件,但也可以查找像.png和.gif这样的图像文件的gzip版本,尽管这些文件不在要压缩的文件列表中:

    # strace -p 25044 2>&1 | grep gz
    open("/var/www/css/ymax.css.gz", O_RDONLY|O_NONBLOCK) = 438
    open("/var/www/images/tools.png.gz", O_RDONLY|O_NONBLOCK) = -1 ENOENT (No such file or directory)
    open("/var/www/images/ads/bs.gif.gz", O_RDONLY|O_NONBLOCK) = -1 ENOENT (No such file or directory)
    open("/var/www/images/gfxborder/border_right.gif.gz", O_RDONLY|O_NONBLOCK) = -1 ENOENT (No such file or directory)
    open("/var/www/images/ads/hocuto03.gif.gz", O_RDONLY|O_NONBLOCK) = -1 ENOENT (No such file or directory)
    

    以下是我的nginx配置:

    gzip  on;
    gzip_disable     "msie6";
    gzip_min_length 1000;
    gzip_types text/plain text/css application/x-javascript text/javascript;
    gzip_static on;
    

    有没有办法防止这种情况?

    3 回复  |  直到 14 年前
        1
  •  5
  •   Benjamin Cremer    13 年前

    我找到了解决办法。事实上,有两种可能的解决方案:

    1. 将javascript和CSS文件保存在一个单独的目录中,并创建“location”规则,以便仅对该目录使用gzip_static

    2. open_file_cache_errors 设置.gz文件不存在且不尝试再次打开它的缓存(即记住)。

        2
  •  0
  •   newcomer11    14 年前

    我找到了一种编辑nginx源代码的方法,但是方式非常糟糕:

    1. 查找文件:

    (1.0.1版,其他版本可能相同):

    2.在:

    ngx_http_gzip_静态_处理程序(ngx_http_request_t*r)

    if(r->uri.data[r->uri.len-1]='/'){ NGX U拒绝退货; }

    1. 添加:

    如果(r->uri.data[r->uri.len-1]=‘g’&r->uri.data[r->uri.len-2]=‘n’&r->uri.data[r->uri.len-3]=‘p’&r->uri.data[r->uri.len-4]=’。){ } 如果(r->uri.data[r->uri.len-1]=‘g’&r->uri.data[r->uri.len-2]=‘p’&r->uri.data[r->uri.len-3]=‘j’&r->uri.data[r->uri.len-4]=’。){ } if(r->uri.data[r->uri.len-1]=‘o’&r->uri.data[r->uri.len-2]=‘c’&r->uri.data[r->uri.len-3]=‘i’&r->uri.data[r->uri.len-4]=’。){ NGX U拒绝退货; }

    任何知道C的人都可以把它编辑成更专业的,因为我不知道C:(

        3
  •  0
  •   Iolo    9 年前

    我发现了一种使用嵌套位置块执行此操作的简单方法:

      location /assets {
        root   /usr/share/nginx/html;
        location ~ .*.(js|css|html|png)+$ {
          # Use for debugging
          # add_header 'X-static-gzipping' 'on' always;
          gzip_static on;
        }
      }