nginx
囧囧有神
一个上进的学生
展开
-
nginx连接池实现
nginx作为一款优秀的高性能web server,在大型互联网公司已经占据了很重要的份额。根据分析它的源代码,及在网上查询相关资料,分析了nginx的连接池的实现。nginx的连接池实际上可以看做是一种会话管理,并没有真正实现连接的重用。代码实现的还是非常漂亮,值得学习。1. 配置worker_connections模块:EventsModule语法: worker_connections number默认:位于main section的指令worker_connections和worker原创 2013-12-28 19:37:30 · 13902 阅读 · 1 评论 -
理解HTTP/2流优先级(二)
流依赖和优先级也是HTTP/2的关键特性。设计流依赖和优先级基于以下认识:WEB应用的资源有重要性的区别,优先加载重要资源,可以尽快渲染页面,提升用户体验。HTTP/2中,一个源只有一个连接来实现多路复用,所有资源通过一个连接传输,这时候资源传输的顺序就更重要了。要使用HTTP/2流依赖和优先级,通常情况,我们什么都不需要做。浏览器和HTTP服务器已经帮我们处理好了具体的细节。协议原创 2017-03-21 20:07:20 · 4197 阅读 · 1 评论 -
理解HTTP/2流量控制(一)
在理解HTTP/2协议流量控制部分的过程中,容易被一些问题困惑。HTTP/2构建于tcp之上,tcp协议已经提供了流量控制机制,为什么HTTP/2还要自己实现一个?HTTP/2流量控制是什么原理,怎样才能发挥它的最大价值? 本文将从协议、源码、实验中来找到问题的答案。原创 2017-03-06 03:10:34 · 9230 阅读 · 1 评论 -
nginx源码分析之http解码实现
分析nginx是如何解析并且存储http请求的。对非法甚至恶意请求的识别能力和处理方式。可以发现nginx采用状态机来解析http协议,有一定容错能力,但并不全面原创 2015-04-02 17:52:22 · 11096 阅读 · 3 评论 -
nginx phase handler的原理和选择
nginx phase handler的原理和选择PHASE HANDLER的种类nginx在接收并解析完请求行,请求头之后,就会依次调用各个phase handler。 phase handler是完成nginx主要功能的阶段。Nginx有如下11种phase,phase会依次执行。同一个phase,可能会挂载多个handler。其中斜体加粗的phase,不允许挂载用户自定义的han原创 2014-08-25 10:58:46 · 5949 阅读 · 0 评论 -
ngx lua模块源码简单解析
对nginx lua模块的整个流程,原理简单解析。由于nginx lua模块相关配置,指令,API非常多,所以本文档只以content_by_lua指令举例说明。读本文档最好配合读源码. 不适合对nginx和lua一点都不了解的人看。1.相关配置详细配置见 https://github.com/openresty/lua-nginx-module#installation2原创 2014-07-11 11:45:10 · 14617 阅读 · 0 评论 -
cloudflare的新waf,用Lua实现的
我们使用nginx贯穿了我们的网络,做前线web服务,代理,流量过滤。在某些情况下,我们已经扩充了nginx上我们自己的模块的核心C代码,但最近我们做了一个重大举措,与nginx结合使用lua几乎全部用lua写的我们的一个项目是新的cloudflare WAF。这个我们另有博客。http://blog.cloudflare.com/heuristics-and-rules-why-w翻译 2014-07-03 10:41:10 · 8681 阅读 · 0 评论 -
nginx上传文件大小
采用nginx作反向代理,出现了一个诡异的问题,小文件可以提交,大文件会报500内部错误。这个是什么原因导致的呢? 查wiki可知,上传文件大小相关的有三个配置client_body_buffer_size 配置请求体缓存区大小, 不配的话,client_body_temp_path 设置临时文件存放路径。只有当上传的请求体超出缓存区大小时,才会写到临时文件中client原创 2014-03-03 18:03:34 · 15735 阅读 · 1 评论 -
nginx超时设置
nginx常用的超时配置说明client_header_timeout语法 client_header_timeout time默认值 60s上下文 http server说明 指定等待client发送一个请求头的超时时间(例如:GET / HTTP/1.1).仅当在一次read中,没有收到请求头,才会算成超时。如果在超时时间内,client没发送任何东西,nginx返原创 2014-01-13 19:07:56 · 169411 阅读 · 4 评论 -
nginx静态编译lua[jit]
原淘宝工程师清无(王晓哲)和春来(章亦春)开发的lua nginx模块非常强大。现在网上的安装方法主要都是动态编译lua的,但是总有种种原因动态编译有诸多不便,这时候就需要将luajit静态编译进nginx里第一种方法就是直接使用 openresty,并利用openresty提供的方式静态编译luajit安装nginx nginx_lua_module luajit ngi原创 2013-12-24 15:51:20 · 5553 阅读 · 0 评论 -
SPDY简介
SPDY简介 SPDY是Google开发的基于传输控制协议(TCP)的应用层协议 。SPDY旨在缩短网页的加载时间和提高安全性。Google最早是在Chromium中提出的SPDY协议。本文主要了解SPDY的基本概念,以及如何编译一个含有SPDY的nginxHTTP协议存性能上的一些问题一个连接一个请求。浏览器和web server之间都是以短连接方式交互,一个连接只服务原创 2014-01-07 10:41:26 · 4078 阅读 · 0 评论 -
nginx内存池实现原理
Nginx以高效,节省内存著称。到底如何高效,如何节省内存,这个得真正了解其设计原理才能知道,分析源码是了解其原理最直接的方法。Nginx对非常多的基础设施(红黑树 内存池 连接池 hash表)都重复造了轮子,我们来看看为什么要这么做。 对于c系统,最难的常常是内存管理,随着系统复杂度的提高,各种内存问题都出来了,很难管理,对于系统的长期稳定运行构成影响。我们生产线上的nginx常年稳定原创 2014-01-03 17:29:44 · 9013 阅读 · 0 评论 -
动态调整TLS record size优化性能原理及实现
在ssl连接的不同阶段,通过动态调整TLS record size来优化性能,这种思路其实已经出来几年了(至少13年就有相关文章)。在google大神 ILYA GRIGORIK的书 中,可以看到有相关描述。相应的实现也不少,例如go1.7中增加了动态调整tls record size, 详情可见: https://github.com/golang/go/commit/ae00df128d843原创 2017-03-24 16:33:45 · 2983 阅读 · 0 评论