项目中用到了nginx来做http接入,为了和项目内部中的svr交互,曾经写过nginx扩展;
写的是非常复杂,自己写的代码,现在再回看一遍都觉得有点恶心;
nginx 确实很强大,效率高,并行吞吐能力强,另外就是其非阻塞全异步,http 解析做的
非常不错,配置非常强大,灵活;自然是做http的不二选择;
但如果要从其代码扩展,则感觉非常不方便,效率比较低下,用nginx的本意就是希望借用
其强大灵活,如果为了加上自己的特定功能就写非常底层的代码,感觉非常不爽;前段时间在学lua;
lua是脚本语言中最快的,加上JIT,性能异常优秀;理想中的写业务逻辑的工具啊,如果能将nginx和
lua整合到一起,那世界就完美了...
发现网上已有nginx+lua来写接入功能,全异步,非常开心,自己想要的竟然有人早就实现了;
good, 其实写个简单的还是比较容易的:
先试用了一把:
nginx 配置:
- location /test_lua {
- content_by_lua '
- print("input cookies=", ngx.var.http_cookie)
- ngx.say("input params=", ngx.var.args)
- local params = ngx.req.get_uri_args()
- if params.uid ~= "5760273" then
- ngx.status = 403
- return
- end
- for k, v in pairs(params) do
- ngx.say(k, " : ", v)
- end
- ';
- }
测试:
wget -S "" --header='Host: test_dl' --header='Cookie: nickname=xxxxooooxxxx' -O /tmp/a.txt; cat /tmp/a.txt
--2012-05-18 18:13:09--
Connecting to 127.0.0.1:80... 已连接。
已发出 HTTP 请求,正在等待回应...
HTTP/1.1 200 OK
Server: nginx/1.0.8
Date: Fri, 18 May 2012 10:13:09 GMT
Content-Type: application/octet-stream
Content-Length: 108
Connection: keep-alive
长度:108 [application/octet-stream]
Saving to: `/tmp/a.txt'
100%[==========================================================================================>] 108 --.-K/s in 0s
2012-05-18 18:13:09 (2.24 MB/s) - `/tmp/a.txt' saved [108/108]
input params=uid=5760273&gcid=fdsafgdfasgadf&xdrive_id
xdrive_id : true
uid : 5760273
gcid : fdsafgdfasgadf
接下来:
当然是要把 lua 脚本从nginx.conf中移出至外面单独文件
1,在 nginx 根目录下,新建 lua 文件夹,新建 test_lua,将配置中的lua脚本移入
2,修改nginx.conf配置文件
- lua_code_cache off;
- location /test_lua {
- content_by_lua_file lua/test_lua;
- }
注:
为方便测试,可以关掉lua加载cache,这样方便测试,修改lua脚本后,不需要重新restart nginx;
方便了不少;lua_code_cache
阅读(3102) | 评论(0) | 转发(0) |