前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >重识Nginx - 11 使用ngx_http_proxy_module的proxy_cache搭建一个具备缓存功能的反向代理服务

重识Nginx - 11 使用ngx_http_proxy_module的proxy_cache搭建一个具备缓存功能的反向代理服务

作者头像
小小工匠
发布2022-10-05 07:58:57
4720
发布2022-10-05 07:58:57
举报
文章被收录于专栏:小工匠聊架构

文章目录

在这里插入图片描述
在这里插入图片描述

官网说明 ngx_http_proxy_module

https://nginx.org/en/docs/http/ngx_http_proxy_module.html

在这里插入图片描述
在这里插入图片描述

proxy_cache_path

代码语言:javascript
复制
Syntax:	proxy_cache_path path [levels=levels] [use_temp_path=on|off] keys_zone=name:size [inactive=time] [max_size=size] [min_free=size] [manager_files=number] [manager_sleep=time] [manager_threshold=time] [loader_files=number] [loader_sleep=time] [loader_threshold=time] [purger=on|off] [purger_files=number] [purger_sleep=time] [purger_threshold=time];
Default:	—
Context:	http
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

proxy_cache_key

代码语言:javascript
复制
Syntax:	proxy_cache_key string;
Default:	
proxy_cache_key $scheme$proxy_host$request_uri;
Context:	http, server, location

Defines a key for caching, for example

代码语言:javascript
复制
proxy_cache_key "$host$request_uri $cookie_user";

By default, the directive’s value is close to the string

代码语言:javascript
复制
proxy_cache_key $scheme$proxy_host$uri$is_args$args;

proxy_cache_valid

代码语言:javascript
复制
Syntax:	proxy_cache_valid [code ...] time;
Default:	—
Context:	http, server, location

Sets caching time for different response codes. For example, the following directives

代码语言:javascript
复制
proxy_cache_valid 200 302 10m;
proxy_cache_valid 404      1m;

set 10 minutes of caching for responses with codes 200 and 302 and 1 minute for responses with code 404.

If only caching time is specified

代码语言:javascript
复制
proxy_cache_valid 5m;

then only 200, 301, and 302 responses are cached.


In addition, the any parameter can be specified to cache any responses:

代码语言:javascript
复制
proxy_cache_valid 200 302 10m;
proxy_cache_valid 301      1h;
proxy_cache_valid any      1m;

Parameters of caching can also be set directly in the response header. This has higher priority than setting of caching time using the directive.

  • The “X-Accel-Expires” header field sets caching time of a response in seconds. The zero value disables caching for a response. If the value starts with the @ prefix, it sets an absolute time in seconds since Epoch, up to which the response may be cached.
  • If the header does not include the “X-Accel-Expires” field, parameters of caching may be set in the header fields “Expires” or “Cache-Control”.
  • If the header includes the “Set-Cookie” field, such a response will not be cached.
  • If the header includes the “Vary” field with the special value “*”, such a response will not be cached (1.7.7). If the header includes the “Vary” field with another value, such a response will be cached taking into account the corresponding request header fields (1.7.7).

Processing of one or more of these response header fields can be disabled using the proxy_ignore_headers directive.

在这里插入图片描述
在这里插入图片描述

其他参数 按需

在这里插入图片描述
在这里插入图片描述

实操

环境

nginx 8888 作为反向代理 , 转发到 后端服务 9999 (用nginx模拟)

在这里插入图片描述
在这里插入图片描述

nginx 8888 反向代理配置

代码语言:javascript
复制
[root@VM-0-7-centos conf]# cat nginx.conf

user  root;
worker_processes  1;

events {
    worker_connections  1024;
}


http {
    include       mime.types;
    default_type  application/octet-stream;


    proxy_cache_path /tmp/nginxcache levels=1:2 keys_zone=my_cache:10m max_size=10g inactive=60m use_temp_path=off;

    sendfile        on;
   
    keepalive_timeout  65;

    gzip  on;
    gzip_min_length 20;
    gzip_types text/plain application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;
    

    upstream local {
       server 127.0.0.1:9999;  # 用nginx 模拟 后端的服务  
    }

    server {
        listen   8888;
        server_name  artisan.nginx.pub;

       

        location / {
           proxy_set_header Host $host;
           proxy_set_header X-Real-IP $remote_addr;
           proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

           proxy_cache my_cache;
           proxy_cache_key $host$uri$is_args$args;
           proxy_cache_valid 200 304 302 1d;

           proxy_pass http://local;
        }


     
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}

重点看

代码语言:javascript
复制
    proxy_cache_path /tmp/nginxcache levels=1:2 keys_zone=my_cache:10m max_size=10g inactive=60m use_temp_path=off;

代码语言:javascript
复制
  proxy_cache my_cache;
  proxy_cache_key $host$uri$is_args$args;
  proxy_cache_valid 200 304 302 1d;

重启服务

代码语言:javascript
复制
[root@VM-0-7-centos artisan_ng]# pwd
/root/ng/artisan_ng

[root@VM-0-7-centos artisan_ng]# ./sbin/nginx -c ./conf/nginx.conf
[root@VM-0-7-centos artisan_ng]#
[root@VM-0-7-centos artisan_ng]# ps -ef|grep nginx
root      841577       1  0 11:26 ?        00:00:00 nginx: master process ./sbin/nginx -c ./conf/nginx.conf
root      841578  841577  0 11:26 ?        00:00:00 nginx: worker process
root      841579  841577  0 11:26 ?        00:00:00 nginx: cache manager process
root      841580  841577  0 11:26 ?        00:00:00 nginx: cache loader process
root      841605  841385  0 11:26 pts/5    00:00:00 grep --color=auto nginx
[root@VM-0-7-centos artisan_ng]#
[root@VM-0-7-centos artisan_ng]#

[root@VM-0-7-centos artisan_ng]#

查看nginx的进程,会发现 多了 两个进程 nginx: cache managernginx: cache loader


nginx 9999 配置 (Mock后端服务)

代码语言:javascript
复制
user  root;
worker_processes  1;


events {
    worker_connections  1024;
}


http {
    include       mime.types;
    default_type  application/octet-stream;



    sendfile        on;

    keepalive_timeout  65;

    gzip on;
    gzip_min_length 20;
    gzip_types *;


    server {
        listen    127.0.0.1:9999;  # 仅允许本地访问
        #listen     9999;
        server_name  localhost;


        location / {
           alias  document/;  # 模拟静态资源文件 

        }
  
        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

}

重启 nginx

代码语言:javascript
复制
[root@VM-0-7-centos ng]# cd  artisan_ng_backserver/
[root@VM-0-7-centos artisan_ng_backserver]# ll
total 40
drwxr-xr-x 2 root root 4096 Oct  4 10:12 client_body_temp
drwxr-xr-x 2 root root 4096 Oct  4 10:43 conf
drwxr-xr-x 3 root root 4096 Oct  4 10:12 document
drwxr-xr-x 2 root root 4096 Oct  4 10:12 fastcgi_temp
drwxr-xr-x 2 root root 4096 Oct  4 10:12 html
drwxr-xr-x 2 root root 4096 Oct  4 10:12 logs
drwxr-xr-x 2 root root 4096 Oct  4 10:12 proxy_temp
drwxr-xr-x 7 root root 4096 Oct  4 10:12 sbin
drwxr-xr-x 2 root root 4096 Oct  4 10:12 scgi_temp
drwxr-xr-x 2 root root 4096 Oct  4 10:12 uwsgi_temp
[root@VM-0-7-centos artisan_ng_backserver]# ./sbin/nginx -c /root/ng/artisan_ng_backserver/conf/nginx.conf
[root@VM-0-7-centos artisan_ng_backserver]#
[root@VM-0-7-centos artisan_ng_backserver]#

验证

代码语言:javascript
复制
[root@VM-0-7-centos tmp]# /root/ng/artisan_ng/sbin/nginx -c /root/ng/artisan_ng/conf/nginx.conf
[root@VM-0-7-centos tmp]#
[root@VM-0-7-centos tmp]#
[root@VM-0-7-centos tmp]# /root/ng/artisan_ng_backserver/sbin/nginx -c /root/ng/artisan_ng_backserver/conf/nginx.conf
[root@VM-0-7-centos tmp]#
[root@VM-0-7-centos tmp]#
[root@VM-0-7-centos tmp]#
[root@VM-0-7-centos tmp]# ps -ef|grep nginx
root      847458       1  0 12:04 ?        00:00:00 nginx: master process /root/ng/artisan_ng/sbin/nginx -c /root/ng/artisan_ng/conf/nginx.conf
root      847459  847458  0 12:04 ?        00:00:00 nginx: worker process
root      847460  847458  0 12:04 ?        00:00:00 nginx: cache manager process
root      847461  847458  0 12:04 ?        00:00:00 nginx: cache loader process
root      847512       1  0 12:05 ?        00:00:00 nginx: master process /root/ng/artisan_ng_backserver/sbin/nginx -c /root/ng/artisan_ng_backserver/conf/nginx.conf
root      847513  847512  0 12:05 ?        00:00:00 nginx: worker process
root      847533  841385  0 12:05 pts/5    00:00:00 grep --color=auto nginx
[root@VM-0-7-centos tmp]#
[root@VM-0-7-centos tmp]#
[root@VM-0-7-centos tmp]# ll
total 4
drwx------ 2 root root 4096 Oct  4 12:04 nginxcache
-rw-r--r-- 1 root root    0 Oct  4 12:04 stargate.lock
[root@VM-0-7-centos tmp]#
[root@VM-0-7-centos tmp]#
[root@VM-0-7-centos tmp]#  启动后 就有 nginxcache 目录了,只不过为空  
[root@VM-0-7-centos tmp]# cd nginxcache/
[root@VM-0-7-centos nginxcache]# ll
total 0
[root@VM-0-7-centos nginxcache]#

我们看到 2个 进程都起好了 .

访问 http://ip:8888/a.html

在这里插入图片描述
在这里插入图片描述

查看/tmp/nginxcache目录

代码语言:javascript
复制
[root@VM-0-7-centos nginxcache]# ll
total 4
drwx------ 3 root root 4096 Oct  4 12:05 b
[root@VM-0-7-centos nginxcache]#

[root@VM-0-7-centos nginxcache]# tree b/
b/
└── d0
    └── a2621ddcb53455c06f238e9b4e5a1d0b

1 directory, 1 file
[root@VM-0-7-centos nginxcache]#

停掉 9999 后台服务

代码语言:javascript
复制
[root@VM-0-7-centos nginxcache]# netstat -anp|grep 9999
tcp        0      0 127.0.0.1:9999          0.0.0.0:*               LISTEN      847512/nginx: maste
tcp        0      0 127.0.0.1:9999          127.0.0.1:45968         TIME_WAIT   -
[root@VM-0-7-centos nginxcache]# kill  847512
[root@VM-0-7-centos nginxcache]#
[root@VM-0-7-centos nginxcache]#
[root@VM-0-7-centos nginxcache]#

再此访问 http://ip:8888/a.html

在这里插入图片描述
在这里插入图片描述

如果删掉 b 这个目录呢 (后台服务也是停掉的)

在这里插入图片描述
在这里插入图片描述

再次启动9999 ,一切正常了,又重新缓存了

代码语言:javascript
复制
[root@VM-0-7-centos nginxcache]# /root/ng/artisan_ng_backserver/sbin/nginx -c /root/ng/artisan_ng_backserver/conf/nginx.conf
[root@VM-0-7-centos nginxcache]#
[root@VM-0-7-centos nginxcache]#
[root@VM-0-7-centos nginxcache]# netstat -anp|grep 9999
tcp        0      0 127.0.0.1:9999          0.0.0.0:*               LISTEN      848053/nginx: maste
[root@VM-0-7-centos nginxcache]#




[root@VM-0-7-centos nginxcache]# ll
total 4
drwx------ 3 root root 4096 Oct  4 12:09 b
[root@VM-0-7-centos nginxcache]#
[root@VM-0-7-centos nginxcache]#
[root@VM-0-7-centos nginxcache]#
[root@VM-0-7-centos nginxcache]#
[root@VM-0-7-centos nginxcache]# tree b/
b/
└── d0
    └── a2621ddcb53455c06f238e9b4e5a1d0b

1 directory, 1 file
[root@VM-0-7-centos nginxcache]#

又重新缓存了。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022/10/04 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 官网说明 ngx_http_proxy_module
    • proxy_cache_path
      • proxy_cache_key
        • proxy_cache_valid
          • 其他参数 按需
          • 实操
            • 环境
              • nginx 8888 反向代理配置
                • nginx 9999 配置 (Mock后端服务)
                  • 验证
                    • 访问 http://ip:8888/a.html
                      • 查看/tmp/nginxcache目录
                        • 停掉 9999 后台服务
                          • 再此访问 http://ip:8888/a.html
                            • 如果删掉 b 这个目录呢 (后台服务也是停掉的)
                              • 再次启动9999 ,一切正常了,又重新缓存了
                              领券
                              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档