806
contributi
m (→Test: typo) |
m (→Verifica: output di pstree) |
||
Riga 5: | Riga 5: | ||
=Il server http= | =Il server http= | ||
==Apache== | ==Apache== | ||
[http://httpd.apache.org/ Apache] | [http://httpd.apache.org/ Apache] � il frutto del lavoro della [http://www.apache.org/ Apache Software Foundation]. Tra le caratteristiche che ne fanno il server HTTP pi� diffuso evidenziamo che: | ||
* | * � software libero; | ||
* gira sulle | * gira sulle pi� svariate piattaforme (*nix, Windows, ec...); | ||
* | * � sviluppato in accordo con le pi� recenti specifiche per i servizi http. | ||
Secondo [http://news.netcraft.com/archives/web_server_survey.html Netcraft] Apache, con una percentuale del 68% (febbraio 2005), | Secondo [http://news.netcraft.com/archives/web_server_survey.html Netcraft] Apache, con una percentuale del 68% (febbraio 2005), � il server http pi� usato in assoluto. | ||
Apache deve il suo nome all' omonima | Apache deve il suo nome all' omonima trib� di indiani nordamericani, famosa per le straordinarie doti di resistenza e strategia. Visto per� che il software � stato inizialmente sviluppato come una serie di patches ad un altro server http, nell' uso comune Apache significa anche "A Patchy Server". | ||
La pronuncia corretta di Apache suona grossomodo come "APACI". | La pronuncia corretta di Apache suona grossomodo come "APACI". | ||
Il progetto Apache | Il progetto Apache � suddiviso principalmente in due rami distinti (ne esiste un terzo, ma � nella fase di sviluppo alpha al momento): la versione 1.3 (la versione "vecchia" molto robusta e testata) e la versione 2.0 (dal design innovativo rispetto alla precedente). | ||
===Apache 1.3=== | ===Apache 1.3=== | ||
====Installazione==== | ====Installazione==== | ||
L' installazione nuda e cruda di Apache 1.3 in Debian | L' installazione nuda e cruda di Apache 1.3 in Debian � di una semplicit� disarmante. Tutto quello che avremo bisogno di fare consiste nel dare il comando: | ||
<pre># apt-get install apache</pre> | <pre># apt-get install apache</pre> | ||
al termine del download ci viene chiesto se vogliamo abilitare suExec: a meno di utilizzi professionali, possiamo tranquillamente rispondere "No". | al termine del download ci viene chiesto se vogliamo abilitare suExec: a meno di utilizzi professionali, possiamo tranquillamente rispondere "No". | ||
====Verifica==== | ====Verifica==== | ||
A questo punto il nostro server web | A questo punto il nostro server web � gi� attivo, ma possiamo anche verificarlo tramite il comando '''ps''': | ||
<pre># ps aux |grep apache | <pre># ps aux |grep apache | ||
root 7378 0.0 0.4 4592 2228 pts/1 S 12:01 0:00 /usr/sbin/apache | root 7378 0.0 0.4 4592 2228 pts/1 S 12:01 0:00 /usr/sbin/apache | ||
Riga 31: | Riga 31: | ||
www-data 7382 0.0 0.4 4592 2204 pts/1 S 12:01 0:00 /usr/sbin/apache | www-data 7382 0.0 0.4 4592 2204 pts/1 S 12:01 0:00 /usr/sbin/apache | ||
www-data 7383 0.0 0.4 4592 2204 pts/1 S 12:01 0:00 /usr/sbin/apache</pre> | www-data 7383 0.0 0.4 4592 2204 pts/1 S 12:01 0:00 /usr/sbin/apache</pre> | ||
Notiamo subito uno dei meccanismi principali di Apache: esistono svariati processi in esecuzione. Per la precisione abbiamo 1 processo | Notiamo subito uno dei meccanismi principali di Apache: esistono svariati processi in esecuzione. Per la precisione abbiamo 1 processo propriet� dell' utente root e ben 5 processi di propriet� dell' utente www-data, come possiamo vedere con il comando '''pstree''': | ||
<pre>$ pstree -uc |grep apache | |||
??apache???apache(www-data) | |||
? ??apache(www-data) | |||
? ??apache(www-data) | |||
? ??apache(www-data) | |||
? ??apache(www-data)</pre> | |||
Il primo processo (padre) viene lanciato da root e ed il suo unico compito consiste nel genere e controllare i restanti processi (figli). Sono questi ultimi a rispondere alle richieste http ed a fornire le pagine. In questo modo Apache gira con privilegi minimi (quelli dell' utente www-data) ed in caso di una sua eventuale compromissione gli effetti sul sistema sono in qualche misura limitati. | Il primo processo (padre) viene lanciato da root e ed il suo unico compito consiste nel genere e controllare i restanti processi (figli). Sono questi ultimi a rispondere alle richieste http ed a fornire le pagine. In questo modo Apache gira con privilegi minimi (quelli dell' utente www-data) ed in caso di una sua eventuale compromissione gli effetti sul sistema sono in qualche misura limitati. | ||
====Configurazione==== | ====Configurazione==== | ||
La configurazione di Apache | La configurazione di Apache � un compito estremamente delicato e pu� richiedere conoscenze anche notevoli in svariati ambiti quali networking, programmazione e amministrazione di sistema. Dato che questa guida si propone fondamentalmente di illustrare i passi necessari ad installare e configurare un sistema per uso non professionale, ci limiteremo agli aspetti macroscopici della configurazione. | ||
I files di configurazione di Apache risiedono nella directory '''/etc/apache''' al cui interno troviamo svariati files. Quello di cui ci occuperemo qui | I files di configurazione di Apache risiedono nella directory '''/etc/apache''' al cui interno troviamo svariati files. Quello di cui ci occuperemo qui � il file di controllo principale e cio� '''httpd.conf'''. Apriamo il file con il nostro editor di fiducia (dobbiamo essere root per modificare questo file) e vediamo quali sono le direttive principali su cui agiremo. | ||
'''server-pool size''' | '''server-pool size''' | ||
Alla riga 130 del file di configurazione originale troviamo il primo blocco da prendere in esame: si tratta della direttiva che dice ad Apache il numero minimo e massimo di processi "figlio" da mantenere in memoria. Ogni processo "figlio" risponde ad un numero prefissato di richieste, | Alla riga 130 del file di configurazione originale troviamo il primo blocco da prendere in esame: si tratta della direttiva che dice ad Apache il numero minimo e massimo di processi "figlio" da mantenere in memoria. Ogni processo "figlio" risponde ad un numero prefissato di richieste, dopodich� viene ucciso (mondo crudele) e ne viene generato uno nuovo. Esaminiamo la direttiva: | ||
<pre>MinSpareServers 5 | <pre>MinSpareServers 5 | ||
MaxSpareServers 10</pre> | MaxSpareServers 10</pre> | ||
Come default Apache genera 5 processi, ma se il carico aumenta | Come default Apache genera 5 processi, ma se il carico aumenta pu� arrivare fino a 10 figli simultanei. Per un sistema domestico � sicuramente eccessivo ed io consiglio di porre queste limitazioni: | ||
<pre>MinSpareServers 1 | <pre>MinSpareServers 1 | ||
MaxSpareServers 2</pre> | MaxSpareServers 2</pre> | ||
'''Number of servers to start initially''' | '''Number of servers to start initially''' | ||
Questo blocco (riga 153) dice ad Apache quanti sono i figli da generare al momento dell' avvio del server. Il default | Questo blocco (riga 153) dice ad Apache quanti sono i figli da generare al momento dell' avvio del server. Il default �: | ||
<pre>StartServers 5</pre> | <pre>StartServers 5</pre> | ||
che noi cambieremo in: | che noi cambieremo in: | ||
Riga 54: | Riga 60: | ||
'''Listen''' | '''Listen''' | ||
Questo blocco (riga 192) indica ad Apache su quale porta TCP restare in attesa di richeste http. E' anche possibile specificare una particolare accoppiata di indirizzo IP + porta TCP. Possiamo tranquillamente lasciare commentata la direttiva ed il nostro server | Questo blocco (riga 192) indica ad Apache su quale porta TCP restare in attesa di richeste http. E' anche possibile specificare una particolare accoppiata di indirizzo IP + porta TCP. Possiamo tranquillamente lasciare commentata la direttiva ed il nostro server sar� in ascolto sulla porta 80 per tutti gli indirizzi configurati sul sistema. | ||
'''BindAddress''' | '''BindAddress''' | ||
Riga 60: | Riga 66: | ||
'''ServerName''' | '''ServerName''' | ||
Con questa direttiva (alla linea 276) diciamo ad Apache quale | Con questa direttiva (alla linea 276) diciamo ad Apache quale � il suo nome. Questo � particolarmente utile nel caso abbiamo a disposizione un [[FQDN]] (a questo proposito puoi consultare la guida [[Server Web Casalingo]]). | ||
'''DocumentRoot''' | '''DocumentRoot''' | ||
Con questa direttiva (riga 284) indichiamo ad Apache quale directory del nostro sistema deve corrispondere alla radice del Web Server. Il default va | Con questa direttiva (riga 284) indichiamo ad Apache quale directory del nostro sistema deve corrispondere alla radice del Web Server. Il default va pi� che bene: ricordatevi quindi che tutti i vostri files che volete pubblicare sul server http dovranno risiedere in '''/var/www''' o in una sua sotto-directory. | ||
{{Warningbox| | {{Warningbox|� fondamentale per il funzionamento di Apache che i files che devono essere visibili via Web siano leggibili da parte dell' utente '''www-data''' e che le sotto-directory di /var/www siano raggiunbili dallo stesso utente}} | ||
Questo | Questo � il minimo indispensabile che ci occorre sapere per poter utilizzare proficuamente Apache: salviamo il file e procediamo a riavviare Apache. Per fare questo possiamo procedere in due modi distinti: | ||
* metodo standard <pre><nowiki># apachectl graceful | * metodo standard <pre><nowiki># apachectl graceful | ||
/usr/sbin/apachectl graceful: httpd gracefully restarted</nowiki></pre> | /usr/sbin/apachectl graceful: httpd gracefully restarted</nowiki></pre> | ||
* metodo debian init.d <pre><nowiki># /etc/init.d/apache restart | * metodo debian init.d <pre><nowiki># /etc/init.d/apache restart | ||
Restarting apache.</nowiki></pre> | Restarting apache.</nowiki></pre> | ||
Senza dubbio '''apachectl''' | Senza dubbio '''apachectl''' � il metodo da preferire. Oltre a riavviare Apache possiamo controllare altri aspetti del server web. Tra questi quello che inizialmente pu� risultare pi� comodo consiste nel controllo della sintassi del file di configurazione.<br> | ||
Facciamo un esempio: | Facciamo un esempio: | ||
<pre># apachectl configtest | <pre># apachectl configtest | ||
Syntax error on line 49 of /etc/apache/httpd.conf: | Syntax error on line 49 of /etc/apache/httpd.conf: | ||
ServerType takes one argument, 'inetd' or 'standalone'</pre> | ServerType takes one argument, 'inetd' or 'standalone'</pre> | ||
lo script mi avvisa che alla riga 49 di httpd.conf c' | lo script mi avvisa che alla riga 49 di httpd.conf c'� un errore di sintassi: la direttiva ServerType supporta un solo argomento, mentre nel file ne sono specificati almeno 2. Se controllo �a riga incriminata scopro che: | ||
<pre>ServerType is either inetd, or standalone. Inetd mode is only supported on</pre> | <pre>ServerType is either inetd, or standalone. Inetd mode is only supported on</pre> | ||
Noto subito che manca il commendo (#) a inizio riga, provvedo a reinserirlo e quindi controllo nuovamente la configurazione: | Noto subito che manca il commendo (#) a inizio riga, provvedo a reinserirlo e quindi controllo nuovamente la configurazione: | ||
Riga 82: | Riga 88: | ||
Syntax OK</pre> | Syntax OK</pre> | ||
Se non abbiamo fatto pasticci, una volta riavviato il server Apache, | Se non abbiamo fatto pasticci, una volta riavviato il server Apache, baster� puntare il nostro browser all' indirizzo '''http://127.0.0.1''' per vedere la pagina di default installata dal manutentore del pacchetto Debian: | ||
<pre>Placeholder page | <pre>Placeholder page | ||
If you are just browsing the web | If you are just browsing the web | ||
The owner of this web site has not put up any web pages yet. Please come back later. | The owner of this web site has not put up any web pages yet. Please come back later. | ||
Move along, nothing to see here... :-)</pre> | Move along, nothing to see here... :-)</pre> | ||
{{box|Nota Bene: Directory home degli utenti|Per default Apache permette anche a ciascun utente del sistema di avere una propria home. Poniamo l' esempio dell' utente '''pippo''': all' interno di /home/pippo l' utente | {{box|Nota Bene: Directory home degli utenti|Per default Apache permette anche a ciascun utente del sistema di avere una propria home. Poniamo l' esempio dell' utente '''pippo''': all' interno di /home/pippo l' utente dovr� semplicemente creare la directory '''public_html''' per poter accedere ai files in essa contenuti attraverso l' indirizzo '''http://127.0.0.1/~pippo/'''}} | ||
Ora non ci resta che inserire i nostri files in /var/www o nella nostra public_html per poter cominciare ad usare Apache! | Ora non ci resta che inserire i nostri files in /var/www o nella nostra public_html per poter cominciare ad usare Apache! | ||
Riga 96: | Riga 102: | ||
=Il processore PHP= | =Il processore PHP= | ||
==Installazione== | ==Installazione== | ||
Anche installare PHP non | Anche installare PHP non � un compito per nulla complesso. | ||
Vediamo subito come procedere a abilitare PHP per il nostro server Apache in maniera minimale: | Vediamo subito come procedere a abilitare PHP per il nostro server Apache in maniera minimale: | ||
<pre># apt-get install libapache-mod-php4</pre> | <pre># apt-get install libapache-mod-php4</pre> | ||
Apt | Apt scaricher� il modulo per Apache, le eventuali dipendenze e aggiorner� anche il file di configurazione dei moduli (/etc/apache/modules.conf). | ||
Tutto quello che dovremo fare manualmente | Tutto quello che dovremo fare manualmente � di riavviare Apache, altrimenti non ci fornir� gli script Php elaborati, ma ci permetter� unicamente di scaricarli. Come abbiamo gi� visto nella sezione relativa all' installazione di Apache il comando �: | ||
<pre># apachectl graceful | <pre># apachectl graceful | ||
/usr/sbin/apachectl graceful: httpd gracefully restarted</pre> | /usr/sbin/apachectl graceful: httpd gracefully restarted</pre> | ||
Ora, anche se a livello minimale, Apache | Ora, anche se a livello minimale, Apache � in grado fornire al nostro browser l' output degli script elaborati dal motore PHP. Non ci resta altro da fare che testarne il funzionamento. | ||
==Test== | ==Test== | ||
Il modo | Il modo pi� semplice per testare la nostra installazione di PHP consiste nel preparare uno script e tentare di visualizzarlo nel nostro browser. | ||
Possiamo procedere in due modi fondamentalmente: creare uno script nella '''DocumentRoot''' del server web, e | Possiamo procedere in due modi fondamentalmente: creare uno script nella '''DocumentRoot''' del server web, e cio� '''/var/www''' (se non l' avete modificata in ahttpd.conf) oppure nella nostra '''public_html. | ||
Nel caso vogliate creare o spostare files all' interno della DocumentRoot di Apache | Nel caso vogliate creare o spostare files all' interno della DocumentRoot di Apache � indispensabile tenere sempre a mente che quella directory e le directory in essa contenute sono visibili anche da altri computer (nella eventuale lan o su internet): prestate estrema attenzione ai permessi di scrittura di questi files! | ||
Un consiglio personale consiste nell' agire sempre come utente '''www-data''' quando operate nella DocumentRoot: vi risparmierete patemi in fatto di permessi e sicurezza. Per loggarci come utente www-data | Un consiglio personale consiste nell' agire sempre come utente '''www-data''' quando operate nella DocumentRoot: vi risparmierete patemi in fatto di permessi e sicurezza. Per loggarci come utente www-data � sufficiente operare in questo modo: | ||
<pre>$ whoami | <pre>$ whoami | ||
keltik | keltik | ||
Riga 125: | Riga 131: | ||
$ whoami | $ whoami | ||
www-data</pre> | www-data</pre> | ||
Siamo | Siamo cos� passati dal nostro utente normale ll' utente root e da questo siamo diventati l' utente www-data (il passaggio tramite l' utente root ci evita di dover fornire la password per www-data). Avendo usato il comando '''su - ''' abbiamo effettuato un login vero e proprio, ereditando tutte le variabili locali per www-data. | ||
Ora possiamo operare in | Ora possiamo operare in tranquillit� nella DocumentRoot (che � anche la $HOME dell' utente www-data). | ||
Se invece scegliamo di usare la nostra public_html, non dovremo fare altro che creare il file al suo interno usando il nostro utente normale. | Se invece scegliamo di usare la nostra public_html, non dovremo fare altro che creare il file al suo interno usando il nostro utente normale. | ||
Usiamo il nostro editor preferito e creiamo il file prova.php che | Usiamo il nostro editor preferito e creiamo il file prova.php che conterr� questo codice: | ||
<pre><?php phpinfo(); ?></pre> | <pre><?php phpinfo(); ?></pre> | ||
{{box|Nota Bene| | {{box|Nota Bene|Aldil� di quale sia il vostro editor preferito, consiglio caldamente di imparare quantomeno i rudimenti di '''vi''': questo editor testuale infatti � presente nella quasi totalit� dei sistemi operativi *nix, � molto pratico anche durante sessioni telnet o ssh e - con un minimo di allenamento - dispone di tutta la potenza necessaria ad un editor di codice}} | ||
Se tutto | Se tutto � andato bene, puntando il browser all' indiritto http://127.0.0.1/prova.php (nel caso di aver usato la DocumentRoot) oppure http://127.0.0.1/~utente/prova.php vedremo una pagina html che riporta molte informazioni utili sul nostro nuovo ambiente di sviluppo (versione del software, moduli di apache, moduli di php, variabili di ambiente, ecc...). | ||
=Il Database Server= | =Il Database Server= |
contributi