Cómo ejecutar dos instancias de apache en el mismo sistema (Ubuntu)


14

¿Cómo puedo ejecutar dos instancias de apache en el mismo sistema e iniciarlas y detenerlas independientemente una de la otra? Cualquier ayuda o clientes potenciales son apreciados.

Respuestas:


11

Creo que esto podría ser lo que estás buscando http://wiki.apache.org/httpd/RunningMultipleApacheInstances

Para referencia del contenido en el enlace de arriba

1) Instala Apache en tu servidor

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

2) Configure configuraciones de apache separadas para cada instancia que desee ejecutar

Para Ubuntu, esto debería estar en / etc / apache2 Esencialmente para cada instancia que necesite escuchar en un puerto 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

En este ejemplo, se ejecutarían 4 instancias diferentes, cada una procesando un tipo de módulo diferente, es decir, una para perl, una para python, etc.

Ahora, también debe configurar los hosts virtuales en la instancia del proxy, de modo que cada vez que llegue una solicitud para el servidor DAV de subversión, se pase a su apache 'python-dav', mientras que las solicitudes para su blog de WordPress se pasen a su ' php 'instancia de apache. Editemos 'httpd-proxy.conf' nuevamente:

# 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) probar todo Así que hemos terminado con la configuración, y ahora tenemos que iniciar todas las instancias de apache, y probar que todo funciona como se esperaba. Por supuesto, puede hacer esto usando 'apachectl', por ejemplo

 /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 los scripts de inicio para iniciar apache con el archivo de configuración apropiado

El recurso vinculado tiene más detalles sobre la edición del archivo rc.conf para esto, pero trata específicamente sobre cómo tratar con Ubuntu, por lo que ambas secciones destacaré a continuación.

El '/etc/rc.conf' en FreeBSD es el archivo maestro que contiene la información de configuración del sistema. Este archivo se lee después de arrancar el kernel y sirve para iniciar servicios,> demonios, configurar interfaces de red, etc. Para nuestra receta, habilitaremos el servidor apache, enumerando las instancias disponibles (perfiles), sus archivos de configuración y > diciéndole a FreeBSD cuál de estos debe ejecutarse (habilitarse) después de iniciar el 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"

Cuando estos perfiles se configuran en /etc/rc.conf y se habilitan, se iniciarán> después de arrancar con éxito el sistema. Si desea declarar un perfil pero solo quiere> iniciar la instancia de apache correspondiente manualmente, puede editar '/etc/rc.conf' y> decir, por ejemplo:

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

Más tarde, puede iniciar / detener cualquier instancia de apache manualmente usando solo el nombre del perfil> (proxy, perl, python, php), de esta manera:

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

3b) para Ubuntu

No estoy seguro de que esto sea similar (e indoloro) como en el caso de FreeBSD (consulte la sección sobre rc.conf más arriba). Los scripts apache rc instalados con el puerto apache en FreeBSD han sido conscientes de la posibilidad de diferentes perfiles durante años.

Recientemente, los scripts de inicio de Ubuntu / Debian (por ejemplo, /etc/init.d/apache2) se han actualizado para admitir múltiples instancias de apache (por ejemplo, múltiples configuraciones, llamadas / etc / apache2- $ SUFFIX). Dependiendo del lanzamiento de Ubuntu / Debian que esté utilizando, puede tener suerte ... o no.

La característica apareció en Debian en la versión 2.2.14-6 en febrero de 2010: http://lists.alioth.debian.org/pipermail/pkg-apache-commits/2010-February/000295.html

En Ubuntu, los paquetes apache2 en Maverick (10.10) contienen estos parches: http://changelogs.ubuntu.com/changelogs/pool/main/a/apache2/apache2_2.2.16-1ubuntu3.1/changelog

Sin embargo, el Apache2 Lucid (10.04, Versión de soporte a largo plazo) aparentemente no: http://changelogs.ubuntu.com/changelogs/pool/main/a/apache2/apache2_2.2.14-5ubuntu8.4/changelog

La documentación se puede encontrar en /usr/share/doc/apache2/README.multiple-instances


Qué gran lío gordo. Sin ofenderte, solo quiero decir que es un fastidio en el S hacer tales cosas con Linux.
Sliq

No estoy seguro de que el segundo proceso de instalación mencionado sea más fácil ... así que en referencia a la respuesta original ... ¿Por qué necesitamos el proxy? ¿Cada configuración individual no es suficiente para simplemente unirse a puertos distintos?
Alex.Barylski

5

Gracias por su respuesta detallada, pero luego encontré este enlace http://someofmylearnings.wordpress.com/2011/07/02/multiple-apache2-instances-on-ubuntu/ El procedimiento que se muestra en este muy simple.

Cuando instalamos Apache, hay un /usr/share/doc/apache2.2-common/README.multiple-instancesarchivo que le da una idea de lo que debe hacerse exactamente para crear una instancia de Apache.

Dentro del mismo directorio hay un examplesdirectorio que contiene un script llamado setup-instanceque podemos usar para crear una instancia de Apache. Entonces, para crear otra instancia de Apache, todo lo que hay que hacer es:

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

donde web-server1hay un sufijo Es decir, agrega "apache2-" de forma predeterminada al nombre de su instancia.

Eso creará un nuevo directorio /etc/apache-web-server1que contiene todos los archivos de configuración. También crearía /etc/init.d/apache-web-server1lo que puede usar para iniciar la nueva instancia de Apache.


En Ubuntu 14.04 LTS, el directorio doc es / usr / share / doc / apache2 /
Josip Rodin

En realidad, creo que esta es una mejor solución porque permite iniciar / detener por separado a través del enfoque de servicio del sistema, y ​​las instancias son muy independientes.
bfrguci
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.