
Nginx
bollaxu
这个作者很懒,什么都没留下…
展开
-
Nginx父子进程的创建及主体工作函数
根据Nginx(0.7.67版本)的代码,对Nginx基本的进程创建,进程主体以及事件处理进行了简要的分析。基本上,父进程(即主进程)一开始会初始化及读取配置,并加载各模块的功能,然后fork()出N个子进程(即工作进程),具有相同的工作逻辑和功能。父进程负责监听信号(如HUP,QUIT等),通过socket pair把信号传递给子进程(子进程间一般不通信)。子进程通过事件来处理父进程传递...2010-12-30 09:28:30 · 121 阅读 · 0 评论 -
Nginx的upstream模块和反向代理(二)
上一篇把upstream的配置和初始化的代码稍微分析了一下。本篇主要用图来解释一下upstream反向代理在收到用户请求之后初始化和事件处理流程。 当Nginx收到downstream(用户或者是其他代理)的请求的时候,它会初始化upstream的请求(如图)。经过了下图所示的步骤之后,Nginx创建了向upstream服务器的请求,并向upstream服务器发起连接请求。 ...2011-01-31 14:53:11 · 218 阅读 · 0 评论 -
Nginx Proxy Cache分析
本文从几个部分来详细介绍Nginx的proxy cache功能。第一部分,主要介绍proxy cache的过期、空间管理等。第二部分,主要介绍在Nginx(作为反向代理服务器)收到请求之后,如何检查本地的缓存来确定是否要向后端服务器发起请求。第三部分,主要介绍Nginx向后端服务器发起请求并收到回复的情况下,如何把响应回复缓存到本地。第一部分在Nginx中,如果启用了proxy...2011-01-19 15:26:00 · 201 阅读 · 0 评论 -
Nginx Proxy Cache的slab page内存缓存机制
Nginx的内存缓存是通过slab pool来实现的,但是目前Nginx代码没有对http响应进行内存缓存。比如作为反向代理服务器时向后端获取的文件也只是缓存在磁盘里,而内存只是用来做索引。不过Nginx已经提供了内存缓存功能的函数,所以如果在其他地方有需要使用内存缓存的话,也可以通过修改代码来实现(当然,也可以用memory disk来实现内存缓存)。在Nginx的内存缓存机制中,最重要的结构就...2011-01-15 11:39:42 · 165 阅读 · 0 评论 -
Nginx spinlock互斥锁
在nginx里面,定义了一个spinlock,来同步父子进程间的共享内存操作 #define ngx_shmtx_lock(mtx) ngx_spinlock((mtx)->lock, ngx_pid, 1024) void ngx_spinlock(ngx_atomic_t *lock, ngx_atomic_int_t value, ngx_uint_t sp...2011-01-13 19:01:42 · 129 阅读 · 0 评论 -
Nginx http端口监听
server {} block里面的"listen"指令调用了ngx_http_core_listen()函数 ngx_http_core_listen(...){ ngx_http_core_srv_conf_t *cscf = conf; ngx_http_listen_opt_t lsopt; /*根据配置的参数设置lsopt*/ //......原创 2011-01-04 22:41:36 · 274 阅读 · 0 评论 -
Nginx的upstream模块和反向代理(一)
Nginx因其出色的处理并发连接的能力,越来越多地作为一个反向代理服务器被使用。所谓反向代理,即把Nginx置于用户接入的最前端,监听用户发来的请求,并把它们转发给相应的后端服务器来处理具体的请求。后端服务器可以是缓存服务器(如Squid)或是处理动态/静态请求的服务器(如apache/Nginx/lighttpd),在这里不作深入讨论。本文对Nginx在upstream服务器的设置和"proxy...2010-12-30 10:16:45 · 682 阅读 · 0 评论 -
Nginx的HTTP请求处理
Nginx在7层负载交换、反向代理服务领域使用比较广泛。Nginx的结构也比较简单,除了底层几个核心的模块(如ngx_core_module,ngx_event_core_module,ngx_errlog_module等)之外,其它的主要是基于上述核心模块的http和mail的模块组,负责处理相关服务。而这些模块也可以在编译的时候被enable/disable,取决于对实际功能的需求。在这...2010-12-30 10:05:02 · 223 阅读 · 0 评论 -
Nginx事件处理(epoll)
事件处理是Nginx处理请求的核心,每个子进程在ngx_worker_process_cycle()的循环里不断调用ngx_process_events_and_timers()函数来处理各种事件。下面,分析使用epoll机制下(Linux最常用支持大并发的事件触发机制)Nginx事件处理的过程,用源代码分析和debug信息追踪两种方法。我们从ngx_worker_process_cyc...2010-12-30 09:51:53 · 208 阅读 · 0 评论 -
Nginx upstream 长连接
Nginx upstream目前只有短连接,通过HTTP/1.0向后端发起连接,并把请求的"Connection" header设为"close"。Nginx与前端的连接默认为长连接,一个用户跟Nginx建立连接之后,通过这个长连接发送多个请求。如果Nginx只是作为reverse proxy的话,可能一个用户连接就需要多个向后端的短连接。如果后端的服务器(源站或是缓存服务器)处理并发连接能力不强...2011-01-31 15:51:32 · 393 阅读 · 0 评论