作为轻理级web server,nginx的优势明显,尤其是对反向代理,负载均衡的处理。
nginx对IO用filter模型实现gzip的处理,可以新增filter,增删模块。
开发人员对于nginx的模块开发热情,似乎有渐涨的趋势,国内最出名的要算taobao了,开发了了很多模块(http://openresty.org)。
但是模块多了,用的人维护起来也是一个麻烦事,也偏离了nginx的轻量级的初衷。
就让nginx干该干的事,解析静态文件,反向代理,解析PHP,CGI。这是我个人的想法。
之于你非要把打印的文字放到配置文件里:
location /echo { echo_before_body hello; echo_before_body world; echo !; }
由于nginx没有处理线程池的概念,监听线程也要负责处理业务,把大量动态处理的逻辑放进来就显得不合理了,会严重占用服务器的性能。
nginx 里加lua其实道理也一样,nginx的优点之一就是反向代理,把待处理的connection 放到 epoll里挂起来,而不是挂起线程:
connection C1收到请求,检测为跨服务器访问的请求,创建到指定服务器的connection UC1,发送请求,挂到epoll中,UC1有返回
的时候,epoll会加调处理UC1,接着处理C1并返回。
而如果调用 lua中的 ngx.http,虽然说是异步的,不占用CPU时间,但其作法不如nginx的回调操作,也有悖于lua轻便的本性。
物尽其职,配置文件还是尽量简单为好,还是让nginx干擅长的事情吧。
nginx的模块是尽量减小耦合,但这不应该是我们应该追求的东西。真正的服务器开发应该追求的是性能和并发,用最短的时间开发出最适合产品的服务器。