Nginx作为Web CDN缓存服务器配置以及purge缓存清理操作 – 21运维
通知: .-...

Nginx作为Web CDN缓存服务器配置以及purge缓存清理操作

nginx 21运维 2227浏览 0评论


环境:CentOS 6.9
WEB: Nginx 1.12
HOSTS: 192.168.1.123 proxy.21yunwei.com
BACK_SERVER(lnmp):192.168.1.122

一,安装nginx以及 添加ngx_cache_purge缓存模块
这里不介绍了,可以参考《linux下如何安装nginx环境配置》,但之前的文章没有加载purge缓存清理模块,所以要单独增加模块ngx_cache_purge。这个组件可以到http://labs.frickle.com/nginx_ngx_cache_purge/ 下载 。如 之前的nginx安装过,那么需要单独编译nginx添加组件才行。具体nginx增加扩展模块可以参考文章《原已经安装好的nginx如何查看已经安装模块和添加一个未被编译安装的模块
我这里的测试环境是nginx编译过的,所以重新编译了nginx:

wget  http://labs.frickle.com/files/ngx_cache_purge-2.3.tar.gz
tar zxvf  ngx_cache_purge-2.3.tar.gz 
cd ngx_cache_purge-2.3
cd  /usr/local/src/nginx-1.12.0
./configure  --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_ssl_module --with-http_stub_status_module --with-http_image_filter_module  --add-module=/usr/local/src/ngx_cache_purge-2.3
make
mv   /usr/local/nginx/sbin/nginx  /usr/local/nginx/sbin/oldnginx
cp  ./objs/nginx  /usr/local/nginx/sbin/
/usr/local/nginx/sbin/nginx  -V
/usr/local/nginx/sbin/nginx  -s reload

二,web cache配置参数介绍。
nginx配置文件nginx.conf在http{}标签加入web缓存设置:
proxy_cache_path /cache_data/cache_dir levels=1:2 keys_zone=imgcache:2048m inactive=1d max_size=5g;
proxy_temp_path /cache_data/tempcache;

参数说明:
#proxy_cache_path:用于设置缓存的目录,后面跟缓存路径。最好将其放于iops高的磁盘,提升响应速度,因为这个是优先将缓存的内容放于内存当中的,如果超出 设置的内存值,将会置换存放于磁盘上边。
#levels=1:2:levels 用来设置目录深度,这里是两层目录深度, 第一层是一个字符,第二层是两个字符。
#keys_zone:用来设置 web 缓存区名称,这里是 imgcache,后面的”4096m“表示内存缓存空间大小为 2G,具体建议根据服务器参数进行配置。
#inactive:表示自动清除缓存文件的时间,这里的”1d“表示 1天没有被访问的内容自动清除,还可以使用分钟或小时计时,例如”5m“表示 5 分钟后自动清除,”5h“表示 5 小时后自动清除。
#max_size:表示硬盘缓存空间可使用的最大值,默认情况下经常访问的文件将被放到内存中进行缓存,而在内存缓存空间不足时,nginx 会将不经常访问的数据从内存写到磁盘.
#proxy_temp_path /cache_data/tempcache; #proxy_temp_path 用于指定临时缓存文件的存储路径,这里需要注意的是#proxy_temp_path 和 proxy_cache_path 指定的路径必须在同一磁盘分区

 

三,服务器参数配置并测试。
1,nginx主配置文件参数如下:

user  nginx nginx;
worker_processes  auto;
pid        logs/nginx.pid;
worker_rlimit_nofile   100000;
events {
    worker_connections  2048;
    multi_accept on; 
    use epoll; 
}

http {
    include       mime.types;
    default_type  application/octet-stream;
    upstream  webnode {
	server  192.168.1.122;
   }
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
    access_log  logs/access.log  main;
    sendfile        on;
    tcp_nopush     on;
    keepalive_timeout  65;
    #php 
    fastcgi_connect_timeout 300;
    fastcgi_send_timeout 300;
    fastcgi_read_timeout 300;
    fastcgi_buffer_size 64k;
    fastcgi_buffers 4 64k;
    fastcgi_busy_buffers_size 128k;
    fastcgi_temp_file_write_size 128k;
    client_body_buffer_size  512k;
    #cache
    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_disable "msie6"; 
    gzip_proxied any; 
    gzip_min_length 1000; 
    gzip_comp_level 6; 
    gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript; 

    #nginx web cache
    proxy_cache_path /cache_data/cache_dir levels=1:2 keys_zone=imgcache:2048m inactive=1d max_size=5g;
    proxy_temp_path  /cache_data/tempcache;
    include ./vhost/*.conf;
}

2,具体测试站点配置文件proxy.21yunwei.com.conf:

server {
               listen       80;
               server_name  proxy.21yunwei.com;
               index index.php;
               root  /wwwroot/proxy;
               #rewrite  ^/(.*)  http://www.21yunwei.com/$1  permanent;

               location  / {
                proxy_cache imgcache;
                proxy_cache_valid  200 304 12h;
                proxy_cache_key $host$uri$is_args$args;
                proxy_set_header Host  $host;
                proxy_set_header X-Forwarded-For  $remote_addr;
                proxy_pass  http://webnode;
                expires      1d;
               }
              location ~ .*\.(php)(.*){
                proxy_pass              http://webnode;
                proxy_set_header        Host $host;
                proxy_set_header        X-Real-IP $remote_addr;
                proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
               }
               location ~ /purge(/.*)  {
                allow            192.168.0.135;
                deny     all;
                proxy_cache_purge    imgcache   $host$1$is_args$args;
               }

}

访问测试:http://proxy.21yunwei.com/index.html以及动态 phphttp://proxy.21yunwei.com/test.php效果
1
这个时候我们从当前的Nginx 反代服务器可以看到之前定义的缓存目录生成缓存文件:

[[email protected]_web_node123 cache_data]# tree
.
├── cache_dir
│   └── c
│       └── 99
│           └── 3397e481c83bb221bd7a57e96ea9099c
└── tempcache
4 directories, 1 file

其中3397e481c83bb221bd7a57e96ea9099c就是根据之前的hashkey生成的文件名,其中的内容无法直接通过cat等命令查看,可以通过strings命令查看内容。

四,如何清除指定的 URL 缓存
有的时候修改了网页内容,但是缓存还未过期,那么就需要清理web cache缓存了。
两种方式:
一是删除proxy_cache_path下的深度目录的缓存文件,只不过需要登录服务器或者工具 删除,不方便。
二是通过purge方式访问URL进行清理。比如我们修改index.html内容,加入hello 21yunwei进去,但是访问 的内容依旧是之前的,通过http://proxy.21yunwei.com/purge/index.html清理缓存,访问到最新内容:
1

转载请注明:21运维 » Nginx作为Web CDN缓存服务器配置以及purge缓存清理操作

发表我的评论
取消评论
表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址