一、了解一些简单的概念

  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. 引用Excel控件时,无法嵌入互操作类型“Microsoft.Office.Interop.Excel.ApplicationClass”请改用适用的接口

    类型Microsoft.Office.Interop.Excel.ApplicationClass未定义构造函数 无法嵌入互操作类型“Microsoft.Office.Interop.Excel.Ap ...

  2. Nginx如何对日志文件进行配置?

    在我们日常工作开发中,对调试bug最重要的手段就是查看日志和断点调试了. 今天我们来说日志文件,Nginx的日志文件一般保存的是访问日志和错误日志. 1. 用来log_format指令设置日志格式 l ...

  3. SELECT 语句

    常见表的操作 查看数据库的表   show  table 查看表结构     desc 表名 删除表   drop table表 修改表的结构 添加列  alter   table 表名 add 列名 ...

  4. vue变异方法

    push()  往数组最后面添加一个元素,成功返回当前数组的长度    pop()  删除数组的最后一个元素,成功返回删除元素的值    shift()  删除数组的第一个元素,成功返回删除元素的值u ...

  5. 手把手教你从零开始搭建SpringBoot后端项目框架

    原料 新鲜的IntelliJ IDEA.一双手.以及电脑一台. 搭建框架 新建项目 打开IDE,点击File -> New Project.在左侧的列表中的选择Maven项目,点击Next. 填 ...

  6. 深入理解Spring Redis的使用 (六)、用Spring Aop 实现注解Dao层的自动Spring Redis缓存

    摘要: 主要针对Dao层的一些数据库查询的操作,数据实时性不强,直接加入缓存.当缓存中有的时候,就使用缓存中的数据.这样的方法,最终仅仅使用一个注解实现.对于之前的hibernate二级缓存使用,比较 ...

  7. Spring Cloud 微服务架构的五脏六腑,统统晒一晒!

    Spring Cloud 是一个基于 Spring Boot 实现的微服务框架,它包含了实现微服务架构所需的各种组件. 注:Spring Boot 简单理解就是简化 Spring 项目的搭建.配置.组 ...

  8. LeetCode724. 寻找数组的中心索引

    1.题目描述 给定一个整数类型的数组 nums,请编写一个能够返回数组“中心索引”的方法. 我们是这样定义数组中心索引的:数组中心索引的左侧所有元素相加的和等于右侧所有元素相加的和. 如果数组不存在中 ...

  9. PCD文件格式详解及在PCL下读取PCD文件

    一.PCD简介 1.1 PCD版本 在点云库PCL 1.0发布之前,PCD文件格式就已经发展更新了许多版本.这些新旧不同的版本用PCD_Vx来编号(例如PCD_V5.PCD_V6和PCD_V7等),分 ...

  10. CSS怎么在项目里引入自定义字体(@font-face)

    前言: 以前我一直用内置的默认字体给文字设置字体,直到一天UI妹纸给了我下面的字体    当时我是蒙蔽的,这个字体的效果如下 默认字体并无该字体,直接设置是没有效果的,这时就需要用到自定义字体了 下面 ...