环境: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效果
这个时候我们从当前的Nginx 反代服务器可以看到之前定义的缓存目录生成缓存文件:
[root@21yunwei_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清理缓存,访问到最新内容: