Nginx应用之缓存

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/qq_42191317/article/details/100527763

Nginx缓存简介

对于一个含有大量内容的网站来说,随着访问量的增多,对于经常被用户访问的内容,若每一次都要到后端服务器中获取,会给服务器带来巨大压力,为此,利用反向代理服务器对访问频率较多的内容进行缓存,有利于节省后端服务器的资源。Nginx提供了两种Web缓存方式,一种是永久性缓存,另一种是临时性缓存。

Web缓存服务器位于内容源Web服务器和客户端之间,当客户端用户访问一个URL时,Web缓存服务器就会请求相应的内容源Web服务器,并将响应的信息缓存到内存或磁盘,然后当下一次请求来时,如果访问的是相同的URL,Web缓存服务器会直接将已缓存的内容输出给客户端,而不用再次访问内容源Web服务器。

利用缓存服务器可以有效降低内容源服务器和数据库的负载,提高用户访问速度。

Nginx配置缓存服务

永久性缓存

Nginx提供的proxy_store指令可用于将内容源服务器响应的内容缓存到本地文件,若不手动删除,该缓存文件一直生效。因此,永久缓存方式适用于缓存网站中几乎不会更改的内容。

        location / {
             root cache;
             proxy_store on;
             proxy_store_access user:rw group:rw all:r;
             proxy_temp_path cache_tmp;
             proxy_pass http://59.110.171.154;
        }

第一行将目标服务器的响应结果文件保存在nginx的根目录cache下,第二行是打开缓存,第三行是缓存文件的访问权限,第四行为生成的缓存文件位置,第四行为反向代理。

访问后,cache目录如下所示:

这两个文件正好是目标服务器返回的结果

root@iZ2ze488eeqkbsq8cxntxbZ logs]# tail -20f access.log 
94.191.112.250 - - [03/Sep/2019:21:13:16 +0800] "GET /WWW/phpMyAdmin/index.php HTTP/1.0" 404 153 "-" "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:28.0) Gecko/20100101 Firefox/28.0"
94.191.112.250 - - [03/Sep/2019:21:13:16 +0800] "GET /phpMyAdmln/index.php HTTP/1.0" 404 153 "-" "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:28.0) Gecko/20100101 Firefox/28.0"
94.191.112.250 - - [03/Sep/2019:21:13:17 +0800] "GET /program/index.php HTTP/1.0" 404 153 "-" "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:28.0) Gecko/20100101 Firefox/28.0"
94.191.112.250 - - [03/Sep/2019:21:13:17 +0800] "GET /shopdb/index.php HTTP/1.0" 404 153 "-" "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:28.0) Gecko/20100101 Firefox/28.0"
94.191.112.250 - - [03/Sep/2019:21:13:17 +0800] "GET /phppma/index.php HTTP/1.0" 404 153 "-" "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:28.0) Gecko/20100101 Firefox/28.0"
94.191.112.250 - - [03/Sep/2019:21:13:18 +0800] "GET /phpmy/index.php HTTP/1.0" 404 153 "-" "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:28.0) Gecko/20100101 Firefox/28.0"
94.191.112.250 - - [03/Sep/2019:21:13:18 +0800] "GET /mysql/admin/index.php HTTP/1.0" 404 153 "-" "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:28.0) Gecko/20100101 Firefox/28.0"
94.191.112.250 - - [03/Sep/2019:21:13:19 +0800] "GET /mysql/dbadmin/index.php HTTP/1.0" 404 153 "-" "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:28.0) Gecko/20100101 Firefox/28.0"
94.191.112.250 - - [03/Sep/2019:21:13:19 +0800] "GET /mysql/sqlmanager/index.php HTTP/1.0" 404 153 "-" "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:28.0) Gecko/20100101 Firefox/28.0"
94.191.112.250 - - [03/Sep/2019:21:13:20 +0800] "GET /mysql/mysqlmanager/index.php HTTP/1.0" 404 153 "-" "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:28.0) Gecko/20100101 Firefox/28.0"
94.191.112.250 - - [03/Sep/2019:21:13:20 +0800] "GET /wp-content/plugins/portable-phpmyadmin/wp-pma-mod/index.php HTTP/1.0" 404 153 "-" "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:28.0) Gecko/20100101 Firefox/28.0"
94.191.112.250 - - [03/Sep/2019:21:13:20 +0800] "GET /manager/html HTTP/1.0" 404 555 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.108 Safari/537.36"
94.191.112.250 - - [03/Sep/2019:21:17:21 +0800] "GET / HTTP/1.0" 304 0 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36"
94.191.112.250 - - [03/Sep/2019:21:22:24 +0800] "GET / HTTP/1.0" 304 0 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36"
124.89.2.70 - - [03/Sep/2019:21:24:50 +0800] "GET / HTTP/1.1" 200 628 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36"
124.89.2.70 - - [03/Sep/2019:21:24:57 +0800] "GET /demo.html HTTP/1.1" 200 16 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36"
124.89.2.70 - - [03/Sep/2019:21:25:02 +0800] "GET /demo2.html HTTP/1.1" 200 22 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36"
94.191.112.250 - - [03/Sep/2019:21:25:12 +0800] "GET / HTTP/1.0" 304 0 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36"
94.191.112.250 - - [03/Sep/2019:21:25:18 +0800] "GET /demo.html HTTP/1.0" 200 16 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36"
94.191.112.250 - - [03/Sep/2019:21:25:24 +0800] "GET /demo2.html HTTP/1.0" 200 22 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36"
94.191.112.250 - - [03/Sep/2019:21:29:17 +0800] "GET /demo2.html HTTP/1.0" 304 0 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36"

查看目标服务器访问日志,发现还是将请求转发,并没有使用本地缓存

原因很简单,以上配置只是打开缓存,将响应缓存下来,但是遇到请求还是会转发,想要使用本地缓存,还需要添加如下配置

        location / {
             root cache;
             proxy_store on;
             proxy_store_access user:rw group:rw all:r;
             proxy_temp_path cache_tmp;
             if (!-e $request_filename){
                proxy_pass http://59.110.171.154;
                }
        }  

上面的表达式,!-e的意思是检查一个文件是否存在,当不存在时,就将请求转发。

这次成功使用缓存,目标服务器并未接受到请求。

PS:Nginx的永久性缓存是基于文件存储的,有时候和使用Redis缓存的服务端相比,速度可能还会变慢。

临时性缓存

Nginx服务器中还存在一种使用proxy_cache指令设置的临时缓存配置,它采用md5算法将请求连接进行Hash后,根据具体配置生成缓存文件目录,保存响应数据。

   proxy_temp_path /root/local/nginx/proxy_temp_dir;
   proxy_cache_path /root/local/nginx/proxy_cache_dir levels=1:2 keys_zone=cache_one:50m inactive=1m max_size=500m;

配置目标服务器返回文件的临时目录和Web缓存目录和参数设置

levels:表示缓存目录下的层级结构,Hash后的请求URL地址创建。

keys_zone:指定缓存区的名称cache_one及大小50M

inactive:主动清空在指定时间内未被访问的缓存  1m代表1分钟

max_size:指定缓存最大大小

接着在Server块中添加临时缓存相关配置

        add_header X-Via $server_addr;
        add_header X-Cache $upstream_cache_status;
        location / {
                proxy_cache cache_one;
                proxy_cache_key $host$uri$is_args$args;
                proxy_cache_valid 200 10m;
                proxy_cache_valid 304 1m;
                proxy_cache_valid any 1m;
                proxy_pass http://59.110.171.154;
         }

第一行用于设置缓存区名称,第二行设置key规则,后面几行设置不同状态码的缓存时间。

至此临时缓存配置完成。

猜你喜欢

转载自blog.csdn.net/qq_42191317/article/details/100527763
今日推荐