Nginx、Apache、PHP、MySQL、redis各自的底层工作原理

–>

Nginx的底层工作原理

一、Nginx工作原理与模块介绍

1、Nginx基本工作原理

NGINX以高性能的负载均衡器,缓存,和web服务器闻名。Nginx由内核和模块组成,当它接到一个HTTP请求时,仅仅通过查找配置文件将客户端请求映射到一个location block,而在这个location中所配置的每个指令将会启动不同的模块去完成相应的工作。

因此模块可以看做Nginx真正的劳动工作者。通常一个location中的指令会涉及一个handler模块和多个filter模块。handler模块负责处理请求,完成响应内容的生成,而filter模块对响应内容进行处理。

Nginx的模块直接被编译进Nginx,因此属于静态编译方式。启动Nginx后,Nginx的模块被自动加载,不像Apache,首先将模块编译为一个so文件,然后在配置文件中指定是否进行加载。在解析配置文件时,Nginx的每个模块都有可能去处理某个请求,但是同一个处理请求只能由一个模块来完成。

2、Nginx模块分类

Nginx的模块从结构上分为核心模块、基础模块和第三方模块

  • 核心模块包括:HTTP模块、EVENT模块和MAIL模块

  • 基础模块包括:HTTP Access模块、HTTP FastCGI模块、HTTP Proxy模块和HTTP Rewrite模块

  • 第三方模块包括:HTTP Upstream Request Hash模块、Notice模块和HTTP Access Key模块

3、 Nginx为啥性能高-多进程IO模型
  • 1、nginx采用多进程模型好处
    进程隔离

  • 2、nginx多进程事件模型:异步非阻塞

二、Nginx+FastCGI运行原理

1、什么是 FastCGI

  • FastCGI是一个可伸缩地、高速地在HTTP server和动态脚本语言间通信的接口。

  • 多数流行的HTTP server都支持FastCGI,包括Apache、Nginx和lighttpd等。同时,FastCGI也被许多脚本语言支持,其中就有PHP。

  • FastCGI是从CGI发展改进而来的。传统CGI接口方式的主要缺点是性能很差,安全性也很差,现在已经很少使用了。

2、Nginx+FastCGI运行原理

Nginx不支持对外部程序的直接调用或者解析,所有的外部程序(包括PHP)必须通过FastCGI接口来调用。FastCGI接口在Linux下是socket(这个socket可以是文件socket,也可以是ip socket)。

3、Nginx+PHP-FPM

  • PHP-FPM是管理FastCGI的一个管理器,它作为PHP的插件存在,
  • Nginx通过location指令,将所有以php为后缀的文件都交给127.0.0.1:9000来处理,而这里的IP地址和端口就是FastCGI进程监听的IP地址和端口。

PHP的底层工作原理

  • Zend引擎:Zend整体用纯C实现,是PHP的内核部分,它将PHP代码翻译(词法、语法解析等一系列编译过程)为可执行opcode的处理并实现相应的处理方法、实现了基本的数据结构(如hashtable、oo)、内存分配及管理、提供了相应的api方法供外部调用,是一切的核心,所有的外围功能均围绕Zend实现。

  • Extensions:extensions通过组件式的方式提供各种基础服务

  • Sapi:就是服务端应用编程接口

  • 上层应用:这就是我们平时编写的PHP程序

  • 如果PHP是一辆车,那么车的框架就是PHP本身,Zend是车的引擎(发动机),Ext下面的各种组件就是车的*,Sapi可以看做是公路,车可以跑在不同类型的公路上,而一次PHP程序的执行就是汽车跑在公路上。因此,我们需要:性能优异的引擎+合适的车轮+正确的跑道。

本文来源 互联网收集,文章内容系作者个人观点,不代表 本站 对观点赞同或支持。如需转载,请注明文章来源,如您发现有涉嫌抄袭侵权的内容,请联系本站核实处理。

© 版权声明

相关文章