安装前先了解一下LAMP架构
参考文档 IT虾米网
PHP底层工作原理
这里写图片描述
从图上可以看出,php从下到上是一个4层体系

  • Application:php程序通过不同的SAPI方式得到各种各样的应用模式,如通过webserver实现web应用、在命令行下以脚本方式运行等。
  • SAPI:Server Application Programming Interface,即服务端应用编程接口,SAPI通过一系列钩子函数,使得php可以和外围交互数据,这是php非常优雅和成功的一个设计,通过SAPI成功的将php本身和上层应用解耦隔离,php可以不再考虑如何针对不同应用进行兼容,而应用本身也可以针对自己的特点实现不同的处理方式。
  • Extensions:围绕着zend引擎,Extensions通过组件式的方式提供各种基础服务,常见的各种内置函数(如array系列)、标准库等都是通过Extensions来实现,用户也可以根据需要实现自己的Extensions以达到功能扩展、性能优化等目的(如贴吧正在使用的php中间层、富文本解析就是extension的典型应用)。
  • Zend Engine:Zend整体用纯c实现,是php的内核部分,它将php代码翻译(词法、语法解析等一系列编译过程)为可执行opcode并实现了相应的处理方法、基本的数据结构(如hashtable)、内存分配及管理、提供了相应的API方法供外部调用,是一切的核心,所有的外围功能均围绕zend实现。

构架思想:

  • 引擎(Zend)+组件(Ext)的模式降低内部耦合
  • 中间层(SAPI)隔绝web server和php

如果php是一辆车,那么车的框架就是php本身,Zend是车的引擎(发动机),Ext下面的各种组件就是车轮,SAPI可以看做是公路,车可以跑在不同类型的公路上,而一次php程序的执行就是汽车跑在公路上。因此需要:性能优异的引擎+合适的车轮+正确的跑道

Apache和php的关系
Apache对于php的解析,是通过众多Module中的php Module来完成的。把php最终整合到Apache系统中,还需要对Apache进行一些必要的设置,在后文有详细过程。
这里写图片描述
Apache的生命周期
这里写图片描述
Apach的请求处理流程
这里写图片描述
Apache请求处理循环过程

  • Post-Read-Request阶段:在正常请求处理流程中,这是模块可以插入钩子的第一个阶段。对于那些想很早进入处理请求的模块来说,这个阶段可以被利用。

  • URI Translation阶段: 将请求的URL映射到本地文件系统。模块可以在这阶段插入钩子,执行自己的映射逻辑。mod_alias就是利用这个阶段工作的。

  • Header Parsing阶段:检查请求的头部,由于模块可以在请求处理流程的任何一个点上执行检查请求头部的任务,因此这个钩子很少被使用。mod_setenvif就是利用这个阶段工作的。

  • Access Control阶段:根据配置文件检查是否允许访问请求的资源。Apache的标准逻辑实现了允许和拒绝指令。mod_authz_host就是利用这个阶段工作的。

  • Authentication阶段:按照配置文件设定的策略对用户进行认证,并设定用户名区域。模块可以在这阶段插入钩子,实现一个认证方法。

  • Authorization阶段:根据配置文件检查是否允许认证过的用户执行请求的操作。模块可以在这阶段插入钩子,实现一个用户权限管理的方法。

  • MIME Type Checking阶段:根据请求资源的MIME类型的相关规则,判定将要使用的内容处理函数。标准模块mod_negotiation和mod_mime实现了这个钩子。

  • FixUp阶段:这是一个通用的阶段,允许模块在内容生成器之前,运行任何必要的处理流程。和Post_Read_Request类似,这是一个能够捕获任何信息的钩子,也是最常使用的钩子。

  • Response阶段:生成返回客户端的内容,负责给客户端发送一个恰当的回复。这个阶段是整个处理流程的核心部分。

  • Logging阶段:在回复已经发送给客户端之后记录事务。模块可能修改或者替换Apache的标准日志记录。

  • CleanUp阶段:清理本次请求事务处理完成之后遗留的环境,比如文件、目录的处理或者Socket的关闭等等,这是Apache一次请求处理的最后一个阶段。

说明: 本实验系统为RHEL-6.2-i386,编译安装httpd-2.4.4,php-5.6.8,xcache-3.2.0,配置通用二进制格式mysql-5.6.24
一、编译安装apache
准备开发环境
这里写图片描述
编译过程也要依赖于pcre-devel软件包,需要事先安装。此软件包系统光盘自带,因此,找到并安装即可。

[root@www ~]# yum install pcre-devel

编译安装前确保系统时间与硬件时间同步,否则可能出错
这里写图片描述
编译安装apr

[root@www tar]# tar xf apr-1.5.2.tar.bz2 -C /usr/src/ 
[root@www tar]# cd /usr/src/

这里写图片描述
Apr为Apache专用,只要在编译安装httpd时指定Apr的安装路径即可,这里不需要额外配置,再make&make install即可

[root@www apr-1.5.2]# ./configure --prefix=/usr/local/apr  
[root@www apr-1.5.2]# make  
[root@www apr-1.5.2]# make install 

编译安装apr-util

[root@www tar]# tar xf apr-util-1.5.4.tar.bz2 -C /usr/src/ 
[root@www tar]# cd /usr/src/apr-util-1.5.4/

这里写图片描述
这里写图片描述

[root@www apr-util-1.5.4]# ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr 
[root@www apr-util-1.5.4]# make && make install

编译安装httpd-2.4.4

[root@www tar]# tar xf httpd-2.4.4.tar.bz2 -C /usr/src/ 
[root@www tar]# cd /usr/src/httpd-2.4.4/

这里写图片描述
这里写图片描述
启用这种压缩机制,让httpd服务器自动压缩页面传输给浏览器,以节约带宽
这里写图片描述
支持动态共享模块,如果不支持PHP无法以模块方式跟Apache结合工作
这里写图片描述
启用ssl,否则无法启用https
这里写图片描述
这里写图片描述
指定配置文件位置和apr,apr-util的安装路径
这里写图片描述
支持URL重写
这里写图片描述
启用大多数常用的模块
这里写图片描述
启用大多数共享模块
这里写图片描述
启用MPM支持的模式,构建 MPM 为动态模块
这里写图片描述

[[email protected] httpd-2.4.4]# ./configure --prefix=/usr/local/apache 
 --enable-so  --sysconfdir=/etc/httpd  --enable-rewrite  --enable-cgi --enable-cgid --enable-modules=most --enable-mods-shared=most --enable-mpms-shared=all --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util --enable-ssl

编译出现错误:checking whether to enable mod_ssl… configure: error: mod_ssl has been requested but can not be built due to prerequisite failures
解决方法:yum install openssl-devel解决依赖关系后执行./configure

[root@www httpd-2.4.4]# make & make install 

/cgi-bin:cgi程序的存放位置
/error:错误信息
/htdos:网页文件存放位置
/icons:图标
/include头文件针对二次开发
/logs日志文件
/man帮助文件
/manual帮助手册

1./bin二进制程序,要添加到path环境变量中,否则要使用相对路径执行命令
这里写图片描述

[root@www apache]# vim /etc/profile.d/httpd.sh 
export PATH=$PATH:/usr/local/apache/bin

这里写图片描述
2.启动脚本,出现如下错误
AH00557: httpd: apr_sockaddr_info_get() failed for DQ
AH00558: httpd: Could not reliably determine the server’s fully qualified domain name, using 127.0.0.1. Set the ‘ServerName’ directive globally to suppress this message
解决如下

[root@www apache]# vim /etc/httpd/httpd.conf  
ServerName localhost:80 
[root@www apache]# bin/apachectl start 
httpd (pid 21340) already running

3.修改httpd的主配置文件,设置其Pid文件的路径
插入一行PidFile “/var/run/httpd.pid”

[root@www apache]# vim /etc/httpd/httpd.conf  
PidFile "/var/run/httpd.pid"

4.提供SysV服务脚本/etc/rc.d/init.d/httpd,内容如下:

[root@www ~]# vim /etc/rc.d/init.d/httpd

这里写图片描述
如果变量HTTPD_LANG未定义,那么将其定义为”C”,即英文
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
5.而后为此脚本赋予执行权限并加入服务列表:

[root@www ~]# chmod +x /etc/rc.d/init.d/httpd 
[root@www ~]# chkconfig --add httpd 
[root@www ~]# chkconfig --list httpd 
httpd     :off  1:off   2:off   3:on    4:off   5:on    6:off

6.接下来就可以启动服务进行测试了
这里写图片描述
更改默认MPM模块Vim /etc/httpd/httpd.conf,注释掉event,再启用要使用的模块即可
这里写图片描述
这里写图片描述
二、安装通用二进制格式mysql-5.6.24
1.准备数据存放的文件系统,新建一个逻辑卷,并将其挂载至特定目录即可。

[root@www ~]# fdisk /dev/sda 
Command (m for help): n 
First cylinder (2053-2611, default 2053):  
Using default value 2053 
Last cylinder, +cylinders or +size{K,M,G} (2053-2611, default 2611): +2G 
Command (m for help): t 
Partition number (1-6): 6 
Hex code (type L to list codes): 8e 
Changed system type of partition 6 to 8e (Linux LVM) 
Command (m for help): w    
The partition table has been altered! 
[root@www ~]# fdisk -l 
/dev/sda6            2053        2314     2097701+  8e  Linux LVM 
[root@www ~]# pvcreate /dev/sda6 
  Writing physical volume data to disk "/dev/sda6" 
  Physical volume "/dev/sda6" successfully created 
[root@www ~]# vgcreate Sdatavg /dev/sda6 
  Volume group "Sdatavg" successfully created 
[root@www ~]# lvcreate -n Sdatalv -L 1G Sdatavg 
  Logical volume "Sdatalv" created 
新建挂载目录,创建/mnt/SQLdata目录做为mysql数据的存放目录 
[root@www ~]# mke2fs -j /dev/Sdatavg/Sdatalv 
[root@www ~]# mkdir /mnt/SQLdata 
[root@www ~]# mount /dev/Sdatavg/Sdatalv /mnt/SQLdata

INSTALL-BINARY
这里写图片描述
2、新建用户以安全方式运行进程:
初始化安装MySQL得使用MySQL用户MySQL组,所以要首先创建MySQL用户跟组
Groupadd - r :指示组添加一个系统帐户
-g GID:0和499之间的值通常是保留的系统账目
useradd -g,- -gid GROUP -u, –uid UID

[root@www ~]# groupadd -r mysql 
[root@www ~]# useradd -g mysql -r -s /sbin/nologin -M -d /mnt/SQLdata mysql 
[root@www ~]# id mysql 
uid=497(mysql) gid=495(mysql) groups=495(mysql)

3、安装并初始化mysql-5.6.24,通用二进制格式
这里写图片描述
创建连接
这里写图片描述
更改MySQL下的所有文件属组属主
这里写图片描述
这里写图片描述
初始化
这里写图片描述
4.初始化完成后为了安全起见,将mysql目录下的所有文件的属主修改回root
这里写图片描述
5.将Mysql的服务脚本/usr/local/mysql/support-files/mysql.server文件复制到
/etc/rc.d/init.d/目录下并命名为mysqld,添加至服务列表:
这里写图片描述
6.Mysql:配置文件,集中式的配置文件可以为多个程序提供配置
在以下四处找配置文件,后一个会覆盖前一个/etc/my.cnf –>/etc/mysql/my.cnf –>BASEDIR/my.cnf [–>$DATADIR/my.cnf ]–>~/.my.cnf
这里写图片描述
这里写图片描述
7.为了使用mysql的安装符合系统使用规范,并将其开发组件导出给系统使用,这里还需要进行如下步骤:输出mysql的man手册至man命令的查找路径:
这里写图片描述
输出mysql的头文件至系统头文件路径/usr/include,这可以通过简单的创建链接实现:
这里写图片描述
输出mysql的库文件给系统库查找路径:
这里写图片描述
而后让系统重新载入系统库:
这里写图片描述
添加/bin二进制程序到path环境变量中,即可启动服务
这里写图片描述
系统状态信息数据库performance_schema
这里写图片描述
MYSQL服务器维护了两类变量:
服务器变量:定义Mysql服务运行特性

SHOW GLOBAL VARIABLES [LIKE ‘datadir’];

这里写图片描述
这里写图片描述
状态变量:
保存了Mysql服务器运行统计数据:

SHOW GLOBAL STATUS [LIKE ‘datadir’];

这里写图片描述
Mysql通配符:“_”:表示任意单个字符

%:任意长度的任意字符

三.编译安装php-5.6.8
之前改了一下主机名
1、解决依赖关系:

[root@DQ ~]# yum groupinstall "X Software Development"

让编译的php支持mcrypt扩展

[root@DQ tar]# ls *.rpm    

这里写图片描述

[root@DQ tar]# rpm -ivh *.rpm

这里写图片描述
2、编译安装php-5.6.8首先下载源码包至本地目录进行解压

[root@DQ tar]# tar xf php-5.6.8.tar.bz2 -C /usr/src 
[root@DQ tar]# cd /usr/src/php-5.6.8/

与编译成模块的方式不同之处在于将–with-apxs2=/usr/local/apache/bin/apxs 改为–enable-fpm,并将-enable-maintainer-zts去掉

[[email protected] php-5.6.8]# ./configure --prefix=/usr/local/php  
--with-mysql=/usr/local/mysql --with-mysqli=/usr/local/mysql/bin/mysql_config 
 --enable-mbstring --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib 
 --with-libxml-dir=/usr --with-openssl -enable-xml --enable-sockets --enable-fpm 
 --with-mcrypt --with-config-file-path=/etc --with-config-file-scan-dir=/etc/php.d 
 --with-bz2

编译出错:
configure: error: xml2-config not found. Please check your libxml2 installation.
解决如下,挂载本地光盘安装rpm包

[[email protected] /]# mount /dev/cdrom /media 
[[email protected] /]# cd /media/Packages/ 
[[email protected] Packages]# ls *libxml2* 
libxml2-2.7.6-4.el6.i686.rpm     
libxml2-python-2.7.6-4.el6.i686.rpm 
libxml2-devel-2.7.6-4.el6.i686.rpm 
[[email protected] Packages]# rpm -ivh libxml2-2.7.6-4.el6.i686.rpm  
[[email protected] Packages]# rpm -ivh libxml2-devel-2.7.6-4.el6.i686.rpm 

configure: error: Please reinstall the BZip2 distribution
编译出错:解决如下

[[email protected] ~]# yum install bzip2 bzip2-devel 
Installed: 
  bzip2-devel.i686 0:1.0.5-7.el6_0     
Complete!

./configure执行成功
这里写图片描述

[[email protected] php-5.6.8]# make & make install 
make: *** [ext/opcache/opcache.la] Error 1 
libtool: link: `ext/opcache/zend_accelerator_debug.lo' is not a valid libtool object

解决如下,然后再make&&make install即可

[root@DQ php-5.6.8]# make clean

为php提供配置文件:

[root@DQ php-5.6.8]# cp php.ini-production /etc/php.ini

为php-fpm提供Sysv init脚本,并将其添加至服务列表:
这里写图片描述
为php-fpm提供配置文件:
这里写图片描述
编辑php-fpm的配置文件:
这里写图片描述
这里写图片描述
其中pid文件存放位置与启动脚本/etc/rc.d/init.d/php-fpm 中定义的一致即可
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
四、整合apache&&fpm方式的PHP
这里写图片描述
让apache能识别php格式的页面,并支持php格式的主页
这里写图片描述
注释中心主机
这里写图片描述
启用httpd的相关模块
这里写图片描述
在Apache httpd 2.4以后已经专门有一个模块mod_proxy_fcgi.so针对FastCGI的实现
其实是作为mod_proxy.so模块的扩充,因此,这两个模块都要加载
启用虚拟主机
这里写图片描述
配置虚拟主机支持使用fcgi
这里写图片描述
这里写图片描述
ProxyRequests Off:关闭正向代理
ProxyPassMatch:把以.php结尾的文件请求发送到php-fpm进程,php-fpm至少需要知道运行的目录和URI,所以这里直接在fcgi://127.0.0.1:9000后指明了这两个参数,其它的参数的传递已经被mod_proxy_fcgi.so进行了封装,不需要手动指定。
这里写图片描述
这里写图片描述
这里写图片描述
在C:\Windows\System32\drivers\etc\hosts中添加名称解析
这里写图片描述
测试之前一定要关闭selinux和防火墙
这里写图片描述
这里写图片描述
这里写图片描述
五、安装xcache,为php加速:
XCache 是一个开源的 opcode 缓存器/优化器,通过把编译 PHP 后的数据缓冲到共享内存从而避免重复的编译过程, 能够直接使用缓冲区已编译的代码从而提高速度. 通常能够提高页面生成速率2到5倍, 降低服务器负载.

[root@DQ tar]# tar xf xcache-3.2.0.tar.gz -C /usr/src 
[root@DQ tar]# cd /usr/src 
[root@DQ src]# cd xcache-3.2.0/ 
[root@DQ xcache-3.2.0]# /usr/local/php/bin/phpize

这里写图片描述
不用指明–prefix路径,默认会安装到php扩展路径中
-enable-xcache XCache Extension.
–with-php-config=/usr/local/php/bin/php-config
Path to php-config php-config 获取php配置信息以及编译时使用的选项信息
php-config - get information about PHP configuration andcompile options

[root@DQ xcache-3.2.0]# ./configure --enable-xcache  
--with-php-config=/usr/local/php/bin/php-config  
[root@DQ xcache-3.2.0]# make 
[root@DQ xcache-3.2.0]# make install 
Installing shared extensions:     

安装完毕后系统会提示xcache.so模块生成路径,本次生成路径如下所示:
这里写图片描述
编辑php.ini,整合php和xcache:首先将xcache提供的样例配置导入php.ini
这里写图片描述

[root@DQ xcache-3.2.0]# mkdir /etc/php.d 
[root@DQ xcache-3.2.0]# cp xcache.ini /etc/php.d/

说明:xcache.ini文件在xcache的源码目录中
这里写图片描述
这里写图片描述
解压Drupal压缩包,安装测试LAMP是否可用
这里写图片描述
上传你的Drupal文件夹内的所有文件到您的服务器上的Web根文件夹
这里写图片描述
浏览到新Drupal站点,开始Drupal安装,选择一个安装配置文件:
选择“标准”,保存并继续
这里写图片描述
选择学习如何安装Drupal的其他语言。保存并继续。
这里写图片描述
下载简体中文语言包放置网站根目录指定路径下
这里写图片描述
这里写图片描述
刷新网页
这里写图片描述
下一步确认安装条件
这里写图片描述
linux下php默认不开启gd库,也不支持DOMDocument 即 DOM扩展
没有gd库的话,验证码显示不了,没有xml.so的话,php操作不了xml,
安装PHP dom扩展
这里写图片描述
这里写图片描述
安装PHP gd扩展
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述


发布评论
IT源码网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!

TCP Wrapper&xinetd讲解
你是第一个吃螃蟹的人
发表评论

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。