nginx利用lua实现nginx反向代理proxy_store缓存文件自删除
标题有点绕口。我尽量把关键词都贴进去。之前因为自己的nginx安装了ngx_lua模块,但是又需要引入
但是安装luafilesystem又需要先安装luarocks,比较繁琐。这里就想记录一下安装过程。
nginx安装ngx_lua模块可以参考:LNMP平滑升级nginx并安装ngx_lua模块教程
下面进入正题
下载:
wget http://keplerproject.github.io/luarocks/releases/luarocks-2.2.2.tar.gz 解压:
tar -zxvf luarocks-2.2.2.tar.gz 进入目录:
cd luarocks-2.2.2
安装 luarocks
./configure --with-lua="/usr/local" --lua-suffix="jit" --with-lua-include="/usr/local/include/luajit-2.0"
其中“/usr/local/include/luajit-2.0” 可以 find / -name lua.h 先找下路径
make build
make install 安装 luafilesystem luarocks install luafilesystem 因为自己网站526net一直放在国外,速度一直不怎么理想。所以网站前端一直是买一些低配廉价,但是对国内线路友好的机器来做反向代理。 nginx的反向代理可以说已经很好用了,我一直使用proxy_store方式来做缓存,唯一的缺点就是不会自动清理缓存。我是通过定时任务自动删除的。 但是还是做不到我要的效果,前两天使用lua写了脚本,实现客户访问前端,lua判断文件的创建时间,然后根据设定的时间来自动删除缓存。 nginx 的设置我就不多说了,lua的安装可以参考 《LNMP平滑升级nginx并安装ngx_lua模块教程》 《为nginx的luajit安装luarocks并安装luafilesystem》两篇文章 lua代码就很简单了。因为使用了luafilesystem来操作文件。 主要流程是。 用户访问前端完毕的时候,自动执行lua脚本,lua首先根据url来获取缓存文件路径,判断文件是否存在。如果存在获取文件的修改时间, 同时判断修改时间和缓存过期时间是否一致,一致的话删除缓存文件。下次用户访问会自动从源服务器抓回新的数据。 这个方式我测试了3天,没大问题。终于抛弃了定时整站删除的无奈了。 下面贴下主要代码: > 判断文件是否存在 很简单只需要 open一下就行了 function file_exists(path)
local file = io.open(path, "rb")
if file then file:close() end
return file ~= nil
end > 对时间的操作,计算过期时间。 local function getNewDate(srcDateTime,interval)
local ofset=
ofset = * interval
local newTime = os.date("*t", srcDateTime + tonumber(ofset))
return os.time(newTime)
end > 程序主体流程,代码是最初版的,我用的已经改造为数组循环判断 local getfile=ngx.var.document_root..ngx.var.uri local matchtime = local matchstr = if file_exists(getfile) then local lfs = require"lfs"
local new_att = assert (lfs.attributes(getfile))
local oldTime=new_att.change
if(string.match(ngx.var.uri,matchstr)) then
local newTime=getNewDate(oldTime,matchtime)
if os.time()>newTime then
os.remove(getfile)
end
end end
nginx利用lua实现nginx反向代理proxy_store缓存文件自删除的更多相关文章
- Nginx服务器部署 负载均衡 反向代理
Nginx服务器部署负载均衡反向代理 LVS Nginx HAProxy的优缺点 三种负载均衡器的优缺点说明如下: LVS的优点: 1.抗负载能力强.工作在第4层仅作分发之用,没有流量的产生,这个特点 ...
- 使用Nginx压缩文件、设置反向代理缓存提高响应速度
Gzip压缩: 最开始,这个竟然要6m多(大到不寻常),响应的速度3分多钟. 所以先对返回的文件进行gzip压缩.判断返回的资源是否有使用gzip压缩,观察响应头部里面,如果没有 Content-En ...
- Centos 7 上使用nginx为Node.js配置反向代理时错误:(13: Permission denied) while connecting to upstream
错误来源:Centos 7 上使用nginx为Node.js配置反向代理时产生(13: Permission denied) while connecting to upstream的错误 nginx ...
- Nginx利用lua剪辑FastDFS图片
Nginx利用lua剪辑FastDFS中的图片 我们经常用FastDFS来做图片服务器,通过nginx来上传或者获取图片.本文要实现的功能是,当客户端要获取不同尺寸的图片是,lua根据url中的尺寸大 ...
- 使用Nginx对.NetCore站点进行反向代理
前言 之前的博客我已经在Linux上部署好了.NetCore站点且通过Supervisor对站点进行了进程守护,同时也安装好了Nginx.Nginx的用处非常大,还是简单说下,它最大的功能就是方便我们 ...
- nginx配置虚拟主机、反向代理和负载均衡
为了实现这个功能,需要修改nginx的配置文件,将nginx.conf清理一下,使结构更清晰. worker_processes ; events { worker_connections ; } h ...
- 基于nginx + lua实现的反向代理动态更新
大家都知道,nginx是当前应用非常广泛的web服务器,热度因为他的高并发高性能高可靠性,且轻量级!牛逼的不行,不多说这些. 今天要介绍的是,如何基于nginx和lua脚本,也就是在openresty ...
- NGINX之——配置HTTPS加密反向代理訪问–自签CA
转载请注明出处:http://blog.csdn.net/l1028386804/article/details/46695495 出于公司内部訪问考虑,採用的CA是本机Openssl自签名生成的,因 ...
- Linux服务之nginx服务篇三(反向代理、负载均衡)
一.Nginx实现反向代理 概念 反向代理:在收到客户端请求之后,会修目标IP地址和端口 正向代理:在收到客户端请求之后,会修源IP地址和端口 上游服务器:代理服务器后端的哪些真正给客户端提供服务的节 ...
随机推荐
- POJ 2975 Nim(博弈论)
[题目链接] http://poj.org/problem?id=2975 [题目大意] 问在传统的nim游戏中先手必胜策略的数量 [题解] 设sg=a1^a1^a3^a4^………^an,当sg为0时 ...
- 【分块】bzoj1593 [Usaco2008 Feb]Hotel 旅馆
分块,记录每个块内包括左端点的最大连续白段的长度, 整个块内的最大连续白段的长度, 和包括右端点的最大连续白段的长度. Because 是区间染色,所以要打标记. 至于怎样在O(sqrt(n))的时间 ...
- 【莫队算法】【权值分块】bzoj3236 [Ahoi2013]作业
莫队显然.然后维护转移的时候如果用树状数组,则很容易TLE.所以用权值分块维护转移. 总复杂度O(m*sqrt(n)). #include<cstdio> #include<algo ...
- Mybatis添加用户&&Mybatis添加用户返回ID
(1)添加用户(添加User记录) <!--插入用户 --> <insert id="insertUser" parameterType="com.so ...
- 建立Spring项目的基础
1.新建web项目 2.在lib下添加这五个包 3.新建applicationContext.xml(一定在src目录下)
- Maven多模块项目新建技巧-解决公共项目install之后可以在单独模块中直接编译
说明:如果按照这种方式http://www.cnblogs.com/EasonJim/p/8303878.html,且按照常规的install方式在子项目中编译项目,那么需要先install一下par ...
- IDEA中添加类的创建者信息
创建方法: 1. 使用快捷键(ctrl + alt + s),在弹出框中左边侧选择 Editor -> File and Code Templates,左边侧相应会更新 右边侧选择 Class, ...
- Android中的线程池 ThreadPoolExecutor
线程池的优点: 重用线程池中的线程,避免因为线程的创建和销毁带来的性能消耗 能有效的控制线程的最大并发数,避免大量的线程之间因抢占系统资源而导致的阻塞现象 能够对线程进行简单的管理,并提供定时执行以及 ...
- 《Hadoop基础教程》之初识Hadoop 【转】
Hadoop一直是我想学习的技术,正巧最近项目组要做电子商城,我就开始研究Hadoop,虽然最后鉴定Hadoop不适用我们的项目,但是我会继续研究下去,技多不压身. <Hadoop基础教程> ...
- Servlet执行时一般实现哪几个方法?
public void init(ServletConfig config) public ServletConfig getServletConfig() public String getServ ...