如何在同一系统上运行两个 Apache 实例并独立启动和停止它们。如能得到任何帮助或指导,我将不胜感激。
答案1
我认为这可能就是你正在寻找的 http://wiki.apache.org/httpd/RunningMultipleApacheInstances
以上链接内容供参考
1)在你的服务器上安装 Apache
sudo apt-get install apache2
sudo apt-get install libapache2-mod-perl2
sudo apt-get install other-lib-mods-needed
2)为要运行的每个实例配置单独的 apache 配置
对于 Ubuntu,这应该在 /etc/apache2 中,本质上对于每个实例,您都需要在不同的端口上监听。
# httpd-proxy.conf
Listen 80
ErrorLog /var/log/httpd-proxy-error.log
LoadModule proxy_module libexec/apache22/mod_proxy.so
LoadModule proxy_http_module libexec/apache22/mod_proxy_http.so
# httpd-perl.conf
Listen 81
ErrorLog /var/log/httpd-perl-error.log
LoadModule perl_module libexec/apache22/mod_perl.so
# httpd-python.conf
Listen 82
ErrorLog /var/log/httpd-python-error.log
LoadModule python_module libexec/apache22/mod_python.so
# httpd-php.conf
Listen 83
ErrorLog /var/log/httpd-php-error.log
LoadModule php5_module libexec/apache22/libphp5.so
在这个例子中,将会有 4 个不同的实例运行,每个实例处理不同的模块类型,即一个用于 perl,一个用于 python,等等。
现在,您还需要在代理实例中配置虚拟主机,这样每当对 subversion DAV 服务器的请求到来时,它都会被传递到您的“python-dav”apache,而对您的 wordpress 博客的请求则会被传递到您的“php”apache 实例。让我们再次编辑“httpd-proxy.conf”:
# httpd-proxy.conf
NameVirtualHost *:80
<VirtualHost *:80>
DocumentRoot /www/wordpress
ServerName blog.company.com
ProxyPass / http://localhost:83/
ProxyPassReverse / http://localhost:83/
[... additional directives here ... ]
</VirtualHost>
<VirtualHost *:80>
DocumentRoot /www/svn
ServerName svn.company.com
ProxyPass / http://localhost:82/
ProxyPassReverse / http://localhost:82/
[... additional directives here ... ]
</VirtualHost>
# you get the idea ...
2b)测试一切 至此,我们完成了配置,现在我们需要启动所有 apache 实例,并测试一切是否按预期运行。当然,您可以使用“apachectl”执行此操作,例如
/usr/local/sbin/apachectl -f /usr/local/etc/apache22/proxy-httpd.conf configtest
/usr/local/sbin/apachectl -f /usr/local/etc/apache22/proxy-httpd.conf start
/usr/local/sbin/apachectl -f /usr/local/etc/apache22/perl-httpd.conf configtest
/usr/local/sbin/apachectl -f /usr/local/etc/apache22/perl-httpd.conf start
# and so on ...
3)使用适当的配置文件配置 init 脚本来启动 apache
链接的资源有关于编辑 rc.conf 文件的更多详细信息,但特别涉及处理 Ubuntu,因此我将在下面重点介绍这两个部分。
FreeBSD 中的“/etc/rc.conf”是包含系统配置信息的主文件。该文件在启动内核后被读取,用于启动服务、守护进程、设置网络接口等。在我们的方案中,我们将启用 apache 服务器,列出可用的实例(配置文件)及其配置文件,并告诉 FreeBSD 在启动系统后需要运行(启用)其中哪些。
# /etc/rc.conf
apache22_enable="YES"
apache22_profiles="proxy perl python php"
# the apache proxy instance
apache22_proxy_configfile="/usr/local/etc/apache22/httpd-proxy.conf"
apache22_proxy_enable="YES"
# the apache perl instance
apache22_perl_configfile="/usr/local/etc/apache22/httpd-perl.conf"
apache22_perl_enable="YES"
# the apache python instance
apache22_python_configfile="/usr/local/etc/apache22/httpd-python.conf"
apache22_python_enable="YES"
# the apache php instance
apache22_php_configfile="/usr/local/etc/apache22/httpd-php.conf"
apache22_php_enable="YES"
当这些配置文件在 /etc/rc.conf 中配置并启用时,它们将在成功启动系统后启动。如果您想声明一个配置文件,但只想手动启动相应的 apache 实例,您可以编辑“/etc/rc.conf”并输入:
# the apache php instance
apache22_php_configfile="/usr/local/etc/apache22/httpd-php.conf"
apache22_php_enable="NO"
稍后,您可以仅使用配置文件名称 >(proxy、perl、python、php) 手动启动/停止任何 apache 实例,如下所示:
/usr/local/etc/rc.d/apache22 start php
/usr/local/etc/rc.d/apache22 stop perl
...
3b) 适用于 Ubuntu
我不确定这是否会与 FreeBSD 的情况类似(并且不会造成麻烦)(请参阅上文关于 rc.conf 的部分)。多年来,随 FreeBSD 中的 apache 端口一起安装的 apache rc 脚本已经意识到了不同配置文件的可能性。
最近,Ubuntu/Debian 初始化脚本(例如 /etc/init.d/apache2)已更新,以支持多个 apache 实例(例如多个配置,名为 /etc/apache2-$SUFFIX)。根据您使用的 Ubuntu/Debian 版本,您可能会幸运……也可能不幸运。
该功能于 2010 年 2 月出现在 Debian 2.2.14-6 版本中:http://lists.alioth.debian.org/pipermail/pkg-apache-commits/2010-February/000295.html
在 Ubuntu 中,Maverick(10.10)中的 apache2 软件包包含以下补丁:http://changelogs.ubuntu.com/changelogs/pool/main/a/apache2/apache2_2.2.16-1ubuntu3.1/changelog
然而 Lucid(10.04,长期支持版本)apache2 显然没有:http://changelogs.ubuntu.com/changelogs/pool/main/a/apache2/apache2_2.2.14-5ubuntu8.4/changelog
文档可以在 /usr/share/doc/apache2/README.multiple-instances 中找到
答案2
感谢您的详细回答,但后来我发现了这个链接http://someofmylearnings.wordpress.com/2011/07/02/multiple-apache2-instances-on-ubuntu/这里所展示的过程非常简单。
当我们安装 Apache 时,有一个/usr/share/doc/apache2.2-common/README.multiple-instances
文件可以让您了解创建 Apache 实例究竟需要做什么。
在同一目录中,有一个examples
目录包含一个名为的脚本setup-instance
,我们可以使用该脚本创建 Apache 实例。因此,要创建另一个 Apache 实例,只需执行以下操作:
sh /usr/share/doc/apache2.2-common/examples/setup-instance web-server1
其中web-server1
是后缀。也就是说,默认情况下它会将“apache2-”附加到您的实例名称中。
这将创建一个/etc/apache-web-server1
包含所有配置文件的新目录。它还将创建/etc/init.d/apache-web-server1
可用于启动新 Apache 实例的目录。