存档

‘源码分析’ 分类的存档

Nginx漏洞CVE-2013-4547复现

2016年4月1日 没有评论 18,896 次浏览

每一个漏洞的面世都是软件开发者的无意和黑客/白客的有意的共同结晶,它们之中大多数的诞生都是在某位或某几位程序猿经历千辛万苦,体验重重空虚寂寞冷之后的产物,以至于每一个漏洞都是如此的身价不菲。能与这些高富帅们勾搭上是我一直以来的梦想,可惜当前能力和时间有限,只能拔一拔它们的裤腿,瞅准了一把抱住,再深情的来一句:土豪,我们做朋友吧。 今天出场的这位高富帅是CVE-2013-4547,属于Nginx... [阅读更多]

Lighttpd中CGI执行流程

2013年5月11日 没有评论 4,789 次浏览

这是2009年05月20日写在CU的博客上的文章,现在转过来,呵呵。 从下图中,我们可以看到对于客户端的每一个请求(动态页面,也就是需要CGI处理的),Lighttpd进程都是先fork一个CGI进程,然后将请求头(通过环境参数)和请求体(通过管道)传递给CGI程序,等待CGI处理并将从CGI进程那接收到的处理结果再响应给客户端,然后将CGI终止(通过发送SIGTERM信号)。 CGI的处理有一些缺点,先不说其它的,单从图中可以看到的就有:首先,对于客户端的每一个请求都需要fork一个CGI进程,然后在该请求处理结束后又将该CGI进程kill掉,性能自然是不高的。其次,Web... [阅读更多]

nginx与正向代理

2013年1月12日 5 条评论 7,449 次浏览

对于nginx的介绍,往往都会以这么一句评价作为开头:nginx,是一个功能强大的高性能Web和反向代理服务器,……。那么,作为反向代理概念的另一面,正向代理,nginx是否同样支持呢?在解答这个问题之前,需要先搞清楚何谓正向代理,何谓反向代理以及它们之间的联系与差别。 在计算机网络领域,代理服务器也就是充当相互通信双方(按通信请求方client以及通信服务方server两种角色划分)的中间功能媒介的角色,而正向代理和反向代理,只不过是用于对代理服务器在充当中间功能媒介的不同类别的更进一步划分(除了正向代理和反向代理,还有其他类别,具体请看参考1)。即,如果代理服务器充当的是相互通信双方中的client角色,那么就是正向代理。图示如下(来之参考2): 与此相对,如果代理服务器充当的是相互通信双方中的server角色,那么就是反向代理。图示如下(来之参考2): 对此,我们需搞清楚两个问题: 1,所谓正向反向,这个方向性是相对相互通信双方中的client端而言的。 2,要判断一个代理服务器是正向代理还是反向代理,只需检查它在原始双方通信过程中代表着哪一方,替谁干活。 代理服务器的功能有很多,比如在做正向代理时,可以用于代理共享上网,翻(河蟹)墙,掩藏身份(在网易评论里换个火星IP地址,囧)等等;做反向代理时,隐藏服务器端,统一控制,防范攻击,提高服务性能等等。 回到本文的正题:nginx是否支持正向代理? 早在4年前,Igor已经给出了答案:不支持,并且也没有打算在短期内支持。原因是:已经有了非常优秀的正向代理软件,例如squid。 虽然如此,但nginx对正向代理的有限支持还是可以有的,比如对HTTP正向代理的支持(即不支持HTTPS),示例如下(参考2)。 1,编译nginx: #... [阅读更多]

分类: nginx, 源码分析 标签: ,

nginx对Linux native AIO机制的应用(实现篇)

2013年1月12日 没有评论 6,061 次浏览

从前面文章已经了解到,在Linux系统上,要使用native... [阅读更多]

nginx对Linux native AIO机制的应用(配置篇)

2013年1月12日 没有评论 4,504 次浏览

从0.8.11版本开始,nginx开始支持Linux native... [阅读更多]

哈希函数

2012年12月30日 1 条评论 6,433 次浏览

学计算机的童鞋,应该没有人不清楚什么是哈希函数,在大多数实际项目中,对于哈希函数的选择,往往并不怎么在意,讲究的是能用就行,但在性能追求极致的环境里,哈希函数却还是一个考察重点。 在Web服务器lighttpd里,使用的是一个非常流行的DJB... [阅读更多]

获取系统当前可用CPU核数

2012年11月18日 没有评论 4,300 次浏览

Nginx 1.3.8中有一处更新为允许给指令worker_processes设置auto参数,这将表示工程进程数将与当前系统可用CPU核数一致,挺方便实用的特性,看其具体实现。 首先是指令worker_processes的相关代码: ... [阅读更多]

分类: *nix技术, nginx, 源码分析 标签:

cmpxchgl

2012年11月17日 1 条评论 7,131 次浏览

白天在公司看DPDK的代码,一个使用cmpxchgl指令实现的支持多生产者-多消费者的内存池,挺有意思的,里面有一处关键代码为rte_atomic32_cmp_set()(好像是这个名字?),其实现在Nginx代码内也有,现在家里电脑上没有DPDK的代码,所以就直接来看看Nginx内的具体实现: static... [阅读更多]

nginx变量机制

2012年8月8日 没有评论 6,818 次浏览

初识变量 前面曾讲过nginx配置文件的解析过程,也就是nginx如何在启动的过程中对用户设定的配置文件进行解析,并将配置文件中的各个配置项与配置值转换为对应的nginx内部变量值,从而能让nginx按照用户预想的情况去运行。 如果只是一些比较简单并且确定的功能配置需求,那么nginx用户能够很方便的做出相应的设定,比如用户想要设置工作进程数为2个,那么配置文件中这样写即可:worker_processes... [阅读更多]

dlmalloc解析连载完整word文档

2011年11月15日 6 条评论 5,690 次浏览

把cu个人博客的这篇文章转载过来,呵呵。 目 录 1. 本文档介绍 2.边界标记法 3. 分箱式内存管理 4. 核心结构体malloc_state 5. 内存分配相关函数 5.1 函数dlmalloc 5.2 函数tmalloc_small 5.3... [阅读更多]