Appearance
优化网站性能:正确配置 Nginx MIME 类型和 gzip 压缩
在今天的博客中,我将分享我是如何解决一个关于 Nginx gzip 配置的棘手问题。这个问题最初是通过使用 Lighthouse 进行网站性能分析时发现的。
Lighthouse 提示我可以通过使用 gzip 来加快网站资源的传输速度。这让我感到困惑,因为我确信我的 Nginx 服务器已经启用了 gzip 压缩。 登录到服务器后,我开始检查 Nginx 的配置文件。我发现虽然 gzip 是启用的,但是一些关键的 gzip 配置指令,如 gzip_vary
、gzip_proxied
、gzip_comp_level
、gzip_buffers
、gzip_http_version
和 gzip_types
,都是被注释掉的,这意味着它们并没有生效。
这解释了为什么我的网站上一部分资源有 Content-Encoding: gzip
头,而另一部分资源没有。显然,只有默认启用的 gzip 压缩在起作用,而没有针对特定类型的资源进行配置。
为了解决这个问题,我采取了以下步骤:
- 取消注释 gzip 配置指令:我首先取消了 gzip_vary、gzip_proxied、gzip_comp_level、gzip_buffers、gzip_http_version 和 gzip_types 的注释,这样它们就会生效。
- 调整 gzip_types:我检查了 gzip_types 指令,确保它包含了所有我应该压缩的资源类型。我添加了常见的文本和脚本类型,例如 text/plain、text/css、application/json、application/javascript 等。
- 重新加载 Nginx 配置:为了让更改生效,我重新加载了 Nginx 的配置文件。
重新测试:我使用 Lighthouse 再次测试了我的网站,这次所有符合条件的资源都被正确地压缩了,性能得分有了明显的提升。
然而,这又引出了一个新的问题:我注意到我的字体文件(MIME 类型为 application/octet-stream
)是否也应该使用 gzip 压缩?
首先,让我澄清一下 MIME 类型。MIME 类型是服务器用来告诉浏览器如何处理文件的机制。对于字体文件,例如 .woff 和 .woff2,它们应该分别使用 font/woff 和 font/woff2 作为其 MIME 类型。
我查阅了 Nginx 的 mime.types 文件,发现 .woff 字体文件被描述为 application/font-woff
,这是过时的。根据最新的互联网标准,我们应该将其更新为 font/woff
。
经过一番调查和考虑,我更新了服务器中 nginx 的 mime.types 文件, 并决定不将这些字体文件包含在 gzip 压缩中,因为它们已经是高度压缩的格式,再次压缩可能不会带来显著的好处,反而可能增加服务器的负担。
总结一下,通过仔细检查和调整 Nginx 的 gzip 配置,我能够确保我的网站资源得到正确的压缩,从而提高了性能和用户体验。这个经验提醒我,定期检查和优化服务器配置对于保持网站的最佳性能至关重要。希望这篇博客对您有所帮助!
命令 | 说明 |
---|---|
gzip_vary on; | 这个指令告诉 Nginx 在响应头中添加 Vary: Accept-Encoding,表明响应内容会根据请求头中的 Accept-Encoding 字段来变化。这对于缓存代理服务器很重要,因为它们需要知道何时提供 gzip 压缩的响应。 |
gzip_proxied any; | 这个指令指定了哪些情况下对代理请求的响应进行 gzip 压缩。any 参数意味着对所有代理请求都进行压缩,无论请求头中是否包含 Accept-Encoding 字段。 |
gzip_comp_level 6; | 这个指令设置了 gzip 压缩的级别,范围是 1 到 9(9 是最高压缩率,也是最消耗 CPU 资源的)。6 是一个平衡点,提供了不错的压缩率而不会过度消耗服务源。 |
gzip_buffers 16 8k; | 这个指令设置了用于压缩的缓冲区数量和大小。16 表示缓冲区的数量,8k 表示每个缓冲区的大小。这有助于控制 Nginx 在压缩数据时使用的内存量。 |
gzip_http_version 1.1; | 这个指令指定了使用 gzip 压缩的最低 HTTP 版本。将此设置为 1.1 意味着只有 HTTP/1.1 及以上的请求才会被压缩。 |
gzip_types | 这个指令指定了哪些 MIME 类型的响应将使用 gzip 压缩。列表中的每个类型都表示一种内容类型,Nginx 将对这些类型的响应进行压缩。 |