技术头条 - 一个快速在微博传播文章的方式     搜索本站
您现在的位置首页 --> Apache --> 在Apache2.2.XX下安装Mod-myvhost模块

在Apache2.2.XX下安装Mod-myvhost模块

浏览:11704次  出处信息

    上回提到Mod-myvhost只有for apache1.3的版本,后来google了下,发现一个葡萄牙的同学讲到了如何在2.x上安装(围观请翻墙,并自备翻译工具),才发现mod-myvhost的svn分支里边有2.0版本的代码(部分运气不好的围观群众请继续翻墙).于是费了一番功夫,我终于把这个模块装上了.下边是安装过程.

    首先,因为代码里边用到了mysql的一些头文件,所以要安装mysql的开发包.

    sudo apt-get install libmysql++-dev

    然后,这个apache module采用apxs编译,所以apxs也要有.如果你已经编译过apache了,那么apxs就在bin下边,和apachectl在同一级目录下.

    准备工作就是这些.开始安装mod-myvhost.

    svn checkout代码.

    svn co http://mod-myvhost.googlecode.com/svn/branches/2.0.xx/

    为什么要用2.0.xx而不用2.2.xx-dbd? 因为2.2.xx-dbd编译通不过…有兴趣的同学可以自行debug去.

    然后进入目录,开始编译

    cd 2.0.xx/

    make

    呜,报错了

    /bin/sh: apxs: command not found

    make: *** [mod_myvhost.so] Error 127

    原来是apxs没有找到.修改Makefile,指定apxs路径,vim Makefile,第四行改为

    APXS = /home/easy/dev/apache2/bin/apxs(这里换成你apache2/bin目录的路径/apxs)

    然后 make,make install . 一切ok. 查看apache2/conf/httpd.conf,已经自动加上了相关的配置.

    LoadModule myvhost_module modules/mod_myvhost.so

    试着启动下.又挂了… 提示信息如下:

    undefined symbol: apr_hash_clear

    grep 源代码发现只有mod_myvhost_cache.c的最后一段用到.

    /* FIXME: older */

    void cache_vhost_flush(myvhost_cfg_t *cfg, apr_hash_t *cache, time_t older)

    {

    if (!cfg->cache_enabled) {

    return;

    }

    if (!cache) {

    return;

    }

    apr_hash_clear(cache);

    }

    #endif /* WITH_CACHE */

    修改Makefile,先关掉cache部分

    #CFLAGS+= -DWITH_PHP -DWITH_CACHE

    CFLAGS+= -DWITH_PHP

    重新编译安装后启动apache.Ok了.接着测试动态host功能.

    修改apache配置文件 httpd.conf,添加myvhost段.

MyVhostOn on
MyVhostDefaultHost "appgame.cn"
MyVhostDefaultRoot "/data0/myapphost/"
MyVhostDbHost "127.0.0.1"
MyVhostDbSocket "/tmp/mysql.sock"
MyVhostDbUser "easy"
MyVhostDbPass "***"
MyVhostDbName "hosting"
MyVhostQuery "SELECT rootdir,admin,extra_php_config FROM vhosts WHERE vhost=\'%s\' AND enabled=\'yes\'"
Options Indexes
AllowOverride None
Order allow,deny
Allow from all

    在phpmyadmin里边导入2.0.xx/vhost.sql,会自动建立hosting库.删掉里边的示例数据,填入我们需要的数据:

    

    在对应的目录下建立测试文件index.php.重启apache已经可以正常工作了.

    mod-myvhost会自动添加open_basedir限制,写段代码测试下:

    echo file_get_contents( \'../02/o.php\' );

    访问页面,输入如下:

    Warning: file_get_contents() [function.file-get-contents]: open_basedir restriction in effect. File(../02/o.php) is not within the allowed path(s): (/data0/myapphost/01/) in /data0/myapphost/01/index.php on line 1

    Warning: file_get_contents(../02/o.php) [function.file-get-contents]: failed to open stream: Operation not permitted in /data0/myapphost/01/index.php on line 1

    看起来基本的vhost功能已经完成了.

    接下来要解决的几个问题是

cache是一个重要的功能,想办法把cache的问题查出来.apr的源代码里是有这个函数的,可能是因为apr的路径或者版本不对.代码访问的隔离完成了.但是代码上传的问题还没有解决,接着开始ftp server的选型.要求能通过文件或者mysql的方式方便的添加账号,能根据添加的账号指定目录的磁盘配额.

    这些是下个周末的功课 :] .

建议继续学习:

  1. Nginx模块开发入门    (阅读:9871)
  2. nginx模块开发    (阅读:4613)
  3. CommonJS 的模块系统,AMD 和 Wrappings, 以及 RequireJS    (阅读:4176)
  4. 搭好了apache模块的开发环境    (阅读:3457)
  5. PHP 模块编写需要注意的一个问题---- php模块及函数名都定义成小写吧    (阅读:3361)
  6. 使用 Perl 来开发 Nginx 的模块    (阅读:3300)
  7. FarmVille(美版开心农场)谈架构:所有模块都是一个可降级的服务    (阅读:3276)
  8. php无法加载pcre.so的解决办法    (阅读:3015)
  9. mysql 的模块不能安装的解决方法    (阅读:2592)
  10. Perl的English模块    (阅读:2495)
QQ技术交流群:445447336,欢迎加入!
扫一扫订阅我的微信号:IT技术博客大学习
© 2009 - 2024 by blogread.cn 微博:@IT技术博客大学习

京ICP备15002552号-1