Messa a punto di Lighttpd con PHP (mod cgi)

Da Wiki di NetBSD Italia.

(Differenze fra le revisioni)
m (Sistema dei pacchetti)
m (Sistema dei pacchetti)
 
Riga 5: Riga 5:
=== Sistema dei pacchetti ===
=== Sistema dei pacchetti ===
-
Una delle qualità di [[pkgsrc]] è la capacità di installare ''auto-magicamente'' le dipendenze necessarie a far funzionare i pacchetti che si decide di includere nel sistema. Per tanto sarà
+
Una delle qualità di [[pkgsrc]] è la capacità di installare ''automagicamente'' le dipendenze necessarie a far funzionare i pacchetti che si decide di includere nel sistema. Per tanto sarà
necessario dedicarsi all'installazione dei soli pacchetti ''principali'', come segue:
necessario dedicarsi all'installazione dei soli pacchetti ''principali'', come segue:

Versione corrente delle 10:39, 2 giu 2009

Breve tutorial che spiega come mettere a punto un server web con Lighttpd e supporto PHP (mod_cgi) su NetBSD.

Indice

Installazione

I pacchetti necessari sono fondamentalmente due: Lighttpd e PHP (cgi), i quali sono entrambe presenti all'interno dell'albero dei sorgenti del sistema dei pacchetti di NetBSD. In alternativa possono essere utilizzati i pacchetti binari scaricandoli da uno dei mirror FTP ufficiali.

Sistema dei pacchetti

Una delle qualità di pkgsrc è la capacità di installare automagicamente le dipendenze necessarie a far funzionare i pacchetti che si decide di includere nel sistema. Per tanto sarà necessario dedicarsi all'installazione dei soli pacchetti principali, come segue:

  • Bourne shell
$ build='make install clean clean-depends'
  • C shell
% set build='make install clean clean-depends'

infine:

$ cd /usr/pkgsrc/www/lighttpd ; $build
$ cd /usr/pkgsrc/lang/php5 ; $build

Pacchetti binari

Oltre i pacchetti binari principali bisogna procurarsi anche qualche dipendenza. La lista completa dei pacchetti necessari è la seguente:

  1. Lighttpd
  2. PHP
  3. libxml2
  4. xmlcatmgr

In alternativa è possibile fare in modo che le dipendenze vengano installate automaticamente impostando il valore della variabile d'ambiente PKG_PATH su uno dei percorsi contenenti tutti i pacchetti binari relativi alla versione del sistema operativo correntemente installata sulla vostra macchina e, successivamente, installando solo i pacchetti principali, come nell'esempio seguente:

# pkg_add lighttpd php

o, al fine di ottenere un output più dettagliato, usando la flag -v di pkg_add(1):

# pkg_add -v lighttpd php

A questo punti sia i pacchetti che le relative dipendenze saranno scaricati ed installati.

Configurazione

Prima di utilizzare i servizi è necessario modificare alcuni file di configurazione al fine di abilitare e personalizzare tutti i supporti e le opzioni indispensabili per il corretto funzionamento del server web.

Lighttpd

La configurazione è molto semplice. Basta editare il file /usr/pkg/etc/lighttpd/lighttpd.conf e decommentare la linea relativa al modulo CGI mod_cgi togliendo il cancelletto (#) all'inizio di questa come segue (il testo in grassetto è il modulo interessato):

[ .. ]
#                               "mod_evhost",
#                               "mod_userdir",
                               "mod_cgi",
#                               "mod_compress",
[ .. ]

Nella sezione CGI module, anzichè decommentare le righe esistenti abilitando più di quanto previsto da questo how to, inserire la seguente riga subito dopo la fine della sezione, in questo modo:

cgi.assign = ( ".php"  => "/usr/pkg/libexec/cgi-bin/php" )

Rimane quindi l'intera sezione commentata eccetto per la riga appena inserita ottenendo questo risultato (il testo in grassetto è la linea interessata):

#### CGI module
#cgi.assign                 = ( ".pl"  => "/usr/pkg/bin/perl",
#                               ".cgi" => "/usr/pkg/bin/perl" )
#
cgi.assign = ( ".php"  => "/usr/pkg/libexec/cgi-bin/php" )

Infine giusto per avere un minimo di personalizzazione cambiare il percorso del file di LOG relativo agli errori del server e della directory WWW Root modificando rispettivamente le direttive server.errorlog e server.document-root. I percorsi trattati in questo tutorial sono stati impostati come segue:

server.document-root        = "/www/root"
server.errorlog             = "/www/logs/error.log"
accesslog.filename          = "/www/logs/access.log"

Sebbene non indispensabile, è consigliato apportare un ulteriore accorgimento al fine di evitare determinati problemi di sicurezza. Infatti, generalmente non è una buona idea far girare un server web (o un altro servizio) come utente privilegiato ma è, invece, buona norma creare un utente ed un gruppo ad-hoc per lo stesso. Sorvolando su conseguenze e dettagli tecnici, si consiglia di impostare nome utente e gruppo proprietari del processo lighttpd come segue:

server.username            = "www"
server.groupname           = "www"

Naturalmente alcuni permessi dovranno essere impostati di conseguenza ed i relativi nome utente e gruppo dovranno essere creati, come spiegato nella sezione accesso.

Ulteriori modifiche possono essere apportate al fine di rendere la configurazione più aderente alle proprie esigenze, nel caso in cui è consigliata la lettura del file /usr/pkg/share/doc/lighttpd/cgi.txt e dell'altra documentazione presente all'interno della stessa directory.

PHP

L'unico accorgimento relativo a PHP ha a che fare con la sicurezza. Infatti, come descritto nella documentazione ufficiale, è bene abilitare l'opzione cgi.fix_pathinfo decommentando la riga relativa nel file /usr/pkg/etc/php.ini:

; cgi.fix_pathinfo=1

togliendo il punto e virgola (;) all'inzio della linea:

cgi.fix_pathinfo=1

Naturalmente anche qui è possibile apportare tutte le modifiche del caso, dipendentemente dalle proprie necessità.

Accesso

Prima di avviare il servizio HTTP bisogna creare i percorsi, l'utente e il gruppo a cui assegnare il processo del server web e, come vedremo in seguito provando la configurazione, un file PHP nella cosiddetta directory WWW Root impostata nella variablile server.document-root del file lighttpd.conf, contenente il percorso all'interno del quale vengono cercati i file quando si interagisce col demone HTTP sulla porta 80. Le directory richieste sono /www/root per le pagine web e /www/logs per i file di LOG. Quindi, creiamo quanto serve:

# mkdir -pm 0755 /www/{root,logs}
# groupadd www
# useradd -G www -s /sbin/nologin -d /nonexistent www
useradd: Warning: home directory `/nonexistent' doesn't exist, and -m was not specified
# chown www:www /www/logs
# chmod g+w /www/root

Quel warning ci informa che la directory home non è stata creata (in effetti, dal momento che l'utente è fittizio, non ci sarebbe alcuna utilità nel crearla); và quindi ignorato. Inoltre è da sottolineare che, avendo i permessi in lettura ed esecuzione per tutti, i cambiamenti all'interno della directory /www/root non richiedono l'appartenenza all'utente o gruppo www per tanto è sufficiente appartenere al gruppo wheel (o essere root, ovviamente) per poter lavorare al suo interno (senza dover appartenere per forza al gruppo www). Nel caso di /www/logs, invece, solo il server web ha accesso in scrittura (ed in effetti è così che dovrebbe funzionare).

Adesso c'è tutto quello di cui si può avere bisogno per utilizzare NetBSD come server web.

Gestione

Il sistema operativo NetBSD mette a disposizione degli script per la gestione dei servizi. Tali script consentono di eseguire diverse operazioni tra cui l'avvio, il riavvio e l'arresto di un determinato servizio.

Avvio

Una volta configurati tutti i componenti software, non resta che eseguire questi 3 semplici passi

  • Abilitare il servizio lighttpd inserendo la seguente riga all'interno del file /etc/rc.conf
lighttpd=YES
  • copiare lo script di gestione per Lighttpd
# cp /usr/pkg/share/examples/rc.d/lighttpd /etc/rc.d
  • avviare il server web eseguendo tale script in questo modo
# /etc/rc.d/lighttpd start

A questo punto non resta che provare la configurazione verificando che tutto funzioni correttamente.

Avvio manuale

Per disabilitare il servizio all'avvio del sistema, mantenendo tuttavia la possibilità di avviarlo manualmente quando necessario, modificare la riga relativa a lighttpd nel file /etc/rc.conf assegnando a tale direttiva il valore NO piuttosto che YES. Servizio abilitato al boot

lighttpd=YES

Servizio disabilitato al boot

lighttpd=NO

Rimuovendo totalmente o commentando tale direttiva, il servizio non sarà più avviabile nè all'avvio del sistema nè manualmente. Questo meccanismo fa parte del sistema di gestione degli script. Per maggiori informazioni consultare la pagina di manuale rc.d(8).

Verifica

Per essere certi che tutto sia effettivamente funzionante basta effettuare una piccola prova, creando un file PHP che interagisca con l'interprete tramite il modulo CGI restituendo alcune informazioni che non sarebbe possibile ottenere se non fosse tutto configurato alla perfezione. Un esempio semplice è quello di creare il file index.php all'interno della directory /www/root contenente la riga <?php phpinfo() ?>, come segue:

echo '<?php phpinfo() ?>' > /www/root/index.php

Infine aprire l'URL http://localhost su un browser web qualsiasi, visualizzando le informazioni relative al software PHP installato sul sistema. Qualora qualcosa non fosse configurato correttamente al posto di queste informazioni ci sarebbe una semplice pagina bianca con qualche errore riportato. In questo caso si suppone sia sufficiente rileggere questo documento con maggiore attenzione o consultare la sezione relativa alla risoluzione dei problemi.

Riavvio

Il servizio web (il demone HTTP - Lighttpd) può essere avviato, riavviato e fermato con estrema facilità utilizzando lo script di gestione presente all'interno della directory /etc/rc.d. Le direttive che interessano sono start, restart e stop e si utilizzano in questo modo:

  • Avvio
# /etc/rc.d/lighttpd start
  • Riavvio
# /etc/rc.d/lighttpd restart
  • Arresto
# /etc/rc.d/lighttpd stop

Per una lista completa completa delle direttive disponibili basta eseguire lo script senza parametri (anche senza i privilegi dell'utente root), come segue:

$ /etc/rc.d/lighttpd

Per maggiori informazioni sugli script d'avvio e d'arresto leggere la pagina di manuale rc(8).

Risoluzione dei problemi

Prima di ricorrere a un approccio risolutivo assicurarsi che all'interno della directory /www/root sia presente almeno uno dei seguenti file: index.html, index.htm, index.php, default.htm. Assicurarsi inoltre che il problema persista anche dopo avere eventualmente reimpostato i permessi come segue:

# chmod -R ug+rwX,o-w+rX /www/root

Per qualsiasi tipologia di problemi fare riferimento a questo stesso documento. Se tutti i passaggi sono stati (e)seguiti correttamente, escludendo possibili bug, le possibilità di riscontrare anomalie sono davvero scarse.

Strumenti personali