目前网络上主流的网络架构有两种:
LAMP== Linux+Apache+Mysql+PHP
LNMP== Linux+Nginx+Mysql+PHP(国外喜欢简称为LEMP,搜英文资料需要搜LEMP)
LAMP和LNMP最主要的区别在于:
一个使用的是Apache,一个使用的是Nginx。
Nginx
Nginx 性能稳定、功能丰富、运维简单、处理静态文件速度快且消耗系统资源极少。
1、相比 Apache,用 Nginx 作为 Web 服务器:使用资源更少,支持更多并发连接,效率更高。
2、作为负载均衡服务器:Nginx 既可在内部直接支持 Rails 和 PHP,也可支持作为 HTTP 代理服务器对外进行服务。Nginx 用 C 编写而成, 不论是系统资源开销还是 CPU 使用效率都比 Perlbal 要好的多。
3、作为邮件代理服务器:Nginx 同时也是一款非常优秀的邮件代理服务器(最早开发这个产品的目的之一,是作为邮件代理服务器)。
4、反向代理可以根据url将请求转向于不同用途的集群,比如图片请求,转向图片服务器集群;视频请求,转身视频服务器集群。nginx是一款轻量级的web服务器/反向代理服务器/电子邮件代理服务器,安装非常简单,配置文件也很简洁(还支持 perl 语法)。Nginx 支持平滑加载新配置,还能够在不间断服务的情况下进行软件版本升级。
Apache
1、Apache 是 LAMP 架构最核心的 Web Server,开源、稳定、模块丰富是 Apache 的优势。但 Apache 的缺点是有些臃肿,内存和 CPU 开销大,性能上有损耗,不如一些轻量级的 Web 服务器(譬如:Nginx、Tengine等)高效,轻量级的 Web 服务器对于静态文件的响应能力来说远高于 Apache 服务器。
2、Apache 做为 Web Server 是负载 PHP 的最佳选择,如果流量很大的话,可以采用 Nginx 来负载非 PHP 的 Web 请求。Nginx 是一个高性能的 HTTP 和反向代理服务器,Nginx 以其稳定、丰富功能集、示例配置文件和低系统资源的消耗而闻名。Nginx 现能支持 PHP 和 FastCGI,也支持负载均衡和容错,可和 Apache 配合使用,是轻量级的 HTTP 服务器的首选。
3、Web 服务器缓存也有多种方案,Apache 提供了自己的缓存模块,也可以使用外加的 Squid 模块进行缓存,这两种方式均可有效提高 Apache 的访问响应能力。Squid Cache 是一个 Web 缓存服务器,支持高效缓存,可作为网页服务器的前置 cache 服务器缓存相关请求以提高 Web 服务器速度。把 Squid 放在 Apache 的前端来缓存 Web 服务器生成动态内容,而 Web 应用程序只需要适当地设置页面实效时间即可。如访问量巨大,则可考虑使用 memcache 作为分布式缓存。
4、PHP 的加速可使用 eAccelerator 加速器,eAccelerator 是一个自由开放源码的 PHP 加速器。它会优化动态内容缓存,提高 PHP 脚本缓存性能,使 PHP 脚本在编译状态下,对服务器的开销几乎完全消除。它还可对脚本起优化作用,以加快其执行效率。 使 PHP 程序代码执效率可提高 1-10 倍。
LNMP是Linux+Nginx+Mysql+PHP的组合方式,其特点是利用Nginx的快速与轻量级,替代以前的LAMP(Linux+Apache+Mysql+PHP)的方式。由于安装方便,并且安装脚本也随时更新。
LNMP方式的优点:占用VPS资源较少,Nginx配置起来也比较简单,利用fast-cgi的方式动态解析PHP脚本。
LNMP方式的缺点:php-fpm组件的负载能力有限,在访问量巨大的时候,php-fpm进程容易僵死,容易发生502 bad gateway错误
综上所述:
基于 LAMP 架构设计具有成本低廉、部署灵活、快速开发、安全稳定等特点,是 Web 网络应用和环境的优秀组合。若是服务器配置比较低的个人网站,当然首选 LNMP 架构。
当然,在大流量的时候。把Apache和Nginx结合起来使用,也不失为一个不错选择,如下:
LNAMP是Linux+Nginx+Apache+Mysql+PHP的组合方式,其特点是利用Nginx来作为静态脚本的解析,而利用 Nginx的转发特性,将动态脚本的解析转交给Apache来处理,这样,能充分利用两种Web服务器的特点,对于访问量需求较大的站点来说,是一个很不错的选择。
LNAMP方式的优点:由于Apache本身处理PHP的能力比起php-fpm要强,所以不容易出现类似502 bad gateway的错误。适合访问量较大的站点使用。
LNAMP方式的缺点:相比LNMP方式会多占用一些资源,另外,配置虚拟主机需要同时修改Nginx和Apache的配置文件,要稍微麻烦一些。
(1)工作原理
客户端的所有的页面请求先到达lnmp结构中的nginx nginx根据自己的判断哪些是静态页面,哪些是动态页面 如果是静态页面直接由nginx自己处理就可以返回结果给客户端了 如果*.php动态页面nginx需要调用php中间件服务器来处理 在处理PHP页面的过程中可能需要调用mysql数据库中的数据完成页面编译 编译完成后的页面返回给nginx,nginx再返回给客户端
(2)Nginx
nginx是http服务器软件,nginx的特点是处理速度非常快,占用的资源很少。功能上nginx模块全部是静态编译的,也就是说如果需要处理动态的编译需要安装其他软件来完成动态的编译。
<1>nginx的的优势
作为web服务器处理静态文件,索引文件,自动索引的效率非常高
作为代理服务器,可以实现无缓存的反向代理,提高网站运行速度
作为负载均衡服务器,可以在内部直接支持rails和php等
性能方面,采用epoll模型,可以支持多并发并且占用低内存
稳定方面,采取分段资源分配技术,CPU和内存占用率非常低,少量的dos攻击对nginx基本无作用,
高可用方面,支持热部署,启动迅速,可以在不间断服务的情况下,直接升级7x24小时不间容灾
<2>nginx的模块和工作原理
nginx由内核和模块组成,模块结构分为核心模块,基础模块,第三方模块
模块 | 组成 |
---|---|
核心模块 | http模块,event模块,mail模块 |
基础模块: | http fastCGI模块,http proxy模块,http rewrite模块 |
第三方模块 | http upstream request hash 模块,notice模块,htttp access key 模块 |
模块从功能上分为如下三类
模块 | 功能 |
---|---|
Handlers(处理器模块) | 直接处理请求,并进行输出内容和修改headers信息操作只有一个 |
Filters(过滤模块) | 主要对其他处理器模块输出的内容进行修改操作,最后由nginx输出案例故障汇总 |
Proxies(代理类模块) | 主要与后端一些服务比如FastCGI进行交互,实现代理和负载均衡 |
在工作方式上
nginx模块的HTTP请求和响应过程图如下:
<3>nginx进程理解
nginx进程
nginx启动后。在linux系统中以Daemon的方式在后台运行,后台进程包含一个master进程和多个work进程,默认以多进程方式
master管理work 外界的信号都是发给master,再由master分配给work进程
master进程
管理work进程 外界的信号都是发给master,再由它分配给work进程 监控work的运行状态,如发生异常,重新启动新的进程
work进程
work之间是对等的 基本的网络请求都是在work中进行 一个请求只能在一个work进程中进行 一个work进程也不能处理其他进程的请求 work进程的个数是可设置的,一般跟CPU核数相同
master进程主要用来管理worker进程,具体包括如下4个主要功能