nginx + lua环境搭建

Lua 是一个小巧的脚本语言。该语言的设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。
Lua脚本可以很容易的被C/C++代码调用,也可以反过来调用C/C++的函数,这使得Lua在应用程序中可以被广泛应用。
不仅仅作为扩展脚本,也可以作为普通的配置文件,代替XML,Ini等文件格式,并且更容易理解和维护。


直接使用官方的nginx + lua_nginx_module 比较麻烦,本文介绍两种nginx+lua的环境搭建
系统环境:CentOS release 6.6 x64

CentOS上面需要先安装如下依赖:yum install openssl openssl-devel curl curl-devel zlib zlib-devel pcre pcre-devel lua lua-devel

CentOS6.6 默认安装的lua版本是:Lua 5.1.4


方法一:直接使用tengine

安装步骤如下:

wget http://tengine.taobao.org/download/tengine-2.1.2.tar.gz

tar -xvf tengine-2.1.2.tar.gz

cd tengine-2.1.2

./configure --prefix=/usr/local/tengine --with-http_lua_module

make

make install 

这样,就安装好了。

然后,vim /usr/local/tengine/conf/nginx.conf

加入如下代码

location /lua {
       default_type text/plain;
       content_by_lua 'ngx.say("hello world lua")';
}
最后,启动tengine

访问http://127.0.0.1/lua    

页面出现hello world lua ,表示安装成功


方法二:使用OpenResty

OpenResty 是一个基于 Nginx 与 Lua 的高性能 Web 平台,其内部集成了大量精良的 Lua 库、第三方模块以及大多数的依赖项。用于方便地搭建能够处理超高并发、扩展性极高的动态 Web 应用、Web 服务和动态网关。

官方网站:https://openresty.org/en/

安装文档:https://openresty.org/en/installation.html

安装步骤:

wget https://openresty.org/download/ngx_openresty-1.9.7.2.tar.gz

tar -xvf ngx_openresty-1.9.7.2.tar.gz

cd ngx_openresty-1.9.7.2

./configure --prefix=/usr/local/openresty  (默认集成了lua环境)

gmake

gmake install

这样,就安装好了。

然后 vim /usr/local/openresty/nginx/conf/nginx.conf

加入如下代码:

location /lua {
       default_type text/plain;
       content_by_lua 'ngx.say("hello world lua")';
}
最后,执行 /usr/local/openresty/nginx/sbin/nginx 启动nginx

访问http://127.0.0.1/lua    

页面出现hello world lua ,表示安装成功


我们把lua代码放在nginx配置中会随着lua的代码的增加导致配置文件太长不好维护,因此我们应该把lua代码移到外部文件中存储。

nginx + lua简单使用示例

1:vim /lua/test.lua

内容如下:

ngx.say("hello world");

修改nginx.conf,添加如下内容

location /luafile {  
    default_type 'text/html';  
    content_by_lua_file /lua/test.lua;
}
然后访问/luafile 即可看到效果

默认情况下lua_code_cache  是开启的,即缓存lua代码,即每次lua代码变更必须reload nginx才生效,如果在开发阶段可以通过lua_code_cache  off;关闭缓存,这样调试时每次修改lua代码不需要reload nginx;

开启后reload nginx会看到如下报警
nginx: [alert] lua_code_cache is off; this will hurt performance in /usr/local/openresty/nginx/conf/nginx.conf:54

下面是一个使用lua获取http请求数据的例子 vim /lua/info.lua

--请求头  
local headers = ngx.req.get_headers()
ngx.say("<p>请求头信息</p>")
ngx.say("<p>Host : ", headers["Host"], "</p>")
ngx.say("<p>user-agent : ", headers["user-agent"], "</p>")
ngx.say("<p>user-agent2 : ", headers.user_agent, "</p>")
--GET请求参数
local uri_args = ngx.req.get_uri_args()
ngx.say("<p>GET请求参数</p>")
ngx.say("<p>id : ", uri_args["id"], "</p>")
ngx.say("<p>type : ", uri_args["type"], "</p>")
--POST请求参数  
ngx.req.read_body()
local post_args = ngx.req.get_post_args()
ngx.say("<p>POST请求参数</p>")
ngx.say("<p>username : ", post_args["username"], "</p>")
ngx.say("<p>password : ", post_args["password"], "</p>")
--获取其他请求信息
ngx.say("<p>获取其他请求信息</p>")
ngx.say("<p>request_uri : ", ngx.var.request_uri, "</p>")
ngx.say("<p>请求的http协议版本 : ", ngx.req.http_version(), "</p>")
ngx.say("<p>请求方法  : ", ngx.req.get_method(), "</p>")
ngx.say("<p>原始的请求头内容 : ",  ngx.req.raw_header(), "</p>")
ngx.say("<p>请求的body内容体 : ", ngx.req.get_body_data(), "</p>")

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Docker是一种容器化技术,它可以将应用程序及其依赖项打包成容器,提供了快速、轻量级和可移植的环境。Nginx是一个高性能的Web服务器和反向代理服务器,它可以处理大量的并发连接。Lua是一种轻量级的脚本语言,可以嵌入到Nginx中,用于定制化和扩展性能。Redis是一个高性能的内存键值存储系统,它支持多种数据结构,并提供了持久化功能。 将这些技术结合起来,可以构建一个高性能、可扩展和可靠的Web应用系统。首先,我们可以使用Docker来创建一个包含NginxLua和Redis的容器环境。Nginx可以作为Web服务器,将用户请求转发到不同的后端服务,并通过使用Lua脚本来增加自定义的功能和处理逻辑。Redis可以作为Nginx的缓存数据库,存储一些频繁使用的数据,以提高系统的响应速度和性能。 使用Docker可以快速部署整个系统,并且容器之间相互隔离,避免了环境依赖和冲突的问题。同时,通过Docker的容器编排工具,我们可以管理和扩展应用程序的实例数量,以满足流量的需求。此外,Docker还能够自动完成部署、升级和回滚等操作,提高了系统的可靠性和可维护性。 总的来说,使用Docker、NginxLua和Redis可以搭建一个高性能、可伸缩和可靠的Web应用系统。这个系统能够提供快速的响应速度、高并发处理能力,并且具备良好的可扩展性和可维护性。同时,通过使用容器化技术,我们可以更简单地部署和管理整个应用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值