返回介绍

10.5 案例:Nginx 作为 Web 缓存服务器应用

发布于 2025-04-21 21:33:24 字数 6389 浏览 0 评论 0 收藏

从 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。