nginx+lua+redis 环境搭建:

我使用的是大牛 ZhangYichun 提供的集成包快速安装。

非常简单,下载 ngx_openresty,该集成包中有:NginxLuaLuajitngx_lua,以及一些有用的Nginx第三方模块。

1、windows直接下载openresty 解压即可,就完成了windows下使用lua的开发环境

2、配置:

1)、在nginx.conf里http下配置如下代码:

    lua_package_path "/lualib/?.lua;;";  #lua 模块  lua_package_cpath "/lualib/?.so;;";  #c模块   include lua.conf;   #导入自定义lua配置文件resolver 8.8.8.8;

2)、在nginx.conf同目录创建lua.conf文件专门存放lua的路由配置

server {  charset utf-8; #设置编码listen       80;  server_name  _;  location /request {  default_type 'text/html';  content_by_lua_file /lua/api/request.lua; #相对于nginx安装目录  }
}

3)、在ngx根目录下的lua文件夹里创建“api”文件夹,并且在里面添加request.lua 处理文件类,例如代码如下:

local redis = require "resty.redis"
local cache = redis:new()
-- redis连接
local ok,err = cache.connect(cache, '127.0.0.1', '6379')if not ok thenngx.say("failed to connect:", err);return
end-- redis密码认证
local count, err = cache:get_reused_times()
if 0 == count thenok,err = cache:auth("password")if not ok thenngx.say("failed to auth redis: " , err)returnend
elseif err thenngx.say("failed to get reused times: ", err)return
end-- 选择使用的redis数据库
cache:select(0)-- 超时时间
cache:set_timeout(60000)-- 获取方法
local sch =ngx.var.scheme--  主机名
local host = ngx.var.host-- 当前访问地址local url = ngx.var.uri-- 获取端口
--local pot =ngx.var.server_port-- 链接参数
local args = ngx.var.args-- 定义通用完整 url 路径,redis保存的key
local url_key = sch .. "://" .. host .. url-- 获取redis 中的长域名
local res, err = cache:get(url_key )
-- ngx.req.set_uri(url)if res == ngx.null or res == nil thenngx.say("failed to get reused times: ", err)return
else--ngx.say(sch .. "://" .. host .. url .. " " .. res)--redirect前不能有sayngx.redirect(res,302)
end

4)、在redis 写入key 并测试

注意:

lua读取redis数据返回结果为空时,返回的结果不是nil而是userdata类型的ngx.null。

为什么要这么设计?

因为nil在lua中有特殊的意义,如果一个变量被设置为nil相当于告知该变量未定义(不存在)一样,如果把redis查询的结果为空设置为nil,而该查询的key对应在redis中又是存在的,就无法把查询为空和未定义区分开来了,这样显然是不合理的。所以必须使用一个userdata类型的值来表示这个查询记录为空,但是又不等同于未定义变量(ngx.null)。

因此,代码做如下修改即可:

local access_token = redis_client:read_by_key(token_key)if access_token == ngx.null or access_token == nil then-- do something...return falseendlocal obj_token = cjson.decode(access_token)-- do something

windows下nginx+lua+redis实现短域名服务相关推荐

  1. nginx lua redis 访问频率限制(转)

    1. 需求分析 Nginx来处理访问控制的方法有多种,实现的效果也有多种,访问IP段,访问内容限制,访问频率限制等. 用Nginx+Lua+Redis来做访问限制主要是考虑到高并发环境下快速访问控制的 ...

  2. nginx+lua+redis 灰度发布实现方案

    背景: 公司要把现有的某传统项目进行微服务化,拆分后要分批次预发布,实现某部分使用户使用微服务模块,其他用户使用传统项目.待微服务稳定.无bug后全部用户迁移至微服务系统. 以上为背景,实现此方案使用 ...

  3. nginx+lua+redis deny ip

    2019独角兽企业重金招聘Python工程师标准>>> nginx+lua+redis实现ip黑名单 1.安装LuaJIT LuaJIT LuaJIT即采用C语言写的Lua代码的解释 ...

  4. 利用nginx+lua+redis实现反向代理方法教程

    这篇文章主要给大家介绍了利用nginx+lua+redis实现反向代理方法教程,文中介绍的非常详细,对大家具有一定的参考学习价值,需要的朋友们下面来一起看看吧. 前言 最近因为工作需要,要进行IVR的 ...

  5. nginx+lua+redis实现降级

    前言 商城或web站点的用户访问量出乎意料地增加了很多,超出了系统的负载能力, 系统有些扛不住,继而导致注 册,下单,支付什么的全部在绕圈卡住,继而导致公司业务损失了不少用户和订单.. 一.引子 面对 ...

  6. windows下php7安装redis扩展

    windows下php7安装redis扩展 windows下开发用的wamp集成的环境,想装个php-redis扩展. php_redis.dll下载地址:https://pecl.php.net/p ...

  7. Windows下Nginx的启动、停止等基本命令

    2019独角兽企业重金招聘Python工程师标准>>> Windows下Nginx的启动.停止等命令 在Windows下使用Nginx,我们需要掌握一些基本的操作命令,比如:启动.停 ...

  8. Windows下nginx的安装及使用方法入门

    Windows下Nginx的安装及使用方法入门 nginx功能之一可以启动一个本地服务器,通过配置server_name和root目录等来访问目标文件 一. 下载 官网地址:http://nginx. ...

  9. Nginx+Lua+Redis 对请求进行限制

    Nginx+Lua+Redis 对请求进行限制 一.概述 需求:所有访问/myapi/**的请求必须是POST请求,而且根据请求参数过滤不符合规则的非法请求(黑名单), 这些请求一律不转发到后端服务器 ...

最新文章

  1. ioS开发之c语言基础-一维数组,字符数组
  2. centos 配置bond_CentOS 网卡配置bond4(LACP)
  3. C语言:输入两个数,输出最大公约数,最小公倍数
  4. nodeJS 事件绑定
  5. mysql忘记root密码咋办_MySQL忘记root用户密码怎么办?
  6. 【今日CV 计算机视觉论文速览 第146期】Mon, 22 Jul 2019
  7. C# 使用NPlot绘图
  8. 2.JAVA-基础语法以及String的介绍
  9. sqlyog-mysql_SQLyog
  10. JavaScript·函数
  11. C# NFine开源框架 调用存储过程的实现代码
  12. 基于Python+Django的电影推荐系统毕业设计源码
  13. SQLite数据库使用(sqlite3 c++)
  14. 几个系统级崩溃问题和h5加载页面崩溃问题及解决方案
  15. 【java】模拟物流快递系统程序设计
  16. 网站被黑怎么查被入侵原因和日志
  17. iOS-Swift3富文本(UILable文本图文混排)
  18. win10系统删除chrome浏览器输入框的历史记录
  19. watch属性的使用
  20. 一摞python风格的纸牌(fluent python阅读)

热门文章

  1. (五)carla中世界坐标系与相机坐标系、像素坐标系变换
  2. 天生棋局与棋局判断(C语言)
  3. 关于babe-loader^8.0.6的配置问题
  4. 学习笔记:物料接收到质检库存的几种不同方式
  5. Column 'id' in where clause is ambiguous
  6. 华为信息流推广怎么收费的 华为推广需要多少钱
  7. miniblink获取html文档,五、【miniblink】直接注册js可以调用的原生函数
  8. 运用Chrome浏览器ADB插件获取页面元素
  9. 遍历操作__getitem__
  10. ubuntu wps缺少字体_一个字体:系统风汜霰更纱黑