让NGINX为.gz压缩的资源文件提供服务

31
Rails 3.1有一个方便的系统,可以将文件压缩为`.gz`文件。但是,我已经将由`assets:precompile`创建的所有资产文件移动到静态Web服务器上。这一切都有效,但我该如何让nginx正常提供`.gz`文件呢?

自Rails 4.2起,rake assets:precompile不再创建.gz文件。一些修复方法请参考https://multiplethreads.wordpress.com/2015/08/08/generate-gzip-assets-with-rails-sprockets-3/。 - Nishant
1个回答

62

1)确保你安装了 Nginx > 1.2.x(以便正确修改头文件),并使用--with-http_gzip_static_module选项进行编译。

2)启用此选项gzip on(以使用gzip头文件返回后端响应)。

3)使用gzip_static on设置资源位置,以直接提供所有.css.gz和.all.js.gz文件。

4)防止为资源生成etag标记和计算last-modify。

5)打开正确的Cache-control来缓存SSL提供的静态资源,否则它们将在浏览器关闭后过期。

  location ~ ^/(assets|images|javascripts|stylesheets|swfs|system)/ {
      gzip_static on;
      expires     max;
      add_header  Cache-Control public;
      add_header  Last-Modified "";
      add_header  ETag "";
  }

如果您想获取完整的Nginx配置,可以查看Github上的这个要点

open_file_cache可帮助您缓存:打开文件描述符、它们的大小、修改时间和目录查找,这对于文件系统的高负载非常有帮助。

更新: 如果您想尽可能提升SSL连接,请启用SPDY。


1
请关闭任何资产的日志记录: access_log /dev/null; error_log /dev/null; - Anatoly
1
使用 /dev/null,因为“off”本来就是一个文件。 - Anatoly
2
如果您想关闭错误日志记录(实际上您不应该这样做),则只需使用 /dev/null。access_log接受一个“off”参数,可以真正关闭日志记录,因此首先不会生成这些行。 - kolbyjack
2
为了降低文件系统的负载,请不要忘记使用noatime选项挂载设备。这将防止在每次访问时更新访问时间。 - Anatoly
2
根据您的情况,您可能希望从gzip列表中删除图像。这并没有太大帮助,而且会消耗CPU资源。最好在上传到服务器之前对它们进行压缩。 - pors
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接