Nginx代理缓存功能 您所在的位置:网站首页 nginx的版本 Nginx代理缓存功能

Nginx代理缓存功能

#Nginx代理缓存功能| 来源: 网络整理| 查看: 265

Nginx代理缓存功能 Nginx缓存主要是用于减轻后端服务器的负载,提高网站并发量,提升用户体验度。

注意:Nginx反向代理的缓存功能是由ngx_http_proxy_module提供,在使用缓存功能时务必要nginx支持该模块。可能有些选项的不支持Nginx的版本,具体看官方文档: http://nginx.org/en/docs/http/ngx_http_proxy_module.html

后端服务器可能无法承受负载为了更好的提升用户体验

Proxy cache配置

1.server配置

proxy_cache_path /cache/nginx/ levels=1:2 keys_zone=mycache:64m; server { listen 80; location / { proxy_cache mycache; proxy_pass http://192.168.123.34:80/; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_cache_methods GET HEAD; proxy_cache_revalidate on; proxy_cache_valid 200 302 10m; proxy_cache_valid 404 1m; proxy_cache_valid any 1m; proxy_cache_min_uses 1; proxy_cache_use_stale error timeout invalid_header http_500 http_502 http_503 http_504; } }

2.参数详解

proxy_cache_path /cache/nginx/ levels=1:2 keys_zone=mycache:64m; #proxy_cache_path 为缓存存放路径; #levels的第一位表示使用1级子目录冒号隔开第二位表示使用2级子目录,其最多使用三级,1表示每个一级子目录的名字只能使用1个字符; #key_zone中的mycache为缓存名字,可以在location或者server中通过proxy_cache引用;64m表示用多少内存空间存储nginx key; proxy_cache mycache; #引用mycache缓存空间; proxy_pass http://192.168.123.34:80/; #将来自 / 的请求代理至192.168.123.34:80 该服务器,后面的 '/' 是必须的; proxy_set_header Host $host; #用于后端的real server区分不同的虚拟主机; proxy_set_header X-Real-IP $remote_addr; #记录客户端真实ip地址,而不是代理服务器地址,需要后端web服务器开启日志相应功能接收; proxy_cache_methods GET HEAD; #表示对客户端请求的GET 和 HEAD方法进行缓存; proxy_cache_revalidate on; #本地缓存过期会检查后端服务器该缓存是否存在,避免后端重传占据带宽; proxy_cache_valid 200 302 10m; proxy_cache_valid 404 1m; proxy_cache_valid any 1m; #针对于不同的响应码进行缓存不同的时间设定; proxy_cache_min_uses 1; #某一个请求被响应多少次才会被缓存,默认是1,可以将该值设置为大一些; proxy_cache_use_stale error timeout invalid_header http_500 http_502 http_503 http_504; #指明哪种场景可以使用过期缓存,提升用户体验; 补充: proxy_hide_header; #隐藏由proxy响应客户端时指定的首部; proxy_buffer 4|8k #为了响应客户端更快,服务器端响应客户端可能分成多个ip报文响应,也可以整合在一起再一次响应; Nginx缓存是键值存储,URL是键,文件路径是值。键值存储的速度就是加快在文件系统中查找的速度。所以,存储的key是哈希过的值。

3.平滑重启nginx

[root@localhost nginx]# nginx -s reload [root@localhost nginx]# ps -elf|grep nginx 1 S root 10175 1 0 80 0 - 27830 sigsus 09:52 ? 00:00:00 nginx: master process nginx 5 S www 11165 10175 0 80 0 - 28893 ep_pol 18:10 ? 00:00:00 nginx: worker process 5 S www 11166 10175 0 80 0 - 28893 ep_pol 18:10 ? 00:00:00 nginx: worker process 5 S www 11167 10175 0 80 0 - 27830 ep_pol 18:10 ? 00:00:00 nginx: cache manager process 重启完成这里会多一个cache manager,其主要作用和memcached的LRU算法相似,删除过期缓存。而如果缓存没过期其上有服务器数据发生变化则依旧访问是错误的数据。可以通过程序实现。

4. 后端服务器配置静态页面

4.1 虚拟主机配置

server { listen 80; server_name www.test.com; location / { root html/bbs; index index.html index.htm; } }

4.2 页面内容

i am node1

4.3 物理机尝试访问

可以在代理服务器里查看到缓存的key 此时修改index内容客户端请求并不会发生改变 i am node2 node2!!! #客户端清理缓存再次请求

5.在不使用缓存与使用缓存的对比测速

1.分别处理10000个请求1000个并发对比,先是不使用缓存的情况

[root@localhost nginx]# ab -n 10000 -c 1000 http://www.test.com/index.html This is ApacheBench, Version 2.3 Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/ Licensed to The Apache Software Foundation, http://www.apache.org/ Benchmarking www.test.com (be patient) Completed 1000 requests Completed 2000 requests Completed 3000 requests Completed 4000 requests Completed 5000 requests Completed 6000 requests Completed 7000 requests Completed 8000 requests Completed 9000 requests Completed 10000 requests Finished 10000 requests Server Software: nginx/1.6.3 Server Hostname: www.test.com Server Port: 80 Document Path: /index.html Document Length: 20 bytes Concurrency Level: 1000 Time taken for tests: 4.393 seconds Complete requests: 10000 Failed requests: 836 (Connect: 0, Receive: 0, Length: 836, Exceptions: 0) Write errors: 0 Non-2xx responses: 836 Total transferred: 2586108 bytes HTML transferred: 343792 bytes Requests per second: 2276.42 [#/sec] (mean) Time per request: 439.286 [ms] (mean) Time per request: 0.439 [ms] (mean, across all concurrent requests) Transfer rate: 574.91 [Kbytes/sec] received Connection Times (ms) min mean[+/-sd] median max Connect: 0 114 312.3 6 3018 Processing: 11 116 283.4 51 3038 Waiting: 1 112 283.4 48 3038 Total: 18 230 482.0 64 4019 Percentage of the requests served within a certain time (ms) 50% 64 66% 78 75% 93 80% 105 90% 1054 95% 1261 98% 2066 99% 2315 100% 4019 (longest request)

在不使用缓存的情况下耗费了4.393秒,值可以多测试几次对比

2.使用缓存

[root@localhost nginx]# ab -n 10000 -c 1000 http://www.test.com/index.html This is ApacheBench, Version 2.3 Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/ Licensed to The Apache Software Foundation, http://www.apache.org/ Benchmarking www.test.com (be patient) Completed 1000 requests Completed 2000 requests Completed 3000 requests Completed 4000 requests Completed 5000 requests Completed 6000 requests Completed 7000 requests Completed 8000 requests Completed 9000 requests Completed 10000 requests Finished 10000 requests Server Software: nginx/1.6.3 Server Hostname: www.test.com Server Port: 80 Document Path: /index.html Document Length: 20 bytes Concurrency Level: 1000 Time taken for tests: 1.179 seconds Complete requests: 10000 Failed requests: 651 (Connect: 0, Receive: 0, Length: 651, Exceptions: 0) Write errors: 0 Total transferred: 2337250 bytes HTML transferred: 186980 bytes Requests per second: 8483.63 [#/sec] (mean) Time per request: 117.874 [ms] (mean) Time per request: 0.118 [ms] (mean, across all concurrent requests) Transfer rate: 1936.36 [Kbytes/sec] received Connection Times (ms) min mean[+/-sd] median max Connect: 0 66 195.8 24 1044 Processing: 11 31 11.0 30 249 Waiting: 0 22 11.3 22 239 Total: 35 97 194.3 55 1070 Percentage of the requests served within a certain time (ms) 50% 55 66% 59 75% 62 80% 64 90% 84 95% 107 98% 1062 99% 1066 100% 1070 (longest request)

可以看到在使用缓存的情况下处理10000个请求1000的并发耗时为1.179秒!!!

注意:在使用到缓存的时候务必考虑缓存过期!根据生产场景使用

以上内容希望帮助到大家,很多PHPer在进阶的时候总会遇到一些问题和瓶颈,业务代码写多了没有方向感,不知道该从那里入手去提升,对此我整理了一些资料,包括但不限于:分布式架构、高可扩展、高性能、高并发、服务器性能调优、TP6,laravel,YII2,Redis,Swoole、Swoft、Kafka、Mysql优化、shell脚本、Docker、微服务、Nginx等多个知识点高级进阶干货需要的可以免费分享给大家,需要

或 者关注咱们下面的知乎专栏

来源:https://www.cnblogs.com/starluke/p/12078058.html



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有