Archivi tag: httpd.conf

Tenere sotto controllo le performance di Apache con mod_status e Nagios

Apache è uno dei server Web più utilizzati al mondo poichè molto robusto, piuttosto performante e soprattutto perchè open source.

Ovviamente, affichè le prestazioni dell’applicativo in questione possano migliorare sensibilmente, è necessario operare sul suo file di configurazione, effettuando un tuning dello stesso. A tal proposito, è alquanto utile, durante questa attività, tenere Apache sotto controllo utilizzando uno dei suoi moduli appositamente creato per svolgere la suddetta mansione, ovvero mod_status.

 

apache_status.jpeg

Vediamo ora come abilitarlo e configurarlo in modo opportuno.

Configurazione di Apache

Per prima cosa editiamo il file /etc/httpd/conf/httpd.conf, operando su di esso le seguenti modifiche:

1) decommentiamo la direttiva:

LoadModule status_module modules/mod_status.so

2) abilitiamo le statistiche estese, decommentando la seguente entry:

ExtendedStatus On

Nell’ambito della configurazione del vhost (o dei vhosts) su cui vogliamo fare in modo che siano consultabili le statistiche relative al funzionamento del nostro server Web, inseriamo quanto segue:

<Location /server-status>
 SetHandler server-status
 Order deny,allow
 Deny from all
 Allow from <IP 1>
 Allow from <IP 2>
 Allow from <IP 3>
 Allow from <IP 4>
 Allow from <IP 5>
 </Location>

dove i vari IP sono quelli consentiti per la visualizzazione della pagina Web contenente lo stato di funzionamento di Apache.

Se non utilizzate vhosts, potete semplicemente decommentare le suddette entries (già presenti nel file di configurazione di Apache).

Riavviamo dunque il demone per rendere effettive le modifiche:

[root@serverWeb ~]# service httpd reload

Configurazione di Nagios

Una volta configurato Apache, è possibile utilizzare Nagios per automatizzare i controlli sul server Web. Ovviamente, l’indirizzo IP del nostro NMS deve essere tra quelli consentiti in <Location /server-status>.

Il plugin che ho scelto per effettuare i check in questione è check_apachestatus.pl, scaricabile da qui.

Rinominiamo lo scrip appena scaricato e rendiamolo eseguibile:

[root@NMS ~]# mv check_apachestatus.pl.txt ckeck_apachestatus.pl

[root@NMS ~]# chmod +x check_apachestatus.pl

Spostiamolo nella dir dei plugin di Nagios:

[root@NMS ~]# mv check_apachestatus.pl  /usr/lib/nagios/plugins/

Prima di eseguirlo, però, è necessario scaricare le librerie perl relative a Nagios, mediante il comando:

[root@NMS ~]# yum install perl-Nagios-Plugin

Ora possiamo procedere con la configurazione di Nagios vera e propria.

Per prima cosa, all’interno del file /etc/nagios/objects/commands.cfg definiamo questo nuovo comando:

# 'check_apache_status' command definition
define command{
command_name    check_apache_status
command_line    $USER1$/check_apachestatus.pl -H $ARG1$ -p $ARG2$ -t $ARG3$ -w $ARG4$ -c $ARG5$
}

dove -H rappresenta l’FQDN o semplicemente l’indirizzo IP del nostro server Web su cui è in esecuzione mod_status (e su cui è consultabile la relativa pagina server-status); -p rappresenta la porta su cui il server Web è in ascolto; -t rappresenta il timeout relativo ad ogni check; -w rappresenta il numero di open slots al di sotto del quale far scattare un warning; -c rappresenta il numero di open slots al di sotto del quale far scattare un avviso di tipo critical.

A titolo di informazione, gli open slots rappresentano semplicemente il numero di processi fork in ascolto (ovvero in attesa di nuove connessioni) relativi ad httpd.

Non ci resta che creare un apposito servizio sul file di configurazione di Nagios che identifica il nostro server Web. Ad esempio, all’interno del file /etc/nagios/objects/serverweb.cfg possiamo scrivere:

define service{
        use                             local-service         ; Name of service template to use
        host_name                       serverweb.vostrodominio.com
        service_description             Apache Status
        check_command                   check_apache_status!serverweb.vostrodominio.com!80!10!5!0
        notifications_enabled           0
        }

Infine, riavviamo Nagios:

[root@NMS ~]# service nagios restart

Ed abbiamo finito.

Alla prossima.


Apache, virtual host ed SSL su CentOS

La cosa fantastica di Apache è che ti consente di gestire i cosiddetti virtual host, ovvero N server Web virtuali, ognuno dei quali presenta le proprie caratteristiche peculiari.

Essi risultano particolarmente comodi quando si ha la necessità di imbastire dei frontend che rispondano per alcuni domini su HTTPS e per altri su HTTP.

logo_apache22.jpg

Come al solito, la presente guida si focalizzerà sulla configurazione del server vera e propria (httpd.conf), e successivamente sulla configurazione di ciascun virtual host.

Configurazione del server

La prima modifica da effettuare nel file di configurazione di Apache riguarda l’abilitazione del protocollo HTTPS. In particolare, esso verrà gestito grazie ad uno specifico modulo, ovvero mod_ssl.so, non presente nell’installazione di default relativa ad Apache.

Ergo, sarà necessario dapprima scaricarlo mediante il comando:

[root@serverweb conf]# yum install mod_ssl

Non ho installato anche openssl in quanto sono partito dal presupposto che siate già in possesso dei certificati X.509 (nel formato Apache) relativi al vostro dominio.

A questo punto è necessario abilitare il suddetto modulo aggiungendo la seguente direttiva nel file /etc/conf/httpd.conf:

LoadModule ssl_module modules/mod_ssl.so

Successivamente, si dovrà procedere con la messa in ascolto sul server della porta TCP 443 (HTTPS).

Per fare ciò si può aggiungere la seguente stringa nel file di configurazione di Apache:

Listen 443

Infine, sempre nel file di configurazione in questione, si dovrà specificare in quale directory sono presenti le direttive relative ai virtual host:

# Include the virtual host configurations:
Include /etc/httpd/vhosts.d/*.conf

Configurazione del virtual host

Posizioniamoci nella directory oggetto dell’include e creiamo un nuovo file di configurazione per il virtual host:

[root@serverweb vhosts.d]# nano virtualhost1.conf

Il cui contenuto sarà simile al seguente:

<VirtualHost *:443>
  ServerName www.miodominio.com

  DocumentRoot /var/www/virtualhosts/www.miodominio.com/htdocs

  SSLEngine on
  SSLCertificateFile /etc/ssl/sslcert.crt
  SSLCertificateKeyFile /etc/ssl/sslkey.pem
  SSLCertificateChainFile /etc/ssl/sf_bundle.crt

  <Directory /var/www/virtual/static.betuniq.info/htdocs>
      AllowOverride All
      Order allow,deny
      Allow from all
   </Directory>

  ErrorLog /var/www/virtualhosts/www.miodominio.com/logs/ssl_error.log
  CustomLog /var/www/virtualhosts/www.miodominio.com/logs/ssl_access.log combined
  #ServerSignature Off

  Redirect 404 /favicon.ico

  <Location /favicon.ico>
   ErrorDocument 404 “No favicon”
  </Location>

</VirtualHost>

Come avrete intuito, il virtual host in questione è in ascolto sulla porta TCP 443, quindi è in grado di servire solo ed esclusivamente il traffico HTTPS:

<VirtualHost *:443>

Con ServerName specifico il dominio associato al virtual host in questione mentre con DocumentRoot indico la direcotry in cui sono presenti le pagine Web (e relativi file, come immagini, fogli di stile, ecc.).

Con SSLEngine on abilito il motore SSL e con le direttive:

SSLCertificateFile /etc/ssl/sslcert.crt
SSLCertificateKeyFile /etc/ssl/sslkey.pem
SSLCertificateChainFile /etc/ssl/sf_bundle.crt

indico rispettivamente il pathname relativo al certificato X.509 (sslcert.crt), della chiave privata RSA (sslkey.pem) e del certificato di terze parti (sf_bundle.crt).

Le altre stringe riguardano semplicemente i file di log e le politiche di overwrite sulla directory (ad esempio mediante file .htaccess).

Ora, affinchè il suddetto dominio rimanga in ascolto sia sulla 443 che sulla 80 (HTTP puro), si può creare un ulteriore file di configurazione, contenente però la direttiva:

<VirtualHost *:80>

nessuna entry associata all’SSL ed ai certificati ma la stessa DocumentRoot del vhost precedente.

Per rendere effettive le modifiche senza creare disservizio è sufficiente lanciare il comando:

[root@serverweb conf]# service httpd reload

Se tale comando non restituisce errori è un ottimo segno.

Per avere ulteriore conferma del corretto funzionamento relativo al nostro server Web, si possono fare due check mediante netstat:

[root@serverweb conf]# netstat -anp | grep :80

e

[root@serverweb conf]# netstat -anp | grep :443

Se il server risulta in Listen è molto probabile che stia funzionando correttamente. Fate comunque delle prove con un browser per esserne certi.

E’ tutto. Alla prossima.