首页 > 代码库 > 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