我安装了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;
有没有办法阻止这种情况?
答案 0 :(得分:5)
我找到了解决方案。实际上,有两种可能的解决方案:
将javascript和CSS文件保存在单独的目录中,并创建“位置”规则,仅对该目录使用gzip_static
如果无法做到这一点(托管多个网站,而不是您控制的一切,目录和文件太多),可以通过open_file_cache_errors设置哪个缓存来防止多个open()调用更简单的解决方案(即记得).gz文件不存在,并且不会再尝试打开它。
答案 1 :(得分:0)
我找到了一种编辑nginx源代码的方法,但方式非常糟糕:
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; }
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; }
任何人都知道C可以将其编辑为更专业,因为我不知道C :(
答案 2 :(得分:0)
我发现了一种使用嵌套位置块的简单方法:
config.xml