一、了解一些简单的概念

  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

http服务器搭建之apache与nginx的特性的更多相关文章

  1. WEB服务器如何选择 Apache or Nginx?

    Web服务器是直接影响网站性能的关键因素,也是每个站长选择网站运营环境时必然考虑的问题.目前Web服务器市场产品众多,最为主流和代表性的当属Apache.Nginx以及微软的IIS.本文目的是通过Ap ...

  2. rtmp与hls流媒体服务器搭建:ubuntu下Nginx搭建初探与rtmp-module的添加

    关键词:Nignx(http服务器):rtmp,hls(流媒体服务) 前言:感谢开源,感谢战斗民族.现在在做流媒体服务的一些工作,流媒体服务器搭建的网上教程多入牛毛,但是细细查看,发现很多同志贴上来的 ...

  3. 服务器搭建纪录linux+mysql+nginx+php

    新的项目启动 第一版 首先买了阿里云,选好环境镜像包,一键安装. 第一版php打算不用框架,完全手写,主要的功能点 数据交互和图片传输. 后台搭建好后,使用PHP的Laravel, web端还是选定b ...

  4. WEB服务器搭建(Apache+Tomcat+eclipse)

    1.下载xampp安装,选择Apache+MySQL+Tomcat 官方下载链接:https://www.apachefriends.org/zh_cn/download.html 2.下载安装jav ...

  5. 【转】PHP利用Apache、Nginx的特性实现免杀Webshell

    转载备忘: get_defined_vars().getallheaders()是两个特性函数,我们可以通过这两个函数来构造我们的webshell. 前几天看到的,一直忘记写,填坑. 环境 函数 用法 ...

  6. PHP服务器Apache与Nginx的对比分析

    PHP服务器Apache与Nginx的对比分析 本篇文章给大家带来的内容是关于PHP服务器Apache与Nginx的对比分析,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. Apach ...

  7. Web服务(Apache、Nginx、Tomcat、Jetty)与应用(LAMP、CMS-WordPress&Ghost、Jenkins、Gitlab)

    Web服务和应用是目前信息技术领域的热门技术.如何使用Docker来运行常见的Web服务器(包括Apache.Nginx.Tomcat等),以及一些常用应用(LAMP.CMS等).包括具体的镜像构建方 ...

  8. 面向新手的Web服务器搭建(一)——IIS的搭建

    很多童鞋说自己是做移动开发的,想挂个简单的Web API,可是服务器又不会搭,这样一来测试就成了问题.看看网上的教程,发现略难懂,而且大多是一个转一个,没价值,所以干脆写几篇文章讲讲简单的Web服务器 ...

  9. Apache与Nginx的优缺点比较

    1.nginx相对于apache的优点: 轻量级,同样起web 服务,比apache 占用更少的内存及资源 抗并发,nginx 处理请求是异步非阻塞的,而apache 则是阻塞型的,在高并发下ngin ...

随机推荐

  1. Vue-router重修02

    1.权限控制 例如:登录后登录前的页面不一样 借助路由元信息完成 一个示例: <!DOCTYPE html> <html lang="en"> <he ...

  2. 数位dp-Bomb

    难受啊!!越做题是越感觉菜,这个又被几个坑给卡住了(只有我这个学渣才会卡) 坑点:1.考虑n是否已包含49,有的话还要再+1. 2, 注意从最高开始考虑时,再判断时要考虑它本身为0的情况,.比如n=5 ...

  3. Java Fileupload

    fileupload FileUpload 是 Apache commons下面的一个子项目,用来实现Java环境下面的文件上传功能,与常见的SmartUpload齐名. 组件 1.FileUpLoa ...

  4. sublime No packages available for installation

    package control user-setting 中添加: "channels": [ "C:\\channel_v3.json" ], channel ...

  5. typescript之初学习

    ts的优势: 支持ES6规范 强大的IDE支持(类型检测.语法提示.重构等) Angular的开发语言 ts的新特性: 一.字符串 1.多行字符串,使用反引号`` 2.字符串模板,使用表达式传入变量和 ...

  6. 串口RS232和485通信的波形分析

    一.串行数据的格式 异步串行数据的一般格式是:起始位+数据位+停止位,其中起始位1 位,数据位可以是5.6.7.8位,停止位可以是1.1.5.2位. 起始位是一个值为0的位,所以对于正逻辑的TTL电平 ...

  7. js-day06-jQuery事件和DOM操作-练习题

    jQuery事件绑定 js中绑定事件,三种方式: 方式1: 直接在元素上,增加onXxx事件属性. <button onclick="alert(1);">点我< ...

  8. HTML标题 段落 样式

    HTML 标题 标题(Heading)是通过 <h1> - <h6> 等标签进行定义的. <h1> 定义最大的标题.<h6> 定义最小的标题. 注释:默 ...

  9. java byte 梳理

    最近写编解码的代码比较多,抽一点时间梳理下java下byte的解析.在例子代码中主要涉及的知识点就两块: 1.byte代表8个bit,其中最高位是符号位: 2.当我们用String类的getBytes ...

  10. Spring Cloud 微服务架构全链路实践

    阅读目录: 1. 网关请求流程 2. Eureka 服务治理 3. Config 配置中心 4. Hystrix 监控 5. 服务调用链路 6. ELK 日志链路 7. 统一格式返回 Java 微服务 ...