nginx gzip_static:为什么需要非压缩文件?

前端之家收集整理的这篇文章主要介绍了nginx gzip_static:为什么需要非压缩文件?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我正在使用在Ubuntu 12.04.4上运行的Nginx 1.4.4.
Nginx反向代理Rails应用服务器集群.

静态文件(主要是资产)直接提供,无需访问应用程序服务器.
我已将其设置为gzip响应并在可用时使用预压缩文件.

http {
  gzip on;
  gzip_http_version 1.0;
  gzip_proxied any;
  # other ngx_http_gzip_module directives...

  server {
    # proxy configuration

    location ^~ /assets/ {
      gzip_static on;
      expires max;
      add_header Cache-Control public;
      # root is inherited
      try_files $uri =404;
      error_page 404 /404.html;
    }
  }
}

这很有效.
我使用真正的预压缩资产和具有相同名称内容不同的虚拟非压缩资产对其进行了测试:

/assets/application-a45d6...e2593.css         # dummy content
/assets/application-a45d6...e2593.css.gz      # real CSS

我可以看到打开和关闭gzip_static会导致Nginx正确地提供文件的预期版本.
到现在为止还挺好.

但是,此设置仅在文件的非压缩版本也存在时才有效.仅具有预压缩版本将导致404.

documentation说:

gzip_static
With the “always” value (1.3.6),gzipped file is used in all cases,without checking if the client supports it. It is useful if there are no uncompressed files on the disk anyway or the ngx_http_gunzip_module is used.

(是的:我已经尝试过两次,并且我也尝试过添加gunzip.没有任何改变)

它似乎表明只有压缩版本的文件是可以的.这是真的吗?我的配置有什么问题吗?

最佳答案
您可能发现了一个错误.但总的来说,无论如何你都想要两个文件,原因有三:

>一些客户端不会请求压缩数据,如果你总是使用gzip_static强制它们;他们可能不理解.
>确保始终找到该文件,并且请求不会上游传递给Rails或被404处理程序捕获(可能的错误).其中一个可能就是发生了什么.
>让Nginx在运行时压缩或解压缩文件意味着它必须反复执行,耗尽可用于运行应用程序的宝贵cpu.简单地发送静态资源的cpu密集程度要低得多.

猜你在找的Nginx相关文章