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

Sac*_*hin 15 ubuntu apache-2.2

如何在同一系统上运行两个 apache 实例并相互独立地启动和停止它们。任何帮助或线索表示赞赏。

小智 12

我认为这可能是您正在寻找的 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
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

在这个例子中,将有 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 ...  
Run Code Online (Sandbox Code Playgroud)

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 ...
Run Code Online (Sandbox Code Playgroud)

3)配置init脚本以使用适当的配置文件启动apache

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

FreeBSD 中的'/etc/rc.conf' 是包含系统配置>信息的主文件。该文件在启动内核后被读取,用于启动服务、>守护进程、设置网络接口等。在我们的配方中,我们将启用 apache>server,列出可用实例(配置文件)、它们的配置文件,以及> 告诉 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"
Run Code Online (Sandbox Code Playgroud)

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

 # the apache php instance
 apache22_php_configfile="/usr/local/etc/apache22/httpd-php.conf"
 apache22_php_enable="NO"
Run Code Online (Sandbox Code Playgroud)

稍后,您可以仅使用配置文件名称 >(proxy, perl, python, php) 手动启动/停止任何 apache 实例,如下所示:

 /usr/local/etc/rc.d/apache22 start php
 /usr/local/etc/rc.d/apache22 stop perl
 ...
Run Code Online (Sandbox Code Playgroud)

3b) 对于 Ubuntu

我不确定这是否与 FreeBSD 的情况相似(并且没有痛苦)(请参阅上面的 rc.conf 部分)。在 FreeBSD 中与 apache 端口一起安装的 apache rc 脚本多年来已经意识到不同配置文件的可能性。

最近,Ubuntu/Debian init 脚本(例如/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, Long Term Support Release) apache2 显然没有:http : //changelogs.ubuntu.com/changelogs/pool/main/a/apache2/apache2_2.2.14-5ubuntu8.4/changelog

文档可以在 /usr/share/doc/apache2/README.multiple-instances 中找到


Sac*_*hin 6

感谢您的详细回答,但后来我找到了这个链接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
Run Code Online (Sandbox Code Playgroud)

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

这将创建一个/etc/apache-web-server1包含所有配置文件的新目录。它还将创建/etc/init.d/apache-web-server1可用于启动新 Apache 实例的文件。