Nginx 内嵌lua脚本,结合Redis使用
0x00 Nginx 内嵌Lua脚本有下面特点:
20k个并发连接
Lua脚本能够在Nignx 11个层次的不同层次发挥作用,扩展Ngnix功能
Lua速度极快(寄存器指令)
0x01 应用场景
在web server端做请求过滤处理(如:WAF、Anti CC等)
0x02 简单配置过程
測试环境Ubuntu Server 14.04.2 LTS
几个须要下载的模块(注意安装顺序和export路径问题)
LuaJIT-2.0.4(A Just-In-Time Compiler
for Lua)ngx_devel_kit( Nginx Development
Kit)echo-nginx-module( more
shell-style goodies to Nginx config file)lua-nginx-module(Embed
the Power of Lua into Nginx)
0x03 可能存在的问题。找不到 lua.h 等,是由于luaJIT的lib和inc没有配置在环境变量中
须要这样配置(你实际的本地路径):
export LUAJIT_LIB=/usr/lib/lua
export LUAJIT_INC=/usr/local/include/luajit-2.0
cp /usr/local/include/luajit-<VERSION>/* /usr/local/include/
假设有无法启动的情况。service 能够查看 tail /var/log/syslog 查看错误
假设是nginx无法启动能够查看 tail /var/cache/nginx/error.log
假设已经生成nginx bin文件 能够用 nginx -V 来查看 配置文件是否正确
假设缺少一下模块:
PCRE
sudo apt-get install libpcre3 libpcre3-dev
zlib
sudo apt-get install zlib1g-dev
openssl
sudo apt-get install libssl-dev
ps:特别说明的是。请注意下Nginx的版本号不要下载最新的,可能不支持上面那些模块接口,我用的是Nginx 1.7.4
当中0x02的安装步骤都有安装说明,这里就不细说了
0x04 安装完后
改动nginx.conf文件 (默认路径 /etc/nginx/nginx.conf):
加入lua代码
又一次load nginx 配置
sudo /etc/nginx/sbin/nginx -s reload
效果:
2. 加入lua 文件:
加入两个lua_package_path,lua_code_cache(为了不保留lua cache,方便调试。实际项目中须要打开)
总体的lua文件的文件夹(注意lua文件夹中的文件是接下来新建的):
/etc/nginx/lua/hello.lua
/etc/nginx/lua/hello_redis.lua
/etc/nginx/lua/redis.lua
nginx.conf 文件加入:
hello.lua文件内容:
ngx.header.content_type = "text/plain";
ngx.say("say hello from hello.lua");
全部加入的location代码:
然后又一次load nginx 看效果。
3.使用redis(第三条新加的redis):
前提是机器上已有redis-server, Ubuntu上安装是 sudo apt-get install redis-server
hello_redis.lua 内容:
local redis = require "redis"
local cache = redis.new()
local ok, err = cache.connect(cache, '127.0.0.1', '6379')
cache:set_timeout(60000)
if not ok then
ngx.say("failed to connect:", err)
return
end
res, err = cache:set("hello", "redis in nginx_inline_lua")
if not ok then
ngx.say("failed to set hello: ", err)
return
end
ngx.say("set result: ", res)
local res, err = cache:get("hello")
if not res then
ngx.say("failed to get hello: ", err)
return
end
if res == ngx.null then
ngx.say("hello not found.")
return
end
ngx.say("hello: ", res)
local ok, err = cache:close()
if not ok then
ngx.say("failed to close:", err)
return
end
效果:
0x05 如今为止,简单的一个在Nginx 中内嵌Lua而且操作Redis的过程已经完毕了,在配置时候可能有非常多细小的问题。可是不要放弃,坚持下去。相信你就会成功。
0xFF 附加资料:
http://wiki.nginx.org/HttpLuaModule
http://openresty.org/ (最先完毕Nginx内嵌Lua的Chinese)
转载请注明出处(个人论坛):http://www.byteway.net/thread-index-fid-4-tid-316.htm
Nginx 内嵌lua脚本,结合Redis使用的更多相关文章
- nginx插入lua脚本访问redis
目标:收集用户日志 流程: 浏览器端get方法将数据传到nginx服务 nginx收集到数据,执行内嵌lua脚本,访问redis,根据token获得用户id 将日志信息存入文件 1.nginx安装,参 ...
- 运维实践-最新Nginx二进制构建编译lua-nginx-module动态链接Lua脚本访问Redis数据库读取静态资源隐式展现
关注「WeiyiGeek」公众号 设为「特别关注」每天带你玩转网络安全运维.应用开发.物联网IOT学习! 希望各位看友[关注.点赞.评论.收藏.投币],助力每一个梦想. 本章目录 目录 0x0n 前言 ...
- Lua脚本在Redis事务中的应用实践
使用过Redis事务的应该清楚,Redis事务实现是通过打包多条命令,单独的隔离操作,事务中的所有命令都会按顺序地执行.事务在执行的过程中,不会被其他客户端发送来的命令请求所打断.事务中的命令要么全部 ...
- CentOS6.4 安装OpenResty和Redis 并在Nginx中利用lua简单读取Redis数据
1.下载OpenResty和Redis OpenResty下载地址:wget http://openresty.org/download/ngx_openresty-1.4.3.6.tar.gz Re ...
- Nginx 中利用 Lua 脚本做访问控制
使用场景 需要在后端服务之前做访问控制,或没有后端服务的场景,如静态文件. 实验环境 Ubuntu 14.04 Nginx 1.4.6 安装 Lua 运行环境 sudo apt-get install ...
- Lua脚本在redis分布式锁场景的运用
目录 锁和分布式锁 锁是什么? 为什么需要锁? Java中的锁 分布式锁 redis 如何实现加锁 锁超时 retry redis 如何释放锁 不该释放的锁 通过Lua脚本实现锁释放 用redis做分 ...
- 服务降级 托底预案 Nginx中使用Lua脚本检测CPU使用率,当达到阀值时开启限流,让用户排队
https://mp.weixin.qq.com/s/FZAcQQAKomGEe95kln1HCQ 在京东我们是如何做服务降级的 https://mp.weixin.qq.com/s/FZAcQQAK ...
- c#中用lua脚本执行redis命令
直接贴出代码,实现执行lua脚本的方法,用到的第三方类库是 StackExchange.Redis(nuget上有) 注:下面的代码是简化后的,实际使用要修改, using System; using ...
- Redis进阶之使用Lua脚本自定义Redis命令
[本文版权归微信公众号"代码艺术"(ID:onblog)所有,若是转载请务必保留本段原创声明,违者必究.若是文章有不足之处,欢迎关注微信公众号私信与我进行交流!] 1.在Redis ...
随机推荐
- 最大流 [USACO4.2]草地排水Drainage Ditches
Background 在农夫约翰的农场上,每逢下雨,贝茜最喜欢的三叶草地就积聚了一潭水.这意味着草地被水淹没了,并且小草要继续生长还要花相当长一段时间.因此,农夫约翰修建了一套排水系统来使贝茜的草地免 ...
- java8新特性——并行流与顺序流
在我们开发过程中,我们都知道想要提高程序效率,我们可以启用多线程去并行处理,而java8中对数据处理也提供了它得并行方法,今天就来简单学习一下java8中得并行流与顺序流. 并行流就是把一个内容分成多 ...
- [BZOJ3676][APIO2014]回文串(Manacher+SAM)
3676: [Apio2014]回文串 Time Limit: 20 Sec Memory Limit: 128 MBSubmit: 3097 Solved: 1408[Submit][Statu ...
- 埃及分数 a* 搜索 知识点mark
题意 在古埃及,人们使用单位分数的和(即1/a,a是自然数)表示一切有理 数. 例如,2/3=1/2+1/6,但不允许2/3=1/3+1/3,因为在加数中不允许有相同的. 对于一个分数a/b,表示方法 ...
- Java的运行机制概括
这次随笔主要记录一下我对Java的平台无关性一些新的理解,以前只知道是Java是一门很容易跨平台的语言,正如 "Compile once, run anywhere" 这句话,也知 ...
- linux基础命令学习 (九)文本操作
一.head 1.语法: head [选项] [文件] 2.选项 -q 隐藏文件名 -v 显示文件名 -c<字节> 显示字节数 -n<行数> 显示的行数 3.示例 范例一:查看 ...
- ExtJs 3 自定义combotree
ExtJs 3 自定义combotree /** * 自定义下拉树,支持初始化值时自动定位树节点. * 还没有考虑性能问题.继承自Ext.form.ComboBox也很浪费. * 代码中的cu.get ...
- 借助JRebel使Tomcat支持热部署
JRebel是一个J2EE热部署的工具.使用它可以减少浪费8-18%的开发时间在项目的构建和部署上.虽然Java也提供了HotSpot的JVM,但是如果你修改的类中有方法名称变动的话,HotSpot就 ...
- Hbulider 支持less保存自动编译
设置less配置:文件写 .less,路径找lessc.cmd,找不到就下载,命令参数写:%FileName% %FileBaseName%.css这样以后就可以less文件自动生成css了!
- 安装sql2012 正在启动操作系统功能"NetFx3"
安装完windows8 后开始安装sql2012,安装过程中停在“正在启动操作系统功能"NetFx3"”不动了,很是着急,于是上网查了一下资料,原来NetFx3指的是Framewo ...