Como executar duas instâncias do apache no mesmo sistema (Ubuntu)

14

Como posso executar duas instâncias do apache no mesmo sistema e iniciá-las e pará-las independentemente uma da outra. Qualquer ajuda ou leads são apreciados.

Sachin
fonte

Respostas:

11

Eu acho que isso pode ser o que você está procurando http://wiki.apache.org/httpd/RunningMultipleApacheInstances

Para referência do conteúdo no link acima

1) Instale o Apache no seu servidor

sudo apt-get install apache2
sudo apt-get install libapache2-mod-perl2
sudo apt-get install other-lib-mods-needed

2) Configure configurações apache separadas para cada instância que você deseja executar

Para o Ubuntu, isso deve estar em / etc / apache2. Essencialmente, para cada instância que você precisa ouvir em uma porta diferente.

# 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

Neste exemplo, haveria 4 instâncias diferentes em execução, cada uma processando um tipo de módulo diferente, ou seja, uma para perl, outra para python, etc.

Agora, você também precisa configurar os hosts virtuais na instância do proxy, para que sempre que uma solicitação para o servidor DAV do subversion seja passada para o seu apache 'python-dav', enquanto as solicitações para o seu blog wordpress sejam passadas para o seu ' instância do apache do php. Vamos editar 'httpd-proxy.conf' novamente:

# 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) teste tudo Então concluímos a configuração e agora precisamos iniciar todas as instâncias do apache e testar se tudo está funcionando conforme o esperado. Claro que você pode fazer isso usando 'apachectl', por exemplo

 /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) Configure os scripts init para iniciar o apache com o arquivo de configuração apropriado

O recurso vinculado tem mais detalhes sobre a edição do arquivo rc.conf para isso, mas aborda especificamente o trato com o Ubuntu, portanto, nessas duas seções, destacarei abaixo.

O '/etc/rc.conf' no FreeBSD é o arquivo mestre que contém as informações de configuração do sistema. Esse arquivo é lido após a inicialização do kernel e serve para iniciar serviços, daemons, configurar interfaces de rede etc. Para nossa receita, habilitaremos o servidor apache, listando as instâncias disponíveis (perfis), seus arquivos de configuração e > dizendo ao FreeBSD quais destes precisam ser executados (ativados) após a inicialização do sistema.

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

Quando esses perfis são configurados no /etc/rc.conf e ativados, eles serão iniciados> após a inicialização bem-sucedida do sistema. Se você deseja declarar um perfil, mas deseja apenas iniciar a instância correspondente do apache manualmente, basta editar '/etc/rc.conf' e> dizer, por exemplo:

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

Posteriormente, você pode iniciar / parar qualquer instância do apache manualmente usando apenas o nome do perfil> (proxy, perl, python, php), assim:

 /usr/local/etc/rc.d/apache22 start php
 /usr/local/etc/rc.d/apache22 stop perl
 ...

3b) para Ubuntu

Não tenho certeza se isso será semelhante (e indolor) como no caso do FreeBSD (veja a seção rc.conf acima). Os scripts apache rc instalados com a porta apache no FreeBSD estão cientes da possibilidade de diferentes perfis há anos.

Recentemente, os scripts de inicialização do Ubuntu / Debian (por exemplo, /etc/init.d/apache2) foram atualizados para suportar várias instâncias do apache (por exemplo, várias configurações, denominadas / etc / apache2- $ SUFFIX). Dependendo do lançamento do Ubuntu / Debian que você está usando, você pode ter sorte ... ou não.

O recurso apareceu no Debian na versão 2.2.14-6 em fevereiro de 2010: http://lists.alioth.debian.org/pipermail/pkg-apache-commits/2010-February/000295.html

No Ubuntu, os pacotes apache2 no Maverick (10.10) contêm esses patches: http://changelogs.ubuntu.com/changelogs/pool/main/a/apache2/apache2_2.2.16-1ubuntu3.1/changelog

No entanto, o apache2 do Lucid (10.04, versão de suporte a longo prazo) aparentemente não funciona: http://changelogs.ubuntu.com/changelogs/pool/main/a/apache2/apache2_2.2.14-5ubuntu8.4/changelog

A documentação pode ser encontrada em /usr/share/doc/apache2/README.multiple-instances

Joe
fonte
Que grande bagunça. Não é ofensivo para você, eu só quero dizer que é uma dor no S fazer essas coisas com o linux.
Sliq
Não tenho certeza de ver o processo de instalação mencionado como mais fácil ... portanto, em referência à resposta original ... Por que precisamos do proxy? Cada configuração individual não é suficiente para simplesmente ligar-se a portas distintas?
precisa saber é o seguinte
5

Obrigado pela sua resposta detalhada, mas mais tarde encontrei este link http://someofmylearnings.wordpress.com/2011/07/02/multiple-apache2-instances-on-ubuntu/ O procedimento mostrado neste exemplo muito simples.

Quando instalamos o Apache, há um /usr/share/doc/apache2.2-common/README.multiple-instancesarquivo que você dá uma idéia do que exatamente precisa ser feito para criar uma instância do Apache.

Dentro do mesmo diretório, há um examplesdiretório que contém um script chamado setup-instanceque podemos usar para criar uma instância do Apache. Portanto, para criar outra instância do Apache, tudo o que precisa ser feito é:

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

Onde web-server1é um sufixo. Ou seja, ele anexa "apache2-" por padrão ao nome da sua instância.

Isso criará um novo diretório /etc/apache-web-server1que contém todos os arquivos de configuração. Ele também criaria o /etc/init.d/apache-web-server1que você pode usar para iniciar a nova instância do Apache.

Sachin
fonte
No Ubuntu 14.04 LTS, o diretório doc é / usr / share / doc / apache2 /
Josip Rodin
Na verdade, acho que essa é uma solução melhor, pois permite iniciar / parar separadamente por meio da abordagem de serviço do sistema, e as instâncias são altamente independentes.
Bfrguci