`

nginx 整合redis以及lua语言

阅读更多
nginx 的官方wiki 提供了nginx 模块,使其支持了对redis 的读写访问以及支持第三方语言lua去对nginx功能进行扩充。

注:页面最下面有本文描述的各个模块的安装文件。

下面描述两个主要的模块

模块一:HttpRedis2Module

wiki 地址:http://wiki.nginx.org/HttpRedis2Module#Description

官方描述如下:This is an Nginx upstream module that makes nginx talk to a Redis 2.x server in a non-blocking way.

这个模块和nginx memcache 模块最大的区别就是 redis2的响应是redis的原生响应,所以在lua中使用时,需要解析这个响应。可以采用 LuaRedisModule,这个模块可以构建redis的原生请求,并解析redis的原生响应。

HttpRedis2Module支持 redis  数据连接池,redis负载均衡等操作,都需要第三方module的支持。

基本例子:

location /foo {
        set $value 'first';    #存储 $value到redis
        redis2_query set one $value; #读取$value 从redis
        redis2_pass 127.0.0.1:6379; #redis服务连接信息
    }



模块二:HttpLuaModule

wiki地址:http://wiki.nginx.org/HttpLuaModule#Description

官方描述如下:This module embeds Lua, via the standard Lua 5.1 interpreter or LuaJIT 2.0/2.1, into Nginx and by leveraging Nginx's subrequests, allows the integration of the powerful Lua threads (Lua coroutines) into the Nginx event model.

该模块能扩充nginx功能,配合nginx 的其他module 可以进行各种逻辑操作。

注意使用此模块前提需要在当前环境安装 lua luajit 并设置好相关环境变量信息。

基本例子:

  location /recur {
            # MIME type determined by default_type:
            default_type 'text/plain';
            content_by_lua '
local num = tonumber(ngx.var.arg_num) or 0   #将url参数 num 赋予num 如果num不存在则返回0
if num > 50 then ngx.say("num too big")
return
end   #如果nux大于50 则response num too big 并结束
ngx.say("num is: ", num)  
if num > 0
then res = ngx.location.capture("/recur?num=" .. tostring(num - 1)) #如果num>0 则访问 url。。。。。/recur。。。
ngx.print("status=", res.status, " ") #nginx 打印 访问url的返回状态
ngx.print("body=", res.body)
else
ngx.say("end")
end ';
        }



环境的搭建:

1:安装lua luajit  默认就是简单的 make  make install。 默认lib 以及驱动文件路径是/usr/local/lib 和  /usr/local/include/luajit-2.0

2:下载并解压缩nginx,指定luajit的驱动和lib文件路径  相关命令如下:
      export LUAJIT_LIB=/usr/local/lib
      export LUAJIT_INC=/usr/local/include/luajit-2.0

3:编辑nginx 这里需要用到六个模块,相关命令如下

   ./configure --prefix=/usr/local/nginx-1.2.7/nginx   #指定安装路径
   --add-module=/usr/local/nginx-1.2.7/ngx_devel_kit-0.2.19 #nginx的开发小插件
   --add-module=/usr/local/nginx-1.2.7/set-misc-nginx-module-0.24  #nginx的获取和设置各种参数url 的模块
   --add-module=/usr/local/nginx-1.2.7/redis2-nginx-module-0.10 #redis模块
   --add-module=/usr/local/nginx-1.2.7/echo-nginx-module-0.52 #echo功能模块
   --add-module=/usr/local/nginx-1.2.7/lua-nginx-module-0.9.6 #lua 模块.
   --add-module=/usr/local/nginx-1.2.7/lua-redis-parser-0.10 #lua 转换原生redis相应模块

4:进行ningx的编辑安装,命令如下:
   make -j2
   make install
分享到:
评论

相关推荐

    nginx+lua+redis通过匹配客户端ip进行灰度发布

    nginx+lua+redis通过匹配客户端ip进行灰度发布 本文将讲述如何使用nginx、lua和redis来实现灰度发布,通过匹配客户端IP来实现灰度发布。灰度发布是一种常见的软件发布方式,它允许开发者在生产环境中发布新的版本,...

    nginx实战-基于lua语言

    3. **分布式系统整合**:Lua可以与Redis、Memcached等缓存系统,或者MQ消息队列集成,构建复杂的分布式系统。 4. **负载均衡与健康检查**:通过Lua编写负载均衡策略,并实现后端服务器的健康检查。 ### 五、最佳...

    nginx+lua+redis 集群 连接插件和脚本

    在构建高性能、高可用性的Web服务时,常常会利用到Nginx作为反向代理和负载均衡器,Lua作为扩展Nginx功能的脚本语言,而Redis则作为内存数据存储,提供快速的数据访问。本资源包“nginx+lua+redis集群 连接插件和...

    linux 实现nginx+Lua 访问redis集群

    最近有个需求是需要用nginx播放服务器的视频,考虑安全问题,需要在nginx加个lua去取redis的token进行验证,刚开始访问测试环境单机还挺好用,可是要访问生产的是集群环境,找了多了资料趟了数不尽的坑,最终形成这...

    【Redis开发】lua脚本开发nginx 与 redis 模块

    【Redis开发】lua脚本开发nginx 与 redis 模块 (Lua script development nginx and Redis modules) 文件列表: lua_files (0, 2017-05-21) lua_files\access_control.lua (1813, 2017-05-21) lua_files\app_redis_...

    nginx+lua+redis实现token验证

    `lua`作为轻量级的脚本语言,可以增强`nginx`的功能,而`redis`则常用于高速缓存和分布式数据存储。本文将深入探讨如何利用`nginx+lua+redis`来实现`token`验证,以确保只有经过授权的用户才能访问受保护的资源。 ...

    Nginx+Lua+Redis+Json

    Nginx 是一个高性能的 Web 服务器, Lua 是一种轻量级的脚本语言,而 Redis 是一个高性能的 NoSQL 数据库, Json 是一种轻量级的数据交换格式。通过结合使用这些技术,可以实现高效处理高并发请求的系统。 Nginx ...

    lua+redis+nginx

    在构建高性能服务器架构时,`Lua`、`Redis` 和 `Nginx` 的结合使用是一种常见的技术方案。本文将详细探讨这三个组件及其在构建高效系统中的作用。 首先,`Lua` 是一种轻量级的脚本语言,以其简洁的语法、高效的执行...

    lua版waf web防火墙 redis+nginx版

    在本项目中,需要使用OpenResty版本的Nginx,OpenResty是一个集成LuaJIT的Nginx发行版,允许开发者使用Lua语言直接在Nginx中编写高性能的网络应用。结合lua版WAF,Nginx可以解析HTTP请求,然后将这些请求传递给Lua...

    nginx+redis实现session共享

    为了实现单点登录(Single Sign-On, SSO)以及跨应用的session共享,我们可以结合使用Nginx作为反向代理服务器,以及Redis作为持久化内存数据库来存储session数据。下面将详细解释这个解决方案的各个方面。 首先,...

    lua-nginx-redis-master.zip

    《Redis、Lua、Nginx与OpenResty的深度整合及性能优化》 在现代Web服务架构中,Redis、Lua、Nginx和OpenResty是不可或缺的技术组件,它们共同构建了一个高性能、高可扩展的解决方案。让我们深入探讨这些技术的核心...

    lua-redis:lua reis nginx 配制 及 redis.lua 脚本

    lua reis nginx 配制 及 redis.lua 脚本 redis.lua 脚本 支持 get, post redis 的hash, 及 集合 命令 开启redis的密码认证auth nginxlua.conf 配制 lua地址: 示列: redis_lib.php 为PHP类包 redis_lua 类

    redis-5.0.5:nginx + redis + lua这是后台开发的基本功。大家多交流

    数据结构的实现强调内存效率,因此与使用高级编程语言建模的相同数据结构相比,Redis内部的数据结构可能使用较少的内存。 Redis提供了许多自然可以在数据库中找到的功能,例如复制,持久性的可调级别,集群,高可用...

    lua-nginx-redis:Redis,Lua,Nginx,OpenResty笔记和资料

    在“Redis教程”中,你将深入理解Redis的数据操作、持久化机制、事务处理,以及如何通过`phpredis`或`redis-lua`接口在PHP和Nginx中与Redis进行交互。 `OpenResty`是基于Nginx与Lua的Web平台,它集成了大量的Lua库...

    Nginx+Lua+Redis构建高并发Web应用

    在构建高性能Web应用程序时,Nginx、Lua和Redis的组合提供了一种高效且灵活的解决方案。这种架构允许处理高并发请求,同时减轻服务器压力,提高响应速度。下面将详细介绍如何利用这三种技术来构建这样的系统。 首先...

    nginx+lua+redis黑名单加载

    而结合`lua`脚本语言和`redis`内存数据库,可以实现灵活的数据交互和动态逻辑处理。在这个场景下,"nginx+lua+redis黑名单加载"的组合通常用于实现一种安全策略,即通过`nginx`拦截并阻止某些IP或用户访问,这些IP或...

    nginx+lua+redis.rar

    《构建高性能Web服务:Nginx、Lua与Redis的整合应用》 在现代Web服务的构建中,Nginx、Lua和Redis已经成为一种高效的组合,它们各自承担着不同的角色,共同构建出高并发、低延迟的系统。Nginx作为前端服务器,负责...

    redis_cluster:一个开放式的nginx lua redis集群

    这个“redis_cluster”项目看起来是将Redis Cluster集成到Nginx环境中,利用OpenResty(一个基于Nginx和lua-jit的高性能Web平台)和resty(一个Lua绑定库,用于在Nginx中与Redis交互)来实现。下面将详细解释这些...

    ngx_lua_php_queue, nginx lua php redis实现单业务排队系统架构.zip

    ngx_lua_php_queue是一个开源项目,它利用Nginx的lua模块、PHP以及Redis来构建一个单业务排队系统架构。这个架构旨在解决高并发场景下,确保请求按序处理,防止资源争抢,优化服务性能的问题。以下是这个系统架构的...

Global site tag (gtag.js) - Google Analytics