0x00 Nginx 内嵌Lua脚本有下面特点:

  • 20k个并发连接

  • Lua脚本能够在Nignx 11个层次的不同层次发挥作用,扩展Ngnix功能

  • Lua速度极快(寄存器指令)

0x01 应用场景

  • 在web server端做请求过滤处理(如:WAF、Anti CC等)

0x02 简单配置过程

  1. 測试环境Ubuntu Server 14.04.2 LTS

  2. 几个须要下载的模块(注意安装顺序和export路径问题)

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):

  1. 加入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://tengine.taobao.org/

转载请注明出处(个人论坛):http://www.byteway.net/thread-index-fid-4-tid-316.htm

Nginx 内嵌lua脚本,结合Redis使用的更多相关文章

  1. nginx插入lua脚本访问redis

    目标:收集用户日志 流程: 浏览器端get方法将数据传到nginx服务 nginx收集到数据,执行内嵌lua脚本,访问redis,根据token获得用户id 将日志信息存入文件 1.nginx安装,参 ...

  2. 运维实践-最新Nginx二进制构建编译lua-nginx-module动态链接Lua脚本访问Redis数据库读取静态资源隐式展现

    关注「WeiyiGeek」公众号 设为「特别关注」每天带你玩转网络安全运维.应用开发.物联网IOT学习! 希望各位看友[关注.点赞.评论.收藏.投币],助力每一个梦想. 本章目录 目录 0x0n 前言 ...

  3. Lua脚本在Redis事务中的应用实践

    使用过Redis事务的应该清楚,Redis事务实现是通过打包多条命令,单独的隔离操作,事务中的所有命令都会按顺序地执行.事务在执行的过程中,不会被其他客户端发送来的命令请求所打断.事务中的命令要么全部 ...

  4. 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 ...

  5. Nginx 中利用 Lua 脚本做访问控制

    使用场景 需要在后端服务之前做访问控制,或没有后端服务的场景,如静态文件. 实验环境 Ubuntu 14.04 Nginx 1.4.6 安装 Lua 运行环境 sudo apt-get install ...

  6. Lua脚本在redis分布式锁场景的运用

    目录 锁和分布式锁 锁是什么? 为什么需要锁? Java中的锁 分布式锁 redis 如何实现加锁 锁超时 retry redis 如何释放锁 不该释放的锁 通过Lua脚本实现锁释放 用redis做分 ...

  7. 服务降级 托底预案 Nginx中使用Lua脚本检测CPU使用率,当达到阀值时开启限流,让用户排队

    https://mp.weixin.qq.com/s/FZAcQQAKomGEe95kln1HCQ 在京东我们是如何做服务降级的 https://mp.weixin.qq.com/s/FZAcQQAK ...

  8. c#中用lua脚本执行redis命令

    直接贴出代码,实现执行lua脚本的方法,用到的第三方类库是 StackExchange.Redis(nuget上有) 注:下面的代码是简化后的,实际使用要修改, using System; using ...

  9. Redis进阶之使用Lua脚本自定义Redis命令

    [本文版权归微信公众号"代码艺术"(ID:onblog)所有,若是转载请务必保留本段原创声明,违者必究.若是文章有不足之处,欢迎关注微信公众号私信与我进行交流!] 1.在Redis ...

随机推荐

  1. list容器详解

    首先说说STL ( STL的目的是标准化组件,这样就不用重新开发,可以使用现成的组件.STL现在是C++的一部分,因此不用额外安装什么.它被内建在你的编译器之内.因为STL的list是一个简单的容器, ...

  2. 如何制作RTS游戏的寻路系统?

    Q1:我们在做一个RTS游戏,开始用的是Unity自带的NavMesh的寻路,但发现这个并不适合RTS多人寻路,因为总会出现阻挡和闪跳的问题.看Asset Store上的A* path插件评论说在碰撞 ...

  3. ssm demo,用户角色权限管理

    SSM框架整合 Spring SpringMVC MyBatis 导包: 1, spring 2, MyBatis 3, mybatis-spring 4, fastjson 5, aspectwea ...

  4. GPFS 安装测试

    简介 GPFS(General Parallel File System ,GPFS) 是 IBM 公司第一个共享文件系统,起源于 IBM SP 系统上使用的虚拟共享磁盘技术( VSD ).作为这项技 ...

  5. 【BZOJ 3289】 3289: Mato的文件管理 (莫队)

    3289: Mato的文件管理 Time Limit: 40 Sec  Memory Limit: 128 MBSubmit: 2819  Solved: 1185 Description Mato同 ...

  6. Codechef SEP14 QRECT cdq分治+线段树

    题意 支持删除矩阵.插入矩阵.查询当前矩阵与之前有多少个矩阵相交 算相交的时候容斥一下:相交矩形数 = 总矩形数-X轴投影不相交的矩形数-Y轴投影不相交的矩形数-XY轴投影下都不相交的矩形数 最后一项 ...

  7. noip200807传纸条

    试题描述: 小渊和小轩是好朋友也是同班同学,他们在一起总有谈不完的话题.一次素质拓展活动中,班上同学安排做成一个m行n列的矩阵,而小渊和小轩被安排在矩阵对角线的两端,因此,他们就无法直接交谈了.幸运的 ...

  8. request.getScheme() 取到https正确的协议(转载)

    最近在做一个项目, 架构上使用了 Nginx +tomcat 集群, 且nginx下配置了SSL,tomcat no SSL,项目使用https协议 但是,明明是https url请求,发现 log里 ...

  9. 《python学习手册》第34章 异常对象

    基于字符串的异常 python在2.6之前可以使用字符串来定义异常,并且是通过对象标识符来匹配的(即通过is 而不是==) myexc = "My excetion string" ...

  10. Java--tomcat线程池(分析)

    以apache-tomcat-7.0.57 为例子 tomcat的默认配置如下: <Connector connectionTimeout="/> 默认的线程池为: maxThr ...