【问题标题】:Install apache module X-Sendfile on MAMP在 MAMP 上安装 apache 模块 X-Sendfile
【发布时间】:2012-02-01 18:59:15
【问题描述】:

如何安装 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

【问题讨论】:

    标签: apache mamp x-sendfile apache-modules


    【解决方案1】:

    如果您的 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 为例。查找该信息的命令是“文件 [文件名]”。我从终端运行它到 /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. 现在我确定我理解了这个问题,让我们重新构建 .so,并在 apxs 命令行上强制使用正确的架构。为此,我只需添加两个新参数,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 年前开始使用 LAMPP 的 'x'AMP 堆栈,然后是 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 
    

    【讨论】:

    • 原来我也在运行一个稍微过时的 MAMP 版本,所以我还必须升级它(因为 apache 版本不同)。不过,这很好用。谢谢!
    • 很高兴为您提供帮助,很高兴您已启动并开始运行 :)
    • 我遇到了和@lakenen 一样的问题。升级 MAMP 后,mod_xsendfile 加载正常。我什至不必将其编译为 i386,只需使用“apxs -cia mod_xsendfile.c”即可。谢谢!
    【解决方案2】:

    这对我有用:

    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

    【讨论】:

    • 这正是我之前所做的,它产生了上述错误。
    猜你喜欢
    • 2017-05-26
    • 1970-01-01
    • 1970-01-01
    • 2012-04-18
    • 2013-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多