Jak uruchomić dwa wystąpienia Apache w tym samym systemie (Ubuntu)

14

Jak mogę uruchomić dwa wystąpienia apache w tym samym systemie oraz uruchomić i zatrzymać je niezależnie od siebie. Każda pomoc lub wskazówki są mile widziane.

Sachin
źródło

Odpowiedzi:

11

Myślę, że może to być to, czego szukasz http://wiki.apache.org/httpd/RunningMultipleApacheInstances

Dla odniesienia do treści w powyższym linku

1) Zainstaluj Apache na swoim serwerze

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

2) Skonfiguruj osobne konfiguracje Apache dla każdej instancji, którą chcesz uruchomić

W przypadku Ubuntu powinien to być plik / etc / apache2 Zasadniczo dla każdej instancji, której potrzebujesz nasłuchiwać na innym porcie.

# 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

W tym przykładzie działałyby 4 różne instancje, każda przetwarzająca inny typ modułu, tj. Jeden dla perla, jeden dla pytona itp.

Teraz musisz także skonfigurować wirtualne hosty w instancji proxy, aby za każdym razem, gdy nadejdzie żądanie subwersyjnego serwera DAV, było ono przekazywane do apache „python-dav”, podczas gdy żądania dotyczące bloga wordpress są przekazywane do twojego „ instancja php 'apache. Zmodyfikujmy ponownie plik „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) testuj wszystko Skończyliśmy konfigurację, a teraz musimy uruchomić wszystkie instancje apache i przetestować, czy wszystko działa zgodnie z oczekiwaniami. Oczywiście możesz to zrobić za pomocą „apachectl”, np

 /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) Skonfiguruj skrypty init, aby uruchamiały apache za pomocą odpowiedniego pliku konfiguracyjnego

Połączony zasób zawiera bardziej szczegółowe informacje na temat edycji pliku rc.conf, ale dotyczy konkretnie obsługi Ubuntu, więc obie te sekcje zaznaczę poniżej.

„/Etc/rc.conf” we FreeBSD jest plikiem głównym zawierającym informacje o konfiguracji systemu>. Ten plik jest odczytywany po uruchomieniu jądra i służy do uruchamiania usług,> demonów, konfigurowania interfejsów sieciowych itp. Dla naszego przepisu włączymy apache> serwer, wymieniając dostępne instancje (profile), ich pliki konfiguracyjne i > informowanie FreeBSD, które z nich należy uruchomić (włączyć) po uruchomieniu systemu.

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

Gdy profile te zostaną skonfigurowane w /etc/rc.conf i włączone, zostaną uruchomione> po pomyślnym uruchomieniu systemu. Jeśli chcesz zadeklarować profil, ale chcesz tylko> ręcznie uruchomić odpowiednią instancję Apache, możesz po prostu edytować plik „/etc/rc.conf” i> powiedzieć np .:

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

Później możesz ręcznie uruchomić / zatrzymać dowolną instancję apache, używając tylko nazwy profilu> (proxy, perl, python, php), w następujący sposób:

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

3b) dla Ubuntu

Nie jestem pewien, czy będzie to podobne (i bezbolesne) jak w przypadku FreeBSD (patrz sekcja powyżej rc.conf). Skrypty apache rc zainstalowane z portem apache w FreeBSD od lat zdają sobie sprawę z możliwości istnienia różnych profili.

Ostatnio skrypty inicjujące Ubuntu / Debian (np. /Etc/init.d/apache2) zostały zaktualizowane, aby obsługiwały wiele instancji apache (np. Wiele konfiguracji o nazwie / etc / apache2- $ SUFFIX). W zależności od wersji Ubuntu / Debian, z której korzystasz, możesz mieć szczęście ... lub nie.

Ta funkcja pojawiła się w Debianie w wersji 2.2.14-6 w lutym 2010 r .: http://lists.alioth.debian.org/pipermail/pkg-apache-commits/2010- luty 2014/000295.html

W Ubuntu pakiety apache2 w Maverick (10.10) zawierają następujące poprawki: http://changelogs.ubuntu.com/changelogs/pool/main/a/apache2/apache2_2.2.16-1ubuntu3.1/changelog

Jednak apache2 Lucid (10.04, Long Term Support Release) najwyraźniej nie: http://changelogs.ubuntu.com/changelogs/pool/main/a/apache2/apache2_2.2.14-5ubuntu8.4/changelog

Dokumentacja znajduje się w /usr/share/doc/apache2/README.multiple-instances

Joe
źródło
Co za gruby bałagan. Nie obrażam cię, chcę tylko powiedzieć, że robienie S takich rzeczy z Linuksem to problem.
Sliq
Nie jestem pewien, czy drugi wymieniony proces instalacji jest dla mnie łatwiejszy ... w związku z pierwotną odpowiedzią ... Dlaczego potrzebujemy proxy? Czy każda konfiguracja jest niewystarczająca, aby po prostu połączyć się z odrębnymi portami?
Alex.Barylski
5

Dziękuję za szczegółową odpowiedź, ale później znalazłem ten link http://someofmylearnings.wordpress.com/2011/07/02/multiple-apache2-instances-on-ubuntu/ Procedura pokazana w tym bardzo prostym.

Kiedy instalujemy Apache, istnieje /usr/share/doc/apache2.2-common/README.multiple-instancesplik, który daje wyobrażenie o tym, co dokładnie należy zrobić, aby utworzyć instancję Apache.

W tym samym katalogu znajduje się exampleskatalog zawierający skrypt o nazwie setup-instance, którego możemy użyć do utworzenia instancji Apache. Tak więc, aby utworzyć kolejną instancję Apache, wystarczy:

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

gdzie web-server1jest przyrostek. Oznacza to, że domyślnie dołącza „apache2-” do nazwy instancji.

Spowoduje to utworzenie nowego katalogu /etc/apache-web-server1zawierającego wszystkie pliki konfiguracyjne. Stworzyłby również, /etc/init.d/apache-web-server1którego można użyć do uruchomienia nowej instancji Apache.

Sachin
źródło
W systemie Ubuntu 14.04 LTS katalogiem doc jest / usr / share / doc / apache2 /
Josip Rodin
Właściwie uważam, że jest to lepsze rozwiązanie, ponieważ umożliwia oddzielne uruchamianie / zatrzymywanie za pośrednictwem usługi systemowej, a instancje są wysoce niezależne.
bfrguci