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

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

20200103193054943.png


官网说明 ngx_http_proxy_module

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


224e57e7504d426f850fb82021e9c0c0.png


proxy_cache_path

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


e92e8ac29af84c64b526b2533b3b6765.png

17edae79b2d64084b7ff4d9db84a9e73.png


proxy_cache_key

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

proxy_cache_key "$host$request_uri $cookie_user";


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

proxy_cache_key $scheme$proxy_host$uri$is_args$args;


proxy_cache_valid


Syntax: proxy_cache_valid [code ...] time;
Default:  —
Context:  http, server, location


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


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

proxy_cache_valid 5m;

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


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

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.


其他参数 按需


6c4af2a95c254b13a422047dc7a28480.png



实操

环境

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

ec7a642dec2d406fba68265b15bb1f74.png


nginx 8888 反向代理配置

[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;
        }
    }
}


重点看

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


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


重启服务

[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后端服务)

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

[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]#


验证

[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


f7bb594bb4f144939fbec9b8c90e68d9.png


查看/tmp/nginxcache目录


[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 后台服务

[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


4e3eeab61dd44ab9accc59cd1d20e3b6.png


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



43847cf75e3244c5982d2488b616a8ef.png

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

[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]#


又重新缓存了。

相关文章
|
3月前
|
缓存 应用服务中间件 网络安全
Nginx中配置HTTP2协议的方法
Nginx中配置HTTP2协议的方法
212 7
|
4月前
|
自然语言处理 大数据 应用服务中间件
大数据-172 Elasticsearch 索引操作 与 IK 分词器 自定义停用词 Nginx 服务
大数据-172 Elasticsearch 索引操作 与 IK 分词器 自定义停用词 Nginx 服务
96 5
|
23天前
|
缓存 负载均衡 应用服务中间件
Nginx七层(应用层)反向代理:HTTP反向代理proxy_pass篇
通过使用Nginx的反向代理功能,可以有效地提高Web应用的性能、安全性和可扩展性。配置过程中需要注意不同场景下的具体需求,如负载均衡、SSL终止和缓存策略等。正确配置和优化Nginx反向代理可以显著提升系统的整体表现。
86 20
|
2月前
|
应用服务中间件 Linux 网络安全
nginx安装部署ssl证书,同时支持http与https方式访问
为了使HTTP服务支持HTTPS访问,需生成并安装SSL证书,并确保Nginx支持SSL模块。首先,在`/usr/local/nginx`目录下生成RSA密钥、证书申请文件及自签名证书。接着,确认Nginx已安装SSL模块,若未安装则重新编译Nginx加入该模块。最后,编辑`nginx.conf`配置文件,启用并配置HTTPS服务器部分,指定证书路径和监听端口(如20000),保存后重启Nginx完成部署。
520 7
|
3月前
|
负载均衡 前端开发 JavaScript
Nginx 代理多服务
以上是 Nginx 代理多服务的几种常见方式,在实际应用中,可以根据具体的业务需求和系统架构选择合适的代理方式,并结合其他 Nginx 的功能和配置来优化和完善系统的性能和功能。
|
4月前
|
缓存 负载均衡 应用服务中间件
Nginx 实现一个端口代理多个前后端服务
【10月更文挑战第19天】Nginx 的强大功能不仅限于此,它还可以与其他技术和工具相结合,为我们的应用提供更强大的支持和保障。在不断发展的互联网时代,掌握 Nginx 的使用技巧将为我们的工作和生活带来更多的便利和效益。
|
4月前
|
存储 缓存 监控
|
4月前
|
存储 缓存 负载均衡
Nginx代理缓存机制
【10月更文挑战第2天】
132 4
|
4月前
|
存储 缓存 NoSQL
Nginx缓存
Nginx缓存
36 2
|
4月前
|
应用服务中间件 Apache 开发工具
nginx服务企业应用
nginx服务企业应用