- 前言
- 为什么要写这本书
- 读者对象
- 如何阅读本书
- 勘误和支持
- 致谢
- 第一部分 安全运维篇
- 第 1 章 Linux 服务器安全运维
- 第 2 章 Linux 网络安全运维
- 第 3 章 数据安全工具 DRBD、extundelete
- 第二部分 运维故障排查篇
- 第 4 章 Linux 系统运维故障排查思路
- 第 5 章 Linux 故障排查案例实战
- 第三部分 自动化运维篇
- 第 6 章 轻量级运维利器 pssh、pdsh 和 mussh
- 第 7 章 分布式监控系统 Ganglia
- 第 8 章 基于 nagios 的分布式监控报警平台 Centreon
- 第 9 章 通过 Ganglia 与 Centreon 构建智能化监控报警平台
- 第四部分 集群架构篇
- 第 10 章 高性能 Web 服务器 Nginx
- 第 11 章 高性能集群软件 Keepalived
- 第 12 章 千万级高并发负载均衡软件 HAProxy
- 第 13 章 构建高性能的 MySQL 集群系统
- 第 14 章 高性能负载均衡集群软件 HAProxy
10.5 案例:Nginx 作为 Web 缓存服务器应用
从 0.7.48 版本开始,Nginx 支持类似 Squid 的缓存功能。Nginx 的 Web 缓存服务主要由 proxy_cache 相关命令集和 fastcgi_cache 相关命令集构成,前者用于反向代理时对后端内容源服务器进行缓存,后者主要用于对 FastCGI 的动态程序进行缓存。此外,如果不想使用 Nginx 自带的缓存功能,也可以使用第三方模块 ngx_slowfs_cache 来实现缓存服务器配置。
10.5.1 在 Nginx 下安装缓存服务器
这里使用 Nginx 自带的缓存模块,通过 proxy_cache 命令来实现数据的缓存。Nginx 缓存服务器的安装过程基本与 10.2 节介绍的 Nginx 的安装过程一样,唯一不同的是,要在编译 Nginx 的时候加上一个 ngx_cache_purge 模块,这个第三方模块是清理 Nginx 缓存的一个插件。下面简单介绍下 Nginx 作为缓存服务器的安装步骤。
pcre 的安装不再重复,首先从 http://labs.frickle.com/nginx_ngx_cache_purge/下载 ngx_cache_purge 插件,这里下载的文件是 ngx_cache_purge-2.1.tar.gz,然后解压即可,过程如下:
[root@ngxserver app]# wget http://labs.frickle.com/files/ngx_cache_purge-2.1.tar.gz [root@ngxserver app]# tar zxvf -C /app/ngx_cache_purge-2.1.tar.gz
其次,开始编译安装 Nginx,过程如下:
[root@ngxserver app]# tar zxvf nginx-1.4.7.tar.gz [root@ngxserver app]# cd nginx-1.4.7/ [root@ngxserver app]# ./configure --user=www --group=www --prefix=/usr/local/nginx \ > --add-module=/app/ngx_cache_purge-2.1 > --with-http_stub_status_module --with-http_ssl_module [root@ngxserver app]# make [root@ngxserver app]# make install
最后,在完成安装后可以通过“/usr/local/nginx/sbin/nginx-V”命令查看已安装 Nginx 的版本和加载的模块信息。
10.5.2 配置 Nginx 缓存服务器
Nginx 缓存服务器的配置主要通过 proxy_cache 相关命令集来实现。下面给出 nginx.cnf 文件的内容,重点说明与缓存相关的参数,其他参数不再重复介绍。
/usr/local/nginx/conf/nginx.conf 文件内容如下:
user www www; worker_processes 8; error_log /usr/local/nginx/logs/nginx_error.log crit; pid /usr/local/nginx/nginx.pid; worker_rlimit_nofile 65535; events { use epoll; worker_connections 65535; } http { include mime.types; default_type application/octet-stream; charset utf-8; server_names_hash_bucket_size 128; client_header_buffer_size 32k; large_client_header_buffers 4 32k; client_max_body_size 300m; sendfile on; tcp_nopush on; keepalive_timeout 60; tcp_nodelay on; client_body_buffer_size 512k; proxy_connect_timeout 5; proxy_read_timeout 60; proxy_send_timeout 5; proxy_buffer_size 16k; proxy_buffers 4 64k; proxy_busy_buffers_size 128k; proxy_temp_file_write_size 128k; gzip on; gzip_min_length 1k; gzip_buffers 4 16k; gzip_http_version 1.1; gzip_comp_level 2; gzip_types text/plain application/x-javascript text/css application/xml; gzip_vary on; proxy_cache_path /backup/proxy_cache_dir levels=1:2 keys_zone=cache_one:4096m inactive=1d max_size=3g; # proxy_cache_path :用于设置缓存的目录,后面跟缓存路径。最好将缓存目 # 录放在一个独立的硬盘上 # levels=1:2 :levels 用来设置目录深度,这里是两层目录深度,第一层是一 # 个字符,第二层是两个字符 # keys_zone :用来设置 Web 缓存区名称,这里是 cache_one ,后面的“4096m ” # 表示内存缓存空间大小为 4GB # inactive :表示自动清除缓存文件的时间,这里的“1d ”表示 1 天没有被访 # 问的内容自动清除,还可以使用分钟或小时计时,例如“5m ”表示 5 分钟后自 # 动清除,“5h ”表示 5 小时后自动清除 # max_size :表示硬盘缓存空间可使用的最大值,默认情况下经访问的文件常将 # 被放到内存中进行缓存,而在内存缓存空间不足时,Nginx 会将不经常访问的 # 数据从内存写到磁盘 proxy_temp_path /backup/proxy_temp_dir; # proxy_temp_path 用于指定临时缓存文件的存储路 # 径,这里需要注意的是,proxy_temp_path 和 # proxy_cache_path 指定的路径必须在同一磁盘分区 server { listen 80; server_name www.tb.com www.taob.com; charset UTF8; access_log logs/cms.access.log main; location / { proxy_cache cache_one; # 反向代理缓存设置命令,语法为“proxy_cache zone|off ”, # 默认值为 off ,需要将 proxy_cache 命令放到 location # 字段,这样匹配此 location 的 url 才能被缓存 proxy_cache_valid 200 304 12h; # 对不同的 HTTP 状态码设置不同的缓存时间 proxy_cache_key $host$uri$is_args$args;# 这个命令是设置以什么样的参数得到缓存的 # 文件名,默认为“#$scheme$proxy_host # $request_uri ”,表示以协议、主机名、 # 请求 uri (包含参数) 作 MD5 得出缓存的 # 件文名。这里是以域名、URI 、参数组合成 # Web 缓存的 Key 值,Nginx 根据 Key 值哈 # 希,存储缓存内容到二级缓存目录内 proxy_set_header Host $host; proxy_set_header X-Forwarded-For $remote_addr; proxy_pass http://127.0.0.1:8080 ; expires 1d; } # 下面这段用于配置手动清除缓存策略,清除的方法为:如果一个 URL 为 # http://www.tb.com/2014/0413/3.html ,那么通过访问 # http://www.tb.com/purge/2014/0413/3.html 即可清除该 URL 的缓存 location ~ /purge(/.*) { allow 127.0.0.1; # 表示只允许指定的 IP 或 IP 段才可以清除 URL 缓存 allow 192.168.88.0/24; deny all; proxy_cache_purge cache_one $host$1$is_args$args; } location ~ .*\.(jsp|php|jspx)?$ # 设置不做缓存的内容,这里设置扩展名以.jsp 、.php 、 #.jspx 结尾的动态应用程序不缓存 { proxy_set_header Host $host; proxy_set_header X-Forwarded-For $remote_addr; proxy_pass http://http://127.0.0.1:8080 ; } access_log off; } }
10.5.3 测试 proxy_cache 实现的缓存功能
完成所有配置后,启动 Nginx,然后查看 Nginx 的进程信息如下:
[root@haproxy-server conf]# ps -ef|grep nginx root 2665 1 0 13:25 ? 00:00:00 nginx: master process ../sbin/nginx nobody 2666 2665 0 13:25 ? 00:00:00 nginx: worker process nobody 2667 2665 0 13:25 ? 00:00:00 nginx: cache manager process
从输出可知,Nginx 进程多出了一个“cache manager”进程,这个进程就是用来管理缓存服务和文件的。
接着通过 www.tb.com 访问任意静态网页,在打开网页后,关闭网页再次打开同一个网页,测试访问速度是否加快。同时,在缓存目录查看是否已经生成缓存文件,如果已经生成缓存文件,表明 Nginx 的缓存服务搭建成功。
其实,还可以修改已经缓存的静态文件的内容,然后再次访问这个网页,看能否显示变动的内容,如果不能显示,那么表明这个网页是从缓存中读取的,等待缓存自动清理时间过后,再次访问这个页面,看看内容是否有变动,如果能够显示变动的网页内容,表明缓存服务器工作正常。
10.5.4 如何清除指定的 URL 缓存
有时候修改了网页内容,如果不想等到缓存文件过期后自动清理,还可以通过手动方式清理缓存文件,清理方式在上面介绍 Nginx 配置文件时已经做过说明,只需在清除缓存网页的 URI 地址前面增加 purge 即可。
例如,要清除 http://www.tb.com/cms/a/xinwen/2014/0413/2.html 这个页面的缓存文件,只需在浏览器重输入 http://www.tb.com/purge/cms/a/xinwen/2014/0413/2.html 地址即可,成功清理缓存文件的结果如图 10-3 所示。
图 10-3 手动清除 Nginx 的 URL 缓存
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论