测试 apache 配置更改

Leo*_*opd 4 configuration-management apache-2.2

重新配置托管生产站点的 apache 服务器的最佳方法是什么?

我使用的基本工作流程如下:

  1. 制作一个尽可能类似于生产的测试服务器
  2. 重新配置测试服务器,使其按我希望的方式工作
  3. 等到深夜,所以流量低
  4. 将我对测试服务器所做的更改应用到生产服务器
  5. 重新启动apache,手指交叉它可以工作
  6. 如果出现任何问题,请回滚并重新启动

因为 Apache 需要将 IP 地址等硬编码到其配置中,所以不可能(实际上并不直接)将配置文件完全从测试服务器复制到生产环境。因此,在生产中应用它们时,总是有可能出错。让我完全疯狂的事情是

任何 apache 配置文件中的一个错字都会关闭该服务器上托管的所有站点!

人们如何在大型复杂的生产服务器上处理这个问题?似乎必须有一种方法来检查配置将做什么,或者至少它是否有效,而不会冒着关闭实时站点的风险。建议?

Kro*_*mey 8

您可以使用 -t 选项httpd来测试配置,而无需提交正在运行的 Apache 实例来使用它。如果有任何错误,它将为您提供非 0 退出状态。

此外,如果您在使用 init 脚本的类 Linux 环境中,那么/etc/init.d/httpd(或有时/etc/init.d/apache2)通常会支持“测试”参数,即/etc/init.d/httpd test,它将检查您的配置并告诉您它是否好。

当你有一个好的配置时,你可以通知 Apache 重新加载配置文件,而无需重新启动它——/etc/init.d/httpd reload通常是。(如果您不在带有 init 脚本的系统上,我相信这是 USER1 信号。)除非您在删除现有虚拟主机或更改谁可以访问哪些资源的级别上进行更改,否则这应该不会对当前连接。

在Windows中,-t选项也可(httpd.exe -t),但我相信重新启动需要加载新的配置。

对于您的测试环境,您可以考虑在隔离的专用网络中使用 VM,其 IP 硬编码以匹配您的生产服务器的 IP。通过这种方式,您可以更紧密地匹配您的生产环境,而不必担心在将配置移至生产环境时忘记更改 IP 地址。您也可以使用 Web 浏览器在同一个专用网络上设置第二个 VM 来测试功能。

  • 我补充说,某些环境提供了`apachectl`(有时称为apache2ctl)工具:`apachectl configtest` 来测试配置是否存在明显错误(错误的IP 不是“明显的”)或`apachectl graceful` 来测试配置,如果正常,重新加载配置(通常)而不关闭。更多信息:http://httpd.apache.org/docs/2.2/programs/apachectl.html (3认同)