Nginx概述,Nginx与Apache区别

root
233
文章
0
评论
2020年5月19日16:43:54 评论 3175字阅读10分35秒

Nginx 概述

Nginx ("engine x") 是一个高性能的 HTTP 和 反向代理 服务器。Nginx 是由 Igor Sysoev 为俄罗斯访问量第二的 Rambler.ru 站点开发的,第一个公开版本0.1.0发布于2004年10月4日。其将源代码以类BSD许可证的形式发布,因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。2011年6月1日,nginx 1.0.4发布。
       Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行。由俄罗斯的程序设计师Igor Sysoev所开发,供俄国大型的入口网站及搜索引擎Rambler(俄文:Рамблер)使用。其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度BWS、新浪、网易、腾讯等
 
 
web 服务器 -- 高性能 --> 对比Apache 并发量高(5-10倍) --> 轻量级 --> 代码上
反向代理服务器
- 什么是代理  - 中间人 | 代替某个人去处理
  • 正向代理 - 只能用于客户端 - 家里NAT共享上网(路由器) - 个人使用VPN -> 代理设备代替客户端发送请求,保护了客户端信息
  •  反向代理 - 用于服务器 - 集群架构|缓存 - Nginx | squid等 -> 代理设备代替服务器进行请求的接收 -> 吧请求发送给真实服务器(RS),进而保护了RS的信息
-代理的作用是什么 --> 安全 
Nginx官方网站
Mainline 主线版本  -- 奇数版本 - 开发&测试版本 --> 开发团队 - 二次开发
Stable 稳定版本 -- 偶数版本 - 稳定&生产 - 中小企业
Lengacy 历史版本 -- 偶数版本 - 稳定的 
     最新架构 - 选择最新稳定的 --> Nginx (中小企业源码 - 大企业yum) --> Nginx支持YUM安装-EPEL源
如何选择版本 -->  多个稳定 选谁? --> 1、具体业务 - 某个版本是否支持 --> 2、会选择距离现在半年左右的稳定版本 --> 3、两个稳定版本之间的检测(半年-1年) 

了解Tengine

       Tengine是由淘宝网发起的Web服务器项目。它在Nginx的基础上,针对大访问量网站的需求,添加了很多高级功能和特性。Tengine的性能和稳定性已经在大型的网站如淘宝网,天猫商城等得到了很好的检验。(可以这样理解:淘宝拿到了Nginx源代码之后,进行了功能的填充,优化等等,然后提交给Nginx官方,但是由于Nginx官方相应慢或者不响应,加上语言沟通的不顺畅,于是淘宝公司就自己打包,在遵循GPL的原则上进行二次开发,于是就出了现在的Tengine这个版本)。  - Tengine 适用于电商网站
       官网网站:http://tengine.taobao.org/

LNMP工作原理

Nginx 本身只支持静态页面的处理,当客户端访问php页面的时候,nginx会将php转到php-fpm也处理,
php-fpm服务会把php页面解析成html文件给nginx处理,nginx返回给客户端处理
这里需要结合Apache的工作,对PHP文件处理过程的区别
       1:Nginx是通过php-fpm这个服务来处理php文件
       2:Apache是通过libphp5.so这个模块来处理php文件
Apache:
Nginx:
 Apache的libphp5.so随着apache服务器一起运行,而Nginx和php-fpm是各自独立运行,所以在服务的运行过程中,Nginx和php-fpm都需要分别启动!
Nginx特点是占有内存少,并发能力强,事实上Nginx的并发能力确实在同类型的网页服务器中表现较好。

Nginx相对于Apache优点如下:

  • 高并发响应性能非常好,官方Nginx处理静态文件并发5w/s,标准配置即可:CPU:8C,MEM:16G,Disk:600G(2*300G - SAS - RAID1或者 0);性能相当于Apache的5-10倍
  • 负载均衡及反向代理性能非常强;  CDN = 代理+缓存 = Nginx
  • 系统内存和CPU占用率低;
  • 可对后端服务进行健康检查; [后端的web服务器是否或者,不具备高可以]
  • 支持PHP cgi方式和FastCGI方式;
  • 可以作为缓存服务器、邮件代理服务器;
  • 配置代码简洁且容易上手。

Nginx工作原理  -- 配置文件讲解

Nginx WEB服务器最主要就是各种模块的工作,模块从结构上分为核心模块、基础模块第三方模块,其中三类模块分别如下:
  • 核心模块:HTTP模块、EVENT模块和MAIL模块等;
  • 基础模块:HTTP Access模块、HTTP FastCGI模块、HTTP Proxy模块和HTTP Rewrite模块;
  • 第三方模块:HTTP Upstream Request Hash模块、Notice模块和HTTP Access Key模块、Limit_req模块等;
Nginx的模块从功能上分为如下三类。
  • Handlers(处理器模块):此类模块直接处理请求,并进行输出内容和修改headers信息等操作,Handlers处理器模块一般只能有一个;
  • Filters (过滤器模块):此类模块主要对其他处理器模块输出的内容进行修改操作,最后由Nginx输出;
  • Proxies (代理类模块):此类模块是Nginx的HTTP Upstream之类的模块,这些模块主要与后端一些服务比如FastCGI等进行交互,实现服务代理和负载均衡等功能。
Nginx由内核模块组成,其中内核的设计非常微小和简洁,完成的工作也非常简单,仅仅通过查找配置文件(nginx.conf)将客户端(用户)的请求映射到一个location block(配置段|区域),而location是Nginx配置中的一个指令,用于匹配用户访问的URL路径,而在这个location中所配置的每个指令将会启动不同的模块去完成相应的工作,如图所示:
      Nginx的高并发得益于其采用了epoll模型,与传统的服务器程序架构不同,epoll是Linux内核2.6以后才出现的,Nginx采用epoll模型,异步非阻塞,而apache采用的是select模型:
      Select特点:select 选择句柄的时候,是遍历所有句柄,也就是说句柄有事件响应时,select需要遍历所有句柄才能获取到哪些句柄有事件通知,因此效率是非常低。
     
      epoll的特点:epoll对于句柄事件的选择不是遍历的,是事件响应的,就是句柄上事件来就马上选择出来,不需要遍历整个句柄链表,因此效率非常高。
       Nginx默认以80端口监听在服务器上,并且启动一个master进程,同时有master进程生成多个工作进程,当浏览器发起一个HTTP连接请求,每个进程都有可能处理这个连接,怎么做到的呢?怎么保证同一时刻一个HTTP请求被一个工作进程处理呢。
       首先每个worker进程都是从Master进程fork出来,在Master进程里面,建立好需要listen的socket(listenfd)之后,会fork出多个worker进程。
       所有worker进程的listenfd会在新连接到来时变得可读,为保证只有一个进程处理该连接,所有worker进程在注册listenfd读事件前抢accept_mutex,抢到互斥锁的那个进程注册listenfd读事件,在读事件里调用accept接受该连接。
       当一个worker进程在accept这个连接之后,就开始读取请求、解析请求、处理请求,产生数据后,再返回给客户端,最后才断开连接,这样形成一个完整的请求流程。如图14-2所示:
继续阅读
weinxin
我的微信
这是我的微信扫一扫
  • 文本由 发表于 2020年5月19日16:43:54
  • 除非特殊声明,本站文章均为原创,转载请务必保留本文链接
Nginx 日志分析 Nginx

Nginx 日志分析

Nginx web日志分析 Nginx是一款Web软件,生产环境应用场景: 1、做为web服务器,发布网站代码(处理静态); 2、做为负载均衡软件,可以均衡后端业务 3、做为会话保持软件,将某个会话固...
Nginx 性能调优 Nginx

Nginx 性能调优

Nginx 性能调优 Nginx.conf配置文件常用参数详解 #定义Nginx运行的用户和用户组 user  www  www; #启动进程,通常设置成和cpu的数量相等 worker_proces...
Nginx Rewrite Nginx

Nginx Rewrite

Nginx Rewrite Rewirte规则也称为规则重写,主要功能是实现浏览器访问HTTP URL的跳转(当访问不存在的路径时 -- 跳转到首页  通常而言,几乎所有的WEB服务器均可以支持URL...
NginxLB,LB动静分离 Nginx

NginxLB,LB动静分离

Nginx负载均衡 Nginx WEB默认发布静态页面,也可以均衡后端动态网站,用户发起HTTP请求,如果请求静态页面,Nginx直接处理并返回,如果请求的是动态页面,Nginx收到请求之后会进行判断...
匿名

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: