Gestione del servizio httpd

Guida Apache
di Openskills

Avvio di Apache
Su Unix, Apache gira generalmente come demone in esecuzione continua in background ("Standalone") gestendo le richieste dei client. E' anche possibile far invocare Apache dal super demone inetd modificando la voce ServerType nel file di configurazione di Apache, anche se questo è sconsigliato, soprattutto su server con traffico che non sia minimo e occasionale.
Se nel file di configurazione la listening port è la 80 (o qualsiasi altra porta sotto la 1024), è necessario avere i privilegi di root per poter avviare il servizio. Una volta che il server ha terminato una serie di operazioni preliminari come leggere il file di configurazione e aprire i file di log, esegue un numero configurabile di processi figli che si mettono in attesa di richieste. Il processo httpd padre continua a girare con user root, ma i processi figlio, che gestiscono le richieste dei client, possono tranquillamente girare con user con privilegi inferiori.

AVVIO LANCIANDO DIRETTAMENTE HTTPD
La posizione del file di configurazione httpd.conf è settata quando httpd viene compilato, ma è possibile specificare una locazione alternativa per avviare Apache usando un altro file di configurazione con l'opzione. Per esempio:
[root@eberk diego}# /usr/local/apache/bin/httpd -f
/home/diego/test_httpd.conf
Cosi facendo il server partirà con la configurazione contenuta in /home/diego/test_httpd.conf anziché quella originale presente in /etc/httpd/conf/httpd.conf (Posizione preimpostata in molte distribuzioni Linux) o /usr/local/apache/conf/httpd.conf (Posizione di default in un Apache compilato direttamente dai sorgenti).

AVVIO TRAMITE APACHECTL
Un'alternativa all'esecuzione diretta del binario httpd è lo script apachectl, che viene usato per controllare il demone httpd lanciando semplici comandi come apachectl start e apachectl stop.
Apachectl può essere usato anche per altre operazioni come verificare la correttezza del file di configurazione ed può essere utilizzato su ogni dialetto Unix, in quanto comando distribuito direttamente con i sorgenti di Apache.

AVVIO TRAMITE /ETC/INIT.D/HTTPD START
Su molti sistemi Unix e in tutte le distribuzioni Linux con Apache installato tramite relativo package, inoltre, si trova lo script init di gestione: /etc/rc.d/init.d/httpd start (in alcuni casi basta anche/tec/init.d/httpd start avvia il servizio.

Se durante lo startup tutto va bene, il prompt dei comandi tornerà ad essere utilizzabile. Questo significa che il server è su e che sta girando correttamente. Un test sicuro è utilizzare un browser, connettersi al server (http://indirizzo_server:80) e vedere se compare il contenuto della Document root.

Se Apache da errore in fase di start-up, si può visualizzarne la causa in console o nel file specificato nella direttiva ErrorLog di httpd.conf. Uno degli errori più frequenti è "Unable to blind to port xxxx". Questo errore puo essere causato da:
- Tentato start con listening ad una porta sotto la 1024 senza essere root.
- Tentato start con listening ad una porta gia utilizzata da un altra istanza di Apache o di un qualsiasi altro server.

Un altro errore comune è un "Syntax Error on line xxx" che indica la riga nel file di configurazione che contiene una direttiva errata. I motivi possono essere:
- Errore di sintassi nella scrittura della direttiva;
- Utilizzo di una direttiva che viene fornita da un modulo non caricato.

Se si desidera startare il server in fase di boot, bisogna aggiungere la "chiamata" ad httpd o ad apachectl nei file di startup del sistema (solitamente /etc/rc.d/rc.local o nella struttura di init con un symlink tipo /etc/rc.d/rc.3/S70httpd che punta a /etc/rc.d/init.d/httpd).

Stop e restart di Apache
Se si controllano i processi in esecuzione sul proprio server web, si potranno vedere svariati processi httpd che stanno girando, tutti con PPID coincidente con il PID del processo httpd padre, l'unico che dovrebbe girare come utente root.
Ogni operazione di controllo del server web, gestita tramite l'invio di segnali, va quindi fatta sul PID del processo httpd padre.
Se per esempio si vuole fermare il servizio si può scrivere:
[root@eberk diego]# kill -TERM `cat /usr/local/apache/logs/httpd.pid`
Qui 'cat /usr/local/apache/logs/httpd.pid' indica semplicemente il PID del processo, che viene generalmente scritto in un file chiamato httpd.pid, il cui path completo può cambiare a seconda di come si è impostata l'opzione --runtimedir in fase di compilazione.
E' possibile verificare il progresso delle nostre operazioni analizzando i file di log, per esempio con:
[root@eberk diego]# tail -f
/usr/local/apache/logs/error_log
Notare che i path dei file di pid e di log indicati possono variare anche tramite httpd.conf, per impostare le loro posizioni si usano le direttive PidFile e ErrorLog nel file di configurazione.

Ci sono 3 tipi di segnali che sono comunemente usati: TERM, HUP e USR1.

Segnale TERM: stop
Mandando il segnale TERM al processo padre, si causa l'immediato kill di tutti i processi figlio e il processo padre termina. Tutte le richieste http in gestione terminano immediatamente, e fino a quando il server non viene restartato nessuna richiesta verrà accolta. Il delay tra quando si lancia il comando e l'effettivo stop del server è di qualche secondo (in funzione di quanti sono i processi figlo).

Segnale HUP: restart
Mandando il segnale HUP al processo padre, si causa l'immediato kill di tutti i processi figlio, ma non del processo padre. Il processo padre rilegge il file di configurazione e riapre i file di log. Una volta fatto ciò ricrea i processi figlio che continueranno ad accogliere richieste.

Segnale USR1: graceful restart
Nota: Nelle versioni precedenti alla 1.2b9, questo segnale è leggermente instabile, e si consiglia di non usarlo.
Lanciando questo segnale, il processo padre dirà ai processi figli di terminare non appena hanno finito di gestire le richieste correnti (o di stopparsi immediatamente se non ne stanno gestendo), nel frattempo rilegge il file di configurazione, riapre i file di log e rigenera nuovi figli. Questo è il metodo migliore per modificare e ricaricare la configurazione su un server che sta gestendo del traffico, senza interrompere alcuna sessione corrente.

Tramite lo script apachectl presente con i sorgenti di Apache, è possibile gestire in modo semplice l'avvio e la chiusura del web server, oltre ad avere la possibilità di invocare altre opzioni come il controllo dello stato del servizio e la verifica della configurazione.
Provare ad eseguire /usr/local/apache/bin/apachectl (o in un PATH diverso da quello di default, dopo averlo cercato con un locate apachectl) senza argomenti per visualizzare le opzioni disponibili.

httpd -V
Visualizza informazioni sui parametri usati in fase di configurazione. Questa opzione è utile per capire come è stato compilato Apache e visualizzare alcuni parametri fondamentali come la posizione standard del file di configurazione, di log, del pid ecc.
Visualizza inoltre la versione e la data di compilazione e i parametri che sono stati passati al ./configure in fase di compilazione. Es:
[root@95 al]# httpd -V
Server version: Apache/1.3.26 (Unix)
Server built: Aug 26 2002 14:15:55
Server's Module Magic Number: 19990320:13
Server compiled with....
-D HAVE_MMAP
-D HAVE_SHMGET
-D USE_SHMGET_SCOREBOARD
-D USE_MMAP_FILES
-D HAVE_FCNTL_SERIALIZED_ACCEPT
-D HAVE_SYSVSEM_SERIALIZED_ACCEPT
-D SINGLE_LISTEN_UNSERIALIZED_ACCEPT
-D HTTPD_ROOT="/usr"
-D SUEXEC_BIN="/usr/sbin/suexec"
-D DEFAULT_PIDLOG="/var/run/httpd.pid"
-D DEFAULT_SCOREBOARD="/var/run/httpd.scoreboard"
-D DEFAULT_LOCKFILE="/var/run/httpd.lock"
-D DEFAULT_ERRORLOG="/var/log/httpd/error_log"
-D TYPES_CONFIG_FILE="/etc/httpd/conf/mime.types"
-D SERVER_CONFIG_FILE="/etc/httpd/conf/httpd.conf"
-D ACCESS_CONFIG_FILE="/etc/httpd/conf/access.conf"
-D RESOURCE_CONFIG_FILE="/etc/httpd/conf/srm.conf"


httpd -f
Specifica il file di configurazione da usare.
L'opzione -f specifica ad Apache di avviarsi utilizzando il file di configurazione specificato invece di quello di default.
Se si specifica un path relativo (cioè che non inizia con '/'), il path farà riferimento alla ServerRoot, per esempio [root@eberk diego]# /usr/local/apache/bin/httpd -f conf/Apache_test.conf utilizzerà il file di configurazione contenuto in /[ServerRoot]/conf/Apache_test.conf.
Se il file di configurazione non è contenuto nella ServerRoot è necessario specificare un path assoluto, per esempio:
[root@eberk diego]# /usr/local/apache/bin/httpd -f /home/diego/mytest/Apache_test.conf.

httpd -t
Testa il file di configurazione.
Con questa opzione Apache testa il file di configurazione senza avviarsi realmente.
Vengono visualizzati a schermo gli eventuali errori trovati. Per esempio:
[root@eberk diego]# /usr/local/apache/bin/httpd -t
Syntax error on line 34 of /etc/httpd/conf/httpd.conf
Invalid command 'BogusDirective", perhaps misspelled or defined by a module not included in the server configuration

Se il file di configurazione non ha errori Apache scriverà:
[root@eberk diego]# /usr/local/apache/bin/httpd -t
Syntax OK
Può essere usato anche da scripts per testare la funzionalità di Apache prima di avviarsi, in quanto httpd -t ritorna un valore 0 se la sintassi è corretta, e non 0 se c'è qualcosa che non va.

httpd -D
Richiama le direttive IfDefine.
Dalla versione 1.3.1, Apache supporta le direttive <IfDefine>, che permettono di definire parti di configurazione.
L'opzione -D permette ad Apache di avviarsi utilizzando diversi set di configurazioni utilizzando un unico file di configurazione.
Per esempio:
[root@eberk diego]# /usr/local/apache/bin/httpd -D no_network
Puo essere usato se httpd.conf contiene nella configurazione una direttiva tipo:
<IfDefine no_network>
Listen 127.0.0.1
<IfDefine>

Questo sostituirà l'opzione di default Listen *, negando ad Apache la possibilità di rispondere alle richieste provenienti dalla rete.
Questa feature è utilizzabile per svariati impieghi, tipo attivare o disattivare moduli, abilitare o disabilitare autorizzazioni, cambiare rapidamente parametri come la DocumentRoot o il DefaultIndex.

httpd -d
Ridefinisce la ServerRoot
Con questa opzione, è possibile modificare la server root di Apache, ossia la directory di base che contiene file di configurazione, log files, documenti html ecc.
Deve essere specificato un path assoluto, per esempio:
[root@eberk diego]# /usr/local/apache/bin/httpd -d /home/diego/Apache_test Cosi facendo Apache non utilizzerà la ServerRoot specificata in httpd.conf ma userà quella sopra specificata.

Si ringrazia Openskills per
la realizzazione della guida


© Risorse.net (www.risorse.net)
pagina in versione stampabile:
http://www.risorse.net /apache/gestione_httpd.asp?print=ok