如何在同一个系统上运行两个apache实例(Ubuntu)

我怎样才能在同一个系统上运行两个Apache实例,并彼此独立地启动和停止它们。 任何帮助或线索表示赞赏。

我认为这可能是你正在寻找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)为每个要运行的实例configuration单独的apacheconfiguration

对于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个不同的实例在运行,每个实例都处理一个不同的模块types,例如perl,python等等。

现在,您还需要在代理实例中configuration虚拟主机,以便每当请求发送到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)testing一切因此,我们完成了configuration,现在我们需要启动所有的Apache实例,并testing一切正常工作。 当然,你可以使用'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)configurationinit脚本,使用适当的configuration文件启动apache

链接的资源有更多关于编辑rc.conf文件的细节,但是特别涉及到处理Ubuntu,所以我将在下面重点介绍这两个部分。

FreeBSD中的“/etc/rc.conf”是包含系统configuration>信息的主文件。 这个文件在启动内核之后被读取,用来启动服务,守护进程,设置networking接口等。对于我们的配方,我们将启用apache>服务器,列出可用的实例(configuration文件),configuration文件和>告诉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" 

当这些configuration文件在/etc/rc.conf中configuration并启用时,它们将在成功启动系统后启动。 如果你想声明一个configuration文件,但你只想手动启动相应的apache实例,你可以编辑'/etc/rc.conf'然后说>例如:

  # the apache php instance apache22_php_configfile="/usr/local/etc/apache22/httpd-php.conf" apache22_php_enable="NO" 

稍后,您可以使用configuration文件名称>(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脚本现在已经意识到不同configuration文件的可能性。

最近,Ubuntu / Debian的初始化脚本(例如/etc/init.d/apache2)已经更新,以支持多个Apache实例(例如多个configuration,命名为/ etc / apache2- $ SUFFIX)。 根据您使用的Ubuntu / Debian版本,您可能是幸运的…或者不是。

该function出现在2010年2月的2.2.14-6版Debian中: 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中find

感谢您的详细解答,但后来我发现这个链接http://someofmylearnings.wordpress.com/2011/07/02/multiple-apache2-instances-on-ubuntu/在这个过程中显示非常简单&#x3002;

当我们安装Apache时,有一个/usr/share/doc/apache2.2-common/README.multiple-instances文件,您可以了解创buildApache实例需要做什么。

在同一个目录下有一个examples目录,其中包含一个名为setup-instance的脚本,我们可以使用它创build一个Apache实例。 所以,创build另一个Apache实例需要完成的是:

 sh /usr/share/doc/apache2.2-common/examples/setup-instance web-server1 

web-server1是后缀。 也就是说,它默认将“apache2-”附加到您的实例名称。

这将创build一个包含所有configuration文件的新目录/etc/apache-web-server1 。 它也会创build/etc/init.d/apache-web-server1 ,您可以使用它来启动新的Apache实例。