本章blog主要介绍了[LAMP] Linux (Centos)LAMP环境搭建,LAMP源码安装及LAMP架构原理详解,并分别部署php与apache不一样组合方式的LAMP案例。
php
LAMP Server html
-
LAMP简介mysql
LAMP网站框架是目前国际上流行的Web服务架构,该框架包括GNU / Linux 操做系统,Apache HTTP服务器,MySQL 类关系型数据库(RDBMS)以及PHP编程语言。全部组成产品均属于开源类软件 ,自己都是各自独立的程序,可是由于常被放在一块儿使用,拥有了愈来愈高的兼容度,使其更适用于构建动态网站及开发Web应用程序, 现已成为国际流行的框架架构。linux
目前不少流行的商业应用都是采起这个架构,和Java/J2EE架构相比,LAMP具备Web资源丰富、轻量、快速开发等特色,与微软的.NET架构相比,LAMP具备通用、跨平台、高性能、低价格的优点,所以LAMP不管是性能、质量仍是价格都是企业搭建网站的首选平台。nginx
-
LAMP组件c++
GNU / Linux 操做系统: web
Linux是一种相似Unix的计算机操做系统,Linux操做系统有不少个不一样的发行版,如Red Hat 、SUSE 、FreeBSD、Debian、CentOS等。sql
Apache HTTP服务器:数据库
LAMP的HTTP服务器的角色除了由Apache提供外,还包括其余如nginx等的Web服务器 ;其中,Apache负责传递PHP及cgi等动态语言,Nginx提供负载均衡、反向解析及容错功能,彼此配合使用,成为HTTP服务器的配置首选模式。apache
MySQL 类关系型数据库(RDBMS):
MySQL做为LAMP的关系数据库管理系统(RDBMS)的原始角色已经由其余RDBMS(如MariaDB)甚至NoSQL数据库(如MongoDB)逐步取代。MariaDB由MySQL的创始人Michael Widenius主导开发,其属于MySQL的一个分支,主要由开源社区在维护,采用GPL受权许可,且MariaDB彻底兼容MySQL;MongoDB是一个Web规模的开源NoSQL数据库 。
php编程语言:
PHP做为LAMP的应用程序编程语言的原始角色,也逐步由其余语言(如Perl和Python)共同执行。PHP是一种服务器端脚本语言,专为Web开发而设计。PHP代码由web服务器提供的PHP模块编译,支持将PHP命令直接嵌入到HTML源文档中去执行,执行效率比彻底生成HTML标记的CGI要高许多;Perl是一系列高级,通用,解释的动态编程语言;Python是一中面向对象的的通用型高级编程语言,Python支持多种编程范例,包括面向对象,命令式,功能和过程范式。
缓存或加速器:
Apache提供了本身的缓存模块,也可使用外加的Squid模块进行缓存,这两种方式都可以有效的提升Apache的访问响应能力。PHP的加速可以使用xcache加速器,优化和缓存php动态内容,提高了PHP脚本的缓存性能。Memcached是一个分布式的内存对象缓存系统,一般用于动态Web应用以减轻数据库负载。
-
LAMP架构原理
客户端发送http request 请求 ,服务器(Apache)接受web请求;
Apache判断客户端请求的资源是否为静态请求。如果静态请求,则Apache直接将客户端请求的静态资源(.html, .htm .shtml等文件),经过Http response的形式传送给客户端;
若为php动态请求,则经过CGI协议将客户端的php请求传输给PHP程序,而后由php程序调用php解析器执行php请求。
PHP在执行php请求时判断是否会依赖mysql数据库。若不依赖mysql数据库,则由php解析器直接执行php相关脚本,将解析后的脚本再次经过CGI协议返传送给Apache.服务器,再执行“静态请求”的流程;
若依赖mysql数据库,则php程序经过php-mysql 驱动与mysql进行关联 ,获取相关数据 ,而后将其返还给php解释器 ,再次执行“不依赖mysql数据库”的流程。
-
apache与php组合方式
Module机制:php直接以httpd的模块扩展的方式运行,php做为httpd功能的一部分。启动httpd进程时 ,亦开启了php功能。其中prefork模式依赖libphp5.so库 ,worker、event模式依赖libphp5-zts.so库
CGI机制:php工做在独立的进程,当须要解析php请求时,由httpd唤醒php进程。因多个php请求,会启动多个php进程,须要耗费资源,总体性能不如module机制
Fast-CGI机制:生成php-fpm服务 ,由服务php-fpm管理php进程。基于套接字与apache联系 ,与apache work机制相似 ,有父进程,子进程,空闲进程等 ,大大提升了php处理能力。
-
LAMP服务器(server)实验搭建
根据apache与php组合的不一样方式,下面将演示LAMP编译安装实验:实验1、 php 以module 模式访问 ,实验二 、配置apache 与fpm方式 的php 。
系统:Centos 6.6
软件:httpd-2.4.34 + mysql-5.5.61 + php-5.6.36
编译环境:安装LAMP相关依赖环境,包括“Server PlatForm Development”, “Development tools”,关闭selinux 和 iptables 功能
实验目的:编译安装LAMP,经过不一样的方式,分别实现php 以 modeule 方式访问和 以Fast-CGI机制下运行 。
LAMP编译安装,配置php 以 module 模式访问
1、配置编译环境 ,安装“Server PlatForm Development”, “Development tools”,关闭selinux 和 iptables
2、编译安装Apache
-
编译安装apr(apr-1.6.3)
下载地址:http://download.nextag.com/apache//apr/apr-1.6.3.tar.gz
-
编译安装apr-util(apr-util-1.6.1)
下载地址: http://download.nextag.com/apache//apr/apr-util-1.6.1.tar.gz
-
编译安装httpd(httpd-2.4.34)
下载地址:http://mirror.reverse.net/pub/apache//httpd/httpd-2.4.34.tar.gz
-
启动Apache服务并验证,修改apache的配置文件并设置PidFile路径(默认在/usr/local/apache/logs/httpd.pid)
3、编译安装Mysql
-
建议在硬raid中建立lvm,使用独立的lvm磁盘做为mysql 数据存储目录 ,便于备份mysql数据
-
编译安装mysql
下载地址:https://mirrors.163.com/mysql/Downloads/MySQL-5.5/mysql-5.5.61.tar.gz
-
mysql初始化,启动服务
-
对mysql数据库进行管理,删除匿名用户,建立密码 ,删除test数据库 等操做
-
对mysql 建立用户及密码、主机配置文件,能够不使用密码进行登陆
4、编译安装PHP
-
编译安装php-5.6.36
下载地址:http://at2.php.net/distributions/php-5.6.36.tar.gz
-
配置apache 以支持php
-
验证php功能与apache ,php与mysql 链接
5、安装php加速器xcache
-
安装xcache
下载地址:http://xcache.lighttpd.net/pub/Releases/3.2.0/xcache-3.2.0.tar.gz
-
验证xcache 安装
6、安装phpMyAdmin-4.8.2 ,管理mysql
-
安装phpMyAdmin-4.8.2 ,支持php5.5- php 7.2 ,mysql-5.5 以上
下载地址:https://files.phpmyadmin.net/phpMyAdmin/4.8.2/phpMyAdmin-4.8.2-all-languages.tar.xz
-
phpMyadmin 登陆http://192.168.4.160/pmyadmin 验证
-
错误故障解决
7、压力测试
-
ab工具测试
LAMP编译安装,实现php-fpm模式
1、配置编译环境 ,安装“Server PlatForm Development”, “Development tools”,关闭selinux 和 iptables ,与上文配置相同
2、编译安装Apache ,与上文配置相同
3、编译安装Mysql,与上文配置相同
4、编译安装PHP 支持Fast-CGI
-
编译安装php-5.6.36
下载地址:http://at2.php.net/distributions/php-5.6.36.tar.gz
-
配置并启动 php-fpm 服务
-
配置apache 以支持fast-CGI
-
验证php功能与apache ,php与mysql 链接
5、安装php加速器xcache,与上文配置相同
6、安装phpMyAdmin-4.8.2 ,管理mysql ,与上文配置相同
7、压力测试 ,与上文配置相同
至此,完成LAMP编译安装实验,分别实现 php 以module 模式访问 和 配置apache 与fpm方式 的php 。