当前位置: 首页 > news >正文

nginx+lua+redis(openresty)配置

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

 

nginx+lua+redis(openresty)配置

2014-07-18 11:10 2494人阅读 评论(1) 收藏 举报

方案一:

1.安装lua解释器

wget http://luajit.org/download/LuaJIT-2.0.2.tar.gz (http://luajit.org/download.html)

配置lua Lib和include/luajit-$version目录为环境变量

2.下载ngx_devel_kit和lua-nginx-module

https://codeload.github.com/simpl/ngx_devel_kit/tar.gz/v0.2.19 ( https://github.com/simpl/ngx_devel_kit/tags)

https://codeload.github.com/openresty/lua-nginx-module/tar.gz/v0.9.10 (https://github.com/openresty/lua-nginx-module/tags)

3.安装配置nginx

http://nginx.org/download/nginx-1.4.7.tar.gz   (http://nginx.org/en/download.html)

nginx configue时候,将ngx_devel_kit和lua-nginx-module两个编入到nginx中

然后make 和make install

4.安装成功之后

就可以在nginx.conf的location中嵌入lua代码,相当强大

例如

location /lua {
    set $test "hello, world.";
    content_by_lua '
        ngx.header.content_type = "text/plain";
        ngx.say(ngx.var.test);
    ';
}

5.使用redis

lua解析json格式的数据 http://www.kyne.com.au/~mark/software/lua-cjson.php(默认安装就行)

lua封装redis调用接口,https://github.com/openresty/lua-resty-redis,安装,(并且redis.lua上层目录要有resty,因为require “resty.redis”,看代码,负责会出现找不到库)

nginx.conf如下:

[html] view plaincopy

  1. <span style="font-size:14px;">lua_shared_dict config 1m;  

  2. lua_package_path "/opt/vendor/lua/?.lua;;";//指定redis.lua路径,;;指定默认路径  

  3. init_by_lua_file /usr/local/nginx/html/init.lua;  

  4. server {  

  5.    </span>  

[html] view plaincopy

  1. <span style="font-size:14px;">   lua_code_cache off;//避免lua代码缓存,更改代码执行失效  

  2.    location /lua {  

  3.       content_by_lua_file /usr/local/nginx/html/content.lua;  

  4.    }</span>  

[html] view plaincopy

  1. <span style="font-size:14px;">  

  2. }</span>  



代码init.lua:读取redis配置文件,并且设置共享变量

[html] view plaincopy

  1. <span style="font-size:14px;">local cjson = require "cjson";  

  2. local config = ngx.shared.config;  

  3. local file = io.open("/usr/local/nginx/html/config.json","r");  

  4. local content = cjson.decode(file:read("*all"));  

  5. file:close();  

  6. for name,value in pairs(content) do  

  7.    config:set(name,value);  

  8. end</span>  



代码content.lua 连接redis服务器,进行get和set操作

[html] view plaincopy

  1. <span style="font-size:14px;">ngx.header.content_type = "text/plain";  

  2. local redis = require "resty.redis";  

  3. local config = ngx.shared.config;  

  4. local instance = redis:new();  

  5. local host = config:get("host");  

  6. local port = config:get("port");  

  7. local ok,err = instance:connect(host,port);  

  8. if not ok then  

  9.    ngx.log(ngx.ERR,err);  

  10.    ngx.exit(ngx.HTTP_SERVICE_UNAVAILABLE);  

  11. end  

  12. instance:set("name","gao");  

  13. local name = instance:get("name");  

  14. instance:close()  

  15. ngx.say("name:",name);</span>  



方案二:直接安装openresty nginx,里面已经配置好各种模块,上来直接可以用。


参考文献:

http://huoding.com/2012/08/31/156

https://github.com/openresty/lua-resty-redis

http://wiki.nginx.org/HttpLuaModule

http://openresty.org/


转载于:https://my.oschina.net/epiclight/blog/423162

相关文章:

  • 模拟 2015百度之星资格赛 1003 IP聚合
  • 增值税发票管理解决方案
  • SQL Server利用RowNumber()内置函数与Over关键字实现通用分页存储过程(支持单表或多表结查集分页)...
  • Ubuntu 下 Mysql 新建数据库和用户
  • 运维角度浅谈MySQL数据库优化
  • springmvc常用的组件,注解,跳转
  • Codeforces Round #306 (Div. 2) E. Brackets in Implications 构造
  • ZH奶酪:【数据结构与算法】并查集基础
  • lnmp 在nginx中配置相应的错误页面error_page
  • Android 官方命令深入分析之Android Debug Bridge(adb)
  • 使用cardme读写VCard文件,实现批量导入导出电话簿
  • 使用SQL Server 2008远程链接时SQL数据库不成功的解决方法
  • 做基准测试时tpcc相关注意点
  • 分享一个 ftp下载、解压、更新依赖库文件的 python 脚本
  • wifi的web 认证。
  • [case10]使用RSQL实现端到端的动态查询
  • [译]Python中的类属性与实例属性的区别
  • JS函数式编程 数组部分风格 ES6版
  • k个最大的数及变种小结
  • Python语法速览与机器学习开发环境搭建
  • React-Native - 收藏集 - 掘金
  • Ruby 2.x 源代码分析:扩展 概述
  • SegmentFault 2015 Top Rank
  • win10下安装mysql5.7
  • 创建一个Struts2项目maven 方式
  • 飞驰在Mesos的涡轮引擎上
  • 机器人定位导航技术 激光SLAM与视觉SLAM谁更胜一筹?
  • 简单易用的leetcode开发测试工具(npm)
  • 猫头鹰的深夜翻译:JDK9 NotNullOrElse方法
  • 判断客户端类型,Android,iOS,PC
  • 通过npm或yarn自动生成vue组件
  • 【运维趟坑回忆录 开篇】初入初创, 一脸懵
  • ​TypeScript都不会用,也敢说会前端?
  • ​插件化DPI在商用WIFI中的价值
  • #绘制圆心_R语言——绘制一个诚意满满的圆 祝你2021圆圆满满
  • (02)vite环境变量配置
  • (33)STM32——485实验笔记
  • (JS基础)String 类型
  • (NO.00004)iOS实现打砖块游戏(十二):伸缩自如,我是如意金箍棒(上)!
  • (Redis使用系列) Springboot 使用redis实现接口幂等性拦截 十一
  • (附源码)计算机毕业设计SSM基于java的云顶博客系统
  • (一)RocketMQ初步认识
  • *(长期更新)软考网络工程师学习笔记——Section 22 无线局域网
  • .NET 8.0 发布到 IIS
  • .NET Core 通过 Ef Core 操作 Mysql
  • .NET Framework Client Profile - a Subset of the .NET Framework Redistribution
  • .Net多线程总结
  • /3GB和/USERVA开关
  • /bin/bash^M: bad interpreter: No such file ordirectory
  • @property @synthesize @dynamic 及相关属性作用探究
  • [ MSF使用实例 ] 利用永恒之蓝(MS17-010)漏洞导致windows靶机蓝屏并获取靶机权限
  • []新浪博客如何插入代码(其他博客应该也可以)
  • [2013][note]通过石墨烯调谐用于开关、传感的动态可重构Fano超——
  • [asp.net core]project.json(2)
  • [BZOJ2850]巧克力王国