Chinaunix

标题: 源码之前,了无秘密:深入剖析Nginx!(获奖名单已公布-2013-6-7) [打印本页]

作者: send_linux    时间: 2013-05-10 15:31
标题: 源码之前,了无秘密:深入剖析Nginx!(获奖名单已公布-2013-6-7)
获奖名单已公布,详情请看:http://bbs.chinaunix.net/thread-4085379-1-1.html

Nginx是一款功能强大的高性能Web和反向代理服务器,最初由俄罗斯程序员Igor Sysoev开发,而当前由Igor Sysoev领导的专业公司Nginx, Inc.进行持续的维护与更新。

Nginx可以在大多数UNIX或类UNIX系统上编译运行,比如FreeBSD、Solaris、Linux等,并且官方还提供Windows下的可执行版本。目前,Nginx在Netflix 、Wordpress.com、新浪、网易、腾讯、豆瓣等国内外众多知名网站中得到应用。

从源码剖析的角度出发,是程序员常用的学习和提高方法。但是对于运维人员来说,要真正的运用好一个工具,也要下一番苦功夫。很多用户只是在使用Nginx,但是在配置的时候,知其然不知其所以然,很多时候Nginx并没有发挥出其最大的能量。只有通过研读Nginx源码、深入思考,并不断结合实践。才能真正掌握其功能结构及其内部实现原理,更好地部署和使用Nginx。

本期话题:
1、Nginx的哪些部分的源码您阅读过?
2、Nginx的功能模块哪些是您常用的,相比其他开源软件和商业软件有哪些优势?
3、Nginx的哪些功能目前还有所欠缺,需要以后更加完善?

本期嘉宾:
ChinaUnix论坛C语言版版主:lenky0401,《深入剖析Nginx》一书作者

本期奖品:
《深入剖析Nginx》

作者: 高群凯   
出版社:人民邮电出版社
ISBN:9787115307620
上架时间:2013-4-26
出版日期:2013 年5月
开本:16开
页码:334

图书简介:
源码之前,了无秘密。深入剖析Nginx是资深工程师多年研读代码、精心打磨之作。得到了ChinaUnix社区、运维专家、一线工程师强烈推荐。本书从源码剖析角度深入学习Nginx,对于了解其使用机理和二次开发都有帮助。帮助读者知其然且知其所以然。深入剖析Nginx的作者具有较为丰富的源码剖析和写作经验。深入剖析Nginx部分内容在作者博客,ChinaUnix等社区发布后,浏览下载累计达3000人次,也获得读者的好评。
作者: lenky0401    时间: 2013-05-10 15:54
购书一本,享受Linux各种相关交流&新手答疑,Email邮箱见书内封页。O(∩_∩)O哈哈~
哦,还有nginx、lighttpd及相关,
作者: pandaiam    时间: 2013-05-10 16:01
顶, 看过源码,但是看不懂..
什么时候找书来仔细学学.
作者: hellioncu    时间: 2013-05-10 16:05
1、没读过
2、没用过
3、不关心

作者: send_linux    时间: 2013-05-10 17:23
lenky0401 发表于 2013-05-10 15:54
购书一本,享受Linux各种相关交流&新手答疑,Email邮箱见书内封页。O(∩_∩)O哈哈~
哦,还有nginx、lightt ...

呵呵,老兄太低调了哈,如果大家有什么问题,请直接 @  lenky0401  哈
作者: chenyx    时间: 2013-05-10 18:50
1、Nginx的哪些部分的源码您阅读过?
  没读过,根本看不懂.
2、Nginx的功能模块哪些是您常用的,相比其他开源软件和商业软件有哪些优势?
  proxy模块,http_stub_status模块是我常用的.
  nginx与其他http/代理软件相比,软件更小,执行效率很高.可以在相同内存条件下,负载更多的请求.
3、Nginx的哪些功能目前还有所欠缺,需要以后更加完善?
  这个不了解.感觉nginx已经非常棒了,优化也做的很好.
作者: shanehan    时间: 2013-05-10 19:01
还没读过,不过想读下
作者: linux_c_py_php    时间: 2013-05-10 19:45
nginx是如果实现插件异步执行的, 比如proxy插件, 谢谢.
作者: zylthinking    时间: 2013-05-10 20:20
我买了太多书没看了, 这里又冒出一本, 国内书质量是有较大提升阿
作者: bikong0411    时间: 2013-05-10 22:42

1、Nginx的哪些部分的源码您阅读过?
  看过http相关的部分,有些能看懂,有些看不懂
2、Nginx的功能模块哪些是您常用的,相比其他开源软件和商业软件有哪些优势?
  http_stub_status_module、http_realip_module
  nginx与其他http/代理软件相比,软件更小,执行效率很高.处理并发请求比较强,文档较完善,代码结构模块化清晰
3、Nginx的哪些功能目前还有所欠缺,需要以后更加完善?
  uri hash、fastcgi_buffer不能关闭等等
作者: jiaion    时间: 2013-05-13 16:35
1、Nginx的哪些部分的源码您阅读过?
nginx http ,nginx proxy,nginx resolver, 以及nginx module加载流程。
2、Nginx的功能模块哪些是您常用的,相比其他开源软件和商业软件有哪些优势?
最常用的proxy,相比商业软件配置简洁易懂,c-style,文档完善。再加上Lua的配合功能强劲
3、Nginx的哪些功能目前还有所欠缺,需要以后更加完善?
现在炒得火热的必须时动态模块加载了,
作者: 流氓无产者    时间: 2013-05-14 09:15
一直想看,没时间来着
作者: send_linux    时间: 2013-05-14 09:19
流氓无产者 发表于 2013-05-14 09:15
一直想看,没时间来着


没事就看看哈,分享分享,可以获得赠书的哈
作者: truekbcl    时间: 2013-05-15 10:52
1、Nginx的哪些部分的源码您阅读过?
  都没阅读过
2、Nginx的功能模块哪些是您常用的,相比其他开源软件和商业软件有哪些优势?
  不知道有哪些模块,仅仅用来测试过ruby。
3、Nginx的哪些功能目前还有所欠缺,需要以后更加完善?
  完全不知道。

正准备看看cppcms,可以与nginx结合使用。所以准备关注一下nginx的源码。
作者: liexusong    时间: 2013-05-15 15:45
1.Nginx的哪些部分的源码您阅读过?
Nginx0.5的源码脚本上看过一遍,但是很多细节还没有完全掌握。

2.Nginx的功能模块哪些是您常用的,相比其他开源软件和商业软件有哪些优势?
暂时最用得多的就是fastcgi模块了,其他都比较少用到。

3.Nginx的哪些功能目前还有所欠缺,需要以后更加完善?
我觉得Nginx的功能已经很强大了,我觉得要改善的是增加动态链接库功能(把模块以so文件载入),这样就更灵活了。
作者: send_linux    时间: 2013-05-15 16:32
liexusong 发表于 2013-05-15 15:45
1.Nginx的哪些部分的源码您阅读过?
Nginx0.5的源码脚本上看过一遍,但是很多细节还没有完全掌握。

感谢支持哈:)
作者: liexusong    时间: 2013-05-15 16:39
回复 16# send_linux


    支持是应该的,而且对nginx也比较感兴趣。
作者: w_s_xin    时间: 2013-05-16 11:57
1.Nginx的哪些部分的源码您阅读过?
ngx_event, 具体是ngx_epoll_event.
主框架,从listen到事件循环处理。
ngx_http,解析http的。
ngx_upstram

2.Nginx的功能模块哪些是您常用的,相比其他开源软件和商业软件有哪些优势?
ngx_proxy 。

3.Nginx的哪些功能目前还有所欠缺,需要以后更加完善?
(1)没有很好的session管理,在做代理的时候,内存池机制过于笼统,不如直接固定内存池好。
(2)事件处理不够清晰,和http解析混到一块。
作者: laputa73    时间: 2013-05-16 16:31
之前有一个nginx的模块讨论,和这个有些类似阿.
读源码还是一个比较高级的活,现在干不来.
nginx,主要就是来proxy,fast-cgi了
看过nginx的perl cgi脚本,比较疑惑这个是怎么异步不阻塞的.
还有nginx和resin的hpmux互联,一直没搞定.

作者: guotong1988    时间: 2013-05-17 08:24
好牛好牛              
作者: crazyhadoop    时间: 2013-05-17 12:11
正在修改pushstream插件的飘过
作者: Hongqiyaodao    时间: 2013-05-17 12:20
提示: 作者被禁止或删除 内容自动屏蔽
作者: reyleon    时间: 2013-05-17 16:21
本帖最后由 reyleon 于 2013-05-17 16:21 编辑

话说读不懂源码,只能做做简单的安装与配置。。。
作者: wonghoifung    时间: 2013-05-18 14:54
顶一下。。。
作者: fengzhanhai    时间: 2013-05-19 15:42
好活动,是否可以提供试读部分,如果是本好书值得买来一看:wink:
作者: T-Bagwell    时间: 2013-05-19 16:50
本帖最后由 T-Bagwell 于 2013-05-28 10:39 编辑

1、Nginx的哪些部分的源码您阅读过?
好多地方都读过,是跟着taobao的那个连接去读的
http://tengine.taobao.org/book/index.html

2、Nginx的功能模块哪些是您常用的,相比其他开源软件和商业软件有哪些优势?
upstream常用,主要用nginx来做分发器,nginx+apache来做,Nginx开源,免费,目前主要用来做代理用,用着还凑合,目前够用
Nginx处理静态页面还是不错的,处理动态页面的话,其实个人感觉nginx+apache效果会更好一些
都说nginx处理高并发会比apache好,我测静态页面时效果比apache好,但是动态页面,似乎效果并不是也别明显,也有可能是我测试的方法不对

3、Nginx的哪些功能目前还有所欠缺,需要以后更加完善?
好像不支持动态加载module,得重新编译,不知道现在新版本是不是不用重新编译了,目前好像nginx里面支持的lua还不错,不过一直没有试过
作者: T-Bagwell    时间: 2013-05-19 16:50
本帖最后由 T-Bagwell 于 2013-05-19 16:51 编辑

@send_linux
又乱了
作者: jieforest    时间: 2013-05-19 19:40
本帖最后由 jieforest 于 2013-05-19 19:42 编辑

1、Nginx的哪些部分的源码您阅读过?
到目前为止,我没有阅读过Nginx的源码。人的精力毕竟是有限的,我对自己的要求就是把Nginx用好,精通Nginx即可。目前已经在多个项目中使用了Nginx。
阅读源码当然能帮助我更深地了解Nginx。我曾经也希望阅读Nginx的源码,不过比较缺时间,等空闲下来后,会做这件事。

2、Nginx的功能模块哪些是您常用的,相比其他开源软件和商业软件有哪些优势?
Nginx自身的模块主要是HTTP模块和MAIL模块,功能非常全。至于第三方模块,我使用过的第三方模块还不少,主要有:
1)Encrypted Session插件:可以对Nginx变量值进行加解密,适用于基于会话的授权认证。
2)GridFS插件:用于支持MongoDB数据库的GridFS,适合分布式文件系统的应用。
3)HTTP Push Stream插件:把Nginx变成流式推服务器。
4)Mongo插件:使得Nginx可以直接与MongoDB数据库通信。
5)ModSecurity插件:Web应用的防火墙。
6)HTTP Push插件:把Nginx变成支持常连接的HTTP推服务器(Comet)。
7)HTTP Redis插件:使得Nginx可以直接与Redis数据库通信。
8)Limit Upload Rate插件:限制客户端上传速度的插件。
9)RTMP插件:使得Nginx支持RTMP协议。
……
还有不少,可根据需求选用。

3、Nginx的哪些功能目前还有所欠缺,需要以后更加完善?
Nginx在早一些的版本,存在以下不足:
Nginx在正向代理方面,不支持CONNECT方法,以至于在这方面功能有限。
Nginx在缓存方面,也有很多功能局限,比如不支持带参数的动态链接,缓存内部没有缓存过期和清理的机制等。
相信在新版本已经解决了或正在解决这些问题。
作者: send_linux    时间: 2013-05-19 19:52
T-Bagwell 发表于 2013-05-19 16:50
@send_linux
又乱了


编辑器的关于设置字号的地方有点bug,貌似一直都没有修改过来.....

老兄要是方便,暂时请不要设置特别大的字体。。。
作者: linux_c_py_php    时间: 2013-05-19 23:18
@laputa73

这一点不难, 要么是busy loop, 要么是pipeline, 说白了前者通过轮询插件询问是否完成工作, 后者通过管道+队列的流水线形式由插件主动通知框架完成工作.
作者: T-Bagwell    时间: 2013-05-20 09:25
改过来了,呵呵
作者: chinafenghao    时间: 2013-05-22 16:55
@send_linux
1、Nginx的哪些部分的源码您阅读过?
没有动不动就读源码的习惯,特别这种大东西。顺便问一句,如果不读源码,是不是没必要看此书?

2、Nginx的功能模块哪些是您常用的,相比其他开源软件和商业软件有哪些优势?
Rewrite模块————允许重写URL
Proxy模块————–代理模块,可以转发请求
Upstream模块———–为后端额服务器提供负载均衡
FLV模块—————-支持flv文件的拖动播放
Log模块—————-用户访问日志
SSL模块—————-HTTPS/SSL支持
WebDAV模块————-增加一些HTTP和webdav的扩展方法

nginx是一款功能和性能都堪称完美的软件。已经不能用web服务器来形容nginx,并且nginx的第三方插件非常多,也非常好。


3、Nginx的哪些功能目前还有所欠缺,需要以后更加完善?
在当前环境下,nginx已经能够满足各种需求了,可能在一些细节,比如日志的时间格式支持之类的小地方有些不完美,需要通过修改代码实现。但是跟随时间的发展,技术的革新,相信nginx会发展的更好。
作者: dingyujie    时间: 2013-05-23 18:35
回复 2# lenky0401


    lenky大神在我群里,有兴趣的可以进来讨论或者围观:nginx源码分析群161263625,验证时请说明:nginx研究
作者: 尚风    时间: 2013-05-24 10:13
自己搭了一个小站,正在使用Nginx + tomcat  ,里面很多要学的啊,正在啃
作者: niao5929    时间: 2013-05-24 12:44
值得关注。好书需要大家分享!!!
作者: hulingfeng211    时间: 2013-05-24 13:37
回复 1# send_linux


1、Nginx的哪些部分的源码您阅读过?
      曾经也想通过研究源码来深入应用nginx,但是发现看不懂,不知到如何下手。这块还希望能有高手指导一下
2、Nginx的功能模块哪些是您常用的,相比其他开源软件和商业软件有哪些优势?
     正向代理和反向代理是我目前每天都在使用的功能,优势嘛,整体觉得效率比较高,部署也挺方便(相对apache yum的方式稍显有些复杂)
3、Nginx的哪些功能目前还有所欠缺,需要以后更加完善?
     目前的应用点上没有发现有什么缺点,以后发现再补充吧。
作者: niao5929    时间: 2013-05-24 14:43
这书我在CHINA-PUB上很早就收藏过了。呵呵
作者: gm100861    时间: 2013-05-27 11:45
1、Nginx的哪些部分的源码您阅读过?
刚开始读,大多数看不懂,因没有编程基础
2、Nginx的功能模块哪些是您常用的,相比其他开源软件和商业软件有哪些优势?
  upstream rewrite  优势就是nginx轻量级,配置文件比较简单,易读。善于处理静态高并发请求。
3、Nginx的哪些功能目前还有所欠缺,需要以后更加完善?
可以把tengin的concate模块添加进去,可以实现多个js,css请求的合并,还有忽略大小写的模块是不是也搞一个,也有一些后端是windows服务器,前端使用nginx做代理的,因为windows是不区分大小写的,而到了linux这就要区分。还有跟PHP结合的时候,能不能不再使用fastcgi这种,可以像apache的那样么,直接加载PHP模块。需要完善的暂时发现这么多。
作者: liuxuejin    时间: 2013-05-28 11:09
对于nginx,我喜欢它配置文件写的很简洁,正则配置让很多事情变得简单运行效率高,
占用资源少,代理功能强大。
1、Nginx的哪些部分的源码您阅读过
flv模块和mp4模块,使得建立视频网站非常简单。

2、nginx的功能模块哪些是您常用的,相比其他开源软件和商业软件有哪些优势?
Lua模块这个很赞,flv流媒体模块,MP4模块还有fastDFS的nginx插件。
LUA模块这个不用说,春哥的杰作,用来开发一些高并发的业务逻辑,
例如一些网站开放出来的API。
FLV模块和MP4模块,有了他们,建立自己的视频点播网站减少了不少的工作。
fastDFS的模块,用了来支持鱼大的fastDFS的http访问。神马下载,小图片都能搞定。
还有 nginx-upload模块, 用来上传的模块。

nginx 工作在OSI第7层,可以针对http应用做一些分流的策略。比如针对域名、目录结构。它的正则比HAProxy更为强大和灵活;
Nginx对网络的依赖非常小,理论上能ping通就就能进行负载功能,这个也是它的优势所在,
对网络的需求比lvs的简单多了。
Nginx安装和配置比较简单,测试起来比较方便;
可以承担高的负载压力且稳定,一般能支撑超过几万次的并发量,看阿里的PPT,nginx的
并发可以达到10W+以上,取决于系统的调优和服务器内存。



3 Nginx的哪些功能目前还有所欠缺,需要以后更加完善?
就拿我常用的模块来说:
日志模块:nginx的日志模块是比较粗糙的,连日志轮询的功能都没有,
还有日志的日期格式也不能自己配置,例如xxxx-xx-xx这种格式。

缓存模块:1.不支持带参数的动态链接,比如read.php?id=1,因为Nginx缓存只保存文件名.
2.Nginx缓存内部没有缓存过期和清理的任何机制,这些缓存的文件会永久性地保存在机器上,
如果要缓存的东西非常多,那就会撑暴整个硬盘空间。为此需要一个shell脚本定期清理或者使用
其他清理缓存的模块
3.只能缓存200状态码,因此后端返回301/302/404等状态码都不会缓存

作者: send_linux    时间: 2013-05-28 15:16
liuxuejin 发表于 2013-05-28 11:09
对于nginx,我喜欢它配置文件写的很简洁,正则配置让很多事情变得简单运行效率高,
占用资源少,代理功能强 ...


感谢参与
作者: lastexile    时间: 2013-05-29 12:31
nginx好用,小内存的vps用最好
作者: pitonas    时间: 2013-06-04 22:21
对于了解其使用机理和二次开发感觉本书都有帮助。
作者: liyanwei0312    时间: 2013-06-06 11:26
lighttpd到是有看過,不過看不懂。。。。
作者: qqjue    时间: 2013-06-07 00:32
tomcat 试试 apache-tomcat-7.0.40-windows-x86.zip (8.57 MB, 下载次数: 29)
作者: 787686358    时间: 2014-11-18 22:36
回复 1# send_linux


                if (cmd->type & NGX_DIRECT_CONF) {
                conf = ((void **) cf->ctx)[ngx_modules->index];

            } e        conf = ((void **) cf->ctx)[ngx_modules->index];lse if (cmd->type & NGX_MAIN_CONF) {
                conf = &(((void **) cf->ctx)[ngx_modules->index]);

            } else if (cf->ctx) {
                confp = *(void **) ((char *) cf->ctx + cmd->conf);

                if (confp) {
                    conf = confp[ngx_modules->ctx_index];
                }

你好   这是 一段 nginx 的源码,   有些疑问?
        conf = ((void **) cf->ctx)[ngx_modules->index];  到底是代表什么?    cf->ctx 是数组名称 还是  指向数组的 指针?  他的原型 如果 (void ** p)[x]   那代表什么意思?
作者: BBinch1n4    时间: 2014-11-18 23:49
顶下贴。表示没真正研究过,不过目前准备学习下,实现下自己的HTTP服务器,加油。




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2