http服务器搭建之apache与nginx的特性

一、了解一些简单的概念

  HTTP服务器程序:

    httpd(apache)

    nginx

    lighttpd(功能和nginx差不多,活跃度不如ng)

 

  应用程序服务器:

    IIS

    Tomcat(开源jsp容器),jetty(开源轻量级jsp容器),jboss(2次封装tomcat-jsp),resin(教学)、webshpere(重量级)、weblogic(bea公司大量市场份额),oc4j(oracle的,已经把bea公司买了,oc4j已经没有市场)

 

二、HTTPD(Apache)

  httpd:apache(a patchy server)

  ASF(软件基金会):apache software foundation

  1、httpd特性

  ①、高度模块化:core + modules,

    运行再编译或运行时,选择哪些模块将会加载到服务器,来确定服务器特性

  ②、DSO:Dynamic Shared Object 动态共享对象

  ③、MPM:Multipath Processing Modules 多路处理模块

  能够更好的为有特殊要求的站点定制,例如,要求高伸缩性的站点可以选择线程的MPM,(worker,event);需要可靠性或者与旧软件兼容站点可以使用prefork。

    httpd-2.4支持,MPM支持运行DSO机制;以模块形式按需加载;

  1)prefork:多进程模型,每个进程响应一个请求;

    一个主进程:负责生成n个子进程,子进程也称为工作进程,每个子进程处理一个用户请求;即便没有用户请求,也会预先生成多个空闲经常,随时等待请求到达;最大不会超过1024个;

    主进程:管理子进程,创建套接字,接受用户请求,并派发某个子进程

    子进程:处理请求和响应请求

  2)worker:多线程模型,每个现成响应一个请求;(比prefork不相上写,每天15万)

    一个主进程:生成多个子进程,每个子进程负责多个线程,每个线程响应一个请求;m进程,n线程;m*n

    主进程:管理子进程,创建套接字,接受用户请求,并派发给某个子进程处理

    子进程:负责管理线程

    线程:处理请求和响应请求;

  3)event:事件驱动模型,每个线程响应N个请求;,和worker很像,多个进程+多个线程的混合模式,但是event模型下每个进程会有一个单独的线程来管理这些keep-alive类型的线程,当新的请求过来的时候,管理线程会把请求交给其他空闲线程处理,这样旧避免了每个线程都被keep-alive阻塞。但是event模型并不是所有情况都通用,再https协议下会退化成worker模型

    一个主进程:生成M个子进程,每个进程直接n个请求,m*n

    主进程:管理子进程,创建套接字,接受用户请求,并派发给某个子进程

    子进程:处理请求和响应请求

    httpd-2.2,event为测试使用,不支持DSO机制的MPM

    httpd-2.4,event为生产使用,production ready,支持DSO机制的MPM。

2、HTTPD的功能特性

  虚拟主机:能够标识虚拟主机的方式:IP + PORT + HOSTNAME(IP、Port、FQDN)

  CGI:common gateway interface ,通用网关接口;

  反向代理 :reverse proxy

  负责均衡 :基于流量(bytraffic),基于业务(bybusiness),基于请求(byrequest)

  路径别名

  丰富的用于认证机制:basic、digest

  支持第三方模块

 

三、Nginx

  1、简介 

    nginx2004年正式发布,Apache是1995年

    Apache以稳定著称但是随着互联网的日渐壮大,网站的并发变大,Apache就出现了一个C10K的问题,即一个物理服务器达到并发量1w的时候apache就会承受不了,后来2004年nginx很好的解决了c10k的问题。

    淘宝用的Tengine nginx,简称tng

  2、特性

    模块化设计、较好扩展性(不支持动态装卸载,tng支持)

  

    高可靠性

      master--->worker

      nginx服务器使用的异步机制是异步非阻塞方式,也就是master-->worker,每个工作进程使用异步非阻塞方式,可以处理多个客户端请求,当某个工作进程接收到客户端的请求,调用IO进行处理,如果不能立即获得结果,就去处理其他的请求,而客户端再此期间也无需等待响应,可以去处理其他事情,当IO返回时,就会通知此工作进程,该进程得到通知,暂时挂起当前处理的失误区响应客户端请求。

      nginx采用异步非阻塞方式处理请求,处理请求具体到系统底层就是读写事件(所谓阻塞调用方式即请求事件还没准备好,线程只能一直等待,等事件准备好了再处理;而非阻塞即事件没准备好,马上返回ENGAIN,告诉你事件还没准备好,而再这期间可以先去做其他事,再回头看看事件准备好了吗,时不时的看,需要的开销也是不小的)

      异步可以理解为循环处理多个准备好的事件,不会导致无畏的资源浪费,当有更多的并发数只会占用更多的内存而已

  

    低内存消耗

      10000个keep-alive连接再ningx仅消耗2.5MB

  

    支持热部署

      不停机而更新配置文件、更好日志文件、更新服务器程序版本

  

    支持事件驱动、AIO(异步io,epoll等)、mmap(内存映射)

  

  3、基本功能

    处理静态资源的web服务器,能缓存打开的文件描述符,索引文件以及自动索引;

    http,smtp,pop3协议的反向代理服务器加速,缓存、负载均衡;

    支持FastCGI(fpm,LNMP),uWSGI(python),memcached server等;

    模块化,非DSO机制,过滤器包括zip,图形大小调整、byte ranges,chunked responses以及SI-filter,在SSI过滤器中,到同一个proxy或FastCGI的多个子请求并发处理;

    支持SSL,TLS SNI;

  

   4、nginx结构与扩展

    一个master进程,生成一个或多个worker;

    事件驱动:epoll(边缘触发,支持linux2.6+),kqueue(BSD 4.1+),/dev/poll(event prots,solaris 7 11/99+);

    消息通知(复用器):select,poll,rt signals(实施信号);

    支持sendfile(linux2.2+),sendfile64(linux2.4.21+),sendfilev(solaris 8 7/01+);

    支持输入过滤(freeBSD 4.1+)及TCP_DEFER_ACCEPT(linux2.4+);

    最小化的数据库拷贝操作;

 

   5、扩展功能

    基于名称和IP 的多虚拟主机站点

    支持keepalive和pipelined(管道)连接

    支持平滑升级,不中断业务

    定制访问日志,支持使用日志缓冲区提高日志存储性能

    4xx-5xx错误代码重定向;

    支持URL, 基于PCRE的rewrite重写模块,及正则表达式

    支持路径别名

    支持基于IP 及用户的访问控制

    支持速率限制,支持并发数限制

    支持 PUT,DELETE,MKCOL,COPY及MOVE等较特殊的HTTP请求

    可以做HTTP反向代理及加速缓存,即负载均衡功能,内置都RS节点服务器健康检查功能,这相当于专业的Haproxy软件或LVS功能

    具备Squid等专业缓存软件等缓存功能

    支持FLV(flash视频);

 

  6、nginx的工作模式

    非阻塞、事件驱动、一个master生成一个或多个worker,每个worker响应n个请求;

      worker*n 国人单机最高并发达到52000个

    nginx是一个高性能得web服务器,能够同时处理大量得并发请求,它结合多进程机制和异步机制,异步机制使用得异步非阻塞方式,接下来就给大家

   

  7、五大模块

    核心模块、标准HTTP模块、可选HTTP模块、邮件服务模块和第三方模块。

    

      1)、核心模块:nginx最基本的核心服务,进程管理、权限控制、错误日志记录等;

      2)、标准HTTP模块:标准HTTP模块支持标准的HTTP功能;

      3)、可选HTTP模块:主要用于扩展标准HTTP功能,让Nginx能处理一些特殊服务;

      4)、邮件服务模块:主要用于支持Nginx的邮件服务;

      5)、第三方模块:扩展Nginx服务器应用,完成开发者想要的功能;

    模块图如下:

    

       

   8、nginx,master-worker模型架构图

  

  9、nginx整体架构图

  

 

  主进程

  nginx启动时,会生成两种类型的进程,一个是主进程master一个或多个工作进程worker,主进程并不处理网络请求,主要负责调度工作进程,加载配置、启动工作进程及非停升级。所以nginx启动后查看系统进程,就能看到至少两个nginx进程

  工作进程

  服务器实际处理网络请求响应的是工作进程worker,在类unix系统上,nginx可以配置多个worker,每个worker进程都可以同时处理数以千计网络请求

  模块化设计

  包括核心功能性模块核心模块负责维持要给运行循环run-loop,执行网络请求处理的不同阶段的模块功能,比如:网络读写、存储读写、内容传输、外出过滤,以及将请求发往上游服务器等,而其代码模块化设计,也使得我们可以根据需要对功能模块进行适当的选择修改,编译成具有特定功能的服务器

  事件驱动模型

  基于异步及非阻塞事件模型,可以说是nginx得以获得高并发、高性能得关键因素,同时也得益于对linux、solaris及类BSD等操作系统内核中事件通知及I/O性能增强功能得采用,如kqueue、epoll及event ports。

  代理设计

  代理设计,可以说是nginx深入骨髓得设计无论是对于HTTP,还是FastCGI、Memcache、Redis等得网络请求或响应,本质上都采用了代理机制,所以,Nginx天生就是高性能得代理服务器

 

 

 

转载请注明出处:https://www.cnblogs.com/zhangxingeng/p/10150955.html 

 

posted @ 2018-12-25 18:43  乐章  阅读(1561)  评论(0编辑  收藏  举报