每次我运行 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
),但我有几个问题:
- 为什么发行版(我看过的所有其他发行版似乎都这么做)是否坚持将 httpd 的各个部分散布到各处 - 为什么不直接安装在
/opt/apache/
或类似的地方? 其他人是如何做到这一点的?真的有人(不是托管公司)在用 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
- 发行版将东西“放在各处”以遵循 Linux 的文件系统层次结构标准,其中由 root 运行的二进制文件放在 /usr/sbin 中,配置文件放在 /etc 中,更改的文件放在 /var 中,等等...这使得系统可以更好地与其他工具交互。
- 是的,人们确实使用 /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
。唯一不能轻易更改的是二进制位置,这是众所周知的(据我所知,您不需要在每个实例上都这样做)。