【问题标题】:Compiling Apache web server with dynamic module support使用动态模块支持编译 Apache Web 服务器
【发布时间】:2011-07-12 16:51:30
【问题描述】:

我刚刚在全新安装的 Ubuntu 10.04.2 上编译了 Apache 2.2.17。这是一个学习练习,可以发现当你编译某些东西时实际发生了什么,而不是仅仅使用 apt-get,因此避免使用 apt-get 来支持自己编译。

我跑了:

sudo ./configure --prefix=/etc/apache --enable-module=so --enable-rule=SHARED_CORE --enable-shared=max --enable-ssl=shared --enable-rewrite=shared

后跟强制:

sudo make && sudo make install

一切似乎都很顺利(Apache 启动没有问题),除了在 Apache 模块目录中,我原本希望看到 mod_rewrite.so 和 mod_ssl.so,但我看到了:

#cd /etc/apache/modules
#ls -l
mod_rewrite.a
mod_rewrite.la
mod_ssl.a
mod_ssl.la

如何将这些转换为 .so 文件,以便我可以将它们与 Apache 配置中的 LoadModule 链接?

提前致谢。

【问题讨论】:

    标签: apache apache-modules


    【解决方案1】:

    您不应该以 root 身份运行所有内容。 ./configure 和 make 在没有 root 权限的情况下也可以正常工作,make install 需要 root 权限才能写入 /etc 和 /usr/bin 等目录。

    /etc 不适合可执行文件,更不用说完整的 Apache 安装了。如果要将配置文件放在/etc/apache 中,请使用--sysconfdir=/etc/apache。安装自定义构建 Apache 的正确位置是 /usr/local。

    要启用共享模块,你必须传递--enable-so选项,应该编译为共享的模块应该添加到--enable-mods-shared。

    Apache + mod_ssl(共享模块)+ mod_rewrite(共享模块)的正确配置行是,安装在/usr/local/apache,配置文件在/etc/apache:

    ./configure --prefix=/usr/local/apache --sysconfdir=/etc/apache --enable-so \
      --enable-rewrite --enable-ssl --enable-mods-shared='rewrite ssl'
    

    成功配置 Apache HTTPd 后,运行 make,然后运行 ​​sudo make install。

    有关配置选项的更多信息,请访问Apache HTTPd documentation。

    【讨论】:

      【解决方案2】:

      我遇到了同样的问题:尝试编译 apache 2.2.x,将所有(可能的)模块编译为动态模块而不是静态模块。

      即使我使用了配置选项 (--enable-mods-shared="list,of,modules"),模块也被编译为静态而不是共享的。更糟糕的是,在尝试与“*.so”文件相关的“httpd -M”或“apachectl configtest”时出现了一些错误,即使它们在刚刚安装的 httpd.conf 中列出(gmake install)。

      我调查了 FreeBSD 端口系统,发现他们的端口确实如我所愿创建了一个包含所有共享模块的 apache2.2.x。我发现这是“配置”选项的问题。

      为了解决这个问题,我已经完全按照端口进行了配置,在配置时我首先“禁用”了所有模块(很难找到它们的完整列表,但得到了它)在配置中有许多“--disable-MODULE”条目。这是我的工作示例:

      "./configure" 
      "--enable-layout=FreeBSD" 
      "--with-perl=/usr/local/bin/perl5.12.4" 
      "--with-expat=/usr/local" 
      "--with-iconv=/usr/local" 
      "--with-pcre=/usr/local" 
      "--disable-authn-file" 
      "--disable-authn-default" 
      "--disable-authz-host" 
      "--disable-authz-groupfile" 
      "--disable-authz-user" 
      "--disable-authz-default" 
      "--disable-auth-basic" 
      "--disable-charset-lite" 
      "--disable-include" 
      "--disable-log-config" 
      "--disable-env" 
      "--disable-setenvif" 
      "--disable-mime" 
      "--disable-status" 
      "--disable-autoindex" 
      "--disable-asis" 
      "--disable-cgid" 
      "--disable-cgi" 
      "--disable-negotiation" 
      "--disable-dir" 
      "--disable-imagemap" 
      "--disable-actions" 
      "--disable-userdir" 
      "--disable-alias" 
      "--disable-filter" 
      "--disable-substitute" 
      "--disable-proxy" 
      "--disable-proxy-connect" 
      "--disable-proxy-ftp" 
      "--disable-proxy-http" 
      "--disable-proxy-ajp" 
      "--disable-proxy-balancer" 
      "--disable-proxy-scgi" 
      "--disable-reqtimeout" 
      "--enable-so" 
      "--enable-mods-shared=auth_basic auth_digest authn_file authn_dbm authn_anon authn_default authn_alias authz_host authz_groupfile authz_user authz_dbm authz_owner authz_default cache disk_cache file_cache dav dav_fs actions alias asis autoindex cern_meta cgi charset_lite deflate dir dumpio env expires headers imagemap include info log_config logio mime mime_magic negotiation rewrite setenvif speling status unique_id userdir usertrack vhost_alias filter version reqtimeout ssl" 
      "--with-dbm=sdbm" 
      "--with-ssl=/usr" 
      "--disable-ipv6" 
      "--with-devrandom" 
      "--with-mpm=worker" 
      "--prefix=/usr/local" 
      "--mandir=/usr/local/man" 
      "--infodir=/usr/local/info/" 
      

      这样,所有 apache2.2.x 模块都被构建为动态而不是静态的。 如果您忘记“--disable-XXX”它们而只尝试“--enable-XXX”甚至“--enable-mods-shared=XXX,YYY,ZZZ”,它不起作用。您必须在设置“--enable-mods-shared”配置选项之前禁用它们。

      【讨论】:

        【解决方案3】:

        试试这个

        sudo ./configure --prefix=/etc/apache --enable-so --enable-shared=max --enable-rewrite -enable-mods-shared="all ssl ldap cache proxy authn_alias mem_cache file_cache authnz_ldap charset_lite dav_lock disk_cache"
        

        警告:--enable-mods-shared=all 可以 实际上并未构建所有模块。

        --enable-shared=max 无效。我想你想用“最”?

        http://httpd.apache.org/docs/2.2/programs/configure.html

        【讨论】:

          【解决方案4】:

          太棒了。谢谢你们的帮助。

          尝试了几次,但我终于成功了。我最终不得不下载早期版本的 Apache 的源代码,然后模块才能正确编译,而不是生成 .a 和 .la 文件。不知道这是否是因为在配置/制作/安装过程中发生了某种我不知道的缓存事情,并且我以前(不正确的)编译尝试的某些部分正在以某种方式或可能重新运行这与 Apache 的 2.2.17 版本有关 - 不确定。无论如何,它最终奏效了。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2011-10-06
            • 1970-01-01
            • 1970-01-01
            • 2019-04-06
            • 2016-10-16
            • 2016-06-20
            • 2010-09-13
            相关资源
            最近更新 更多