如何使打包的 Apache 在 CentOS 上正常运行?

如何使打包的 Apache 在 CentOS 上正常运行?

每次我运行 Apache 的生产安装时,它都会按照 httpd 文档所暗示的标准配置进行部署:

PREFIX/bin
      /conf
      /logs
      /htdocs
      ...

通常情况下,该目录结构归 root 所有,我会在某处创建类似的目录结构,例如:

/app_partition/apache/current/bin
                             /conf
                             /logs
                             /htdocs
                             ...

然后,我的目录中的脚本bin会调用 中的脚本PREFIX/bin,并向其传递-f指向 上的 conf 文件/app_partition的选项。因此,我可以在同一台服务器上运行多个 apache 实例(例如,对于在同一台机器上拥有开发和 UAT 环境很有用),始终引用应用程序帐户无法修改的原始二进制文件副本。如果我需要监听端口 80,则通过一次性配置设置root规则iptables,将端口 80 转发到相关 apache 实例正在监听的任何端口。

为了获得加分,current在上面的路径中有一个符号链接,在htdocs需要时,所有内容 - 启动脚本、配置和所有内容 - 都是在源代码控制之外构建的,并通过脚本进行部署。

因此,现在我拥有一个预装了 Apache 的 CentOS VPS 帐户。它是通过 yum 完成的,apache 文件到处都是;代码在 中/usr/sbin/,配置在 中/etc/httpd,文档库在 中/var/www/;全部由 root 拥有,在我看来,它们提供的灵活性非常小。

我正在按照我习惯的方式完成所有事情(不从源代码进行编译,因为我非常喜欢使用单个命令应用安全更新的想法yum),但我有几个问题:

  1. 为什么发行版(我看过的所有其他发行版似乎都这么做)是否坚持将 httpd 的各个部分散布到各处 - 为什么不直接安装在/opt/apache/或类似的地方?
  2. 其他人是如何做到这一点的?真的有人(不是托管公司)在用 Apache 吗/usr/sbin?具体来说:

    • 如何避免被 ? 符号链接/var/www所拥有root
    • 您如何控制 Apache 升级?(稍微澄清一下:系统上只有一个 httpd 二进制文件的副本,因此当您升级时,您实际上是在对系统上的所有用户/应用程序说“恭喜,您已升级!”,紧接着是“您的意思,您的配置不再起作用了?”)
    • 如果一切都出错了,如何回滚 Apache 升级?过去,我曾努力进行yum降级。(幸好那台上网本附带了恢复盘。)
    • 您如何对 Apache 配置进行版本控制?
    • 这个目录是什么/etc/httpd/conf.d

    -bash-3.2# cat /etc/httpd/conf.d/README

    该目录保存着 Apache 2.0 模块特定的配置文件;该目录中任何带有“.conf”扩展名的文件都将被视为 Apache 配置文件。

    文件按字母顺序进行处理,因此,如果使用依赖于加载 mod_perl 的配置指令,请确保这些指令在排序顺序中位于“perl.conf”之后的文件名中。

    这只是对毫无戒心的菜鸟开的一种糟糕的恶作剧,对吧?

答案1

  1. 发行版将东西“放在各处”以遵循 Linux 的文件系统层次结构标准,其中由 root 运行的二进制文件放在 /usr/sbin 中,配置文件放在 /etc 中,更改的文件放在 /var 中,等等...这使得系统可以更好地与其他工具交互。
  2. 是的,人们确实使用 /usr/sbin 来运行 apache。
    • 我从来没有遇到过 /var/www 由 root 拥有的问题。在一个系统中,/var/www/html 是指向另一个位置的符号链接。如果我需要其中一个拥有不同的所有者,我会使用 puppet 设置所有权,这样 httpd 的未来升级就不会破坏它。
    • “yum 更新”。:)
    • 升级永远不会出错,因为 RH 不会更改功能并正确标记配置文件,以便更新的版本不会覆盖您的版本。不过,获取旧版本的 RPM 并降级到旧版本并不难。
    • 在我的旧系统上,apache 配置在修订控制(CVS、SVN 等)中进行跟踪。在较新的系统上,它从 puppet(在修订控制中)中推出
    • /etc/httpd/conf.d 是包含在配置中的配置文件的目录。它允许以某种方式与 apache 交互的其他软件放置所需的配置,而无需从脚本编辑配置文件。例如,如果您安装 squirrelmail RPM,它们会将配置文件放在其中。安装 mod_perl RPM,它会将加载 mod_perl.so 的配置放在其中(并在一些评论中提供了您可能想要做的其他事情的示例)

答案2

您只需将 config/logs/htdocs 粘贴到您想要的位置,然后运行即可/usr/sbin/apache -f /whatever/you/want/httpd.conf。唯一不能轻易更改的是二进制位置,这是众所周知的(据我所知,您不需要在每个实例上都这样做)。

相关内容