Ubuntu Nginx缓存配置指南
若未安装Nginx,可通过以下命令安装(Ubuntu默认仓库版本即可满足基础缓存需求):
sudo apt update
sudo apt install nginx
安装完成后,启动Nginx并设置开机自启:
sudo systemctl start nginx
sudo systemctl enable nginx
缓存的核心配置是通过proxy_cache_path指令定义存储路径、大小及管理规则。编辑Nginx主配置文件(通常为/etc/nginx/nginx.conf)或在虚拟主机配置文件(如/etc/nginx/sites-available/default)中添加以下内容:
http {
# 定义缓存路径、层级结构(1级目录+2级子目录)、键区域名称、最大大小及失效时间
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m max_size=1g inactive=60m use_temp_path=off;
# use_temp_path=off 避免临时文件写入,提升性能
}
keys_zone=my_cache:10m:创建名为my_cache的共享内存区域,大小为10MB(用于存储缓存键,决定缓存数量上限);max_size=1g:缓存目录最大容量为1GB,超过后会根据LRU算法删除旧缓存;inactive=60m:文件在60分钟内未被访问则自动删除。根据需求选择需要缓存的场景(静态资源、动态内容),在对应的server块中添加配置:
静态资源访问频率高、修改少,适合设置较长缓存时间:
server {
listen 80;
server_name example.com;
root /var/www/html;
# 静态资源缓存配置
location ~* \.(jpg|jpeg|png|gif|ico|css|js|woff2)$ {
expires 30d; # 浏览器缓存30天
add_header Cache-Control "public, no-transform"; # 允许公共缓存,禁止转换格式
proxy_cache my_cache; # 启用缓存
proxy_cache_valid 200 302 1h; # 200/302状态码缓存1小时
proxy_cache_valid 404 1m; # 404状态码缓存1分钟
add_header X-Proxy-Cache $upstream_cache_status; # 添加缓存状态头(HIT/MISS/BYPASS)
}
}
动态内容需平衡性能与实时性,建议设置较短缓存时间,并处理缓存更新:
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.1-fpm.sock; # 根据PHP版本调整
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
# 动态内容缓存配置
fastcgi_cache my_cache; # 使用与静态资源相同的缓存区域(可单独创建)
fastcgi_cache_key "$scheme$request_method$host$request_uri"; # 缓存键(包含请求方法、URI等)
fastcgi_cache_valid 200 302 5m; # 200/302状态码缓存5分钟
fastcgi_cache_valid 404 1m; # 404状态码缓存1分钟
fastcgi_cache_use_stale error timeout updating http_500 http_502 http_503 http_504; # 缓存过期或服务器错误时使用旧缓存
fastcgi_cache_bypass $http_cache_control; # 根据客户端Cache-Control头决定是否绕过缓存
fastcgi_no_cache $http_cache_control; # 同上
add_header X-Proxy-Cache $upstream_cache_status; # 显示缓存状态
}
缓存目录需由Nginx工作进程(通常为www-data)拥有读写权限:
sudo mkdir -p /var/cache/nginx
sudo chown -R www-data:www-data /var/cache/nginx
sudo chmod -R 755 /var/cache/nginx
配置修改后,需先测试语法正确性:
sudo nginx -t
若输出configuration file /etc/nginx/nginx.conf test is successful,则重载Nginx使配置生效:
sudo systemctl reload nginx
通过浏览器访问网站,打开开发者工具(F12)→ 网络(Network)选项卡,查看静态资源或动态内容的响应头:
X-Proxy-Cache: HIT,表示缓存命中;X-Proxy-Cache: MISS,表示缓存未命中(首次访问或缓存过期)。若需要手动清除缓存(如更新内容后),可安装ngx_cache_purge模块:
# 安装依赖
sudo apt install libpcre3 libpcre3-dev zlib1g-dev make gcc
# 下载并编译模块
git clone https://github.com/arut/nginx-cache-purge.git
cd nginx-cache-purge
./configure --add-module=/path/to/nginx-cache-purge # 替换为实际路径
make
sudo make install
# 在Nginx配置中添加清除缓存location
server {
# ...
location ~ /purge(/.*) {
allow 127.0.0.1; # 仅允许本地访问
deny all;
fastcgi_pass unix:/run/php/php8.1-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root/purge.php;
fastcgi_param PURGE $1;
}
}
清除缓存的命令(通过curl触发):
curl -X PURGE http://example.com/purge/path/to/resource
fastcgi_cache_key或proxy_cache_key包含足够的信息(如URI、参数),避免不同请求共用同一缓存;fastcgi_cache_valid时间,或通过PURGE接口手动清除;$upstream_cache_status头统计缓存命中率,优化缓存策略(如增加keys_zone大小、调整inactive时间)。