温馨提示×

debian nginx怎样配置缓存

小樊
45
2026-10-06 12:28:41
栏目: 智能运维

在 Debian 上通过 Nginx 配置缓存,通常分为 静态资源缓存(浏览器端/代理端) 和 反向代理缓存(Nginx 自身缓存) 两类。下面按常见场景一步步说明。


一、基础环境(Debian)

sudo apt update
sudo apt install nginx

配置文件位置:

  • 主配置:/etc/nginx/nginx.conf
  • 站点配置:/etc/nginx/sites-enabled/
  • 测试配置:sudo nginx -t
  • 重载:sudo systemctl reload nginx

二、浏览器缓存(静态资源)

适合 CSS、JS、图片等。

示例(server 块中)

server {
    listen 80;
    server_name example.com;
    root /var/www/html;

    location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff2?)$ {
        expires 30d;
        add_header Cache-Control "public, immutable";
    }
}

说明:

  • expires 30d:浏览器缓存 30 天
  • immutable:内容不变时不重新请求

三、Nginx 反向代理缓存(最常用)

适合 Nginx → 后端(PHP / Java / Node)

1️⃣ 定义缓存目录(nginx.conf 中)

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

参数说明:

  • /var/cache/nginx:缓存目录
  • my_cache:缓存名称
  • 10m:内存索引大小
  • 1g:最大磁盘缓存
  • 60m:60 分钟未访问则删除

创建目录:

sudo mkdir -p /var/cache/nginx
sudo chown -R www-data:www-data /var/cache/nginx

2️⃣ 在站点配置中启用缓存

server {
    listen 80;
    server_name example.com;

    location / {
        proxy_pass http://127.0.0.1:8080;
        proxy_set_header Host $host;

        proxy_cache my_cache;
        proxy_cache_valid 200 302 10m;
        proxy_cache_valid 404 1m;
        add_header X-Cache $upstream_cache_status;
    }
}

X-Cache 值说明:

  • HIT:命中缓存
  • MISS:未命中
  • BYPASS:跳过缓存

四、不缓存某些请求

location /api/ {
    proxy_pass http://127.0.0.1:8080;
    proxy_cache_bypass $cookie_session;
    proxy_no_cache $cookie_session;
}

或按请求方法:

proxy_cache_methods GET HEAD;

五、FastCGI 缓存(PHP 专用)

如果你是 Nginx + PHP-FPM:

fastcgi_cache_path /var/cache/nginx/fcgi levels=1:2 keys_zone=php_cache:10m inactive=60m;
location ~ \.php$ {
    fastcgi_pass unix:/run/php/php8.2-fpm.sock;
    fastcgi_cache php_cache;
    fastcgi_cache_valid 200 10m;
    add_header X-Cache $upstream_cache_status;
}

六、清理缓存

sudo rm -rf /var/cache/nginx/*
sudo systemctl reload nginx

七、常见坑

❌ 缓存了带 Cookie 的页面
✅ 用 proxy_no_cache 排除登录用户

❌ 缓存了 POST 请求
✅ Nginx 默认不缓存 POST

❌ 权限问题
✅ /var/cache/nginx 必须属于 www-data


如果你能告诉我:

  • 是 静态站 / PHP / Java / Node
  • 是否使用 反向代理
  • 想缓存 页面还是接口

我可以直接给你一份 可复制的完整配置。

0 踩