Web服务器-Nginx缓存服务器

作者介绍:简历上没有一个精通的运维工程师。请点击上方的蓝色《运维小路》关注我,下面的思维导图也是预计更新的内容和当前进度(不定时更新)。

图片

我们上一大章介绍了Kubernetes的知识,本章节我们进入中间件的讲解,这里会包含很多不同的类型组件,中间件的第一个大类我这里定义的是Web服务器。由于目前使用最广泛的Web服务器是Nginx,所以我们这里的讲解主要以Nginx服务器为主。

在Nginx作为服务器的情况下存在两种缓存:一种是本地浏览器的缓存,该情况可以降低Nginx的请求压力,资源缓存到本地浏览器,不向Nginx服务器发起请求。另外一种是缓存其他后端内容,Nginx不向后端发起请求,减少后端压力。

1.本地浏览器缓存

#匹配命中指定的静态资源缓存 
location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
        # 启用浏览器缓存(1年)http1.0协议 
        expires 1y;
        #优先级高于expires http1.1协议 
        #允许允许cdn等代理缓存
        add_header Cache-Control "public, max-age=31536000";
        # 启用Nginx本地缓存(可选)
        open_file_cache max=1000 inactive=20s;
        open_file_cache_valid 30s;
        open_file_cache_min_uses 2;
        open_file_cache_errors on;
    }

还有一个参数:ETag(Entity Tag)是服务器为资源生成的唯一标识(如哈希值)也和缓存有关,一般使用相对较少。虽然普通浏览器默认也会启用缓存,但是这个属于不可控因素,而Nginx启用缓存则是强制缓存。

图片

图片

从上图可以看到第一次请求是真实传输了数据,但是后面的多次请求则没有发起具体的文件(css/js/jpeg)请求,这样就降低的服务器的压力,这个主要用于静态文件。

2.代理浏览器缓存

# 定义缓存路径(放在 nginx主配置文件http 块内)
http {
    proxy_cache_path /tmp/nginxcache levels=1:2 keys_zone=mycache:10m;
}

#下面内容可以单独放置在配置文件里面 
server {
    listen 80;
    server_name 192.168.31.120;

    # 代理所有请求到后端
    location / {
        proxy_pass http://192.168.31.121;  # 替换为实际后端地址

        # 启用缓存核心配置(只需这3行)
        proxy_cache mycache;
        proxy_cache_valid 200 5m;  # 只缓存200状态码5分钟
        add_header X-Cache-Status $upstream_cache_status;
    }
}

​​​​​​

(base) [root@localhost ~]# curl -I 192.168.31.120
HTTP/1.1 200 OK
Server: nginx/1.20.1
Date: Sun, 06 Apr 2025 16:43:08 GMT
Content-Type: text/html
Content-Length: 703
Connection: keep-alive
Last-Modified: Sun, 06 Apr 2025 16:41:32 GMT
ETag: "67f2aebc-2bf"
X-Cache-Status: MISS    #未命中缓存
Accept-Ranges: bytes
(base) [root@localhost ~]# curl -I 192.168.31.120
HTTP/1.1 200 OK
Server: nginx/1.20.1
Date: Sun, 06 Apr 2025 16:43:11 GMT
Content-Type: text/html
Content-Length: 703
Connection: keep-alive
Last-Modified: Sun, 06 Apr 2025 16:41:32 GMT
ETag: "67f2aebc-2bf"
X-Cache-Status: HIT   #命中缓存 
Accept-Ranges: bytes

​​​​​​​

​​​​​​​

当我使用了浏览器访问测试3次,其中第一次和第三次是都是从代理服务器请求了数据,第二次是使用的本地缓存。

图片

但是真实后端服务器只收到了第一次请求,后面2次都没收到,因为前面的Nginx代理缓存了数据,未向后端发起请求,从而减少了后端压力。而我们配置的缓存目录也也生成了数据。

图片

图片

运维小路

一个不会开发的运维!一个要学开发的运维!一个学不会开发的运维!欢迎大家骚扰的运维!

关注微信公众号《运维小路》获取更多内容。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值