- 前言
- 为什么要写这本书
- 读者对象
- 如何阅读本书
- 勘误和支持
- 致谢
- 第一部分 安全运维篇
- 第 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 缓存
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论