跳到主要内容

Nginx 静态文件优化

Nginx 是一个高性能的 Web 服务器,广泛用于托管静态文件(如图片、CSS、JavaScript 等)。通过优化 Nginx 的配置,可以显著提升静态文件的加载速度,从而改善用户体验并降低服务器负载。本文将逐步介绍如何优化 Nginx 的静态文件处理能力。

1. 启用 Gzip 压缩

Gzip 是一种常用的压缩算法,可以显著减少静态文件的大小,从而加快传输速度。Nginx 支持 Gzip 压缩,只需在配置文件中启用即可。

nginx
http {
gzip on;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
gzip_comp_level 6;
gzip_min_length 1000;
gzip_proxied any;
}
  • gzip on;:启用 Gzip 压缩。
  • gzip_types:指定需要压缩的文件类型。
  • gzip_comp_level:设置压缩级别(1-9),级别越高压缩率越高,但 CPU 消耗也越大。
  • gzip_min_length:设置最小压缩文件大小,小于该值的文件不会被压缩。
  • gzip_proxied:设置是否对代理请求进行压缩。
提示

启用 Gzip 压缩后,静态文件的传输大小会显著减少,但会增加服务器的 CPU 负载。建议根据服务器性能调整压缩级别。

2. 配置缓存

通过配置缓存,可以减少重复请求对服务器的压力,并加快静态文件的加载速度。Nginx 提供了多种缓存机制,包括浏览器缓存和代理缓存。

2.1 浏览器缓存

通过设置 expiresCache-Control 头,可以控制浏览器缓存静态文件的时间。

nginx
location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
expires 30d;
add_header Cache-Control "public, no-transform";
}
  • expires 30d;:设置静态文件的缓存时间为 30 天。
  • add_header Cache-Control "public, no-transform";:添加 Cache-Control 头,允许公共缓存且禁止代理服务器修改内容。
警告

缓存时间过长可能导致用户无法及时获取更新后的文件。建议根据文件更新频率设置合理的缓存时间。

2.2 代理缓存

如果 Nginx 作为反向代理服务器,可以配置代理缓存来缓存上游服务器的响应。

nginx
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m max_size=1g inactive=60m use_temp_path=off;

server {
location / {
proxy_cache my_cache;
proxy_cache_valid 200 302 10m;
proxy_cache_valid 404 1m;
proxy_pass http://backend;
}
}
  • proxy_cache_path:设置缓存路径、缓存区域大小和缓存有效期。
  • proxy_cache:启用缓存。
  • proxy_cache_valid:设置不同状态码的缓存时间。

3. 使用 sendfile 和 tcp_nopush

Nginx 提供了 sendfiletcp_nopush 指令,可以优化文件传输性能。

nginx
http {
sendfile on;
tcp_nopush on;
}
  • sendfile on;:启用 sendfile,允许 Nginx 直接在内核中传输文件,减少用户态和内核态之间的数据拷贝。
  • tcp_nopush on;:启用 tcp_nopush,确保在发送数据包时充分利用网络带宽。
备注

sendfiletcp_nopush 通常一起使用,以最大化文件传输效率。

4. 限制带宽

为了防止单个客户端占用过多带宽,可以通过 limit_rate 指令限制每个连接的带宽。

nginx
location /download/ {
limit_rate 100k;
}
  • limit_rate 100k;:限制每个连接的带宽为 100KB/s。
注意

限制带宽可能会影响用户体验,建议仅在必要时使用。

5. 实际案例

假设你有一个图片分享网站,用户经常访问大量的图片文件。通过以下优化措施,可以显著提升网站性能:

  1. 启用 Gzip 压缩,减少图片传输大小。
  2. 配置浏览器缓存,减少重复请求。
  3. 使用 sendfiletcp_nopush,优化文件传输性能。
  4. 限制带宽,防止单个用户占用过多资源。

6. 总结

通过优化 Nginx 的静态文件处理能力,可以显著提升网站性能和用户体验。本文介绍了启用 Gzip 压缩、配置缓存、使用 sendfiletcp_nopush 以及限制带宽等优化措施。希望这些技巧能帮助你更好地管理 Nginx 服务器。

7. 附加资源

8. 练习

  1. 在你的 Nginx 服务器上启用 Gzip 压缩,并测试压缩效果。
  2. 配置浏览器缓存,观察缓存是否生效。
  3. 尝试使用 sendfiletcp_nopush,比较文件传输性能的变化。

通过实践这些优化措施,你将更深入地理解 Nginx 的静态文件优化技巧。