因为公司业务需要记录每一个用户某一个类型的文件最后一次请求,提供继续阅读功能,所以在Nginx里加了一个小模块,当有用户请求进来时,响应数据并在Memcached和Mongodb记录此URL。
配置Nginx
引用
perl_modules perl/lib;
perl_require bookvisit.pm;
引用
location ~* ^.+\.bcs$
{
perl bookvisit::handler;
root /byread/books/vipbook;
}
package bookvisit;
use warnings;
use nginx;
use DBI;
use POSIX qw/strftime/;
use MongoDB;
use Cache::Memcached;
my $connection = MongoDB::Connection->new(host => 'localhost', port => 27017);
my $database = $connection->get_database('bookvisit');
my $visitlog = $database->get_collection('visitlog');
my $lastpage = $database->get_collection('lastpage');
my $memd = new Cache::Memcached {
'servers' => ["192.168.0.139:11211"],
'debug' => 0,
'compress_threshold' => 10_000,
};
sub handler {
my $r = shift;
return OK if $r->header_only;
if (! -f $r->filename) {
return DECLINED;
}
else
{
$r->header_out('Content-Type','text/html; charset=utf-8');
$r->send_http_header;
@s=stat($r->filename);
$r->header_out('Content-Length',$s[7]);
$r->header_out('Length',$s[7]);
$r->sendfile($r->filename);
$r->rflush;
$uri = $r->uri;
$args = $r->args;
if( $uri =~ /\/(\w+)\/(\d+).(bcs|txt)/ )
{
$bookid = $1;
$isvip = "0";
$page = 'http://192.168.0.137'.$uri;
}
if( $uri =~ /\/(\d+)\/(f|r)\/(\d+).(bcs|txt)/ )
{
$bookid = $1;
$isvip = "1";
$page = 'http://192.168.0.138'.$uri;
}
if( $args =~ /byid=(\d+)/ )
{
$byid = $1;
}
$visitime = strftime("%Y-%m-%d %H:%M:%S", localtime time);
&lastpage;
&meminsertpage;
return OK;
}
}
sub lastpage {
$lastpage->update({'byid' => $byid},{'$set' => {page => $page,visitime => $visitime} },{"upsert" => 1});
return OK;
}
sub meminsertpage {
$memd->set("_book_lastest_read_$byid",$page);
return OK;
}
1;
__END__
分享到:
相关推荐
《深入理解Nginx模块开发与架构解析(第2版)》是一本专注于Nginx技术的专业书籍,针对Nginx的内部工作机制和模块开发进行了深入的探讨。本书旨在帮助读者掌握Nginx的核心概念、架构设计以及如何进行模块开发,从而...
**Nginx模块源码分析:...理解其源码可以提升对Nginx模块开发的理解,同时,编译和配置过程是学习Nginx扩展功能的重要实践环节。在实际应用中,这样的模块可以帮助我们实现定制化的服务器功能,以满足特定业务需求。
《深入理解Nginx模块开发与架构解析第2版》这本书是针对Nginx服务器的高级教程,旨在帮助读者深入掌握Nginx的核心模块开发和整体架构。Nginx是一款高性能、轻量级的Web服务器/反向代理服务器,因其优秀的性能和灵活...
### Linux下用Nginx作为Perl程序服务器及Perl模块配置详解 #### 一、概述 在Linux环境下,利用Nginx作为Web服务器并配合Perl语言处理动态内容是一种实用且高效的技术方案。尤其对于那些需要高性能处理能力的应用...
1. **安装Nginx**:首先需要在服务器上安装Nginx,配置文件中启用Perl模块。在Nginx配置中,通过`location`指令指定处理Perl脚本的路径。 2. **安装Perl和相关模块**:确保Perl环境已经就绪,还需安装`CGI::Fast`等...
第8章 Nginx模块开发 第9章 Nginx的Web缓存服务与新浪网的开源NCACHE模块 第10章 Nginx在国内知名网站中的应用案例 第11章 Nginx的非典型应用实例 第12章 Nginx的核心模块 第13章 Nginx的标准HTTP模块 第14章 Nginx...
- **PCRE库**:Perl Compatible Regular Expressions库,用于支持正则表达式匹配,是Nginx配置中必不可少的一部分。 - **zlib库**:提供HTTP内容的gzip压缩,减小网络传输量。 - **OpenSSL开发库**:对于支持...
第8章 Nginx模块开发.pdf 第9章 Nginx的Web缓存服务与新浪网的开源NCACHE模块.pdf 第10章 Nginx在国内知名网站中的应用案例.pdf 第11章 Nginx的非典型应用实例.pdf 第12章 Nginx的核心模块.pdf 第13章 Nginx的标准...
OpenResty是基于Nginx与LuaJIT的一个高性能Web平台,它以标准Nginx核心,集成了大量的精心设计的Nginx模块,主要包括:ngxLua模块、MySQL模块、Redis模块、Memcached模块等。这些模块使得开发者能够在Nginx内直接...
第8章 Nginx模块开发 8.1 Nginx模块概述 8.2 Nginx模块编写实践 第9章 Nginx的Web缓存服务与新浪网的开源NCACHE模块 9.1 什么是Web缓存? 9.2 Nginx的Web缓存服务 9.3 新浪网开源软件项目——基于Nginx的N...
### Nginx+Lua开发环境搭建与应用 #### 一、Nginx+Lua开发环境简介 《跟我学Nginx+Lua开发》是一本针对Nginx与Lua结合使用的教程书籍,旨在帮助读者理解如何利用这两种技术进行高效且灵活的Web应用开发。Nginx作为...
本书旨在满足广大开发者和运维人员对Nginx模块开发及内部工作原理的学习需求。 Nginx是一款高性能的反向代理服务器,其事件驱动的非阻塞I/O模型使得它在处理高并发请求时表现出色。在深入讲解Nginx开发之前,我们...
3. **PCRE库**:Perl Compatible Regular Expressions,用于支持Nginx中的正则表达式匹配,由Philip Hazel开发。 4. **zlib库**:用于HTTP包内容的gzip压缩,节省网络传输带宽。 5. **OpenSSL开发库**:如果需要...
开始安装过程之前,确保系统已经更新到最新,并且安装了必要的开发工具,例如build-essential和libpcre3-dev,因为Nginx的编译需要它们。接下来,下载Nginx源代码(在这个案例中是1.6版本),解压并进入目录: ```...
第8章 Nginx模块开发 第9章 Nginx的Web缓存服务与新浪网的开源NCACHE模块 第10章 Nginx在国内知名网站中的应用案例 第11章 Nginx的非典型应用实例 第12章 Nginx的核心模块 第13章 Nginx的标准HTTP模块 第14章 Nginx...
2. **嵌入式Perl模块**(Embedded Perl):允许在配置文件中嵌入Perl脚本。 3. **FLV模块**(FLV):处理Flash视频流。 4. **GzipPrecompression模块**(Gzip Precompression):提供预压缩功能。 5. **RandomIndex...
8.Nginx模块开发 9.Nginx的web缓存服务与新浪网的开源NCACHE模块 10.Nginx在国内知名站点中的应用案例 11.Nginx的非典型应用实例 12.Nginx的核心模块 13.Nginx的标准HTTP模块 14.Nginx的其他HTTP模块 15.Nginx的邮件...