So führen Sie zwei Instanzen von Apache auf demselben System aus (Ubuntu)

14

Wie kann ich zwei Instanzen von Apache auf demselben System ausführen und sie unabhängig voneinander starten und stoppen? Jede Hilfe oder Hinweise werden geschätzt.

Sachin
quelle

Antworten:

11

Ich denke, das könnte das sein, wonach Sie suchen: http://wiki.apache.org/httpd/RunningMultipleApacheInstances

Als Referenz für den Inhalt des obigen Links

1) Installieren Sie Apache auf Ihrem Server

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

2) Konfigurieren Sie separate Apache-Konfigurationen für jede Instanz, die Sie ausführen möchten

Für Ubuntu sollte dies in / etc / apache2 sein. Grundsätzlich müssen Sie für jede Instanz einen anderen Port abhören.

# 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

In diesem Beispiel würden 4 verschiedene Instanzen ausgeführt, die jeweils einen anderen Modultyp verarbeiten, dh eine für Perl, eine für Python usw.

Jetzt müssen Sie auch die virtuellen Hosts in der Proxy-Instanz konfigurieren, damit eine Anforderung an den Subversion-DAV-Server immer an Ihren Python-Dav-Apache weitergeleitet wird, während Anforderungen für Ihr WordPress-Blog an Ihren weitergeleitet werden. PHP 'Apache-Instanz. Lass uns nochmal 'httpd-proxy.conf' editieren:

# 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 alles Also sind wir mit der Konfiguration fertig und jetzt müssen wir alle Apache-Instanzen starten und testen, ob alles wie erwartet funktioniert. Natürlich können Sie dies mit 'apachectl' tun, z

 /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) Konfigurieren Sie die Init-Skripte, um Apache mit der entsprechenden Konfigurationsdatei zu starten

Die verlinkte Ressource enthält nähere Informationen zum Bearbeiten der rc.conf-Datei, befasst sich jedoch speziell mit dem Umgang mit Ubuntu, sodass ich diese beiden Abschnitte im Folgenden hervorheben werde.

Die '/etc/rc.conf' in FreeBSD ist die Masterdatei, die die Systemkonfiguration> Informationen enthält. Diese Datei wird nach dem Booten des Kernels gelesen und dient zum Starten von Diensten,> Daemons, zum Einrichten von Netzwerkschnittstellen usw. Für unser Rezept aktivieren wir den Apache-Server> und listen die verfügbaren Instanzen (Profile), ihre Konfigurationsdateien und auf > FreeBSD mitteilen, welche davon nach dem Booten des Systems ausgeführt (aktiviert) werden sollen.

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

Wenn diese Profile in /etc/rc.conf konfiguriert und aktiviert sind, werden sie nach dem erfolgreichen Systemstart gestartet. Wenn Sie ein Profil deklarieren möchten, aber> nur die entsprechende Apache-Instanz manuell starten möchten, können Sie einfach '/etc/rc.conf' bearbeiten und> sagen:

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

Später können Sie jede Apache-Instanz manuell starten / stoppen, indem Sie nur den Profilnamen> (Proxy, Perl, Python, PHP) wie folgt eingeben:

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

3b) für Ubuntu

Ich bin mir nicht sicher, ob dies ähnlich (und schmerzlos) sein wird wie im Fall von FreeBSD (siehe Abschnitt über rc.conf oben). Die mit dem Apache-Port in FreeBSD installierten Apache RC-Skripte kennen seit Jahren die Möglichkeit unterschiedlicher Profile.

Kürzlich wurden die Ubuntu / Debian-Init-Skripte (z. B. /etc/init.d/apache2) aktualisiert, um mehrere Instanzen von Apache zu unterstützen (z. B. mehrere Konfigurationen mit dem Namen / etc / apache2- $ SUFFIX). Abhängig von der Version von Ubuntu / Debian, die Sie verwenden, können Sie Glück haben ... oder nicht.

Die Funktion erschien in Debian in Version 2.2.14-6 im Februar 2010: http://lists.alioth.debian.org/pipermail/pkg-apache-commits/2010-February/000295.html

In Ubuntu enthalten die Apache2-Pakete in Maverick (10.10) die folgenden Patches: http://changelogs.ubuntu.com/changelogs/pool/main/a/apache2/apache2_2.2.16-1ubuntu3.1/changelog

In der Lucid-Version (10.04, Long Term Support Release) von Apache2 scheint dies jedoch nicht der Fall zu sein : http://changelogs.ubuntu.com/changelogs/pool/main/a/apache2/apache2_2.2.14-5ubuntu8.4/changelog

Die Dokumentation finden Sie unter /usr/share/doc/apache2/README.multiple-instances

Joe
quelle
Was für ein fettes Durcheinander. Keine Beleidigung für Sie, ich möchte nur sagen, dass es ein Problem ist, solche Dinge mit Linux zu tun.
Sliq
Ich bin mir nicht sicher, ob der zweitgenannte Installationsvorgang für mich einfacher ist ... also in Bezug auf die ursprüngliche Antwort ... Warum brauchen wir den Proxy? Reicht nicht jede einzelne Konfiguration aus, um sich einfach an verschiedene Ports zu binden?
Alex.Barylski
5

Vielen Dank für Ihre ausführliche Antwort, aber später fand ich diesen Link http://someofmylearnings.wordpress.com/2011/07/02/multiple-apache2-instances-on-ubuntu/ Die in dieser Anleitung gezeigte Vorgehensweise ist sehr einfach.

Wenn wir Apache installieren, gibt es eine /usr/share/doc/apache2.2-common/README.multiple-instancesDatei, die Ihnen eine Vorstellung davon gibt, was genau getan werden muss, um eine Apache-Instanz zu erstellen.

In demselben Verzeichnis befindet sich ein examplesVerzeichnis, das ein Skript mit dem Namen enthält setup-instance, mit dem wir eine Apache-Instanz erstellen können. Um eine weitere Apache-Instanz zu erstellen, müssen Sie lediglich folgende Schritte ausführen:

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

wo web-server1ist ein Suffix. Das heißt, es wird standardmäßig "apache2-" an Ihren Instanznamen angehängt.

Dadurch wird ein neues Verzeichnis erstellt, /etc/apache-web-server1das alle Konfigurationsdateien enthält. Es würde auch erstellen, mit /etc/init.d/apache-web-server1denen Sie die neue Apache-Instanz starten können.

Sachin
quelle
Unter Ubuntu 14.04 LTS ist das Doc-Verzeichnis / usr / share / doc / apache2 /
Josip Rodin
Eigentlich halte ich dies für eine bessere Lösung, da es einen separaten Start / Stopp über den Systemdienstansatz ermöglicht und die Instanzen sehr unabhängig sind.
bfrguci