添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
Nginx代理服务器
6 Nginx缓存
6.1 Nginx Web缓存配置
6.2 Nginx代理缓存配置
6.3 Nginx Memcached缓存模块
6.4 Nginx反向代理缓存服务器配置
6.5 Nginx客户端缓存控制
Nginx负载均衡 Nginx日志管理与监控 Nginx集群 Nginx在Kubernetes(k8s)中的应用 Nginx在微服务中的应用
Nginx 的 ngx_http_memcached_module 模块本身并没有提供缓存功能,它只是一个将用户请求转发到 Memcached 服务器的代理模块。
在以 Memcached 服务器为缓存应用的方案中,Memcached 作为内容缓存的存储服务器,用户通过 URL 为 Memcached 的 key 将 Web 请求数据缓存到 Memcached 服务器中,在客户端发起请求时,Nginx 通过一致的 URL 为 key,快速地从 Memcached 服务器中将缓存的内容作为用户的请求响应数据返回给客户端。
Memcached 是一个开源、高性能的内存对象缓存系统,使用 Memcached 服务器作为缓存存储服务器,充分利用了 Memcached 的高效缓存功能,减少了 Nginx 服务器磁盘 I/O 的操作,也可以通过 upstream 指令对多台 Memcached 做分布式集群负载,以便整体提升 Nginx 缓存服务器的性能。
Memcached 缓存模块配置指令如下表所示。
location / { set $memcached_key "$uri?$args"; # 设置Memcached缓存key memcached_pass 127.0.0.1:11211; # 设置被代理Memcached地址 error_page 404 502 504 = @fallback; # 返回状态码404、502、504时跳入内部请求 location @fallback { proxy_pass http://backend; # 将请求转发给后端服务器 Memcached 缓存应用 为了提高动态网站的响应速度,有时会采用将动态网站转换成静态化文件的方式进行优化,而相对于磁盘存储,使用 Memcached 进行静态文件的存储则可以进一步提升网站的响应速度。Memcached 是基于内存的高性能对象缓存系统,因为存储数据都是在内存中的,所以减少了系统的 I/O 操作,从而避免了因磁盘性能带来的影响。
使用 Memcached 作为缓存存储服务器,可以直接利用 Memcached 缓存的过期机制实现缓存的自动化过期管理,且利用 Nginx 的负载机制和 Memcached 分布式特性,可以非常方便地横向扩展,以提升处理性能。Memcached 缓存应用场景如下图所示。
图:Memcached 缓存应用
Web 服务器将动态文件以请求 URI 作为 Memcached 的 key 初始化到 Memcached 服务器中;Nginx 将用户请求转发到 Memcached 服务器中,并将以请求 URI 作为 Memcached key 的数据返回给用户;当 Memcached 的请求失败后,则将请求转发给后端 Web 服务器的接口动态生成对应的静态文件,返回响应数据并更新 Memcached。
Memcached 的安装非常简单,在 CentOS 7 系统下使用 yum 安装即可,安装方法如下:
yum -y install memcached
cat /etc/sysconfig/memcached
PORT="11211"                  # 端口
USER="memcached"
MAXCONN="1024"          # 最大连接数
CACHESIZE="64"              # 使用内存大小为64M
OPTIONS=""
systemctl start memcached

Nginx 服务器配置样例如下:
upstream backend { server 192.168.2.145:8190; # 后端PHP服务器IP upstream memcached { hash $host$request_uri consistent; # 一致性hash server 192.168.2.145:11211; # Memcached服务器IP server 192.168.2.109:11211; # Memcached服务器IP server { listen 8181; access_log logs/mem_access.log; set $memcached_key $host$request_uri; # 设置Memcached的key location / { memcached_connect_timeout 5s; # 与Memcached建立连接超时时间为5s memcached_read_timeout 2s; # 连续两次读的超时时间为2s memcached_send_timeout 2s; # 连续两次写的超时时间为2s memcached_pass memcached; # 代理到Memcached集群 add_header X-Cache-Satus HIT; # 显示缓存命中状态 add_header Content-Type 'text/html; charset=utf-8'; # 强制响应数据格式为html error_page 404 502 504 = @fallback; location @fallback { proxy_set_header X-Memcached-Key $memcached_key; # 将memecached key传递 # 给PHP服务器 proxy_pass http://backend; # PHP服务器 为了方便演示 Memcached 的使用方法,在此处提供了一段简单的 PHP 测试代码。在测试代码中,使用了 PHP 模块 Memcached 与 Nginx 兼容的一致性哈希算法实现分布式 Memcached 集群的支持。
// 测试数据 $html = file_get_contents('https://www.baidu.com'); if ($_SERVER['REQUEST_METHOD'] != 'GET' || !isset($_SERVER['HTTP_X_MEMCACHED_KEY']) || !$_SERVER['HTTP_X_MEMCACHED_KEY']) { echo $html; exit(); $memcachedKey = $_SERVER['HTTP_X_MEMCACHED_KEY']; // 初始化Memcached $memcached = new Memcached(); // 配置分布式hash一致性算法,兼容Nginx的Ketama算法 $memcached->setOptions(array( Memcached::OPT_DISTRIBUTION=>Memcached::DISTRIBUTION_CONSISTENT, Memcached::OPT_LIBKETAMA_COMPATIBLE=>true, Memcached::OPT_REMOVE_FAILED_SERVERS=>true, Memcached::OPT_COMPRESSION=>false // 添加Memcached服务器 $memcached->addServers(array( array('192.168.2.145', 11211), array('192.168.2.109', 11211) // 存储到Memcached,缓存有效期1天 $memcached->set($memcachedKey, $html, 86400); //调试用 header('X-Cache-Status: MISS'); header('X-Cache-Key: ' . $memcachedKey); //输出静态文件 print $html;
  • C语言求全班同学身高的最大值和最小值
  • Python NoneType类型
  • C++名字隐藏
  • Python逻辑运算符及其用法
  • Spring管理Bean(基于注解)
  • 什么是IDE(集成开发环境)?
  • C语言对数组元素进行排序(冒泡排序法)
  • 数组到底在什么时候会转换为指针
  • Spring Boot JDBC访问数据库
  • Linux grep命令:强大的文本搜索工具
  •