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


14

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

Answers:


11

我认为这可能是您正在寻找的 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)配置初始化脚本以使用适当的配置文件启动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"

在/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"

稍后,您可以仅使用配置文件名称>(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 port一起安装的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中找到文档


真是个大胖子。不用冒犯您,我只想说,用Linux做这样的事情对S来说很痛苦。
Sliq

不确定我认为第二个提到的安装过程是否更容易...所以参考原始答复...我们为什么需要代理?是否每个单独的配置不足以简单地绑定到不同的端口?
Alex.Barylski

5

感谢您的详细回答,但后来我发现此链接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实例的对象。


在Ubuntu 14.04 LTS上,文档目录为/ usr / share / doc / apache2 /
Josip Rodin

实际上,我认为这是一个更好的解决方案,因为它允许通过系统服务方法单独启动/停止,并且实例是高度独立的。
bfrguci
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.