Linux入门之web服务(四)--- LAMP,爱之初体验

   上几篇博文简单讲述了web服务的基本工作原理,web服务器的实现软件apache的基本配置,以及编译安装httpd2.4。

   在了解了基本原理之后,这里以流行的LAMP架构来学习下web服务。本篇秉承惯例,先不进行全部的功能演示,只是对基本架构的分析,只有对整个体系结构熟悉,有一个“Big Picture”,才能熟练的掌握,并且对其中的原理有深入的了解。做到知其面,更知其心。在以后实际的生产环境中才能迅速的定位问题、解决问题。

   本篇主要内容

   什么是LAMP

   LAMP基本架构

   php与httpd(apache)互联模型

   php与mysql数据互联模型

一、什么是LAMP

   LAMP是当今最为流程的web服务器部署框架。听上去很高大上,其实很平易近人。这里的LAMP分别Linux Apache Mysql Php/perl/python 的首字母。顾名思义,就是在Linux环境下,在前台使用apache作为web服务器程序,使用php/perl/python作为后台脚本处理解释器,mysql作为支撑数据库的一种架构。

   Linux是目前最为稳定、高效、使用广泛的web服务器操作系统平台,凭借其稳定性,赢得了facebook等众多厂商的青睐,这个暂且不表;

   PHP是通用服务器端脚本编程语言,其主要用于web开发以实现动态web页面,它也是最早实现将脚本嵌入HTML源码文档中的服务器端脚本语言之一。同时,php还提供了一个命令行接口,因此,其也可以在大多数系统上作为一个独立的shell来使用。php也是目前web网站开发使用众多的语言之一

   mysql是一个备受互联网公司好评的关系型数据库。在处理高并发等特性上性能相当出色。

二、LAMP基本架构

   Linux入门之web服务(四)--- LAMP,爱之初体验

   这里,暂时先不区分三个服务是否在同一台主机,还是在不同主机,只简单描述三者之间是怎么相互交互的。

   首先,web服务器是接受用户请求的,在接收到客户端的请求后,web服务器会对请求进行判断,如果只是访问静态页面,它只需要将静态页面处理返回给客户端即可;

如果客户端请求中包含了动态页面信息(这里对于动态页面是什么,即怎样工作不做详细解释,只需要知道httpd是不会处理动态页面,需要相关的解释程序执行处理的即可),web服务器会通过相关协议或者服务(如CGI)与处理动态页面的解释程序联系,解释程序处理好后,将生成的结果(静态信息)回传给web服务器,web服务器再响应客户请求。这里,扮演解释程序的就是php。如果在客户端的请求的动态页面中,包含了与数据的交互,就需要解释程序处理与数据库之间的连接。这里要明确的是,httpd是不会与数据发生交互的,它只处理静态页面。php处理动态页面,负责与数据库的联络。

   这里我们以注册论坛为例说明下,假设我们要注册一个论坛帐号,那么我们就需要向论坛的web服务器发出请求,web服务器接收到请求会分析是请求的静态页面还是动态网页,如果仅仅是请求一个静态的页面,它直接将页面发给我们;一旦它发现我们请求的是一个以.php结尾的动态页面,就会与php互动,将工作交给php,php进入工作状态,如果仅仅是处理页面,没有数据通信等,php处理好后直接将结果返还给web服务器 ,但是,我们是在注册,肯定会将我们的帐号、密码上传给服务器,这个时候php就需要与mysql数据库进行沟通,将数据存放至数据库中。这样,在下一次登录的时候,我么就可以正常登录论坛了了。

   

   我们知道LAMP是怎么工作了之后,马上就会面临一个问题,他们三个是怎么知道对方的存在的呢?是怎么进行数据的传输的呢?他们是在一台服务器上,还是在多台服务器上呢?

由于httpd是不会与mysql数据有直接的交互的,因此我们可以将LAMP直接的交互拆解成两部分:httpd与php之间的交互,php与mysql之间的交互。下面我们简单对其进行分析。

三、php与httpd(apache)互联模型

   php与httpd24(apache)之间的交互有三种模式

module php与httpd在同一台主机 php作为http的模块进行工作,在编译是将php与httpd结合,生成httpd相关的工作模块 httpd配置文件中启用php模块,并对php类型和主页进行支持
cgi php与httpd在同一台主机 通过CGI的方式进行连接,消耗系统资源过多
fastcgi php与httpd不在同一台主机 编译php在fpm模式下,通过fastcig协议同httpd进行通信,由fpm管理php进程

httpd加载cgi模块,关闭代理,对php类型和主页进行支持;

php需要启动fpm服务,监听9000端口

module模式

   Linux入门之web服务(四)--- LAMP,爱之初体验    

在这种模式下,php需要被编译安装为httpd的一个模块,我们可以到httpd的模块目录中,可以看到新生成的模块;

httpd在配置文件中加载新的模块,并且配置对php类型文件的支持,对index.php主页类型的支持。这个时候,二者在同一台主机上


fastcgi模式

在这种模式下,二者在不同的主机上,php编译时需要启动fpm的功能,fpm用来管理php进程,减少cgi进程的反复生成销毁。同时与httpd进行通信。

Linux入门之web服务(四)--- LAMP,爱之初体验

httpd和mysql在不同的主机上,在php所在的主机上,编译安装时启动fpm功能来管理cgi进程,一方面用来管理cgi进程,使cgi进程常驻在内存中,这样就节省了大量的资源,要知道cgi进程是非常消耗资源的,它响应一个调用生成一个进程,完成一个响应销毁一个进程,一直反复。另一方面,通过fgcig协议,监听在9000端口上,与远程的httpd服务器进行通信。

三、php与mysql的互联模型

 php的互联也是分为两种,一直是二者在同一台主机上,一种是二者在不同的主机上。

   二者在同一台主机上时:

Linux入门之web服务(四)--- LAMP,爱之初体验

   当php与mysql在同一台主机上的时候,我们在编译php的时候指明php的相关路径,php编译程序会帮我们把php-mysql编译安装好,这样就提供了php连接mysql的驱动。php可以直接与本机上的mysql进行通信。

二者不在同一台主机上时:

Linux入门之web服务(四)--- LAMP,爱之初体验

    众所周知,数据库服务器承载的任务量是巨大的,大量的数据写入和读取操作对数据库服务器性能提出了很高的要求。数据库服务器往往配置了数十GB的内存,甚至更高。因此,将php和mysql防止在同一台主机上是不明智的。

   如果使用PHP5.3以上版本,为了链接MySQL数据库,可以指定mysqlnd,这样在本机就不需要先安装MySQL或MySQL开发包了。mysqlnd从php 5.3开始可用,可以编译时绑定到它(而不用和具体的MySQL客户端库绑定形成依赖),但从PHP 5.4开始它就是默认设置了。mysqlnd提供了一种驱动,能够远程连接mysql数据库。这样,我们就实现了远程连接mysql数据库。

四、小结

   简单描述了httpd(apache)、php、mysql之间互联的模型,实际上要复杂的多,这里只是简单的说明。例如这里为了突出重点,并没有重点说明比较重要的fpm,也没有实际的进行编辑安装php、mysql。

   在下一篇博文中,将采用四台主机,在fastcgi模型下,实现apache、php、mysql分离。等待狂欢!




 Version1.0 2014-3-26

Linux入门之web服务(四)--- LAMP,爱之初体验,布布扣,bubuko.com

Linux入门之web服务(四)--- LAMP,爱之初体验

上一篇:张双老师PHP开发实例教程持续更新中


下一篇:给网站加密