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密集程度要低得多.

相关文章

一、Linux下Nginx的安装 1.去官网 http://nginx.org/download/下载对应的Nginx安装包,推荐使...
一、空格:默认匹配、普通匹配 location / { root /home; } 二、= :精确匹配(表示匹配到 /home/resou...
``` nginx -c 配置文件路径 ``` ``` /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.con...
前言 nginx可所谓是如今最好用的软件级别的负载均衡了。通过nginx的高性能,并发能力强,占用内存下的特...
1.ngnix概念 Nginx是一款高性能的http 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器。由俄...
博客园从今天上午就开始报502错误 , 他的原因还不知道 , 暂时先说下我们遇到502的排查情况 最大的可能性...