1  概述

LAMP:Linux+Apache+Mysql/MariaDB+Perl/PHP/Python一组常用来搭建动态网站或者服务器的开源软件,本身都是各自独立的程序,但是因为常被放在一起使用,拥有了越来越高的兼容度,共同组成了一个强大的Web应用程序平台。

一般生产环境,数据库在不同的机器上,最好把mariadb也放在不同的机器上,apache和php放在同一台机器上。

本文主要介绍LAMP的相关概念

2  概念介绍

LAMP工作原理如下图

1240

.apache:进程为httpd:接收用户的web请求;静态资源则直接响应,如index.html,.txt,.jpg,.css,.js这些静态文件;动态资源为php脚本,对此类资源的请求将交由php来运行

.Perl/PHP/Pytho:运行相关程序

.Mysql/MariaDB:数据管理系统

.http与php结合的方式:CGI和FastCGI

modules (将php编译成为httpd的模块,默认方式):MPM:,其中,prefork为libphp5.so;event和worker为libphp5-zts.so

.WEB资源类型:

静态资源:原始形式与响应内容一致

动态资源:原始形式通常为程序文件,需要在服务器端执行之后,将执行结果返回给客户端

服务器端存放的内容和客户端看到的内容不一样,如服务器端执行一段程序,将结果通过http协议进行封装在发给客户,而客户端看到的是服务器程序执行的结果,服务器端执行指令,要消耗大量的资源,所以服务器性能会降低。

.Web相关语言

客户端技术:Javascript,html

服务器端技术:php, jsp,python

PHP的MODULE、CGI、FASTCGI三种工作模式

CGI

common gateway interface,翻译为通用网关接口。简单地讲,它就像一座桥,把web服务器和实际执行程序连接起来,CGI解决两种不同协议间的通信。在此模式下的工作流程:

Client-->http(协议) -->apache( httpd)--cgi(访问接口)--> application server (program file,如php,python,perl) --mysql(协议) --> mysql(存储)-->web server-->client;

当web server接到一个动态http请求时,会去调用php解释器,即fork一个php解释器进程(包括读取php.ini配置文件,加载相关模块等),执行完请求之后,释放刚刚fork的进程,并把结果返回给client。可以明显看到,每有一个请求的时候,都会有fork进程,销毁进程的动作,这也是其性能低下的原因。

FASTCGI

快速CGI。它的原理同CGI一样,不同之处在于:它在web server启动的时候,会启动一个fastcgi管理器,如phpfpm,同时启动多个包含php解释器的进程,从而形成一个由phpfpm管理的进程池,这样,在web server在接到请求时,会由phpfpm调度一个进程去执行,而且执行完这个进程并不释放,而是回到池中。因为有了进程池,省去了fork、destory的过程,性能得以提升。

MODULE

这种模式常见于apache之下,php作为apache的一个进程,这样它的工作流程变为:client——》web server——》client;因为php是apache的一个模块,apache的进程之中已包含了php解释器,可以执行php,因为apache的进程管理也有进程池的概念,因此这种模式的性能也高于CGI.

FASTCGI与MODULE:这两种模式都有进程池的概念,性能上比CGI要高一些,区别在于一个进程池是web server的进程池,一个是php的进程池;FASTCGI这种模式下,可以比较好的分离动态和静态请求,php出了问题不会影响web server。

3 常见LAMP应用

.PhpMyAdmin是一个以PHP为基础,以Web-Base方式架构在网站主机上的MySQL的数据库管理工具,让管理者可用Web接口管理MySQL数据库,部署方法见博客:http://ghbsunny.blog.51cto.com/7759574/1970714

.WordPress是一种使用PHP语言开发的博客平台,用户可以在支持PHP和MySQL数据库的服务器上架设属于自己的网站。也可把WordPress当作一个内容管理系统(CMS)来使用,部署方法见博客:http://ghbsunny.blog.51cto.com/7759574/1970716

.PHPWind:2003年发布了PHPWind的前身版本ofstar,并发展成为包含BBS、CMS、博客、SNS等一系列程序的通用型建站软件,于2008年加入阿里巴巴集团

.Crossday Discuz! Board(简称Discuz!)是一套通用的社区论坛软件系统。自2001年6月面世以来,是全球成熟度最高、覆盖率最大的论坛软件系统之一。2010年8月23日,与腾讯达成收购协议

.ECShop是一款B2C独立网店系统,适合企业及个人快速构建个性化网上商店。系统是基于PHP语言及MYSQL数据库构架开发的跨平台开源程序。2006年6月,ECShop推出第一个版本1.0