[LAMP] Linux(Centos)LAMP环境搭建,LAMP源码安装及LAMP架构原理详解
本章blog主要介绍了[LAMP] Linux (Centos)LAMP环境搭建,LAMP源码安装及LAMP架构原理详解,并分别部署php与apache不同组合方式的LAMP案例。
LAMP Server
-
LAMP简介
LAMP网站框架是目前国际上流行的Web服务架构,该框架包括GNU / Linux 操作系统,Apache HTTP服务器,MySQL 类关系型数据库(RDBMS)以及PHP编程语言。所有组成产品均属于开源类软件 ,本身都是各自独立的程序,但是因为常被放在一起使用,拥有了越来越高的兼容度,使其更适用于构建动态网站及开发Web应用程序, 现已成为国际流行的框架架构。
目前很多流行的商业应用都是采取这个架构,和Java/J2EE架构相比,LAMP具有Web资源丰富、轻量、快速开发等特点,与微软的.NET架构相比,LAMP具有通用、跨平台、高性能、低价格的优势,因此LAMP无论是性能、质量还是价格都是企业搭建网站的首选平台。
-
LAMP组件
GNU / Linux 操作系统:
Linux是一种类似Unix的计算机操作系统,Linux操作系统有很多个不同的发行版,如Red Hat 、SUSE 、FreeBSD、Debian、CentOS等。
Apache HTTP服务器:
LAMP的HTTP服务器的角色除了由Apache提供外,还包括其他如nginx等的Web服务器 ;其中,Apache负责传递PHP及cgi等动态语言,Nginx提供负载均衡、反向解析及容错功能,彼此配合使用,成为HTTP服务器的配置首选模式。
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编译安装实验:实验一、 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 模式访问
一、配置编译环境 ,安装“Server PlatForm Development”, “Development tools”,关闭selinux 和 iptables
二、编译安装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)
三、编译安装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 创建用户及密码、主机配置文件,可以不使用密码进行登录
四、编译安装PHP
-
编译安装php-5.6.36
下载地址:http://at2.php.net/distributions/php-5.6.36.tar.gz
-
配置apache 以支持php
-
验证php功能与apache ,php与mysql 连接
五、安装php加速器xcache
-
安装xcache
下载地址:http://xcache.lighttpd.net/pub/Releases/3.2.0/xcache-3.2.0.tar.gz
-
验证xcache 安装
六、安装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 验证
-
错误故障解决
七、压力测试
-
ab工具测试
LAMP编译安装,实现php-fpm模式
一、配置编译环境 ,安装“Server PlatForm Development”, “Development tools”,关闭selinux 和 iptables ,与上文配置相同
二、编译安装Apache ,与上文配置相同
三、编译安装Mysql,与上文配置相同
四、编译安装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 连接
五、安装php加速器xcache,与上文配置相同
六、安装phpMyAdmin-4.8.2 ,管理mysql ,与上文配置相同
七、压力测试 ,与上文配置相同
至此,完成LAMP编译安装实验,分别实现 php 以module 模式访问 和 配置apache 与fpm方式 的php 。