ubuntu

Ubuntu Nginx缓存机制详解

小樊
42
2025-10-27 13:36:17
栏目: 智能运维

Ubuntu Nginx缓存机制详解

一、Nginx缓存机制概述

Nginx作为高性能反向代理服务器,其缓存机制主要通过代理缓存(Proxy Cache)实现,用于减少对后端服务器的重复请求,降低服务器负载并提升响应速度。缓存的核心流程为:用户发起请求→Nginx检查缓存是否存在(缓存命中)→直接返回缓存数据;若未命中→向后端服务器请求→将响应存入缓存→返回给用户。

二、核心配置指令解析

Nginx缓存功能通过多个指令协同实现,以下是关键指令的详细说明:

1. proxy_cache_path:定义缓存路径与参数

该指令用于设置缓存的存储路径、层级结构、内存区域及大小等核心参数,必须在http块中配置。

2. proxy_cache:启用缓存

location块中使用该指令,指定要使用的缓存区域(如my_cache),启用代理缓存功能。

3. proxy_cache_valid:设置缓存有效期

定义不同HTTP状态码的缓存时间,格式为状态码 时间(可多个组合)。例如:

proxy_cache_valid 200 302 10m;  # 200(成功)、302(临时重定向)响应缓存10分钟
proxy_cache_valid 404 1m;       # 404(未找到)响应缓存1分钟

未明确指定的状态码(如500)默认不缓存。

4. proxy_cache_key:定义缓存键

用于唯一标识缓存项,默认值为$scheme$proxy_host$request_uri(协议+主机名+请求URI)。可根据需求自定义,例如包含查询参数:

proxy_cache_key "$scheme$proxy_host$request_uri$is_args$args";

$is_args:是否有查询参数,$args:查询参数内容)。

5. add_header:显示缓存状态

通过添加自定义响应头,方便验证缓存是否生效。常用字段为$upstream_cache_status,其值包括:

三、基础配置示例

以下是一个完整的Nginx代理缓存配置示例(适用于Ubuntu环境):

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_cache my_cache;
            # 向后端服务器转发请求
            proxy_pass http://backend_server;
            # 设置缓存有效期
            proxy_cache_valid 200 302 10m;
            proxy_cache_valid 404 1m;
            # 添加缓存状态头
            add_header X-Proxy-Cache $upstream_cache_status;
            # 允许缓存方法(默认GET、HEAD)
            proxy_cache_methods GET HEAD;
            # 绕过缓存的条件(如带Pragma头的请求)
            proxy_cache_bypass $http_pragma;
            # 不缓存的条件(如带Authorization头的请求)
            proxy_no_cache $http_pragma $http_authorization;
        }

        # 缓存清理接口(仅允许本地访问)
        location = /purge {
            allow 127.0.0.1;
            deny all;
            proxy_cache_purge my_cache $scheme://$host$request_uri;
        }
    }
}

配置完成后,通过sudo nginx -t测试语法,再用sudo systemctl reload nginx重新加载配置。

四、缓存清理方法

1. 通过配置的/purge接口清理

若配置了/purge location块(如上述示例),可通过发送PURGE请求清理指定URL的缓存:

curl -X PURGE http://example.com/some_url

(仅允许本地访问,确保安全性)。

2. 手动清理缓存目录

直接删除/var/cache/nginx下的缓存文件(需停止Nginx服务以避免数据损坏):

sudo systemctl stop nginx
sudo rm -rf /var/cache/nginx/*
sudo systemctl start nginx

五、缓存状态监控

1. 通过响应头查看

访问网站时,在响应头中查找X-Proxy-Cache字段,即可知道缓存是否命中(如HIT表示命中)。

2. 启用缓存状态模块

http块中添加以下配置,启用缓存状态页面(仅允许本地访问):

location /nginx_cache_status {
    stub_status on;
    access_log off;
    allow 127.0.0.1;
    deny all;
}

访问http://localhost/nginx_cache_status,可查看缓存的命中次数、未命中次数等信息。

六、优化建议

0
看了该问题的人还看了