1. Lua

// 官方网站 http://www.lua.org/ 下载源码包
// 由于配合 nginx 使用, 所以使用 5.1.X 版本
$ tar xvzf lua-5.1..tar.gz
$ cd lua-5.1.
$ 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..tar.gz
$ cd LuaJIT-2.0.
$ 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..tar.gz
$ cd nginx-1.9.
$ ./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 - 进程号

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

// 访问 nginx 服务
$ curl -I "http://localhost:80" ------ 正常返回以下信息 ------
HTTP/1.1 OK
Server: nginx/1.9.
Date: Wed, May :: GMT
Content-Type: text/html
Content-Length:
Last-Modified: Tue, May :: GMT
Connection: keep-alive
ETag: "5731a6bf-264"
Accept-Ranges: bytes

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

// 配置 /usr/local/nginx/conf/nginx.conf 文件
// 以下是配置的代码片段 server {
listen ;
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..tar.gz
$ luasocket-2.0.
$ 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 --------------- 安装是需要修改的地方 -----------------
.查看2个路基设置是否正确
INSTALL_TOP_SHARE=/usr/local/share/lua/5.1
INSTALL_TOP_LIB=/usr/local/lib/lua/5.1 .打开 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..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./
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:/user
user_id:
pwd:

Mac + nginx + lua + luasocket + cjson的更多相关文章

  1. Nginx+lua+openresty精简系列

    1. CentOS系统安装openresty 你可以在你的 CentOS 系统中添加 openresty 仓库,这样就可以便于未来安装或更新我们的软件包(通过 yum update 命令).运行下面的 ...

  2. 单机闭环 使用Nginx+Lua开发高性能Web应用

    [西域骆驼D1532101213]西域骆驼(VANCAMEL)D1532101213 休闲套脚鞋 卡其43[行情 报价 价格 评测]-京东 http://item.jd.com/1856564.htm ...

  3. 用Nginx+Lua(OpenResty)开发高性能Web应用

    在互联网公司,Nginx可以说是标配组件,但是主要场景还是负载均衡.反向代理.代理缓存.限流等场景:而把Nginx作为一个Web容器使用的还不是那么广泛.Nginx的高性能是大家公认的,而Nginx开 ...

  4. OpenResty(nginx+lua) 入门

    OpenResty 官网:http://openresty.org/ OpenResty 是一个nginx和它的各种三方模块的一个打包而成的软件平台.最重要的一点是它将lua/luajit打包了进来, ...

  5. Nginx+Lua(OpenResty)开发高性能Web应用

    使用Nginx+Lua(OpenResty)开发高性能Web应用 博客分类: 跟我学Nginx+Lua开发 架构 ngx_luaopenresty 在互联网公司,Nginx可以说是标配组件,但是主要场 ...

  6. nginx+lua+redis初体验

    1.下载nginx.lua.redis nginx下载地址 wget  http://nginx.org/download/nginx-1.8.0.tar.gz lua下载地址 wget http:/ ...

  7. 使用Nginx+Lua(OpenResty)开发高性能Web应用

    摘自(http://jinnianshilongnian.iteye.com/blog/2280928) 在互联网公司,Nginx可以说是标配组件,但是主要场景还是负载均衡.反向代理.代理缓存.限流等 ...

  8. 基于nginx+lua+redis高性能api应用实践

    基于nginx+lua+redis高性能api应用实践 前言 比较传统的服务端程序(PHP.FAST CGI等),大多都是通过每产生一个请求,都会有一个进程与之相对应,请求处理完毕后相关进程自动释放. ...

  9. 【精选】Nginx模块Lua-Nginx-Module学习笔记(一)Nginx Lua API 接口详解

    源码地址:https://github.com/Tinywan/Lua-Nginx-Redis 一.介绍 各种* _by_lua,* _by_lua_block和* _by_lua_file配置指令用 ...

随机推荐

  1. Win7下Redmine2.0.3+Mysql55+Ruby1.8.7成功安装记录分享

    准备软件: Ruby 下载网页: http://rubyforge.org/frs/?group_id=167&release_id=46836 http://files.rubyforge. ...

  2. 谈谈Oracle dba_free_space

    谈谈Oracle dba_free_space 博客分类: ORACLE管理 OracleSQLC#C++C  顾名思义,dba_free_space指的是Oracle还有多少表空间剩余空间,其视图结 ...

  3. DDD(领域驱动设计)应对具体业务场景,如何聚焦 Domain Model(领域模型)?

    DDD(领域驱动设计)应对具体业务场景,如何聚焦 Domain Model(领域模型)? 阅读目录: 问题根源是什么? <领域驱动设计-软件核心复杂性应对之道>分层概念 Repositor ...

  4. Web面试之JQuery

    程序员Web面试之JQuery   又到了一年一度的毕业季了,青春散场,却等待下一场开幕. 在求职大军中,IT行业的程序员.码农是工科类大学生的热门选择之一, 尤其是近几年Web的如火如荼,更是吸引了 ...

  5. Julia语言:让高性能科学计算人人可用

    Julia语言:让高性能科学计算人人可用要:一群科学家对现有计算工具感到不满:他们想要一套开源系统,有C的快速,Ruby的动态,Python的通用,R般在统计分析上得心应手,Perl的处理字符串处理, ...

  6. Vijos:P1001谁拿了最多奖学金

    描述 某校的惯例是在每学期的期末考试之后发放奖学金.发放的奖学金共有五种,获取的条件各自不同: 1) 院士奖学金,每人8000元,期末平均成绩高于80分(>80),并且在本学期内发表1篇或1篇以 ...

  7. 后台XML处理

    public void GetInfo()     {         string message = @"<?xml version='1.0' encoding='utf-8' ...

  8. tar命令,重定向,正则表达式,添加删除用户,tr命令,sort排序

    rpm包仅用于 redhat suse redflag 若是源代码包的话,那就都适用linux下面的备份,差不多就是用tar打包 tar命令用途:制作归档文件,释放归档文件格式:tar [选项]... ...

  9. 超详细LAMP环境搭建

    一.准备工作 1.安装编译工具gcc.gcc-c++ 注意解决依赖关系,推荐使用yum安装,若不能联网可使用安装光盘做为yum源—— 1)编辑yum配置文件: # mount /dev/cdrom / ...

  10. (Python学习9)Python虚拟机中的一般表达式

    1.准备工作 执行.py程序时,Python解释器对PyCodeObject的co_code存储的字节码进行解释执行,同时co_consts存储了常量,co_names存储了变量名称.用compile ...