重识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]#


又重新缓存了。

相关文章
|
2月前
|
缓存 应用服务中间件 网络安全
Nginx中配置HTTP2协议的方法
Nginx中配置HTTP2协议的方法
153 7
|
3月前
|
自然语言处理 大数据 应用服务中间件
大数据-172 Elasticsearch 索引操作 与 IK 分词器 自定义停用词 Nginx 服务
大数据-172 Elasticsearch 索引操作 与 IK 分词器 自定义停用词 Nginx 服务
88 5
|
2月前
|
负载均衡 监控 应用服务中间件
配置Nginx反向代理时如何指定后端服务器的权重?
配置Nginx反向代理时如何指定后端服务器的权重?
160 61
|
18天前
|
缓存 Java 应用服务中间件
nginx的正向代理和反向代理以及tomcat
Nginx的正向代理和反向代理功能在不同的场景中具有重要作用,正向代理主要用于客户端访问控制和匿名浏览,而反向代理则用于负载均衡和高可用性服务。Tomcat作为Java Web应用服务器,与Nginx结合使用,可以显著提升Web应用的性能和稳定性。通过合理配置Nginx和Tomcat,可以构建高效、稳定和可扩展的Web服务架构。
100 11
|
18天前
|
应用服务中间件 Linux 网络安全
nginx安装部署ssl证书,同时支持http与https方式访问
为了使HTTP服务支持HTTPS访问,需生成并安装SSL证书,并确保Nginx支持SSL模块。首先,在`/usr/local/nginx`目录下生成RSA密钥、证书申请文件及自签名证书。接着,确认Nginx已安装SSL模块,若未安装则重新编译Nginx加入该模块。最后,编辑`nginx.conf`配置文件,启用并配置HTTPS服务器部分,指定证书路径和监听端口(如20000),保存后重启Nginx完成部署。
225 7
|
27天前
|
存储 应用服务中间件 nginx
nginx反向代理bucket目录配置
该配置实现通过Nginx代理访问阿里云OSS存储桶中的图片资源。当用户访问代理域名下的图片URL(如 `http://代理域名/123.png`)时,Nginx会将请求转发到指定的OSS存储桶地址,并重写路径为 `/prod/files/2024/12/12/123.png`。
68 5
|
2月前
|
缓存 负载均衡 算法
如何配置Nginx反向代理以实现负载均衡?
如何配置Nginx反向代理以实现负载均衡?
|
2月前
|
存储 负载均衡 中间件
Nginx反向代理配置详解,图文全面总结,建议收藏
Nginx 是大型架构必备中间件,也是大厂喜欢考察的内容,必知必会。本篇全面详解 Nginx 反向代理及配置,建议收藏。
Nginx反向代理配置详解,图文全面总结,建议收藏
|
2月前
|
应用服务中间件 API nginx
nginx配置反向代理404问题
【10月更文挑战第18天】本文介绍了使用Nginx进行反向代理的配置方法,解决了404错误、跨域问题和302重定向问题。关键配置包括代理路径、请求头设置、跨域头添加以及端口转发设置。通过调整`proxy_set_header`和添加必要的HTTP头,实现了稳定的服务代理和跨域访问。
487 1
nginx配置反向代理404问题
|
2月前
|
安全 应用服务中间件 网络安全
如何测试Nginx反向代理实现SSL加密访问的配置是否正确?
如何测试Nginx反向代理实现SSL加密访问的配置是否正确?
106 3