nginx利用lua实现nginx反向代理proxy_store缓存文件自删除

因为自己网站526net一直放在国外,速度一直不怎么理想。所以网站前端一直是买一些低配廉价,但是对国内线路友好的机器来做反向代理。
nginx的反向代理可以说已经很好用了,我一直使用proxy_store方式来做缓存,唯一的缺点就是不会自动清理缓存。我是通过定时任务自动删除的。
但是还是做不到我要的效果,前两天使用lua写了脚本,实现客户访问前端,lua判断文件的创建时间,然后根据设定的时间来自动删除缓存。

nginx 的设置我就不多说了,lua的安装可以参考 《LNMP平滑升级nginx并安装ngx_lua模块教程》  《为nginx的luajit安装luarocks并安装luafilesystem》两篇文章
lua代码就很简单了。因为使用了luafilesystem来操作文件。

主要流程是。 用户访问前端完毕的时候,自动执行lua脚本,lua首先根据url来获取缓存文件路径,判断文件是否存在。如果存在获取文件的修改时间,
同时判断修改时间和缓存过期时间是否一致,一致的话删除缓存文件。下次用户访问会自动从源服务器抓回新的数据。
这个方式我测试了3天,没大问题。终于抛弃了定时整站删除的无奈了。

下面贴下主要代码:
1> 判断文件是否存在  很简单只需要 open一下就行了
function file_exists(path)
  local file = io.open(path, "rb")
  if file then file:close() end
  return file ~= nil
end
2> 对时间的操作,计算过期时间。
local function getNewDate(srcDateTime,interval)
local ofset=0
ofset = 60 * interval
local newTime = os.date("*t", srcDateTime + tonumber(ofset))
return os.time(newTime)
end
3> 程序主体流程,代码是最初版的,我用的已经改造为数组循环判断
local getfile=ngx.var.document_root..ngx.var.uri
local matchtime = 10
local matchstr = 10
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
转载请保留本站链接:http://www.526net.com/blog/xitong/658.html

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Kong 可以通过在 API 或者 Consumer 的配置中添加 headers 字段来实现 proxy_set_header 的功能。 例如,在 API 级别的配置中,可以在创建 API 或者更新 API 的时候,使用 headers 字段添加需要设置的请求头。 同样在consumer 级别的配置中,可以在创建 Consumer 或者更新 Consumer 的时候,使用 custom_id 字段添加需要设置的请求头。 请确保 Kong 版本是支持 headers 字段的。 ### 回答2: 要在Kong配置中实现类似nginx中的proxy_set_header功能,首先需要了解Kong的基本配置方式。 Kong是一个基于Lua脚本的开源API网关,主要用于构建和管理微服务架构。Kong的配置可以通过Kong的Admin API或Kong的配置文件进行设置。 要实现类似nginx中的proxy_set_header功能,可以通过Kong的插件进行配置。Kong提供了一个名为'header-transformer'的插件,可以用来修改请求或响应的头部信息。 配置步骤如下: 1. 安装和配置Kong: - 下载和安装Kong。 - 配置Kong的数据库。 - 启动Kong。 2. 安装'header-transformer'插件: - 使用Kong的Admin API或命令行工具安装'header-transformer'插件。 3. 配置'header-transformer'插件: - 在Kong的Admin API中创建一个新的插件配置,指定要修改的头部字段和对应的值。 - 可以配置多个'header-transformer'插件,以实现不同的头部信息更改效果。 4. 指定插件应用范围: - 使用Kong的Route或Service实体,将插件配置应用到特定的路由或服务。 5. 测试配置: - 使用curl等工具发起HTTP请求,验证配置是否生效。 这样,在Kong的配置中就实现了类似nginx中的proxy_set_header功能。通过'header-transformer'插件,可以方便地修改请求或响应的头部信息,以满足特定需求。 ### 回答3: 在Kong中配置实现类似于nginx中的proxy_set_header功能可以通过修改Kong的插件来实现。Kong本身提供了很多插件,其中就包括可以修改请求头的插件。下面给出一个具体的例子。 1. 首先在Kong的配置文件中开启`http-log`插件,可以在Kong的`kong.conf`文件中进行配置。 ```plaintext plugins = bundled,http-log ``` 2. 在Kong的Admin API中创建一个插件实例,使用`http-log`插件来修改请求头。例如,在Kong的Admin API中执行以下命令: ```plaintext curl -X POST --url http://localhost:8001/plugins \ --data "name=http-log" \ --data "config.http_endpoint=http://httpbin.org" \ --data "config.method=POST" \ --data "config.headers=X-Custom-Header: CustomValue" ``` 在这个例子中,我们设置了`http-log`插件的配置参数,指定了一个HTTP端点`http://httpbin.org`,并设定了请求方法为POST,同时在请求头中添加了一个自定义的头部字段`X-Custom-Header`。 3. 通过Kong的路由或服务来应用插件。可以在Kong的Admin API中创建一个路由或服务,并将前面创建的插件关联到对应的路由或服务上。例如: ```plaintext curl -X POST --url http://localhost:8001/routes \ --data "hosts[]=example.com" \ --data "paths[]=/my-route" \ --data "service.id=<service_id>" \ --data "plugins=http-log" ``` 这个例子中,我们创建了一个路由,将其绑定到主机名`example.com`和路径`/my-route`上,并将前面创建的`http-log`插件应用在这个路由上。 通过以上步骤,我们可以在Kong中配置实现类似于nginx中的proxy_set_header功能。通过使用`http-log`插件,可以修改请求头,并在Kong中实现转发请求时代理传递定制的头部字段。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值