MyException - 我的异常网
当前位置:我的异常网» Linux/Unix » 1. nginx扩充——ngx_lua 模块简介、安装

1. nginx扩充——ngx_lua 模块简介、安装

www.MyException.Cn  网友分享于:2013-09-28  浏览:0次
1. nginx扩展——ngx_lua 模块简介、安装

1. 简介

​ lua-nginx-module(ngx_lua module)把 Lua5.1 的解释器 或 LuaJIT 2.0/2.1 的解释器嵌入到 nginx 中,将强大的 Lua 线程(Lua threads)与 nginx 事务模型(Nginx event model)相结合,我们可以更轻易的改变 子请求(subrequests)的处理过程。

​ 与 Apache's mod_luaLighttpd's mod_magnet 不同,通过此模块执行的 Lua 代码是非阻塞的,同时此模块提供的 Nginx API for Lua 可以处理上游服务,比如 MySQL, PostgreSQL, Memcached, Redis, upstream HTTP web services。

​ ngx_lua 可以与下面的 Lua 库、nginx 模块结合:

​ 通过 ngx.location.capturengx.location.capture_multi 的方式, ngx_lua 可以使用几乎所有的 nginx 模块。推荐使用 lua-resty-*库的方式访问 nginx 的上游模块,而不是创建子请求的方式,使用前者会更灵活、更有效的使用内存。

  在 nginx 的一个 worker 里,所有请求共享一个Lua 解释器或 LuaJIT 实例,即一个 nginx worker,一个 Lua 解释器或 LuaJIT 实例。每个请求的上下文(context)是通过轻量级的 Lua 协程(coroutines)相互隔离的。

  加载的 Lua 模块驻留在 nginx worker 进程级别,这样在负载很高的情况下,Lua 本身只是用了很低的内存。

  由于此模块是 nginx “http” 系统的插件,所以只能以 HTTP 协议族的方式(HTTP 0.9/1.0/1.1/2.0,WebSocket)与下游通信。如果想使用 TCP 通信,可以使用与 Lua API 兼容的 ngx_stream_lua

2. 使用场景

  • 使用 Lua 处理或混合 nginx 上游的各种输出;
  • 在请求到达 nginx 上游之前,使用 Lua 进行复杂的访问控制,安全检查;
  • 使用 Lua 操作请求的响应头;
  • ​从外部存储(redis、memcached、mysql...)获取信息来动态决定访问哪一个上游;
  • ​以非阻塞的方式从存储中获取信息生成复杂的Web 应用内容
  • ​使用Lua 在 重定向阶段(rewrite phase)进行复杂的 URL 路由
  • ​使用 Lua 实现 nginx 子请求或 location 模块的高级缓存机制;
  • ​...

  ngx_lua 即提供了脚本的灵活性,又有与 C 语言可比肩的性能(CPU ,内存)——需要启用 LuaJIT2.x。

3. 与 nginx 的兼容性

 ngx_lua 模块的最新版本兼容以下的 nginx:

  • 1.11.x (last tested: 1.11.2)
  • 1.10.x
  • 1.9.x (last tested: 1.9.15)
  • 1.8.x
  • 1.7.x (last tested: 1.7.10)
  • 1.6.x

4. 安装

​ 推荐使用 OpenResty releases 的发行版(整合了 nginx,ngx_lua ,LuaJIT 2.1 还有其他强大的 nginx 模块 和 Lua 库)

4.1 Ubuntu 安装 Openresty 的发行版

在 Ubuntu系统中添加 Openresty 的 APT 仓库,以便于安装或更新

# 导入 Openresty 的 GPG 密钥:
wget -qO - https://openresty.org/package/pubkey.gpg | sudo apt-key add -

# 安装 add-apt-repository 命令
# (之后可以删除这个包以及对应的关联包)
sudo apt-get -y install software-properties-common

# 添加官方 official APT 仓库:
sudo add-apt-repository -y "deb http://openresty.org/package/ubuntu $(lsb_release -sc) main"

# 更新 APT 索引:
sudo apt-get update

# 安装
sudo apt-get install openresty

#这个包同时也推荐安装 openresty-opm 和 openresty-restydoc 包,所以后面两个包会缺省安装上。 如果不想自动关联安装,可以用下面方法关闭自动关联安装:
#sudo apt-get install --no-install-recommends openresty

4.2 Debian Jessie 及以上

与 Ubuntu相似,注意不同点 :

    # 导入 GPG 密钥:
    wget -qO - https://openresty.org/package/pubkey.gpg | sudo apt-key add -

    # 安装 add-apt-repository 命令
    # (之后你可以删除这个包以及对应的关联包)
    sudo apt-get -y install software-properties-common

    # 添加我们官方 official APT 仓库: (与 Ubuntu 不同)
    sudo add-apt-repository -y "deb http://openresty.org/package/debian $(lsb_release -sc) openresty"

    # 更新 APT 索引:
    sudo apt-get update

    # 然后就可以像下面这样安装软件包,比如 openresty:

    sudo apt-get install openresty

    # 这个包同时也推荐安装 openresty-opm 和 openresty-restydoc 包,所以后面两个包会缺省安装上。 如果你不想自动关联安装,可以用下面方法关闭自动关联安装:

    sudo apt-get install --no-install-recommends openresty

4.3 Debian Wheezy

    # 导入 GPG 密钥:
    wget -qO - https://openresty.org/package/pubkey.gpg | sudo apt-key add -

    # 安装 add-apt-repository 命令:(与其他版本不同)
    # (之后你可以删除这个包以及对应的关联包)
    sudo apt-get -y install python-software-properties

    # 打开 wheezy-backports 仓库:
    sudo add-apt-repository -y "deb http://ftp.debian.org/debian wheezy-backports main"

    # 添加官方 APT 仓库
    sudo add-apt-repository -y "deb http://openresty.org/package/debian $(lsb_release -sc) openresty"

    # 更新 APT 索引:
    sudo apt-get update

    # 然后就可以像下面这样安装包了,比如装 openresty:

    sudo apt-get install openresty

    # 这个包同时也推荐安装 openresty-opm 和 openresty-restydoc 包,所以后面两个包会缺省安装上。 如果你不想自动关联安装,可以用下面方法关闭自动关联安装:

    sudo apt-get install --no-install-recommends openresty

4.4 Centos

    # 下面的命令就可以添加仓库:
    sudo yum install yum-utils
    sudo yum-config-manager --add-repo https://openresty.org/package/centos/openresty.repo

    # 然后就可以像下面这样安装软件包,比如 openresty:

    sudo yum install openresty

    # 如果你想安装命令行工具 resty,那么可以像下面这样安装 openresty-resty 包:

    sudo yum install openresty-resty

    # 命令行工具 opm 在 openresty-opm 包里,而 restydoc 工具在 openresty-doc 包里头。

    # 列出所有 openresty 仓库里头的软件包:

    sudo yum --disablerepo="*" --enablerepo="openresty" list available

4.5 其他版本操作系统

参考官方文档

文章评论

代码女神横空出世
代码女神横空出世
“肮脏的”IT工作排行榜
“肮脏的”IT工作排行榜
 程序员的样子
程序员的样子
程序猿的崛起——Growth Hacker
程序猿的崛起——Growth Hacker
程序员周末都喜欢做什么?
程序员周末都喜欢做什么?
写给自己也写给你 自己到底该何去何从
写给自己也写给你 自己到底该何去何从
科技史上最臭名昭著的13大罪犯
科技史上最臭名昭著的13大罪犯
亲爱的项目经理,我恨你
亲爱的项目经理,我恨你
一个程序员的时间管理
一个程序员的时间管理
程序员都该阅读的书
程序员都该阅读的书
十大编程算法助程序员走上高手之路
十大编程算法助程序员走上高手之路
10个帮程序员减压放松的网站
10个帮程序员减压放松的网站
要嫁就嫁程序猿—钱多话少死的早
要嫁就嫁程序猿—钱多话少死的早
那些争议最大的编程观点
那些争议最大的编程观点
看13位CEO、创始人和高管如何提高工作效率
看13位CEO、创始人和高管如何提高工作效率
2013年中国软件开发者薪资调查报告
2013年中国软件开发者薪资调查报告
程序员的一天:一寸光阴一寸金
程序员的一天:一寸光阴一寸金
程序员必看的十大电影
程序员必看的十大电影
我是如何打败拖延症的
我是如何打败拖延症的
Google伦敦新总部 犹如星级庄园
Google伦敦新总部 犹如星级庄园
总结2014中国互联网十大段子
总结2014中国互联网十大段子
Web开发者需具备的8个好习惯
Web开发者需具备的8个好习惯
当下全球最炙手可热的八位少年创业者
当下全球最炙手可热的八位少年创业者
程序员应该关注的一些事儿
程序员应该关注的一些事儿
旅行,写作,编程
旅行,写作,编程
每天工作4小时的程序员
每天工作4小时的程序员
Java 与 .NET 的平台发展之争
Java 与 .NET 的平台发展之争
5款最佳正则表达式编辑调试器
5款最佳正则表达式编辑调试器
老美怎么看待阿里赴美上市
老美怎么看待阿里赴美上市
什么才是优秀的用户界面设计
什么才是优秀的用户界面设计
2013年美国开发者薪资调查报告
2013年美国开发者薪资调查报告
程序员和编码员之间的区别
程序员和编码员之间的区别
我的丈夫是个程序员
我的丈夫是个程序员
我跳槽是因为他们的显示器更大
我跳槽是因为他们的显示器更大
漫画:程序员的工作
漫画:程序员的工作
老程序员的下场
老程序员的下场
初级 vs 高级开发者 哪个性价比更高?
初级 vs 高级开发者 哪个性价比更高?
聊聊HTTPS和SSL/TLS协议
聊聊HTTPS和SSL/TLS协议
“懒”出效率是程序员的美德
“懒”出效率是程序员的美德
10个调试和排错的小建议
10个调试和排错的小建议
如何成为一名黑客
如何成为一名黑客
为什么程序员都是夜猫子
为什么程序员都是夜猫子
为啥Android手机总会越用越慢?
为啥Android手机总会越用越慢?
鲜为人知的编程真相
鲜为人知的编程真相
程序员最害怕的5件事 你中招了吗?
程序员最害怕的5件事 你中招了吗?
那些性感的让人尖叫的程序员
那些性感的让人尖叫的程序员
做程序猿的老婆应该注意的一些事情
做程序猿的老婆应该注意的一些事情
Java程序员必看电影
Java程序员必看电影
程序员的鄙视链
程序员的鄙视链
软件开发程序错误异常ExceptionCopyright © 2009-2015 MyException 版权所有