linux 下apache2.x安装以及模块php mysql编译
本以为很简单,刚开始装的时候也成功了,但是发现modules下面什么也没有,什么模块也没有!
后来才发现需要指定--enable-mods-shared=all参数
步骤如下:
首先下载apache源码并解压缩:
wget apache2.x下载链接
tar –zxvf 下载的.gz包路径
转到解压缩目录
cd 解压缩目录
配置,这里/mybin是你预计要将apache安装的目录,配置时并未创建此目录,只是在make时才创建
./configure --prefix=/mybin/apache2_2 --enable-so --enable-mods-shared=all
编译
make && make install
此时应该装好了,但是你会发现modules目录下模块不是很多,下面介绍编译模块的步骤
假设已在源码根目录,以编译mod_proxy为例
首先你可以使用find . –name mod_proxy.c 找到此文件在哪里
然后使用如下命令编译
apache2_2_path/bin/apxs -i -a -c xxx/mod_proxy.c xxx/proxy_util.c
这样就将mod_proxy模块编译到apache/modules目录并在httpd.conf中启用此模块。
这里因为mod_proxy依赖proxy_util.c所以需要一起编译。
静态编译的缺点:
有至少两种方法可以添加第三方模块,最简单的方法是作为配置参数提供,语法如下:
--with-module=module-type:module-file[, module-type:module-file]
module-file
是模块的源代码文件名,该文件必须位于Apahe源代码目录树的"modules/module-type
"目录下,如果configure
没有在那里找到module-file ,则将它看作一个绝对路径名并尝试将其复制到"modules/module-type
"目录中,如果"modules/module-type
"目录不存在,configure
将新建一个"modules/module-type
"目录并在其中放置一个标准的Makefile.in
文件。这种方法有两个明显的缺陷:- 模块的源代码必须是单一文件
- 模块只能静态连接进核心,而不能作为DSO模块
所以一般并不使用此方法,而是使用
apxs
(Apache扩展工具)来添加第三方模块支持。
那么如果是动态安装,就必须得apache在php之前安装,其实我的主机已近有服务商预先安装的apache+php+mysql,但是我自要装个试验的apache,我想把实验的apache指向已经安装的php,看来是不行的,这不像我本地Windows环境下只要下载个文件,修改配置指向某某处的安装思路。
以我linux上安装php为例,前提Apache已经装好
wget http://us.php.net/distributions/php-5.3.15.tar.gz tar zvxf php-5.3.15.tar.gz cd php-5.3.15 ./configure --prefix=/xxx/php --with-apxs2=/xxx/apache2_2/bin/apxs && make && make install make test //测试,这一步可以忽略
安装成功后,会发现modules目录下面多了个libphp5.so,而且在httpd.conf中多出了一行
LoadModule php5_module modules/libphp5.so
然后需要在<IfModule mime_module>配置中添加
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
注意,IfModule mime_module是检查是否加载了mime_module,所以,要确保LoadModule 这一部分的代码在<IfModule mime_module>判断之前。否则你发现还是不能运行php。
linux主机上配置VirtualHost是与windows是一样的,只是要注意ip地址的问题。
例如,在windows下我们习惯
Listen 880
NameVirtualHost 127.0.0.1:880
<VirtualHost 127.0.0.1:880>
DirectoryIndex index.php index.html
DocumentRoot "/XXX/XXX"
ServerName 127.0.0.1:880
</VirtualHost>
但是在linux主机上可能ip映射比较复杂,所以推荐如下的方式:
Listen 880
NameVirtualHost *:880
<VirtualHost *:880>
DirectoryIndex index.php index.html
DocumentRoot "/home2/igtwonet/sites/mymind-la"
ServerName 127.0.0.1:880
</VirtualHost>
特别是对于本地连ssh代理的情况爱出现这样的问题。
安装mysql:
本想利用已存在的mysql但是作为测试用的还是想重新安装一个,这样的话php也得重新安装了。
参见http://kazge.com/archives/860.html
php只要重新编译就行了,不需要删除原来的。
./configure --prefix=/xxx/lib/php-5.3.15 --with-mysql=/xxx/lib/mysql-5.1.63 --with-apxs2=/xxx/apache2_2/bin/apxs && make && make install
这样apache+php+mysql就成型了,写个测试页面phpinfo();发现mysql模块也有了。
注意mysql最好不用localhost而用127.0.0.1,localhost涉及到dns解析,可能连不上。
Access denied for user 'root'@'localhost' (using password: YES) 即使你正确配置了user表权限。
这上面三个(apache,php,mysql)源码安装都不需要管理员root权限。
参见:
http://yangli.iteye.com/blog/1102570
http://blog.5ilinux.com/archives/2003/06/apacheapachephp.html