在MAMP上安装apache模块X-Sendfile

时间:2012-02-01 18:59:16

标签: apache mamp x-sendfile apache-modules

如何安装X-Sendfile apache模块以便MAMP可以使用它?

我已经跟着these instructions安装了X-Sendfile,但是它没有用(似乎只是为默认的apache安装安装了它)。我还尝试手动将/usr/libexec/apache2/mod_xsendfile.so复制到/Applications/MAMP/Library/modules/,但在重新启动Apache时出现以下错误:

Cannot load /Applications/MAMP/Library/modules/mod_xsendfile.so into server: cannot create object file image or add library

2 个答案:

答案 0 :(得分:4)

如果您的MAMP二进制文件是针对与内核相同的体系结构构建的,那么naabster的答案是正确的。您遇到的问题可能是MAMP不是使用相同的架构构建的 - 我使用XAMPP 1.7.3运行Lion(10.7.3)并且我遇到了您遇到的相同问题。

以下是我如何弄清楚我的系统出了什么问题,以及我是如何修复它的。如果您的问题与我的问题相同,那么您应该能够随时跟进并进行验证。

首先,这是'uname -a'的输出,以显示我正在运行的内容:

Darwin Tads-Mac-Pro.local 11.3.0 Darwin Kernel Version 11.3.0:
Thu Jan 12 18:47:41 PST 2012; root:xnu-1699.24.23~1/RELEASE_X86_64 x86_64

以下是我采取的跟踪问题并解决问题的步骤:

  1. 找出其他(工作)模块的属性,即我新建的xsendfile模块丢失了。我选择了mod_headers.so作为例子。查找该信息的命令是“file [filename] ”。我正在从终端cd'd运行到/ Applications / XAMPP / xamppfiles / modules目录:

    file mod_headers.so 
    mod_headers.so: Mach-O universal binary with 2 architectures
    mod_headers.so (for architecture i386): Mach-O bundle i386
    mod_headers.so (for architecture ppc):  Mach-O bundle ppc
    

    如您所见,XAMPP提供了支持i386和ppc架构的通用二进制文件。但是,因为Lion内核正在运行x86_64,所以我使用apxs 构建的所有内容除非我告诉它否则将是x86_64。

  2. 检查使用推荐的apxs build命令('sudo apxs -cia mod_xsendfile.c')构建的模块支持的mach-o bundle类型和体系结构。因为我们传递'-i',apxs会将.so安装到默认的apache模块dir ... / usr / libexec / apache2 ...

    file /usr/libexec/apache2/mod_xsendfile.so 
    /usr/libexec/apache2/mod_xsendfile.so: Mach-O 64-bit bundle x86_64
    

    只是仔细检查这是否是问题,你也可以查看httpd(apache)二进制文件:

    file /Applications/XAMPP/xamppfiles/bin/httpd
    /Applications/XAMPP/xamppfiles/bin/httpd: Mach-O universal binary with 2 architectures
    /Applications/XAMPP/xamppfiles/bin/httpd (for architecture i386):   Mach-O executable i386
    /Applications/XAMPP/xamppfiles/bin/httpd (for architecture ppc):    Mach-O executable ppc
    

    现在,对于没有x86_64映像构建的apache实例,这肯定不行。相信,但要验证,呃!

  3. 现在我确定我理解了这个问题,让我们在apxs命令行上强制使用适当的架构来重新构建.so。要做到这一点,我只是添加两个新的参数,Wl(链接器标志)和Wc(编译器标志)。 -i表示'install'(将.so移动到modules目录中),-a表示'activate'(在httpd.conf中添加或重新启用LoadModule行)

    sudo apxs -cia -Wl,"-arch i386" -Wc,"-arch i386" mod_xsendfile.c
    
  4. 重新检查我们的新.so是否支持与安装的Apache相匹配的架构(i386,而不是x86_64)

    file /Applications/XAMPP/xamppfiles/modules/mod_xsendfile.so
    /Applications/XAMPP/xamppfiles/modules/mod_xsendfile.so: Mach-O bundle i386
    

    真棒。现在,将此火鸡复制到XAMPP安装目录中:

    sudo cp /usr/libexec/apache2/mod_xsendfile.so /Applications/XAMPP/xamppfiles/modules/
    

    将LoadModule行添加到/Applications/XAMPP/xamppfiles/etc/httpd.conf。

    LoadModule xsendfile_module modules/mod_xsendfile.so
    

    您应该能够使用xamppfiles / bin目录中的UI或apachectl脚本启动服务器。

  5. 希望对你有所帮助。

    另外,我做了相当不错的尽职调查,发现只是在Goog中寻找'XAMPP X-SendFile无法创建对象'。我找到的是你的问题,一旦我消除'XAMPP',因为我在寻找'XAMPP',而不是'MAMP'

    我开始使用'x'AMP堆栈,比如10年前使用LAMPP,然后是WAMPP,但ApacheFriends的人现在称他们的XAMPP为他们支持的所有平台。我更喜欢使用他们,因为我知道如果我必须在Windows服务器上安装,我可以下载我现在使用的相同软件包但是对于Windows而言我可以期望找到所有相同的服务器而没有(太多)意外。


    因此,只是(非常)彻底,更容易发现这些类型问题的另一种方法是通过Console.app。打开它,过滤org.apache.httpd,你会看到类似的东西:

    httpd: Syntax error on line 117 of /private/etc/apache2/httpd.conf: Cannot load
    /usr/libexec/apache2/mod_xsendfile.so into server:
    dlopen(/usr/libexec/apache2/mod_xsendfile.so, 10): no suitable image found.
    Did find:\n\t/usr/libexec/apache2/mod_xsendfile.so: mach-o, but wrong architecture
    

    您也可以在手动启动Apache服务器时从命令行获取该信息:

    sudo apachectl -E /tmp/foo.txt -k start; tail -f /tmp/foo.txt 
    

答案 1 :(得分:0)

这对我有用:

  1. 根据this为默认的OsX Apache服务器安装mod_xsendfile。
  2. /usr/libexec/apache2/mod_xsendfile.so复制到/Applications/MAMP/Library/modules/
  3. 编辑Mamp httpd.conf文件并添加以下行:LoadModule xsendfile_module modules/mod_xsendfile.so
  4. 重启Mamp