首页 > 代码库 > nginx
nginx
I/O模型: 阻塞型、非阻塞型、复用型、信号驱动型、异步;
同步/异步: 关注的是消息通知机制;
消息通知: 同步:等待对方返回消息; 异步:被调用者通过状态、通知或回调通知调用者被调用的运行状态; 边缘触发:只发送回调信号一次 水平触发:发送回调信号,如果进程没有回调则继续发送回调信号
阻塞/非阻塞: 关注调用者在等待结果返回之前所处的状态;
阻塞:blocking,调用结果返回之前,调用者会被挂起; 非阻塞:nonblocking,调用结果返回之前,调用不会被挂起;
一次IO请求,都会由两个阶段组成: 第一步:等待数据,即数据从磁盘到内核内存; 第二步:复制数据,即数据从内核内存到进程内存;
SELECT(BSD):复用型io用,当多个数据准备时,将状态发送给SELECT(像电子显示牌一样),准备好则显示出来,最多支持1024个 显示牌 POLL(): 没有限制 性能表现一般
c10k
事件驱动模型实现: Linux: epoll, libevent程序包; FreeBSE: kqueue Solaris: /dev/poll ********************************************** Nginx: http://nginx.org/ 官方站点 特性: http服务器 http/imap/pop协议的反向代理服务器 通用的TCP/UDP反代服务器(负载均衡) Sendfile机制:httpd也支持,通常只对静态资源有效(不需要执行) 用户发送请求,请求从内核空间发往用户空间,用户空间程序向内核发起io请求,内核从磁盘加载文件放在内核缓冲区,内核缓冲区的内容再复制到用户空间,进程封装响应报文,送回内核并相应给用户。 Sendifle机制则可实现,当内核在磁盘加载资源,直接在内核空间构建相应报文,并直接相应给用户。 Mmap机制:内存映射机制 一个文件要想被访问到,要先加载到内存当中,(内核内存,用户空间)复制了两遍, 内存映射,直接在内存中开辟出一段内存空间,把磁盘文件映射(内存地址空间和磁盘地址空间向对应)关联,直接映射在用户空间。 ****************************** Nginx程序架构: master/worker 一个master进程:主控进程 负责加载配置文件、管理worker进程、平滑升级等 ; 一个或多个worker进程: 处理并响应用户请求; 缓存进程: cache loader cache manager nginx的功用: 静态的web资源服务器; 结合FastCGI/uwsgi/SCGI等协议反代动态资源请求;(lnmt, lnmp) http/https协议的反向代理(负载均衡upstream) smtp/imap/pop协议的反代; tcp/udp协议的反代; Nginx的模块类型: 核心模块:core module 标准模块: Standard HTTP modules 标准http模块 Optional HTTP modules 可选http模块 Mail modules E-Mail模块 Stream modules 负载均衡模块 3rd party modules 第三方模块 nginx安装配置: 官方的预制包: http://nginx.org/packages/centos/7/x86_64/
编译安装: # yum install pcre-devel zlib-devel openssl-devel # ./configure --prefix=/usr/local/nginx --sbin-path=/usr/sbin/nginx --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --user=nginx --group=nginx --with-http_ssl_module --with-http_v2_module --with-http_dav_module --with-http_stub_status_module --with-threads --with-file-aio # make -j # && make install *************************************** |
nginx