OpenResty 它打包了标准的 Nginx 核心,很多的常用的第三方模块,以及它们的大多数依赖项。
如果需要nginx的第三方库的时候,可以考虑OpenResty,可以少掉很多安装的麻烦,OpenResty基本上安装了常用的nginx第三方库。
OpenResty的安装:
安装nginx 中 rewrite模块等需要的插件:
apt-get install libreadline-dev libpcre3-dev libssl-dev perl build-essential
下载最新版的OpenResty
http://openresty.org/
wget http://openresty.org/download/ngx_openresty-1.2.7.1.tar.gz
tar -xvf nngx_openresty-1.2.7.1.tar.gz
mv nngx_openresty-1.2.7.1 /usr/local/openresty-1.2.7.1
cd openresty-1.2.7.1
./configure --with-luajit --prefix=/usr/local/openresty
make & make install
这样基本就可以把nginx基本的第三方库安装进去
在/to/nginx/conf 下修改配置文件nginx.config
location /hello {
default_type 'text/plain';
content_by_lua 'ngx.say("hello, lua")';
}
/to/nginx/sbin/nginx #启动nginx
或者/to/nginx/sbin/nginx –s reload #重启nginx
访问localhost/hello
会出现“hello,lua”
对于访问接口的统一有很多的处理方式,这里介绍使用nginx lua 访问mysql并用memcache缓存起来。
location/getXxxInfo {
default_type'text/plain';
content_by_lua'--先从memcache提取数据
local args=ngx.req.get_uri_args()ifargs["appleid"]==nil thenreturnend
local memcached=require"resty.memcached"local memc, err=memcached:new()ifnot memc then
ngx.say("failed to instantiate memc:", err)returnend
memc:set_timeout(1000)--1sec
local ok, err=memc:connect("192.168.40.xxx",11211)ifnot ok then
ngx.say("failed to connect:", err)returnend
local res, flags, err=memc:get(args["appleid"] )iferr then
ngx.say("failed to get dog:", err)returnend--数据不在memcache中 从数据库提取并放到memcacheifnot res then
local mysql=require"resty.mysql"local db, err=mysql:new()ifnot db then
ngx.say("failed to instantiate mysql:", err)returnend
db:set_timeout(1000)--1sec
local ok, err, errno, sqlstate=db:connect{
host="xxx.xxx.xx.xxx",
port=3306,
database="xxxx",
user="root",
password="xxxx",
max_packet_size=1024*1024}ifnot ok then
ngx.say("failed to connect:", err,":", errno,"", sqlstate)returnend--ngx.say("connected to mysql.")
sql="select * from xxx where xxx ="..args["xxx"]
res, err, errno, sqlstate=db:query(sql)ifnot res then
ngx.say("bad result:", err,":", errno,":", sqlstate,".")returnend
local cjson=require"cjson"ngx.say(cjson.encode(res))
local ok, err=memc:set(args["xxxx"], cjson.encode(res))ifnot ok then
ngx.say("failed to set dog:", err)returnend
local ok, err=db:set_keepalive(0,100)ifnot ok then
ngx.say("failed to set keepalive:", err)returnendreturnend
ngx.say(res)
memc:set_keepalive(0,100)';}
posted on 2013-03-21 16:53 漂漂 阅读(17088) 评论(0) 编辑 收藏 引用