转-httpd 2.4.4 + mysql-5.5.28 + php-5.4.13编译安装过程

一、编译安装apache

1、解决依赖关系

httpd-2.4.4需要较新版本的apr和apr-util,因此需要事先对其进行升级。升级方式有两种,一种是通过源代码编译安装,一种是直接升级rpm包。这里选择使用编译源代码的方式进行,它们的下载路径http://apr.apache.org/

(1) 编译安装apr

# tar xf apr-1.4.6.tar.bz2
# cd apr-1.4.6
# ./configure --prefix=/usr/local/lamp/apr
# make && make install

apr的默认设置基本已经可以满足我们的需求,因此只需要通过--prefix指定我们的安装路径
--enable-threads 支持线程
--disable-ipv6 禁用IPv6
注:源码编译安装的apr只对之后要源码编译安装的apache有用,对于系统上的其他服务是不起作用的。

(2) 编译安装apr-util

# tar xf apr-util-1.5.2.tar.bz2
# cd apr-util-1.5.2
# ./configure --prefix=/usr/local/lamp/apr-util --with-apr=/usr/local/lamp/apr
# make && make install

--prefix 指定apr-util的安装路径
--with-apr 指定apr的位置,不指定的话将会默认的去找系统上旧版本的apr

附:apache官方对APR的介绍:

The mission of the Apache Portable Runtime (APR) project is to create and maintain software libraries that provide a predictable and consistent interface to underlying platform-specific implementations. The primary goal is to provide an API to which software developers may code and be assured of predictable if not identical behaviour regardless of the platform on which their software is built, relieving them of the need to code special-case conditions to work around or take advantage of platform-specific deficiencies or features.

(3) httpd-2.4.4编译过程要依赖于pcre-devel软件包,需要事先安装。此软件包系统光盘自带,因此,找到并安装即可。

2、编译安装httpd-2.4.4

首先下载httpd-2.4.4到本地,下载路径为http://httpd.apache.org/。而后执行如下命令进行编译安装过程:

# tar xf httpd-2.4.4.tar.bz2
# cd httpd-2.4.4
# ./configure --prefix=/usr/local/lamp/apache --sysconfdir=/etc/httpd/ --enable-so --enable-rewrite --enable-ssl --enable-cgi --enable-cgid --enable-modules=most --enable-mods-shared=most --enable-mpms-shared=all --with-apr=/usr/local/lamp/apr --with-apr-util=/usr/local/lamp/apr-util/
# make && make install

--prefix 指定apache的安装路径
--sysconfdir 指定apache配置文件的安装路径,默认的是在安装路径下conf目录中
--enable-mods-shared 是否启用共享模块,all所有的、most大部分、few少部分的、reallyall真是所有的
--enable-mods-static 静态方式,将模块直接编译到apache中,all所有的、most大部分、few少部分的、reallyall真是所有的
--enable-authn-dbm|anon|dbd|socache 启动哪种认证功能,默认启用的是基于文件的认证功能,可以通过--disable-authn-file禁用
--enable-so 支持DSO(动态共享模块)功能,如果不支持此功能,php将无法以模块方式跟apache结合起来工作
--enable-ssl 启动SSL的功能,否则无法使用HTTPS
--enable-deflate 是一种常用的压缩机制,可以让apache将用户请求的数据压缩后在返回给用户,而浏览器也会将收到的数据解压后再查看
--enable-proxy-fcgi 如果希望apache与php结合的时候是以fastcgi的方式工作的话,必须要设置此选项
--enable-mpms-shared 此选项在apache2.4版本之后才有,MPM(多道处理模块,默认情况有prefork,worker,event几种),在2.4中可以将所有的都编译进去,然后动态选择加载,默认使用event
--with-mpm 明确的说明使用哪一个为默认的MPM
--enable-rewrite 支持URL重写
--enable-cgi 支持CGI
--enable-cgid 表示CGI被线程方式的MPM使用,当你使用的是event或worker方式的MPM时,就应该启用CGID

补充:

(1)构建MPM为静态模块
在全部平台中,MPM都可以构建为静态模块。在构建时选择一种MPM,链接到服务器中。如果要改变MPM,必须重新构建。为了使用指定的MPM,请在执行configure脚本 时,使用参数 --with-mpm=NAME。NAME是指定的MPM名称。编译完成后,可以使用 ./httpd -l 来确定选择的MPM。 此命令会列出编译到服务器程序中的所有模块,包括 MPM。

(2)构建 MPM 为动态模块

在Unix或类似平台中,MPM可以构建为动态模块,与其它动态模块一样在运行时加载。 构建 MPM 为动态模块允许通过修改LoadModule指令内容来改变MPM,而不用重新构建服务器程序。在执行configure脚本时,使用--enable-mpms-shared选项即可启用此特性。当给出的参数为all时,所有此平台支持的MPM模块都会被安装。还可以在参数中给出模块列表。默认MPM,可以自动选择或者在执行configure脚本时通过--with-mpm选项来指定,然后出现在生成的服务器配置文件中。编辑LoadModule指令内容可以选择不同的MPM。

3、修改httpd的主配置文件,设置其Pid文件的路径

编辑/etc/httpd/httpd.conf,添加如下行即可:
PidFile "/var/run/httpd.pid"

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

#!/bin/bash
#
# httpd Startup script for the Apache HTTP Server
#
# chkconfig: - 85 15
# description: Apache is a World Wide Web server. It is used to serve \
# HTML files and CGI.
# processname: httpd
# config: /etc/httpd/conf/httpd.conf
# config: /etc/sysconfig/httpd
# pidfile: /var/run/httpd.pid

# Source function library.
. /etc/rc.d/init.d/functions

if [ -f /etc/sysconfig/httpd ]; then
. /etc/sysconfig/httpd
fi

# Start httpd in the C locale by default.
HTTPD_LANG=${HTTPD_LANG-"C"}

# This will prevent initlog from swallowing up a pass-phrase prompt if
# mod_ssl needs a pass-phrase from the user.
INITLOG_ARGS=""

# Set HTTPD=/usr/sbin/httpd.worker in /etc/sysconfig/httpd to use a server
# with the thread-based "worker" MPM; BE WARNED that some modules may not
# work correctly with a thread-based MPM; notably PHP will refuse to start.

# Path to the apachectl script, server binary, and short-form for messages.
apachectl=/usr/local/lamp/apache/bin/apachectl
httpd=${HTTPD-/usr/local/lamp/apache/bin/httpd}
prog=httpd
pidfile=${PIDFILE-/var/run/httpd.pid}
lockfile=${LOCKFILE-/var/lock/subsys/httpd}
RETVAL=0

start() {
echo -n $"Starting $prog: "
LANG=$HTTPD_LANG daemon --pidfile=${pidfile} $httpd $OPTIONS
RETVAL=$?
echo
[ $RETVAL = 0 ] && touch ${lockfile}
return $RETVAL
}

stop() {
echo -n $"Stopping $prog: "
killproc -p ${pidfile} -d 10 $httpd
RETVAL=$?
echo
[ $RETVAL = 0 ] && rm -f ${lockfile} ${pidfile}
}
reload() {
echo -n $"Reloading $prog: "
if ! LANG=$HTTPD_LANG $httpd $OPTIONS -t >&/dev/null; then
RETVAL=$?
echo $"not reloading due to configuration syntax error"
failure $"not reloading $httpd due to configuration syntax error"
else
killproc -p ${pidfile} $httpd -HUP
RETVAL=$?
fi
echo
}

# See how we were called.
case "$1" in
start)
start
;;
stop)
stop
;;
status)
status -p ${pidfile} $httpd
RETVAL=$?
;;
restart)
stop
start
;;
condrestart)
if [ -f ${pidfile} ] ; then
stop
start
fi
;;
reload)
reload
;;
graceful|help|configtest|fullstatus)
$apachectl $@
RETVAL=$?
;;
*)
echo $"Usage: $prog {start|stop|restart|condrestart|reload|status|fullstatus|graceful|help|configtest}"
exit 1
esac

exit $RETVAL

而后为此脚本赋予执行权限:
# chmod +x /etc/rc.d/init.d/httpd

5、加入服务列表:
# chkconfig --add httpd

接下来就可以启动服务进行测试了。

6、将apache的相关命令所在路径加入PATH环境变量中
(1)
# vim ~/.bash_profile
PATH=$PATH:$HOME/bin:/usr/local/lamp/apache/bin
# source ~/.bash_profile
(2)
# vim /etc/profile.d/httpd.sh
export PATH=$PATH:/usr/local/lamp/apache/bin
重新登录生效

7、改变apache加载的模块
编辑apache的主配置文件
# vim /etc/httpd/httpd.conf
#LoadModule mpm_event_module modules/mod_mpm_event.so
LoadModule mpm_prefork_module modules/mod_mpm_prefork.so
重启apache服务,通过httpd -M查看

httpd 2.4新特性:
1、MPM可于运行时装载;
--enable-mpms-shared=all --with-mpm=event
2、Event MPM
3、异步读写
4、在每模块及每目录上指定日志级别;
5、每请求配置;<If>, <ElseIf>, <Else>;
6、增强的表达式分析器;
7、毫秒级的KeepAlive Timeout;
8、基于域名的虚拟主机不再需要NameVirtualHost指令;
9、降低了内存占用;
10、支持在配置文件中使用自定义变量;

新增加的模块:
mod_proxy_fcgi
mod_proxy_scgi
mod_proxy_express
mod_remoteip
mod_session
mod_ratelimit
mod_request
等等

2.4版本之前apache对于基于IP的访问控制
Order allow,deny
allow from all

2.4中不再支持此方法

2.4使用Require user
Require user USERNAME
Require group GRPNAME

Require ip IPADDR
Require not ip IPADDR
IP
NETWORK/NETMASK
NETWORK/LENGTH
NET

172.16.0.0/255.255.0.0 = 172.16.0.0/16 = 172.16

Require host HOSTNAME
HOSTNAME
DOMAIN

www.magedu.com
.magedu.com

允许所有主机访问:
Require all granted

拒绝所有主机访问:
Require all deny

8、使用ab命令测试apache服务器性能:

常见的压力测试工具:
1、ab
2、http_load
3、webbench
4、siege

-c concurrency:一次性发起的请求个数,默认为1
-i:测试时使用HEAD方法,默认为GET
-k:启用HTTP长连接请求方式
-n requests:发起的模拟请求个数;默认为1个;请求数要大于等于并发连接数
-q:静默模式,在请求数大于150个时不输出请求完成百分比

# ab -c 500 -n 1000 http://www.a.com/index.html
输出结果:
This is ApacheBench, Version 2.3 <$Revision: 655654 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking www.a.com (be patient)
Completed 100 requests
Completed 200 requests
Completed 300 requests
Completed 400 requests
Completed 500 requests
Completed 600 requests
Completed 700 requests
Completed 800 requests
Completed 900 requests
Completed 1000 requests
Finished 1000 requests

Server Software: Apache/2.4.12 对方的web服务器软件和版本号
Server Hostname: www.a.com 主机名称
Server Port: 80 端口

Document Path: /index.html 请求的文件
Document Length: 10 bytes 请求的文件的大小

Concurrency Level: 500 并发级别,每次并发请求的数量
Time taken for tests: 0.243 seconds 从第一个请求连接建立到收到最后一个请求的响应报文结束所经历的时长
Complete requests: 1000 成功请求的数量
Failed requests: 0 请求失败的个数
Write errors: 0 失败的写入次数
Total transferred: 281410 bytes 总共的传输量,用户实际请求的数据加上每层的报文头部的总和
HTML transferred: 10700 bytes 请求的数据的大小
Requests per second: 4113.30 [#/sec] (mean) 每秒钟完成的请求数
Time per request: 121.557 [ms] (mean) 并发一次请求完成的平均时间,此例为完成500个并发请求的平均时间
Time per request: 0.243 [ms] (mean, across all concurrent requests) 单个请求完成的平均时间
Transfer rate: 1130.39 [Kbytes/sec] received 传输速率 字节

Connection Times (ms)
最短时间 平均时间 误差 最长时间
min mean[+/-sd] median max
Connect: 10 17 4.1 18 26 建立连接的时间
Processing: 8 36 58.7 19 230 处理过程的时间
Waiting: 0 30 60.3 12 228 等待的时间
Total: 30 53 57.0 37 241 时间总和

Percentage of the requests served within a certain time (ms)
50% 37
66% 38
75% 38
80% 38
90% 40
95% 241
98% 241
99% 241
100% 241 (longest request)

9、配置apache的虚拟机主机

编辑apache的主配置文件
# vim /etc/httpd/httpd.conf
#DocumentRoot "/usr/local/lamp/apache/htdocs" 将原本的默认发布目录注释
# Virtual hosts
Include /etc/httpd/extra/httpd-vhosts.conf 去掉本行注释
LoadModule log_config_module modules/mod_log_config.so 确保此模块已经被apache模块加载,因为在httpd-vhosts.conf文件中指出需要此模块:Required modules: mod_log_config

编译/etc/httpd/extra/httpd-vhosts.conf这个虚拟机主机配置文件
<VirtualHost *:80>
DocumentRoot "/var/www/a.com" 发布目录
ServerName www.a.com 虚拟主机名
<Directory "/var/www/a.com"> 设置目录权限,必须有此设置,apache2.4版本之后必须有此设置,否则所有用户都无法访问
Options none 不允许索引
AllowOverride none
Require all granted 允许所有用户访问
</Directory>
ErrorLog "logs/www.a.com-error_log" 错误日志记录路径
CustomLog "logs/www.a.com-access_log" common apache日志记录路径
</VirtualHost>

<VirtualHost *:80>
DocumentRoot "/var/www/b.com"
ServerName www.b.com
<Directory "/var/www/b.com">
Options none
AllowOverride none
Require all granted
</Directory>
ErrorLog "logs/www.b.example.com-error_log"
CustomLog "logs/www.b.example.com-access_log" common
</VirtualHost>

建立文件
# mkdir /var/www/a.com
# mkdir /var/www/b.com

重启apache服务即可

二、安装mysql-5.5.28

1、准备数据存放的文件系统

新建一个逻辑卷,并将其挂载至特定目录即可。这里不再给出过程。

这里假设其逻辑卷的挂载目录为/mydata,而后需要创建/mydata/data目录做为mysql数据的存放目录。

2、新建用户以安全方式运行进程:

# groupadd -r mysql
# useradd -g mysql -r -s /sbin/nologin -M -d /mydata/data mysql
# chown -R mysql:mysql /mydata/data

3、安装并初始化mysql-5.5.28

首先下载平台对应的mysql版本至本地,这里是32位平台,因此,选择的为mysql-5.5.28-linux2.6-i686.tar.gz,其下载位置为ftp://172.16.0.1/pub/Sources/mysql-5.5。

# tar xf mysql-5.5.28-linux2.6-i686.tar.gz -C /usr/local/lamp
# cd /usr/local/lamp
# ln -sv mysql-5.5.28-linux2.6-i686 mysql
# cd mysql

# chown -R mysql:mysql .
# ./scripts/mysql_install_db --user=mysql --datadir=/mydata/data
--user 设置以哪个用户的身份进行初始化
--datadir 指定mysql的数据目录

# chown -R root .
注:如果使用mysql默认的数据目录,则需要将mysql安装目录下的data目录的属主改为mysql
# chown -R mysql /usr/local/mysql/data

4、为mysql提供主配置文件:

# cd /usr/local/lamp/mysql
# cp support-files/my-large.cnf /etc/my.cnf

并修改此文件中thread_concurrency的值为你的CPU个数乘以2,比如这里使用如下行:
thread_concurrency = 2

另外还需要添加如下行指定mysql数据文件的存放位置:
datadir = /mydata/data

5、为mysql提供sysv服务脚本:

# cd /usr/local/lamp/mysql
# cp support-files/mysql.server /etc/rc.d/init.d/mysqld
# chmod +x /etc/rc.d/init.d/mysqld

添加至服务列表:
# chkconfig --add mysqld
# chkconfig mysqld on

而后就可以启动服务测试使用了。

为了使用mysql的安装符合系统使用规范,并将其开发组件导出给系统使用,这里还需要进行如下步骤:
6、输出mysql的man手册至man命令的查找路径:

编辑/etc/man.config,添加如下行即可:
MANPATH /usr/local/lamp/mysql/man

7、输出mysql的头文件至系统头文件路径/usr/include:

这可以通过简单的创建链接实现:
# ln -sv /usr/local/lamp/mysql/include /usr/include/mysql

8、输出mysql的库文件给系统库查找路径:

# echo '/usr/local/lamp/mysql/lib' > /etc/ld.so.conf.d/mysql.conf

而后让系统重新载入系统库:
# ldconfig

9、修改PATH环境变量,让系统可以直接使用mysql的相关命令。具体实现过程这里不再给出。

10、MySQL服务器维护了两类变量:
服务器变量
定义MySQL服务器运行特性
SHOW GLOBAL VARIABLES [LIKE 'STRING'];
状态变量
保存了MySQL服务器运行统计数据
SHOW GLOBAL STATUS [LIKE 'STRING'];

MySQL通配符:
_:任意单个字符
%:任意长度的任意字符

三、编译安装php-5.4.13

1、解决依赖关系:

请配置好yum源(可以是本地系统光盘)后执行如下命令:
# yum -y groupinstall "X Software Development"

2、编译安装php-5.4.13

首先下载源码包至本地目录,下载地址:http://php.net/

# tar xf php-5.4.13.tar.bz2
# cd php-5.4.13
# ./configure --prefix=/usr/local/lamp/php --with-mysql=/usr/local/lamp/mysql --with-openssl --with-mysqli=/usr/local/lamp/mysql/bin/mysql_config --enable-mbstring --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir=/usr --enable-xml --enable-sockets --with-apxs2=/usr/local/lamp/apache/bin/apxs --with-mcrypt --with-config-file-path=/etc --with-config-file-scan-dir=/etc/php.d --with-bz2 --enable-maintainer-zts

--prefix 指定php的安装路径
--with-mysql 指定mysql所在的路径
--with-openssl 让php支持openssl功能
--with-mysqli 支持mysql的另外一种接口
--enable-mstring 让php支持mstring的功能
--with-freetype-dir 让php支持freetype的功能,freetype引擎是一个*的,可移植的字体库
--with-jpeg-dir 让php支持jpeg图片
--with-zlib 让php支持zlib,zlib是互联网上常用的通用格式的压缩库,让数据文件压缩后再发送
--with-libxml-dir 让php支持xml扩展标记语言,并告诉其xml库的路径。现在众多系统实现数据交互的时候都要基于xml来实现
--enable-sockets 让php支持基于套接字的通信
--with-apxs2 基于这个apxs可以将php编译成Apache的模块,如果要使用fastcgi模式的话,将此选项改为--enable-fpm
--with-mcrypt 让php支持加密功能,额外的加密库
--with-config-file-path 配置php的配置文件php.ini存放的目录
--with-config-file-scan-dir 除了主配置文件之外,而主配置文件的一些子配置文件的存放路径
--with-bz2 让php支持bz2压缩,一个压缩库

说明:
1、这里为了支持apache的worker或event这两个MPM,编译时使用了--enable-maintainer-zts选项。
2、如果使用PHP5.3以上版本,为了链接MySQL数据库,可以指定mysqlnd,这样在本机就不需要先安装MySQL或MySQL开发包了。mysqlnd从php 5.3开始可用,可以编译时绑定到它(而不用和具体的MySQL客户端库绑定形成依赖),但从PHP 5.4开始它就是默认设置了。
# ./configure --with-mysql=mysqlnd --with-pdo-mysql=mysqlnd --with-mysqli=mysqlnd

# make
# make test
# make intall

为php提供配置文件:
# cp php.ini-production /etc/php.ini

3、 编辑apache配置文件httpd.conf,以apache支持php

# vim /etc/httpd/httpd.conf
1、添加如下二行
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps

2、定位至DirectoryIndex index.html
修改为:
DirectoryIndex index.php index.html

而后重新启动httpd,或让其重新载入配置文件即可测试php是否已经可以正常使用。

四、安装xcache,为php加速:

1、安装
# tar xf xcache-3.0.1.tar.gz
# cd xcache-3.0.1
# /usr/local/lamp/php/bin/phpize 准备一个php扩展以便进行编译
# ./configure --enable-xcache --with-php-config=/usr/local/php/bin/php-config
# make && make install

安装结束时,会出现类似如下行:
Installing shared extensions: /usr/local/php/lib/php/extensions/no-debug-zts-20100525/

2、编辑php.ini,整合php和xcache:

首先将xcache提供的样例配置导入php.ini
# mkdir /etc/php.d
# cp xcache.ini /etc/php.d

说明:xcache.ini文件在xcache的源码目录中。

接下来编辑/etc/php.d/xcache.ini,找到zend_extension开头的行,修改为如下行:
zend_extension = /usr/local/php/lib/php/extensions/no-debug-zts-20100525/xcache.so

注意:如果php.ini文件中有多条zend_extension指令行,要确保此新增的行排在第一位。

五、启用服务器状态

mod_status模块可以让管理员查看服务器的执行状态,它通过一个HTML页面展示了当前服务器的统计数据。这些数据通常包括但不限于:
(1) 处于工作状态的worker进程数;
(2) 空闲状态的worker进程数;
(3) 每个worker的状态,包括此worker已经响应的请求数,及由此worker发送的内容的字节数;
(4) 当前服务器总共发送的字节数;
(5) 服务器自上次启动或重启以来至当前的时长;
(6) 平均每秒钟响应的请求数、平均每秒钟发送的字节数、平均每个请求所请求内容的字节数;

启用状态页面的方法很简单,只需要在主配置文件中添加如下内容即可:
<Location /server-status>
SetHandler server-status
Require all granted
</Location>

需要提醒的是,这里的状态信息不应该被所有人随意访问,因此,应该限制仅允许某些特定地址的客户端查看。比如使用Require ip 172.16.0.0/16来限制仅允许指定网段的主机查看此页面。

第二部分、配置apache-2.4.4与fpm方式的php-5.4.13

一、apache、MySQL的安装与前一部分相同;请根据其进行安装;

二、编译安装php-5.4.13

1、解决依赖关系:

请配置好yum源(可以是本地系统光盘)后执行如下命令:
# yum -y groupinstall "X Software Development"

2、编译安装php-5.4.13

首先下载源码包至本地目录,下载地址:http://php.net/

# tar xf php-5.4.13.tar.bz2
# cd php-5.4.13
# ./configure --prefix=/usr/local/lamp/php --with-mysql=/usr/local/lamp/mysql --with-openssl --with-mysqli=/usr/local/lamp/mysql/bin/mysql_config --enable-mbstring --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir=/usr --enable-xml --enable-sockets --enable-fpm --with-mcrypt --with-config-file-path=/etc --with-config-file-scan-dir=/etc/php.d --with-bz2

说明:如果使用PHP5.3以上版本,为了链接MySQL数据库,可以指定mysqlnd,这样在本机就不需要先安装MySQL或MySQL开发包了。mysqlnd从php 5.3开始可用,可以编译时绑定到它(而不用和具体的MySQL客户端库绑定形成依赖),但从PHP 5.4开始它就是默认设置了。
# ./configure --with-mysql=mysqlnd --with-pdo-mysql=mysqlnd --with-mysqli=mysqlnd

# make
# make intall

为php提供配置文件:
# cp php.ini-production /etc/php.ini

3、配置php-fpm

为php-fpm提供Sysv init脚本,并将其添加至服务列表:
# cp sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
# chmod +x /etc/init.d/php-fpm
# chkconfig --add php-fpm
# chkconfig php-fpm on

为php-fpm提供配置文件:
# cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf

编辑php-fpm的配置文件:
# vim /usr/local/php/etc/php-fpm.conf
配置fpm的相关选项为你所需要的值,并启用pid文件(如下最后一行):
pm.max_children = 50 最大子进程的数量
pm.start_servers = 5 启动时候开启的空闲进程数量
pm.min_spare_servers = 2 最小的空间进程数量
pm.max_spare_servers = 8 最大的空闲进程数量
pid = /usr/local/php/var/run/php-fpm.pid
注:如果你修改了pid的值,需要在/etc/rc.d/init.d/php-fpm中也修改相应的路径,因为默认的启动脚本中规定到/usr/local/php/var/run/php-fpm.pid中去寻找pid文件

接下来就可以启动php-fpm了:
# service php-fpm start

使用如下命令来验正(如果此命令输出有中几个php-fpm进程就说明启动成功了):
# ps aux | grep php-fpm

默认情况下,fpm监听在127.0.0.1的9000端口,也可以使用如下命令验正其是否已经监听在相应的套接字。
# netstat -tnlp | grep php-fpm
tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN 689/php-fpm

三、配置httpd-2.4.4

1、启用httpd的相关模块

在Apache httpd 2.4以后已经专门有一个模块针对FastCGI的实现,此模块为mod_proxy_fcgi.so,它其实是作为mod_proxy.so模块的扩充,因此,这两个模块都要加载
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so

2、配置虚拟主机支持使用fcgi

在相应的虚拟主机中添加类似如下两行。
ProxyRequests Off
ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/PATH/TO/DOCUMENT_ROOT/$1

例如:
<VirtualHost *:80>
DocumentRoot "/www/magedu.com"
ServerName magedu.com
ServerAlias www.magedu.com

ProxyRequests Off
ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/www/magedu.com/$1

<Directory "/www/magedu.com">
Options none
AllowOverride none
Require all granted
</Directory>
</VirtualHost>

ProxyRequests Off:关闭正向代理功能
ProxyPassMatch:把以.php结尾的文件请求发送到php-fpm进程,php-fpm至少需要知道运行的目录和URI,所以这里直接在fcgi://127.0.0.1:9000后指明了这两个参数,其它的参数的传递已经被mod_proxy_fcgi.so进行了封装,不需要手动指定。
反向代理:客户端向服务端请求数据,但是服务端本身是没有用户请求的这些数据的,但是服务端会到数据所在的主机上取得数据,并取回或缓存到本机,然后将结果返回给用户,这个过程就叫做反向代理

3、编辑apache配置文件httpd.conf,让apache能识别php格式的页面,并支持php格式的主页

# vim /etc/httpd/httpd.conf
1、添加如下二行
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps

2、定位至DirectoryIndex index.html
修改为:
DirectoryIndex index.php index.html

补充:Apache httpd 2.4以前的版本中,要么把PHP作为Apache的模块运行,要么添加一个第三方模块支持PHP-FPM实现。

上一篇:MINA学习汇总


下一篇:Android M Permission 运行时权限 学习笔记