openresty安装nginx和lua以及lua调用

2 篇文章 0 订阅
2 篇文章 0 订阅

openresty安装nginx和lua以及lua调用

用过nginx的人都知道,nginx用起来比较顺手也有很多的特性。但是在nginx上开发却成了一个很大的难点,因为Nginx模块的开发涉及到C语言,而且必须符合一系列复杂的规则,这就要求开发者必须非常熟悉Nginx的源代码,而且开发的C模块必须与源代码完美契合,这使得许多开发者望而生畏。openresty的产生为我们解决了这个难题,openresty允许我们借助lua来开发nginx,这使得开发nginx的难度大大降低。接下来给大家介绍一下openresty的安装以及怎样通过lua开发nginx。

安装pcre

mkdir /usr/local/openresty
cd /usr/local/openresty
wget http://downloads.sourceforge.net/project/pcre/pcre/8.35/pcre-8.35.tar.gz
注:(没有wget的要先安装wget)yum install wget
tar -zxvf pcre-8.35.tar.gz
cd /usr/local/openresty/pcre-8.35
yum install -y gcc gcc-c++
./configure
make && make install
cd /usr/local/openresty

安装openresty

yum install -y readline-devel pcre-devel openssl-devel gcc
wget http://openresty.org/download/ngx_openresty-1.7.7.2.tar.gz
tar -zxvf ngx_openresty-1.7.7.2.tar.gz

cd /usr/local/openresty/ngx_openresty-1.7.7.2/bundle/LuaJIT-2.1-20150120/
make clean && make && make install
ln -sf luajit-2.1.0-alpha /usr/local/bin/luajit

cd /usr/local/openresty/ngx_openresty-1.7.7.2/bundle/
wget https://github.com/FRiCKLE/ngx_cache_purge/archive/2.3.tar.gz
tar -zxvf 2.3.tar.gz

wget https://github.com/yaoweibin/nginx_upstream_check_module/archive/v0.3.0.tar.gz
tar -zxvf v0.3.0.tar.gz
cd /usr/local/openresty/ngx_openresty-1.7.7.2

./configure --prefix=/usr/local/openresty --with-http_realip_module --with-pcre --with-luajit --add-module=./bundle/ngx_cache_purge-2.3/ --add-module=./bundle/nginx_upstream_check_module-0.3.0/ -j2 --with-http_iconv_module --with-http_postgres_module --with-pcre-jit --with-pcre=../pcre-8.35

问题:
./configure: error: ngx_postgres addon was unable to detect version of the libpq library
解决:
yum install postgresql-devel

gmake && gmake install
cd /usr/local/openresty 可以查看到bin luajit lualib nginx等

部署实例一

cd /usr
mkdir -p /usr/hello/lua
cd /usr/hello/lua
vi hello.lua

ngx.say("hello world,this is slave1");

调用lua方式一

cd /usr/hello

vi hello.conf

server {
    listen 80;
    server_name  192.168.9.22; #自己的IP或域名
    location /hello {
        default_type 'text/html';
        content_by_lua_file /usr/hello/lua/hello.lua;
    }
}

cd /usr/local/openresty/nginx/conf
vi nginx.conf
在 http{
}中加入
lua_package_path “/usr/hello/lualib/?.lau;;”;
lua_package_cpath “/usr/hello/lualib/?.so;;”;
include /usr/hello/hello.conf;
cp -rf /usr/local/openresty/lualib /usr/hello/

调用lua方式二
cd /usr/local/openresty/nginx/conf
vi nginx.conf

server{
    listen 80;
    server_name  192.168.9.22; #自己的IP或域名
    # charset koi8-r;
    # access_log  logs/host.access.log  main;
    location /test{
             default_type 'text/html';
             # lua_code_cache off;
             content_by_lua_file / usr / hello / lua / hell.lua;
    }

    error_page 500 502 503 504 / 50x.html;
    location = / 50x.html{
    root html;
    }
}

cd /usr/local/openresty/nginx/sbin
./nginx 回车
更改nginx配置后需要重新加载,命令为 ./nginx -s reload

部署实例二

调用lua的cjson库
编写测试lua test_cjson.lua
cd /usr/hello/lua/
vi lua test_cjson.lua

local cjson = require("cjson")  

--lua对象到字符串  
local obj = {  
    id = 1,  
    name = "zhangsan",  
    age = nil,  
    is_male = false,  
    hobby = {"film", "music", "read"}  
}  

local str = cjson.encode(obj)  
ngx.say(str, "<br/>")  

--字符串到lua对象  
str = '{"hobby":["film","music","read"],"is_male":false,"name":"zhangsan","id":1,"age":null}'  
local obj = cjson.decode(str)  

ngx.say(obj.age, "<br/>")  
ngx.say(obj.age == nil, "<br/>")  
ngx.say(obj.age == cjson.null, "<br/>")  
ngx.say(obj.hobby[1], "<br/>")  


--循环引用  
obj = {  
   id = 1  
}  
obj.obj = obj  
-- Cannot serialise, excessive nesting  
--ngx.say(cjson.encode(obj), "<br/>")  
local cjson_safe = require("cjson.safe")  
--nil  
ngx.say(cjson_safe.encode(obj), "<br/>") 

cd /usr/local/openresty/nginx/conf
vi nginx.conf

server{
    listen 80;
    server_name  192.168.9.22;  #自己的IP或域名
    # charset koi8-r;
    # access_log  logs/host.access.log  main;
    location / test{
             default_type 'text/html';
             # lua_code_cache off;
             content_by_lua_file / usr / hello / lua / test_cjson.lua;
    }

    error_page 500 502 503 504 / 50x.html;
    location = / 50x.html{
    root html;
    }
}

./nginx -s reload
浏览器中输入:http://192.168.9.22:80/test 查看

注:该篇文章借鉴了其他两位博主的文章的基础上对存在一些比较模糊的地方予以修改。目的一是为后期自己使用方便,二是帮助需要的人,如有更好的方式或问题请留言。
原链接:https://blog.csdn.net/simba_1986/article/details/78452808
原链接:https://blog.csdn.net/u013412772/article/details/78996849 关于lua 的JSON库、编码转换、字符串处理的该博客比较详细

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: OpenResty 是基于 Nginx 之上的一个高性能 Web 平台,它包含了大量精心挑选的三方模块,组成了一个完整的增强版 NginxOpenResty 能够让开发者使用 Lua 脚本来扩展 Nginx 功能,使其轻松地支持许多动态功能,比如负载均衡、内存缓存等。 Nginx 是一款轻量级的 Web 服务器,具有很好的性能和资源占用率。它的特点是高性能、低资源占用、高并发。Nginx 可以用来作为反向代理服务器,负载均衡服务器以及 HTTP 缓存服务器。 总的来说,Nginx 是一款高性能的 Web 服务器,而 OpenResty 则是在 Nginx 之上添加了大量功能和模块,提供了一个完整的 Web 平台,支持使用 Lua 脚本来扩展 Nginx 的功能。 ### 回答2: OpenResty是基于Nginx的一个开放源代码的软件包,它主要是为了方便开发人员在Nginx上构建高性能的Web应用和网站。下面是OpenRestyNginx之间的一些主要区别。 1. 功能差异:OpenRestyNginx基础上增加了很多额外的功能。它包含了一套用于编写动态内容、执行复杂处理逻辑的LuaJIT编程接口。这意味着开发人员可以使用Lua语言来扩展和定制Nginx的功能。 2. 高性能:OpenResty借助Nginx的高性能和可扩展性,能够处理大量并发请求。它通过将业务逻辑编写为Lua脚本,将其直接嵌入到Nginx的事件处理流程中,从而提高了性能和响应速度。 3. 生态系统:OpenResty基于Nginx的开发模式,拥有丰富的生态系统。开发者可以使用众多的第三方模块和插件,以及Lua和框架来简化开发过程。这使得OpenResty能够更容易地构建出功能强大且高性能的Web应用和服务。 4. 配置和管理:OpenRestyNginx一样,具有相似的配置和管理方式。通过简单的编辑配置文件,开发人员可以定义服务器的行为和路由规则。 总的来说,OpenResty是在Nginx的基础上扩展而来的,它提供了更丰富的功能和性能优势,使得开发人员能够更加灵活和高效地构建和部署Web应用和服务。 ### 回答3: OpenRestyNginx是两个不同的软件项目,但OpenResty实际上是在Nginx的基础上进行的增强和扩展。 Nginx是一个高性能的开源Web服务器和反向代理服务器。它的主要用途是处理静态文件、代理请求和负载均衡。Nginx还支持基于事件驱动的非阻塞I/O模型,这使得它具有出色的性能和可伸缩性。 OpenResty是一个基于Nginx的Web服务器扩展平台,它将NginxLua编程语言集成在一起,为开发者提供了一种更灵活的方式来扩展和定制服务器功能。通过使用Lua脚本,开发者可以添加自定义的功能模块,如动态内容生成、访问控制、缓存、API代理等。 因此,OpenResty可以看作是在Nginx上增加了lua-nginx-module模块,以便更好地支持脚本编程和动态内容生成。OpenResty还提供了一些额外的工具和插件,用于监控和调试Nginx服务器,以及便于开发者的使用和维护。 总而言之,OpenResty是在Nginx的基础上提供了更丰富的功能和灵活性,使开发者能够更方便地定制和扩展服务器功能。它是一种强大的工具,可以用于构建高性能的Web应用程序和服务。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值