3、根据[1],要安装httpd包,首先需要解决3个依赖:APR,APR-Util和PCRE。
1)首先解决APR依赖。下载最新的APR包,将其解压得到一个目录,将该目录重命名为apr。将apr目录整个移入httpd解压后目录的srclib子目录中。[1]
2)其次解决APR-Util依赖。下载最新的APR-Util包,将其解压得到一个目录,将该目录重命名为apr-util。将apr-util目录整个移入httpd解压后目录的srclib子目录中。[1]prefix=/home/dsl/usr
exec_prefix=/home/dsl/usr
oldincludedir=$prefix/oldinclude
./configure --prefix=$prefix --exec-prefix=$exec_prefix --oldincludedir=$oldincludedir
make
make install
在执行以上命令后,在"/home/dsl/usr/bin"中有个"pcre-config"程序。修改PATH环境变量为:PATH=$PATH:/home/dsl/usr/bin,那么在安装httpd的时候就能够找到这个"pcre-config"程序,从而解决了对PCRE的依赖。
prefix=/home/dsl/usr
exec_prefix=/home/dsl/usr
oldincludedir=$prefix/oldinclude
./configure --prefix=$prefix --exec-prefix=$exec_prefix --oldincludedir=$oldincludedir
make
make install
二、加载对php的支持
2.1、加载php模块LoadModule php5_module /usr/lib/apache2/modules/libphp5.so
在httpd.conf文件中加入以上语句即可。
SetHandler application/x-httpd-php
SetHandler application/x-httpd-php-source
# Deny access to raw php sources by default
# To re-enable it's recommended to enable access to the files
# only in specific virtual host or directory
Order Deny,Allow
Deny from all
# Deny access to files without filename (e.g. '.php')
Order Deny,Allow
Deny from all
# Running PHP scripts in user directories is disabled by default
#
# To re-enable PHP in user directories comment the following lines
# (from to .) Do NOT set it to On as it
# prevents .htaccess files from disabling it.
php_admin_flag engine Off
备注:以上需要加到httpd.conf文件中的内容可以单独放置到文件中,然后再在httpd.conf文件中通过"IncludeOptional"指令进行相应文件的导入。
三、排错
运行安装得到的httpd的方式一般是通过使用安装得到的apachectl脚本,使用该脚本可以设置好运行httpd运行所需要用到的环境变量。运行httpd的命令如下:apachectl start
3.1、PHP模块不支持多线程
图1
根据[2][3],MPM是Apache加载的一个模块,它主要用来处理并发多请求问题。有很多种MPM实现:worker,event,prefork,winnt等。worker MPM使用多线程的方式来解决并发多请求问题,prefork MPM使用多进程的方式来解决并发多请求问题。安装httpd的时候默认配置使用worker MPM。PHP分为支持多线程的PHP版本和不支持多线程的PHP版本,当前安装的PHP为不支持多线程的版本,因此报出以上错误。LoadModule dir_module modules/mod_dir.so
2)扩展主页文件的名称集合
默认配置中,只认为名称为"index.html"的才为主页文件,现在需要增加"index.php"名称。具体是配置如下片段:
#如果原先存在,在原先基础上修改
DirectoryIndex index.html index.php
以上实践中,程序以root用户身份运行,如果想以普通用户身份运行,可参考《以普通用户运行Ganglia监控框架》。
[3]https://httpd.apache.org/docs/2.2/mod/
[4]http://stackoverflow.com/questions/1623914/what-is-thread-safe-or-non-thread-safe-in-php
[5]http://blog.csdn.net/dslztx/article/details/49097977