• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

Mac+nginx+lua+luasocket+cjson

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

1. Lua

// 官方网站 http://www.lua.org/ 下载源码包
//
由于配合 nginx 使用, 所以使用 5.1.X 版本
$ tar xvzf lua-5.1.5.tar.gz
$ cd lua-5.1.5
$ make macosx
$ sudo make install // 一定要 sudo 

------- 下面是安装输出信息 ------

cd src && mkdir -p /usr/local/bin /usr/local/include /usr/local/lib \
/usr/local/man/man1 /usr/local/share/lua/5.1 /usr/local/lib/lua/5.1
cd src && install -p -m 0755 lua luac /usr/local/bin
cd src && install -p -m 0644 lua.h luaconf.h lualib.h lauxlib.h \
../etc/lua.hpp /usr/local/include
cd src && install -p -m 0644 liblua.a /usr/local/lib
cd doc && install -p -m 0644 lua.1 luac.1 /usr/local/man/man1

// 以上就完成了Lua的安装, 一般情况下安装过程不会报错
// 如果报错需要根据报错信息检查是否缺少环境依赖

------- 测试一下 ----
$ lua
lua > print("hello, lua")

// 退出 control + d

 

2. luaJIT

// LuaJIT是一个利用JIT编译技术把Lua脚本直接编译成机器码由CPU运行
// 官方网站 http://luajit.org/download
// 版本 2.0 为稳定版 $ tar xzvf LuaJIT-2.0.2.tar.gz $ cd LuaJIT-2.0.2 $ make $ sudo make install -------- 特别注意 --------- // 声明环境变量, 目的是编译Nginx源码时, 告诉Nginx去哪里找luajit, 具体路径可能不同
// 默认安装路径都在 /usr/local 下
$ export LUAJIT_LIB=/usr/local/lib $ export LUAJIT_INC=/usr/local/include/luajit-2.0

 

3. ngx_devel_kit 和 lua-nginx-module

// 直接去 github 下载 zip文件 解压即可
$ tar xvf ngx_devel_kit-master.zip
$ tar xvf lua-nginx-module-master.zip

// 在之后编辑 nginx 源码时, 需要关联这两个文件夹

 

4. nginx

// 官方网站 http://nginx.org/download/
// 如果 ./configure 出错, 一般提示 pcre not found,跳至第9步
$ tar xvf nginx-1.9.15.tar.gz $ cd nginx-1.9.15 $ ./configure --prefix=/usr/local/nginx --add-module=/绝对路径/ngx_devel_kit-master/ --add-module=/绝对路径/lua-nginx-module-master/ $ make $ make install

 

5. ngnix 的一些操作

// 启动 nginx
$ sudo /usr/local/nginx/sbin/nginx

// 重新加载 nginx
$ sudo /usr/local/nginx/sbin/nginx -s reload

// 检查 nginx 配置文件是否有错
$ sudo /usr/local/nginx/sbin/nginx -t

// 查询 nginx 的工作进程号
$ ps -ef | grep nginx

// 强行停止, 可能会有2个进程号, 同时kill掉
$ sudo kill -9  进程号

 

6. 测试一下 web 服务是否正常

// 访问 nginx 服务
$ curl -I "http://localhost:80"

------ 正常返回以下信息 ------
HTTP/1.1 200 OK
Server: nginx/1.9.15
Date: Wed, 11 May 2016 03:46:57 GMT
Content-Type: text/html
Content-Length: 612
Last-Modified: Tue, 10 May 2016 09:15:43 GMT
Connection: keep-alive
ETag: "5731a6bf-264"
Accept-Ranges: bytes

 

7.创建第一个 nginx 关联 lua 程序, /lua-version

// 配置 /usr/local/nginx/conf/nginx.conf 文件
// 以下是配置的代码片段

server {
        listen       80;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            root   html;
            index  index.html index.htm;
        }

        location /lua-version {
            content_by_lua '
                if jit then
                    ngx.say(jit.version)
                else
                    ngx.say(_VERSION)
                end
            ';
        }

          location /user-aciton { // 导入 lua脚本 的方式
               default_type 'text/plain';
               content_by_lua_file /Users/admin/Developer/workspace/lua/post_user_action.lua;
          }


}

// 访问 /lua-version
$ curl "http://localhost:80/lua-version"
-------- 返回结果 -----
LuaJIT 2.0.4

 

8. LuaSocket

// 官方网站 http://luaforge.net/projects/luasocket/

$ tar -zxvf ./luasocket-2.0.2.tar.gz
$ luasocket-2.0.2
$ make
$ make install

--------------- 安装好之后的环境变量设置 ------------------
// 由于 LuaSocket 模块文件的存放位置不在系统模块加载路径范围内
// 因此需要修改 Lua 的环境变量 LUA_PATH 和 LUA_CPATH
// 来把 LuaSocket 的位置目录添加到系统模块的加载路径上

$ cd
$ vi .profile
$ export LUA_PATH=/usr/local/share/lua/5.1/?.lua\;?.lua
$ export LUA_CPATH=/usr/local/lib/lua/5.1/?.so\;?.so

--------------- 安装是需要修改的地方 -----------------
1.查看2个路基设置是否正确
INSTALL_TOP_SHARE=/usr/local/share/lua/5.1
INSTALL_TOP_LIB=/usr/local/lib/lua/5.1

2.打开 MacOS X 编译的注解
#------
# Compiler and linker settings
# for Mac OS X
#
CC=gcc
DEF= -DLUASOCKET_DEBUG -DUNIX_HAS_SUN_LEN
CFLAGS= $(LUAINC) -I$(COMPAT) $(DEF) -pedantic -Wall -O2 -fno-common
LDFLAGS=-bundle -undefined dynamic_lookup
LD=export MACOSX_DEPLOYMENT_TARGET="10.3"; gcc

关闭默认的 Linux 编译注解

 

 

9. PCRE

// 在编译 nginx、LuaSocket 时, 系统可能提示无法找到 pcre 的错误
// 只要安装即可
// 官方网站 http://www.pcre.org

$ tar xvzf pcre-8.13.tar.gz
$ cd pcre-8.13
$ ./configure
$ make
$ sudo make install

 

10. cjson

// 支持UTF-8,不支持UTF-16和UTF-32。  #没有任何影响。
// 支持Lua-5.1、Lua-5.2、LuaJIT

$ tar -zvxf lua-cjson-2.1.0.tar.gz
$ make
$ sudo make install

// 将生成的cjson.so文件拷贝到/usr/local/lib/lua/5.1下
$ cp cjson.so /usr/local/lib/lua/5.1/

-------- make之前, 修改 Makefile 文件 -----
##### Build defaults #####
LUA_VERSION =       5.1
TARGET =            cjson.so
PREFIX =            /usr/local
#CFLAGS =            -g -Wall -pedantic -fno-inline
CFLAGS =            -O3 -Wall -pedantic -DNDEBUG
CJSON_CFLAGS =      -fpic
#CJSON_LDFLAGS =     -shared
CJSON_LDFLAGS =     -bundle -undefined dynamic_lookup
#LUA_INCLUDE_DIR =   $(PREFIX)/include
LUA_INCLUDE_DIR =   $(PREFIX)/include/include/luajit-2.0/
#LUA_CMODULE_DIR =   $(PREFIX)/lib/lua/$(LUA_VERSION)
LUA_CMODULE_DIR =   $(PREFIX)/lib
#LUA_MODULE_DIR =    $(PREFIX)/share/lua/$(LUA_VERSION)
LUA_MODULE_DIR =    $(PREFIX)/share/luajit-2.0.4/
LUA_BIN_DIR =       $(PREFIX)/bin

 

LuaSocket http 请求示例

local http=require("socket.http");
local ltn12 = require("ltn12");
module = {}


function module.postHttp( targerUrl, tableName, tableContent )
    local response_body = {};
    local params = "appid=553519&table_name="..tableName.."&table_content="..tableContent
    ngx.say("params: "..params);

    res, code,  response_headers = http.request 
    {
        url = targerUrl,
        method = "POST",
        headers = 
        {
            ["Content-Type"] = "application/x-www-form-urlencoded",
            ["Content-Length"] = string.len(params)
        },
        source = ltn12.source.string(params),
        sink = ltn12.sink.table(response_body) 
    }

    
    return response_body;
end


function module.getHttp( targerUrl )
    local response_body = {};
    local res, code = http.request({
            url = targerUrl,
            sink = ltn12.sink.table(response_body)  
        })

    return response_body;
end

return module;

--------- 打印 response_body 的方法 ---------
local re = table.concat(response_body);

 

 

Lua + web 脚本示例, 接收 GET 参数

local request_method = ngx.var.request_method
-- 定义头
ngx.header.content_type = "application/json";

-- 接收穿过来的参数
local args = nil


if "GET" == request_method then
    args = ngx.req.get_uri_args();
end

local video_id = nil;
local num = nil;

if args ~= nil and args["user_id"] ~= nil and args["pwd"] ~= nil then
    video_id = tonumber(args["user_id"]);
    num = tonumber(args["pwd"]);
else
    ngx.log(ngx.INFO, "提示: ", "params参数有nil值, 参数错误");
end

-------- GET 访问方法 --------
http://localhost:80/user?user_id=123&pwd=999
 

 

Lua + web 脚本示例, 接收 POST 参数

local request_method = ngx.var.request_method
ngx.header.content_type = "application/json";

if "POST" == request_method then
    ngx.req.read_body()
    args = ngx.req.get_post_args()
end

if args ~= nil and args["user_id"] ~= nil and args["pwd"] ~= nil  then
    user_id = args["user_id"];
    video_id = args["pwd"];
else
    --ngx.say("参数传入错误");
    ngx.log(ngx.INFO, "提示: ", "params参数有nil值, 参数错误");
end

-------- POST 访问方法 --------
http://localhost:80/user
user_id:123
pwd:999

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
nginx使用luawaf防火墙来做防CC配置发布时间:2022-07-22
下一篇:
Lua语法发布时间:2022-07-22
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap