我有一个运行 Django 的实时 Apache2/MPM-Worker 实例。我还想运行一个 Apache2/MPM-prefork 实例,以便在同一台主机上运行一些 Drupal6 应用程序,并利用在 prefork 模型上运行的大量 PHP 模块。
我计划使用我的 MPM-worker 实例将 URL 反向代理到 Apache2-prefork 实例,以从 myhost.com/drupal6/ 开始。理论上,通过将第二个 Apache2-prefork 实例配置为侦听内部端口(例如 127.0.0.1:8080),并将我当前的 Apache2-worker 配置为代理传递和反向传递“drupal6”URL,这似乎是可行/可配置的。
但是,我该如何编译或安装 apache2-prefork 版本,使其具有与 /usr/sbin/apache2 不同的可执行文件名称,例如 /usr/sbin/apache2p,并且 apache2ctl 具有不同的名称,比如 apache2pctl,并且 apache2pctl 调用 /usr/sbin/apache2p 而不是 /usr/sbin/apache2... 依此类推(例如 /etc/apache2p),这样我就可以独立启动和重新启动我的两个实例?
据我了解,没有一个“apache2”的可执行文件可以同时使用 MPM-prefork 和 MPM-worker 模块进行编译,因此似乎我需要两个不同版本的 apache2 MPM 版本。但我认为我需要通过不同的名称来调用和控制它们。我查看了 apache2 的配置选项,对于使用 prefork 编译第二个 apache2 版本我有点不安,因为我不确定我是否可以设置所有选项,以便不会覆盖我当前的 apache2 文件。有办法吗?
是否有一个标准解决方案,可以在同一台机器上分别安装和控制 prefork 和 worker apache2 可执行文件,而不会让它们在安装或运行过程中互相干扰?
答案1
Apache Wiki(wiki.apache.org)为我提供了答案。我主要担心的是在创建新的 apache2 时不会破坏当前版本的 apache2 中的文件,而且我之前没有看到过用于控制 apache2ctl 复制到哪里的配置选项。但是,它就在那里,并且此页面让我相信所有 apache2 文件都已考虑在内,并且 config.layout 允许指示所有文件的去向。http://wiki.apache.org/httpd/DistrosDefaultLayout#Apache_httpd_2.2_default_layout_.28apache.org_source_package.29:
答案2
您不必安装两个副本,但需要两种不同的配置。
这完全取决于您使用的操作系统,我可以告诉您如何在 Debian 和 Ubuntu 中执行此操作:
- 为新实例确定一个名称。假设为 DRUPAL。
- 为你的新实例创建一个新的配置目录,复制原始内容:
cp -a /etc/apache2 /etc/apache2-DRUPAL
- 创建启动脚本链接:
ln -s /etc/init.d/apache2 /etc/init.d/apache2-DRUPAL
现在在 /etc/apache2-DRUPAL 中编辑您的新配置。您可以在 /etc/apache2-DRUPAL/envvars 中更改 Web 服务器用户名,在 /etc/apache2-DRUPAL/ports.conf 中更改监听端口等。
使用 Apache 2.4,您还可以同时安装不同的 MPM,以便您可以在实例中使用不同的 MPM,这是您的要求。
完成配置后,运行以下命令:
service apache2-DRUPAL start
update-rc.d apache2-DRUPAL defaults
第一个检查配置并启动新实例。如果不工作,请进行常规 Apache 调试以使其工作。
第二行只是为启动创建默认的 rc 链接。
如果您不想通过 /etc/init.d/apache2-DRUPAL 运行 Apache 命令,则必须. /etc/apache2-DRUPAL/envvars
在运行它们之前先运行。我认为这是 Debian/Ubuntu 特有的。当您这样做时,您会注意到apache2ctl
,apache2 -S
和其他程序正在从您的新配置运行。
就是这样。无需手动安装,也不会弄乱你的系统 :)
嗨嗨。
附言:https://wiki.apache.org/httpd/RunningMultipleApacheInstances似乎是进一步探索的一个良好起点。