温馨提示×

Ubuntu Nginx缓存配置方法

小樊
39
2025-10-04 12:51:02
栏目: 智能运维

Ubuntu Nginx缓存配置指南

1. 准备工作:安装Nginx

若未安装Nginx,可通过以下命令安装(Ubuntu默认仓库版本即可满足基础缓存需求):

sudo apt update
sudo apt install nginx

安装完成后,启动Nginx并设置开机自启:

sudo systemctl start nginx
sudo systemctl enable nginx

2. 配置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分钟内未被访问则自动删除。

3. 配置缓存生效的Location块

根据需求选择需要缓存的场景(静态资源、动态内容),在对应的server块中添加配置:

(1)静态资源缓存(图片、CSS、JS等)

静态资源访问频率高、修改少,适合设置较长缓存时间:

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)
    }
}

(2)动态内容缓存(PHP、API等)

动态内容需平衡性能与实时性,建议设置较短缓存时间,并处理缓存更新:

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;  # 显示缓存状态
}

4. 创建缓存目录并设置权限

缓存目录需由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

5. 测试配置与重载Nginx

配置修改后,需先测试语法正确性:

sudo nginx -t

若输出configuration file /etc/nginx/nginx.conf test is successful,则重载Nginx使配置生效:

sudo systemctl reload nginx

6. 验证缓存生效

通过浏览器访问网站,打开开发者工具(F12)→ 网络(Network)选项卡,查看静态资源或动态内容的响应头:

  • 若出现X-Proxy-Cache: HIT,表示缓存命中;
  • 若出现X-Proxy-Cache: MISS,表示缓存未命中(首次访问或缓存过期)。

可选优化:安装缓存清除模块(ngx_cache_purge)

若需要手动清除缓存(如更新内容后),可安装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_keyproxy_cache_key包含足够的信息(如URI、参数),避免不同请求共用同一缓存;
  • 缓存失效:动态内容需根据业务需求调整fastcgi_cache_valid时间,或通过PURGE接口手动清除;
  • 性能监控:通过$upstream_cache_status头统计缓存命中率,优化缓存策略(如增加keys_zone大小、调整inactive时间)。

0