0

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

我已按照这些说明安装 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

4

2 回答 2

4

如果您的 MAMP 二进制文件是为与内核相同的架构构建的,那么 naabster 的答案是正确的。您遇到的问题可能是 MAMP 不是使用相同的架构构建的——我在这里运行 Lion(10.7.3)和 XAMPP 1.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 为例。查找该信息的命令是“文件[文件名] ”。我从终端 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 构建命令 ('sudo apxs -cia mod_xsendfile.c') 构建的模块支持的 mach-o 包类型和体系结构。因为我们传递了'-i',所以 apxs 会将 .so 安装到默认的 apache 模块目录 ... /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 表示“安装”(将 .so 移动到模块目录中),-a 表示“激活”(在 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
    

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

希望对您有所帮助。

此外,我进行了相当不错的尽职调查,发现几乎蹲在 Goog 中寻找“XAMPP X-SendFile 无法创建对象”。我在这里找到的是你的问题,一旦我消除了“XAMPP”,因为我正在搜索“XAMPP”,而不是“MAMP”

我从 10 年前的“x”AMP 堆栈开始使用 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 
于 2012-04-04T14:02:24.187 回答
0

这对我有用:

  1. 为默认的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
于 2012-03-08T09:11:38.910 回答