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

时间:2010-10-19 20:54:37

标签: nginx

我安装了nginx并激活了gzip_static。它适用于CSS和JavaScript文件,但它也查找gzip压缩版本的图像文件,如.png和.gif,虽然它们不在要压缩的文件列表中:

# 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 个答案:

答案 0 :(得分:5)

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

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

  2. 如果无法做到这一点(托管多个网站,而不是您控制的一切,目录和文件太多),可以通过open_file_cache_errors设置哪个缓存来防止多个open()调用更简单的解决方案(即记得).gz文件不存在,并且不会再尝试打开它。

答案 1 :(得分:0)

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

  1. 找到档案:
  2. ngx_http_gzip_static_module.c (版本1.0.1,其他版本可能相同):

    2 .in:

    ngx_http_gzip_static_handler(ngx_http_request_t * r)

    3.found:

    if(r-> uri.data [r-> uri.len - 1] =='/'){ 返回NGX_DECLINED; }

    1. 添加:
    2. if(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] =='。'){ 返回NGX_DECLINED; } if(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 ] =='。'){ 返回NGX_DECLINED; } 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_DECLINED; }

      1. 重新编译您的来源。
      2. 任何人都知道C可以将其编辑为更专业,因为我不知道C :(

答案 2 :(得分:0)

我发现了一种使用嵌套位置块的简单方法:

config.xml