più istanze apache nella stessa installazione

Tags:

Mi sono trovato a dover pensare a un modo per gestire più istanze apache2 con una sola installazione, e ogni istanza doveva girare con privilegi diversi (e su porte diverse). Inoltre, in fronte a queste istanze, ce ne stava una con mod_proxy e mod_security. Ecco la realizzazione:

Ipotizziamo di usare la directory /etc/apache2-multiserver, con la seguente struttura:

  • bin (script di utilità, per l'avvio e l'arresto)
  • common (file di configurazione comuni, come ad esempio la configurazione di php)
  • pids (dove salvare i pid delle varie istanze)
  • servers (dove risiedono le configurazioni delle varie istanze)

l'archivio con i file completi è scaricabile come allegato di questo post.

facciamo qui solo una breve panoramica dei files:

all'interno della cartella bin troviamo i files
  • check_config.sh (verifica la configurazione di una determinata istanza)
  • start_all.sh (avvia tutte le istanze, proxy compreso, che alla fine, è un'istanza anche lui)
  • start_instance.sh (avvia una singola istanza)
  • stop_all.sh (arresta tutte le istanze)
  • stop_instance.sh (arresta una singola istanza)
nella cartella common troviamo i files
  • cgi.conf (carica il modulo mod_cgi.so)
  • php4.conf (carica e configura il modulo libphp4.so)
  • rewrite.conf (carica il modulo mod_rewrite.so)

la cartella servers contiene le configurazioni per le varie istanze; ogni istanza (tranne il proxy) avrà 2 file di configurazione:

  • istanza.server
  • istanza.proxy

il primo contiene la configurazione vera e propria dell'istanza, il secondo contiene la configurazione per il proxy verso quell'istanza. vediamo un esempio:

cliente1.server
User cliente1
Group cliente1
Listen 192.168.17.100:2081
UseCanonicalName Off
ErrorLog /var/log/apache2/cliente1/error.log
ServerRoot /home/cliente1
PidFile /etc/apache2-multiserver/pids/cliente1.pid
ServerName www.cliente1.it
ServerAdmin root@cliente1.it
ServerSignature Off
ServerTokens Prod
DocumentRoot /home/cliente1/htdocs
Include /etc/apache2-multiserver/common/*.conf
cliente1.proxy
<VirtualHost 192.168.17.100:80>
ServerName www.cliente1.it
ServerAlias cliente1.it
ServerAdmin proxy@cliente1.it
CustomLog /var/log/apache2/cliente1/access.log combined
ProxyPass / http://127.0.0.1:2081/
ProxyPassReverse / http://127.0.0.1:2081/
</VirtualHost>

il file proxy.server contiene la configurazione del proxy. il suo contentuto è

User nobody
Group nogroup
Listen 192.168.17.100:80
UseCanonicalName Off
ErrorLog /var/log/apache2/proxy.error_log
ServerRoot /etc/apache2-multiserver
PidFile pids/proxy.pid
LoadModule proxy_module /usr/lib/apache2/modules/mod_proxy.so                   
LoadModule proxy_http_module /usr/lib/apache2/modules/mod_proxy_http.so 
NameVirtualHost 192.168.17.100:80
Include /etc/apache2-multiserver/servers/*.proxy

ovviamente, gli access log andranno salvati a livello di proxy, mentre gli error log a livello di istanza stessa.


Filename/TitleDimensione
apache2-multiserver.tar.gz1.35 KB