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文件。这种方法有两个明显的缺陷:

  1. 模块的源代码必须是单一文件
  2. 模块只能静态连接进核心,而不能作为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

http://www.linuxjournal.com/article/4410


Total views.

© 2013 - 2023. All rights reserved.

Powered by Hydejack v6.6.1