Chinaunix首页 | 论坛 | 博客
  • 博客访问: 521344
  • 博文数量: 78
  • 博客积分: 995
  • 博客等级: 准尉
  • 技术积分: 1462
  • 用 户 组: 普通用户
  • 注册时间: 2011-11-15 20:22
个人简介

技术中沉思的时候最快乐,问题得到完美解决的时候最有成就感!

文章分类

全部博文(78)

文章存档

2013年(39)

2012年(37)

2011年(2)

分类: Python/Ruby

2012-05-18 18:13:37

项目中用到了nginx来做http接入,为了和项目内部中的svr交互,曾经写过nginx扩展;
写的是非常复杂,自己写的代码,现在再回看一遍都觉得有点恶心;
nginx 确实很强大,效率高,并行吞吐能力强,另外就是其非阻塞全异步,http 解析做的
非常不错,配置非常强大,灵活;自然是做http的不二选择;
但如果要从其代码扩展,则感觉非常不方便,效率比较低下,用nginx的本意就是希望借用
其强大灵活,如果为了加上自己的特定功能就写非常底层的代码,感觉非常不爽;前段时间在学lua;
lua是脚本语言中最快的,加上JIT,性能异常优秀;理想中的写业务逻辑的工具啊,如果能将nginx和
lua整合到一起,那世界就完美了...
发现网上已有nginx+lua来写接入功能,全异步,非常开心,自己想要的竟然有人早就实现了;
good, 其实写个简单的还是比较容易的:

先试用了一把:
nginx 配置:

点击(此处)折叠或打开

  1. location /test_lua {
  2.                 content_by_lua '
  3.                         print("input cookies=", ngx.var.http_cookie)
  4.                         ngx.say("input params=", ngx.var.args)
  5.                         local params = ngx.req.get_uri_args()

  6.                         if params.uid ~= "5760273" then
  7.                                 ngx.status = 403
  8.                                 return
  9.                         end

  10.                         for k, v in pairs(params) do
  11.                                 ngx.say(k, " : ", v)
  12.                         end
  13.                 ';
  14.         }

测试:
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配置文件 

点击(此处)折叠或打开

  1. lua_code_cache off;
  2. location /test_lua {
  3.                 content_by_lua_file lua/test_lua;
  4.         }

注:
为方便测试,可以关掉lua加载cache,这样方便测试,修改lua脚本后,不需要重新restart nginx;
方便了不少;lua_code_cache

阅读(17263) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~