正文:
视频播放协议请求应用于多个业务产品,为了提供一个稳定的解析服务,当CMS、媒资、聚合平台等产品对视频信息发生的增、删、改操作时,通过监控DB服务将变化实时写入高性能简单消息队列服务,及时更新多个对外视频服务产品的视频信息更新.
1.Nginx服务通过内嵌的perl脚本动态解析URL参数.提取key信息.
perl_set $storm_key_new '
use MIME::Base64::Perl;
use URI::Escape;
sub{
my $r = shift;//request请求对象
my $request_uri = $r->variable("request_uri");//提取uri
my $query_uri = $r->unescape($request_uri);
my $buffer = $query_uri;
if($buffer =~/&/){//判定uri中是否包含&符号
my @pairs = split(/&/, $buffer);//根据&符号分割数组
foreach $pair (@pairs)
{
if($pair =~ /c=storm/i){//提取"c=storm"的字符串
$pair =~ s/c=//g;//将"c="剔除
return $pair;
}
}
}
}
';
2.设置storm_perl的负载均衡服务
upstream storm_perl {
server 192.168.1.87:8000 weight=1 max_fails=2 fail_timeout=30s;
server 192.168.1.110:8000 weight=1 max_fails=2 fail_timeout=30s;
}
3.Nginx服务通过key信息查找本地是否存在对应的缓存数据,如果存在直接返回给客户端.
设置nginx开启本地缓存,并指定缓存存放位置及相关信息.
#注:proxy_temp_path和proxy_cache_path指定的路径必须在同一分区
proxy_temp_path /opt/data/proxy_temp_dir;
#设置Web缓存区名称为cache_one,内存缓存空间大小为200MB,1天没有被访问的内容自动清除,硬盘缓存空间大小为30GB。
proxy_cache_path /opt/data/proxy_cache_dir levels=1:2 keys_zone=cache_one:200m inactive=1d max_size=30g;
设置后端请求的header信息,缓存时间,
location / {
#定义客户端缓存一小时
expires 1h;
#后端服务请求返回的状态码为502,504,error,超时等,自动转入下个后端服务器
proxy_next_upstream http_502 http_504 error timeout invalid_header;
#进行缓存,使用Web缓存区cache_one
proxy_cache cache_one;
#对不同的HTTP状态码设置不同的缓存时间
proxy_cache_valid 200 304 30d;
proxy_cache_valid 404 1m;
#以域名、URI、参数组合成Web缓存的Key值,Nginx根据Key值哈希,存储缓存内容到二级缓存目录内
proxy_cache_key $storm_key_new;
#设置后端服务请求的host信息
proxy_set_header Host $host;
#设置客户端的真实IP地址
proxy_set_header X-Forwarded-For $remote_addr;
#将请求转向upstream
proxy_pass http://storm_perl;
error_log /opt/modules/nginx/logs/error.log crit;
access_log /opt/modules/nginx/logs/access.log main;
}
4..Nginx服务通过内嵌的perl脚本动态读取memcache服务的数据,读取失败后,直接将请求转向后端的apache服务器
#设置memcache服务的IP和端口
set $memd 0;
set $memcached_server "127.0.0.1:11211";
location ~ .*\.(php|jsp|cgi)?
{
perl 'sub {
use Cache::Memcached;
my $r = shift;
if($r->variable("memd")){
my $memd = $r->variable("memd");
}
if(!$memd){
$memd = new Cache::Memcached {"servers" => [$r->variable("memcached_server")],"debug" => 0,"compress_threshold" => 10_000};
$r->variable("memd",$memd);
}
my $realkey = 0;
$realkey = $r->variable("storm_key_new");
my $stormbox = $memd->get($realkey);
if($stormbox){
$r->send_http_header;
$r->print($stormbox);
return 200;
}else{
return 404;
}
}';
error_page 404 500 502 503 504 =[color=red] @get_storm;[/color]
access_log /opt/modules/nginx/logs/log_mm.log count;
}
当读取memcache的请求返回404时,直接转向另外一个location
location @get_storm {
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_pass http://backend_server;
access_log /opt/modules/nginx/logs/log_db.log count;
}
- 大小: 282.1 KB
分享到:
相关推荐
基于Nginx和Memcached的高并发WEB服务器设计_戴华, 基于Nginx和Memcached的高并发WEB服务器设计_戴华
如何设计高并发网站?nginx高并发原理以及nginx vs Apache.
优化nginx大并发——轻松应对上万并发访问 优化Nginx突破十万并发 搭建web nginx服务器是网站开发必不可少的技能,学好了,给公司省大钱
Linux下基于Nginx的配网数据采集高并发处理设计与实现.pdf
在日常的运维工作中,经常会用到nginx服务,也时常会碰到nginx因高并发导致的性能瓶颈问题。今天这里简单梳理下nginx性能优化的配置(仅仅依据本人的实战经验而述,如有不妥,敬请指出~) 一、这里的优化主要是指对...
摘要基于 Nginx 高并发 Web 服务器的改进与实现目前,互联网已经得到了广泛的普及与应用,甚至离开互联网我们将无法正常的工作和生活。个人电脑和移动设备的发
架构师实战Nginx构建高性能WEB服务器
windows基于nginx搭建rtmp流服务器,已配置好配口号1935。 在根目录下执行命令nginx.exe -c conf\nginx-win-rtmp.conf即可开启服务器
深入理解Nginx模块开发及架构解析,深入理解Nginx模块开发及架构解析
Nginx构建反向代理缓存服务器电子书,电子书很详细的介绍了nginx构建反向代理的过程与知识
深入理解Nginx模块开发与架构解析.深入理解Nginx模块开发与架构解析.
基于nginx的web服务器搭建手册,集nginx搭建,优化,远程登录为一体的完备的搭建手册
在第一部分的前两章中,将只探讨如何使用Nginx这一问题。阅读这一部分的读者不需要了解C语言,就可以学习如何部署Nginx,学习如何向其中添加各种官方、第三方的功能模块,如何通过修改配置文件来更改Nginx及各模块的...
windows下基于nginx-rtmp搭建流媒体服务器
深入理解Nginx模块开发与架构解析 深入理解Nginx模块开发与架构解析
#nginx进程数,建议按照cpu 数目来指定,一般为它的倍数 (如,2个四核的cpu计为8)。 一个nginx进程打开的最多文件数目,理论值应该是最多打开文件数(ulimit -n)与nginx 进程数相除,但是nginx 分配请求并不是那么...
基于nginx tcp负载均衡 + redis的集群聊天服务器,网络层使用muduo库搭建,数据库使用MySQL 基于nginx tcp负载均衡 + redis的集群聊天服务器,网络层使用muduo库搭建,数据库使用MySQL 基于nginx tcp负载均衡 + ...
深入理解Nginx模块开发与架构解析第2版LinuxUnix技术丛书 mobi格式,可以下载mobi阅读器打开
同时也深入剖析了Nginx服务器的工作原理和实现技术,对其中使用到的数据结构和方法进行了详细阐述,并且结合实际的应用情况给出了多个基于Nginx服务器,同时还部署有其他典型服务器的分布式网站架构部署配置。...
帮助读者了解一般Nginx模块的用法,然后重点介绍了女口何开发HTTP模块(含HTTP过滤模块)来得到定制化的Nginx,其中包括开发—个功能复杂的模块所需要了解的各种知识,并对内存池的实现细节及TCP协议进行了详细介绍;...