`

Nginx添加proxy_cache模块

 
阅读更多

为Nginx添加proxy_cache模块,对视频进行缓存
Nginx是高性能的HTTP服务器,通过Proxy Cache可以使其对视频进行缓存。
其原理就是把视频按照一定的规则存在本地硬盘,并且会在内存中缓存常用的资源,从而加快视频的响应。

假设nginx1.3.8已经安装成功。

1、安装Purge模块,Purge模块被用来清除缓存的。
安装之前先停止nginx ,$ /usr/local/nginx/sbin/nginx -s quit
$ wget http://labs.frickle.com/files/ngx_cache_purge-2.0.tar.gz
$ tar zxf ngx_cache_purge-2.0.tar.gz
nginx和ngx_cache_purge必须在同一级目录
$ cd nginx-1.3.8
查看编译参数
$ /usr/local/nginx/sbin/nginx -V
在原有的编译参数后面加上--add-module=../ngx_cache_purge-2.0
$ ./configure --user=www --group=www --prefix=/usr/local/nginx --add-module=../nginx_mod_h264_streaming-2.2.7 \
--with-http_flv_module --with-http_stub_status_module --with-http_ssl_module --with-http_mp4_module \
--with-http_gzip_static_module --with-pcre=../pcre-8.32 --with-pcre-jit --add-module=../ngx_cache_purge-2.0
$ make && make install

2、配置proxy_cahe

$ vim /usr/local/nginx/conf/nginx.conf
修改配置文件。
proxy_temp_path   /data/ngx_cache 1 2;

#keys_zone=cache1:100m 表示这个zone名称为cache1,分配的内存大小为100MB
#/data/ngx_cache/cache1 表示cache1这个zone的文件要存放的目录
#levels=1:2 表示缓存目录的第一级目录是1个字符,第二级目录是2个字符,即/data/ngx_cache/cache1/a/1b这种形式
#inactive=1d 表示这个zone中的缓存文件如果在1天内都没有被访问,那么文件会被cache manager进程删除掉
#max_size=10g 表示这个zone的硬盘容量为10GB

proxy_cache_path  /data/ngx_cache/cache1  levels=1:2 keys_zone=cache1:100m inactive=1d max_size=10g;

server {
    listen 80;
    server_name localhost;

    #在日志格式中加入$upstream_cache_status
     log_format format1 '$remote_addr - $remote_user [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent" $http_x_forwarded_for $upstream_cache_status $request_time';

    access_log log/access.log format1;
    
     location /group1 {
          proxy_next_upstream http_502 http_504 error timeout invalid_header;
          proxy_set_header Host $host;
          proxy_set_header X-Forwarded-For $remote_addr;
          proxy_set_header X-Real-IP $remote_addr;
          proxy_pass http://group1;
          #access_log off;
          #设置资源缓存的zone
          proxy_cache cache1;
          #设置缓存的key
          proxy_cache_key $host$uri$is_args$args;
          #设置状态码为200和304的响应可以进行缓存,并且缓存时间为30分钟
          proxy_cache_valid 200 304 30m;
          expires 1d;
          #$upstream_cache_status表示资源缓存的状态,有HIT MISS EXPIRED三种状态
          add_header X-Cache $upstream_cache_status;
     }
    
     #配置Purge
     #以下是nginx中的Purge配置片段
     location ~ /purge(/.*) {
          #允许的IP
          allow 127.0.0.1;
          #10网段的都可以访问
          allow 192.168.10.0/24;
          deny all;  #其他的禁止访问
          proxy_cache_purge cache1 $host$1$is_args$args;
     }
}
配置完毕,:wq! 保存退出
退出nginx,并重新启动

$ /usr/local/nginx/sbin/nginx -s quit
$ /usr/local/nginx/sbin/nginx

***********************************************
启动nginx若出现错误“nginx: [emerg] unknown directive "proxy_cache_purge" in /usr/local/nginx/conf/nginx.conf:96”
表示模块没安装成功,需要安装pcre
$ wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.32.tar.gz
$ tar zxf pcre-8.32.tar.gz
$ cd pcre-8.32
$ ./configure
$ make && make install
安装完pcre后重新执行安装nginx即可。
***********************************************

$upstream_cache_status包含以下几种状态:

MISS 未命中,请求被传送到后端
HIT 缓存命中
EXPIRED 缓存已经过期请求被传送到后端
UPDATING 正在更新缓存,将使用旧的应答
STALE 后端将得到过期的应答
BYPASS 缓存被绕过了


清除缓存
使用方式:

$ wget http://192.168.10.16/purge/uri
其中uri为资源的URI,如果缓存的资源的URL为 http://192.168.10.16/group2/M00/00/46/ooYBAFIODMyAUSk3ANFjhglUy6s933.flv,
那么访问 http://192.168.10.16/purge/group2/M00/00/46/ooYBAFIODMyAUSk3ANFjhglUy6s933.flv则会清除缓存。

命中率
保存如下代码为hit_rate.sh:

#!/bin/bash
#
# proxy_cache hit rate

if [ $1x != x ] then
    if [ -e $1 ] then
        HIT=`cat $1 | grep HIT | wc -l`
        ALL=`cat $1 | wc -l`
         #Hit_rate=`echo "scale=2;($HIT/$ALL)*100" | bc`
        
Hit_rate=`awk 'BEGIN{printf "%.2f%\n",('$HIT'/'$ALL')*100}'`
         echo "Hit rate=$Hit_rate%"
    else
        echo "$1 not exsist!"
    fi
else
    echo "usage: ./hit_rate.sh file_path"
fi
使用方式

$ ./hit_rate.sh /usr/local/nginx/logs/access.log
 
分享到:
评论

相关推荐

    nginx缓存清除插件ngx_cache_purge.zip

    ngx_cache_purge 是 nginx 模块,此模块可以清理 nginx 的 FastCGI、proxy、 SCGI 和 uWSGI 的缓存。配置指令(相同位置语法)fastcgi_cache_purgesyntax: fastcgi_cache_purge on|off|<method> [from all|<ip> [.....

    nginx proxy_cache批量清除缓存的脚本介绍

    前言:之前使用官方的nginx proxy_cache作为CDN静态缓存发现该模块清理缓存是一个大问题,只能一条一条url的清除,为此写了一个批量清除缓存的脚本 主要功能包括: 1.按文件类型清理 2.按具体的文件名清理 3.按网站...

    详解用Nginx搭建CDN服务器方法(图文)

    2、要利用Nginx的Proxy_cache,你需要在Nginx编译进ngx_cache_purge 模块,执行:nginx -V,查看有没有ngx_cache_purge 字样,没有的话需要自己手动编译。 Nginx搭建CDN手动编译 3、这里以Oneinstack编译ngx_cache...

    nginx学习总结五(nginx反向代理)

    Nginx 0.8.32版本,proxy_cache和fastcgi_cache已经比较完善,加上第三方的ngx_cache_purge模块(用于清除指定URL的缓存),已经可以完全取代Squid。 在功能上,Nginx已经具备Squid所拥有的Web缓

    史上最牛逼的Nginx最佳实践教程从入门到精通

    19.Nginx+keepalived+proxy_cache配置高可用Nginx群集和高速缓冲 20.Nginx最难一战 优化指南 21.确保Nginx安全的10大关键技巧 Nginx变量详解 Nginx模块与实践案例 提供了目前所有互联网公司都在用的51个案例 常见...

    决战Nginx系统卷:高性能Web服务器详解与运维第一部分(保证能用)

    第2章 Nginx的模块管理和进程管理 第3章 Nginx如何处理一个请求 第4章 服务器名字 第5章 协助用户操作Nginx的工具 第6章 5XX错误处理 第7章 使用TCMalloc优化Nginx 第8章 PCRE正则表达式 第9章 Nginx高可用的...

    决战Nginx系统卷:高性能Web服务器详解与运维第二部分(保证能用)

    第2章 Nginx的模块管理和进程管理 第3章 Nginx如何处理一个请求 第4章 服务器名字 第5章 协助用户操作Nginx的工具 第6章 5XX错误处理 第7章 使用TCMalloc优化Nginx 第8章 PCRE正则表达式 第9章 Nginx高可用的...

    决战Nginx: 系统卷 - 高性能Web服务器详解与运维第三部分(保证能用)

    第2章 Nginx的模块管理和进程管理 第3章 Nginx如何处理一个请求 第4章 服务器名字 第5章 协助用户操作Nginx的工具 第6章 5XX错误处理 第7章 使用TCMalloc优化Nginx 第8章 PCRE正则表达式 第9章 Nginx高可用的...

    Nginx知识体系入门实践.zip

    06.Nginx提供ProxyCache缓存服务 07.Nginx Rewrite跳转规则与实践 08.Nginx构建Https加密传输网站(基于IOS苹果要求) 09.Nginx构建动态网站架构lnmp&lnmt 10Nginx+Lua-实战代码灰度发布实战-WAF防火墙 11.Nginx性能...

    Nginx服务器上搭建图片缓存服务的基本配置解析

    主要介绍了Nginx服务器上搭建图片缓存服务的基本配置解析,分别介绍了通过proxy_store模块和proxy_cache模块两种方式的配置,需要的朋友可以参考下

    实战nginx-张宴

    第9章 Nginx的Web缓存服务与新浪网的开源NCACHE模块 9.1 什么是Web缓存 9.2 Nginx的Web缓存服务 9.3 新浪网开源软件项目——基于Nginx的NCACHE网页缓存系统 第3部分 实战篇 第10章 Nginx在国内知名网站中的应用案例 ...

    实战Nginx高性能Web服务器

    13、高性能Web服务器Nginx的配置与部署研究(13)应用模块之Memcached模块+Proxy_Cache双层缓存模式 内容:讲述一种提供双层缓存抗穿透的HTTP服务缓存解决方案。 14、高性能Web服务器Nginx的配置与部署研究(14)...

    mirrors-gdut:GDUT开源镜像站

    缓存使用Nginx自带的proxy_cache模块。文件目录说明under construction脚本说明under construction运维文档Nginx编译为了监控流量,我们加入了nginx-module-vts模块,因此需要手动编译Nginx。如果不需要此模块,可以...

    实战Nginx.取代Apache的高性能Web服务器

    第9章 Nginx的Web缓存服务与新浪网的开源NCACHE模块 9.1 什么是Web缓存? 9.2 Nginx的Web缓存服务 9.3 新浪网开源软件项目——基于Nginx的NCache网页缓存系统 第3部分 实战篇 第10章 Nginx在国内知名网站中的...

    实战Nginx:取代Apache的高性能Web服务器 第一章

    第9章 Nginx的Web缓存服务与新浪网的开源NCACHE模块 9.1 什么是Web缓存? 9.2 Nginx的Web缓存服务 9.3 新浪网开源软件项目——基于Nginx的NCache网页缓存系统 第3部分 实战篇 第10章 Nginx在国内知名网站中的应用...

    ngx_rsplit:ngx_rsplit模块

    ngx_rsplit ngx_rsplit模块 ... proxy_cache_path /tmp/cache keys_zone=mycache:10m inactive=5d max_size=300g; server { listen 80; server_name _; location / { rsplit on; rsplit_frag_size

    docker-nginx:使用 CPU 优化和负载均衡器模块构建 NGINX docker

    带有SRCache动态模块 带Memc动态模块 带有PostgreSQL动态模块 带Redis动态模块 带Redis2动态模块 使用Resty DBD Streams to JSON动态模块 带有Echo动态模块 带有前向代理模块 带有Opentracing动态模块和Jaeger插件 ...

    upcache:由上游应用程序动态配置的缓存代理

    upcache-memcached.conf要求nginx> = 1.8,带有这些openresty的模块lua-nginx-module(启用luajit,否则会因缺少ffi软件包而失败) set-misc-nginx-module srcache-nginx-模块memc-nginx-module(如果使用memcached...

Global site tag (gtag.js) - Google Analytics