在Ubuntu上配置Nginx缓存策略可以显著提高网站性能。以下是一些基本的缓存配置步骤和策略:
基本缓存配置
-
安装Nginx和相关模块:
确保你已经安装了Nginx以及必要的模块。你可以使用以下命令来安装Nginx:sudo apt update sudo apt install nginx -
配置缓存目录:
在Nginx配置文件中,你需要指定一个目录来存储缓存文件。通常,这个目录位于/var/cache/nginx。你可以使用以下命令来创建这个目录(如果它不存在的话):sudo mkdir -p /var/cache/nginx sudo chown -R www-data:www-data /var/cache/nginx -
编辑Nginx配置文件:
打开Nginx的主配置文件,通常位于/etc/nginx/nginx.conf,或者你可以在sites-available目录下的特定虚拟主机配置文件中进行设置。例如:sudo nano /etc/nginx/sites-available/default -
添加缓存配置:
在server块中,你可以添加以下配置来启用缓存:http { # 缓存路径 proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m max_size=1g inactive=60m use_temp_path=off; server { listen 80; server_name example.com; location / { proxy_pass http://backend; proxy_cache my_cache; proxy_cache_valid 200 302 10m; proxy_cache_valid 404 1m; add_header X-Proxy-Cache $upstream_cache_status; } } upstream backend { server unix:/var/run/php/php7.4-fpm.sock; # 根据你的PHP版本调整 # 或者使用IP地址和端口 # server 127.0.0.1:9000; } }在这个配置中:
proxy_cache_path指令定义了缓存的存储路径、缓存层级、缓存区名称、最大缓存大小、缓存文件的最大非活动时间和是否使用临时路径。proxy_cache指令指定了使用的缓存区名称。proxy_cache_valid指令设置了不同HTTP状态码的缓存时间。add_header X-Proxy-Cache指令添加了一个自定义头部,用于显示缓存状态。
-
测试配置并重启Nginx:
在保存配置文件后,你可以使用以下命令来测试Nginx配置是否正确:sudo nginx -t如果配置测试通过,你可以重启Nginx来应用更改:
sudo systemctl restart nginx
高级缓存策略
-
使用ETag和Last-Modified:
在location块中添加以下配置:location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ { etag on; if_modified_since exact; # 其他配置... } -
分类型设置缓存时间:
根据不同类型的文件设置不同的缓存时间:location ~* \.(jpg|jpeg|png|gif|svg|ico)$ { expires 365d; add_header Cache-Control "public, immutable"; } location ~* \.(css|js)$ { expires 30d; add_header Cache-Control "public"; } location ~* \.(woff|woff2|ttf|eot)$ { expires 180d; add_header Cache-Control "public"; } -
缓存验证配置:
location /static/ { proxy_cache static_cache; proxy_cache_valid 200 302 12h; proxy_cache_valid 404 1m; proxy_cache_use_stale error timeout updating http_500 http_502 http_503 http_504; proxy_cache_lock on; # 其他配置... }
缓存清除策略
当静态文件更新时,需要确保用户能获取最新版本:
- 文件名版本化:在文件名中加入版本号或哈希值(如
style.a1b2c3.css)。 - 查询字符串:添加版本参数(如
style.css?v=1.0.0)。 - 手动清除:删除缓存目录中的文件或重启Nginx。
最佳实践
- 不同类型的文件设置不同的缓存时间:
- 几乎不变的资源(如字体、logo):1年
- 常规静态资源(CSS/JS):30天
- 可能变化的资源:较短时间或禁用缓存
- 对CDN友好:设置
public指令允许中间缓存(如CDN)存储内容。 - 使用
immutable:对于带哈希的文件名,可以使用immutable告诉浏览器内容永远不会改变。 - 监控缓存命中率:通过Nginx日志或状态模块监控缓存效果。