nginx代理缓存配置-Linux(CentOS)

代理缓存

  • [1. 编写主配置文件](#1. 编写主配置文件)
  • [2. 编辑虚拟机配置文件](#2. 编辑虚拟机配置文件)
  • [3. 重启nginx服务](#3. 重启nginx服务)

nginx代理服务配置,基于http协议

开启代理缓存的前提是已经开启了代理服务,请确保已经开启代理服务

1. 编写主配置文件

主配置文件通常在/etc/nginx/nginx.conf,在该文件中的http块中添加下面配置

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

该命令的详解:

bash 复制代码
# 定义 Nginx 缓存区域的配置
# cache_path 指令指定了缓存存储的位置以及相关的缓存设置

# /var/cache/nginx: 缓存文件存储的目录
# 这里定义了所有缓存文件将被存储到 /var/cache/nginx 目录下
proxy_cache_path /var/cache/nginx

# levels=1:2: 指定了缓存目录的层级结构
# 这有助于避免在存储大量缓存文件时目录变得过于庞大
# 'levels=1:2' 表示缓存目录将分为两级,第一层有 1 个子目录,第二层有 2 个子目录
# 例如:/var/cache/nginx/a/ab,其中 'a' 是第一层目录,'ab' 是第二层目录
levels=1:2

# keys_zone=my_cache:10m: 定义了缓存区域的名称和大小
# 'my_cache' 是缓存区域的名称,用于在 proxy_cache 指令中引用
# '10m' 指定了缓存区域的共享内存区域的大小为 10 兆字节
# 该内存用于存储缓存的元数据,例如缓存键和缓存条目的过期时间
keys_zone=my_cache:10m

# max_size=10g: 设置缓存区域的最大大小
# '1g' 表示缓存目录的最大存储空间为 1 吉字节
# 一旦缓存目录的大小达到这一限制,旧的缓存条目将被清除以释放空间
max_size=1g

# inactive=60m: 设置缓存条目的非活动时间
# '60m' 表示如果缓存条目在 60 分钟内没有被访问,则会被删除
# 这个设置有助于清理不再使用的缓存数据,防止缓存目录变得过于庞大
inactive=60m

# use_temp_path=off: 指定是否使用临时路径存储缓存数据
# 'off' 表示缓存数据不会先存储到临时路径中,而是直接写入到缓存目录
# 如果设置为 'on',缓存数据会首先存储到一个临时文件中,写入成功后再移动到缓存目录
use_temp_path=off;

确保路径存在

bash 复制代码
ls /var/cache/nginx

2. 编辑虚拟机配置文件

虚拟机配置文件通常位于/etc/nginx/conf.d/default.conf

注意:该虚拟机一定要开启代理服务

bash 复制代码
server {
    listen       80;
    server_name  your_domain_or_ip;

    location / {
    	proxy_cache my_cache;
        proxy_cache_valid 200 304 12h;
        proxy_cache_valid any 10m;
        proxy_cache_key $host$uri$is_args$args;
        add_header  Nginx-Cache "$upstream_cache_status";
        proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
    }
}

以下是配置项的解释:

bash 复制代码
# 启用名为 'my_cache' 的缓存区域
# 在 http 块中必须已经定义了名为 'my_cache' 的缓存区域
# 例如,通过 cache_path 指令设置了这个区域
proxy_cache my_cache;

# 设置缓存有效时间
# 对于 HTTP 状态码 200(成功)和 304(未修改)的响应,将缓存存储 12 小时
# 这意味着在这段时间内,相同请求的响应将直接从缓存中提供,而不是转发到上游服务器
proxy_cache_valid 200 304 12h;

# 对于其他所有 HTTP 状态码的响应(如 400、403、404 等),缓存时间设置为 10 分钟
# 这样即使响应不是成功或未修改的情况,也会在缓存中保留一段时间,减少对上游服务器的请求
proxy_cache_valid any 10m;

# 定义缓存键
# 这里使用 $host 和 $uri$is_args$args 作为缓存键的一部分,以确保不同的请求生成唯一的缓存条目
# - $host: 请求的主机名
# - $uri: 请求的路径
# - $is_args: 如果请求有查询参数,添加 '?',否则为空
# - $args: 查询参数
# 这种组合可以有效地区分不同的请求,避免缓存冲突
proxy_cache_key $host$uri$is_args$args;

# 添加自定义响应头,显示缓存状态
# 响应头 Nginx-Cache 的值由 $upstream_cache_status 变量提供
# 可能的值包括 'MISS'(缓存未命中)、'HIT'(缓存命中)、'STALE'(缓存过时但仍提供)
# 这对于调试和监控缓存行为非常有用
add_header Nginx-Cache "$upstream_cache_status";

# 定义在以下情况下将请求转发到下一个上游服务器
# - error: 上游服务器出现错误
# - timeout: 请求超时
# - invalid_header: 上游服务器返回的头部无效
# - http_500, http_502, http_503, http_504: 上游服务器返回这些错误状态码时
# 这确保了在遇到问题时,Nginx 可以尝试其他上游服务器继续处理请求
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;

3. 重启nginx服务

检测nginx配置文件

bash 复制代码
nginx -t

重启服务

bash 复制代码
systemctl restart nginx

访问代理服务器IP地址,通过浏览器开发者功能(F12)。观察是否命中缓存。

Nginx-Cache: HIT为命中

如果结果为下图,也不要慌初次访问均为miss

Nginx-Cache: HIT为未命中

相关推荐
wdfk_prog31 分钟前
[Linux]学习笔记系列 -- lib/sort.c 通用的排序库(Generic Sorting Library) 为内核提供标准的、高效的排序功能
linux·运维·c语言·笔记·stm32·学习·bug
jump_jump36 分钟前
前端部署工具 PinMe
运维·前端·开源
闲人编程1 小时前
深入理解Python的`if __name__ == ‘__main__‘`:它到底做了什么?
服务器·数据库·python·main·name·魔法语句
黑马金牌编程1 小时前
简易分析慢 SQL 的流程和方法
linux·数据库·mysql·性能优化·性能分析·慢日志
什么半岛铁盒1 小时前
C++项目:仿muduo库高并发服务器---------LoopThreadPool模块和TcpServer模块的实现
linux·服务器·c++·mysql·ubuntu
それども2 小时前
本地怎么远程调试服务器
运维·服务器
Lin_Aries_04212 小时前
容器化 Flask 应用程序
linux·后端·python·docker·容器·flask
鹏大师运维3 小时前
麒麟系统中修改 WPS 默认新建文件格式的方法
linux·操作系统·wps·docx·麒麟·word文档·excel文档
斯普信专业组4 小时前
Filebeat写ElasticSearch故障排查思路(上)
运维·elasticsearch·中间件·filebeat
Lin_Aries_04214 小时前
通过配置 GitLab 自动触发项目自动化构建与部署
运维·docker·容器·自动化·云计算·gitlab