+ <h1><a class="toc-backref" href=
+ "#id16">3 Apache</a></h1>
+
+ <p>Pacchetti da installare:</p>
+ <pre class="literal-block">
+apache2 apache2-doc
+</pre>
+
+ <p>Con la release 2.0 di Apache viene automaticamente resa
+ disponibile anche la versione SSL (Secure Socket Layer,
+ cpnnessioni criptate ) del web server.</p>
+
+ <div class="section" id="configurazione-di-apache">
+ <h2><a class="toc-backref" href=
+ "#id17">3.1 Configurazione di
+ Apache</a></h2>
+
+ <p>I file di configurazione di apache si trovano nella
+ cartella: <tt class="docutils literal"><span class=
+ "pre">/etc/apache2</span></tt> e sono strutturati come
+ descritto nel file <tt class=
+ "docutils literal"><span class="pre">/usr/share/doc/apache2/README.Debian.gz</span></tt>
+ . Sostanzialmente lo schema e' il seguente:</p>
+
+ <dl class="docutils">
+ <dt>apache2.conf</dt>
+
+ <dd>File di configurazione principale del servizio
+ httpd.conf e' il vecchio file di configurazione di
+ Apache1, presente per motivi di retrocompatibilita' e'
+ generalemente vuoto.</dd>
+
+ <dt>ports.conf</dt>
+
+ <dd>In questo file vengono specificate le porte sulle
+ quali resta in ascolto il server web. Si noti che
+ utilizzando dei virtual hosts generalmente viene
+ specificata per questi la porta su cui ascoltare nel file
+ di configurazione del virtual host, ad es: <tt class=
+ "docutils literal"><span class=
+ "pre"><VirtualHost</span> <span class=
+ "pre">*:80></span></tt></dd>
+
+ <dt>sites-available</dt>
+
+ <dd>In questa cartella vengono raccolti i file di
+ configurazione dei virtual host disponibili.</dd>
+
+ <dt>sites-enabled</dt>
+
+ <dd>In questa cartella sono contenuti dei link simbolici
+ ai files in ../sites-available : se il link e' presente
+ in questa cartella il virtual host e' abilitato.</dd>
+
+ <dt>mods-available</dt>
+
+ <dd>Stesso metodo per i moduli: in questa cartella ci
+ sono i moduli veri e propri che verranno poi abilitati
+ grazie all'esistenza di link simbolici nella cartella
+ mods-enabled .</dd>
+
+ <dt>mods-enabled</dt>
+
+ <dd>Moduli abilitati, effettivamente caricati.</dd>
+ </dl>
+ </div>
+
+ <div class="section" id="apache-conf">
+ <h2><a class="toc-backref" href=
+ "#id18">3.2 apache.conf</a></h2>
+
+ <p>File di configurazione del servizio Apache, contiene le
+ impostazioni generiche (ad esempio utilizzo della RAM e
+ risorse di sistema) dell'intero servizio. Nella
+ configurazione di default per Debian non viene definito un
+ vero e proprio sito di default ma solo dei virtual
+ hosts.</p>
+
+ <p>Guardiamo alcune direttive interessanti:</p>
+
+ <dl class="docutils">
+ <dt>timeout</dt>
+
+ <dd>Numero di secondi da aspettare prima di chiudere la
+ connessione con il client. Questo parametro serve a
+ liberare le risorse di sistema nel caso che un client,
+ magar a causa di una connessione particolarmente lenta o
+ instabili, tenga attivo indefinitivamente un processo di
+ apache.</dd>
+
+ <dt>KeepAlive</dt>
+
+ <dd>L'estensione keep-alive (http 1.0) congiuntamente
+ alle connessioni persistenti (http 1.1) permettono al
+ server di rispondere a piu' richieste dei client mediante
+ la stessa connessione. Il protocoll http per sua natura
+ e' connectio-less e senza stato, quindi ogni risorsa
+ richiesta (per pagine web si pensi ad esempio alle
+ immagini) dal client necessita di una connessione
+ autonoma. Keep-alive permette di ottimizzare la
+ connessione anche fino al 50% a seconda delle situazioni
+ e contenuti.</dd>
+
+ <dt>Server-Pool Size Regulation</dt>
+
+ <dd>Questi parametri (StartServers, MinSpareServers, ecc.
+ Tutti spiegati nel manuale di apache) servono per
+ attribuire le risorse di sistema disponibili al server
+ Apache. Tenere questi parametri bassi serve a limitare il
+ rischio di Denial of Service per il server, nel caso
+ offra altri servizi. I settagi di default sono come
+ sempre abbastanza conservativi, se si conta di usare il
+ proprio Apache per servire un sito web con molti
+ visitatori sara' necessario aumentare sensibilmente le
+ impostazioni di base.</dd>
+
+ <dt>AccessFileName</dt>
+
+ <dd>Il nome del file che viene onorato per modificare le
+ impostazioni per una singola directory, legato alla
+ direttiva AllowOverride .</dd>
+ </dl>
+ </div>
+
+ <div class="section" id="installazione-di-php">
+ <h2><a class="toc-backref" href=
+ "#id19">3.3 Installazione di PHP</a></h2>
+
+ <p>Pacchetti da installare: <tt class=
+ "docutils literal"><span class="pre">php5</span>
+ <span class="pre">php-pear</span></tt></p>
+
+ <div class="section" id="test-del-modulo-php">
+ <h3><a class="toc-backref" href=
+ "#id20">3.3.1 Test del modulo
+ php</a></h3>
+
+ <p>Creare nella cartella <tt class=
+ "docutils literal"><span class="pre">/var/www</span></tt>
+ (o altra cartella visibile) un file con estensione *.php
+ (es <tt class="docutils literal"><span class=
+ "pre">/var/ww/info.php</span></tt> contenete codice php
+ eseguibile dall'interprete, ad es:</p>
+ <pre class="literal-block">
+<?php phpinfo() ; ?>
+</pre>
+
+ <p>Questa funzione di php generera' la tipica pagina con
+ le impostazioni attuali per php, se richiamando la pagina
+ (es: <tt class="docutils literal"><span class=
+ "pre">http://localhost/info.php</span></tt> ) verra
+ generata la pagina e resa disponibile tramite apache agli
+ utenti allora l'integrazione tra PHP e Apache sara'
+ corretta. In caso contrario se il client http proporra di
+ scaricare la pagina invece che visualizzarla nel browser:
+ non funziona l'interprete di php o sono mal configurati i
+ MIME-type.</p>
+ </div>
+
+ <div class="section" id=
+ "installazione-del-supporto-per-mysql">
+ <h3><a class="toc-backref" href=
+ "#id21">3.3.2 Installazione del supporto
+ per Mysql</a></h3>
+
+ <p>Installare i pacchetti:</p>
+ <pre class="literal-block">
+php5-mysql phpmyadmin
+</pre>
+
+ <p>Controllare tramite la pagina php.info che sia
+ abilitato il supporto per Mysql (ripartito Apache,
+ ricaricare la pagina e cercare con CTRL+f <tt class=
+ "docutils literal"><span class=
+ "pre">mysql</span></tt>).</p>
+ </div>
+
+ <div class="section" id="phpmyadmin">
+ <h3><a class="toc-backref" href=
+ "#id22">3.3.3 phpmyadmin</a></h3>
+
+ <p>L'interfaccia web Phpmyadmin non richede
+ necessariamente la presenza di un database Mysql locale,
+ puo' infatti essere utilizzata per gestire databases
+ remoti (il suo file di configurazione: <tt class=
+ "docutils literal"><span class=
+ "pre">/etc/phpmyadmin/config.inc.php</span></tt> ). Nel
+ caso si voglia installare localmente Mysql si utilizzi il
+ pacchetto <tt class="docutils literal"><span class=
+ "pre">mysql-server</span></tt> .</p>
+
+ <p>Phpmyadmin dovrebbe essere disponibile all'URL:
+ <tt class="docutils literal"><span class=
+ "pre">http://localhost/phpmyadmin/</span></tt>, se cosi
+ non fosse controllare che sia incluso il file <tt class=
+ "docutils literal"><span class=
+ "pre">/etc/phpmyadmin/apache.conf</span></tt> in
+ <tt class="docutils literal"><span class=
+ "pre">/etc/apache2/conf.d/</span></tt> .</p>
+ </div>
+
+ <div class="section" id=
+ "installazione-del-supporto-per-postgresql">
+ <h3><a class="toc-backref" href=
+ "#id23">3.3.4 Installazione del supporto
+ per Postgresql</a></h3>
+
+ <p>Installare i pacchetti:</p>
+ <pre class="literal-block">
+php5-pgsql phppgadmin
+</pre>
+
+ <p>Controllare tramite la pagina php.info che sia
+ abilitato il supporto per PostgreSQL (ripartito Apache,
+ ricaricare la pagina e cercare con CTRL+f <tt class=
+ "docutils literal"><span class=
+ "pre">pgsql</span></tt>).</p>
+ </div>
+ </div>
+
+ <div class="section" id="virtual-hosts">
+ <h2><a class="toc-backref" href=
+ "#id24">3.4 Virtual hosts</a></h2>
+
+ <blockquote>
+ <ul class="simple">
+ <li><a class="reference external" href=
+ "http://www.apacheweek.com/features/vhost">http://www.apacheweek.com/features/vhost</a></li>
+
+ <li><a class="reference external" href=
+ "http://www.onlamp.com/pub/a/apache/2004/01/08/apacheckbk.html">
+ http://www.onlamp.com/pub/a/apache/2004/01/08/apacheckbk.html</a></li>
+ </ul>
+ </blockquote>
+
+ <p>I virtual host permettono di avere piu' siti internet
+ disponibile tramite lo stesso server web, eventualmente
+ mappati su un solo indirizzo ip. Sono generalemente di due
+ tipi:</p>
+
+ <blockquote>
+ <ul class="simple">
+ <li>Basati su indirizzi ip diversi. Se si ha la
+ possibilita' di avere piu' indirizzi ip dedicati per i
+ diversi siti che si vuole servire. ES: <VirtualHost
+ 192.168.0.2:80> . Soluzione dispendiosa, si tende ad
+ usarla solo se servono certificati di sicurezza (SSL )
+ dedicati per ogni sito.</li>
+
+ <li>Basati su nomi di dominio diversi che puntano allo
+ stesso ip. Soluzione piu' economica e diffusa che si
+ basa sulle funzionalita' di http 1.1 .</li>
+ </ul>
+ </blockquote>
+
+ <p>Prenderemo in esame la gestione di virtual hosts basati
+ su nomi di dominio.</p>
+
+ <div class="section" id="gestione-dns">
+ <h3><a class="toc-backref" href=
+ "#id25">3.4.1 Gestione DNS</a></h3>
+
+ <p>Prima di tutto per poter impostare i virtual hosts
+ dovete avere un server DNS che risolva i vostri nomi di
+ dominio sull'indirizzo ip del server. Questo si puo'
+ ottenere in vari modi, ad es:</p>
+
+ <blockquote>
+ <ul class="simple">
+ <li>Bind Impostare i campi A nelle proprie zone
+ gestite dal server dns Bind. Ad es: <tt class=
+ "docutils literal"><span class=
+ "pre">papo</span>
+ <span class=
+ "pre">A</span>
+ <span class="pre">212.22.136.248</span></tt></li>
+
+ <li>Servizio DNS dinamico on line. Utilizzare un
+ servizio come ad es: <a class="reference external"
+ href=
+ "https://www.dyndns.com/">https://www.dyndns.com/</a>
+ per mappare nomi di dominio sul proprio indirizzo ip,
+ comodo ad esempio se si dispone di un indirzzo ip
+ pubblico (anche se dinamico) per la propria
+ connessione ad internet.</li>
+
+ <li>Dnsmasq Utilizzabile a livello locale per fare
+ dei test, utilizzando direttive come: <tt class=
+ "docutils literal"><span class=
+ "pre">address=/davide.piffa.net/10.10.208.178</span></tt></li>
+
+ <li>/etc/hosts Per prove <em>strettamente a livello
+ locale</em> potete impostare i nomi dei vostri
+ virtual server nel file /etc/hosts .</li>
+ </ul>
+ </blockquote>
+
+ <p>Testare con dig (disponibile nel pacchetto <tt class=
+ "docutils literal"><span class="pre">dnsutils</span></tt>
+ ) il nome di dominio che si vuole utilizzare:</p>
+ <pre class="literal-block">
+# dig 177.piffa.net
+
+; <<>> DiG 9.5.1-P1 <<>> 177.piffa.net
+;; global options: printcmd
+;; Got answer:
+;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 38036
+;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0
+
+;; QUESTION SECTION:
+;177.piffa.net. IN A
+
+;; ANSWER SECTION:
+177.piffa.net. 0 IN A 10.10.208.177
+
+;; Query time: 12 msec
+;; SERVER: 10.10.208.254#53(10.10.208.254)
+;; WHEN: Wed May 6 12:27:08 2009
+;; MSG SIZE rcvd: 47
+</pre>
+
+ <p>La parte interessante e' <tt class=
+ "docutils literal"><span class=
+ "pre">177.piffa.net.</span>
+ <span class=
+ "pre">0</span>
+ <span class="pre">IN</span>
+ <span class=
+ "pre">A</span>
+ <span class="pre">10.10.208.177</span></tt> . Il nome di
+ dominio 177.piffa.net viene risolto sull'ip 10.10.208.177
+ , nel nostro Apache (che risponde all'ip 10.10.208.177 )
+ dovra' essere disponibile un virtual host che corrisponde
+ al nome <tt class="docutils literal"><span class=
+ "pre">177.piffa.net</span></tt> .</p>
+ </div>
+
+ <div class="section" id="virtual-host">
+ <h3><a class="toc-backref" href=
+ "#id26">3.4.2 Virtual host</a></h3>
+
+ <p>Esempio di Virtual host</p>
+ </div>
+ </div>
+
+ <div class="section" id="user-authentication">
+ <h2><a class="toc-backref" href=
+ "#id27">3.5 User Authentication</a></h2>
+
+ <p>link: <a class="reference external" href=
+ "http://www.apacheweek.com/features/userauth">http://www.apacheweek.com/features/userauth</a></p>
+ </div>
+
+ <div class="section" id="cavets">
+ <h2><a class="toc-backref" href=
+ "#id28">3.6 Cavets</a></h2>
+
+ <p>Problemi di cache:</p>
+
+ <blockquote>
+ <ul class="simple">
+ <li>Proxy: nei settaggi del browser specificare di non
+ utilizzare un server proxy http per il sito web locale
+ (o per gli altri che si stanno monitorando). Se si ha
+ il controllo del proxy server: stopparlo, ricaricare la
+ pagina (operazione che fallira'), far ripartire il
+ proxy, ricaricare la pagina.</li>
+
+ <li>Provare con un altro browser, o cercare di svuotare
+ la cache chiudere/riaprire l'applicativo. Provare a
+ fermare Apache, ricaricare la pagina (operazione che
+ fallira'), far ripartire il Apache, ricaricare la
+ pagina.</li>
+ </ul>
+ </blockquote>
+ </div>
+ </div>
+
+ <div class="section" id="domain-name-system">
+ <h1><a class="toc-backref" href=
+ "#id29">4 Domain Name System</a></h1>
+
+ <div class="section" id=
+ "informazioni-di-base-sul-servizio-dns">
+ <h2><a class="toc-backref" href=
+ "#id30">4.1 Informazioni di base sul
+ servizio DNS.</a></h2>
+
+ <p>Domain Name System (spesso indicato con DNS) è un
+ servizio utilizzato per la risoluzione di nomi di host in
+ indirizzi IP e viceversa. Il servizio è realizzato tramite
+ un database distribuito, costituito dai server DNS.</p>
+
+ <p>Il nome DNS denota anche il protocollo che regola il
+ funzionamento del servizio, i programmi che lo
+ implementano, i server su cui questi girano, l'insieme di
+ questi server che cooperano per fornire il servizio.</p>
+
+ <p>I nomi DNS, o "nomi di dominio", sono una delle
+ caratteristiche più visibili di Internet.</p>
+
+ <p>C'è confusione in merito alla definizione
+ dell'acronimo: la S spesso viene interpretata come service,
+ ma la definizione corretta è system.</p>
+
+ <p>L'operazione di convertire un nome in un indirizzo è
+ detta risoluzione DNS, convertire un indirizzo IP in nome
+ è detto risoluzione inversa.</p>
+ </div>
+
+ <div class="section" id="nomi-di-dominio">
+ <h2><a class="toc-backref" href=
+ "#id31">4.2 Nomi di dominio</a></h2>
+
+ <p>Un nome a dominio è costituito da una serie di stringhe
+ separate da punti, ad esempio it.wikipedia.org. A
+ differenza degli indirizzi IP, dove la parte più
+ importante del numero è la prima partendo da sinistra, in
+ un nome DNS la parte più importante è la prima partendo
+ da destra. Questa è detta dominio di primo livello (o TLD,
+ Top Level Domain), per esempio .org o .it.</p>
+
+ <p>Un dominio di secondo livello consiste in due parti, per
+ esempio wikipedia.org, e così via. Ogni ulteriore elemento
+ specifica un'ulteriore suddivisione. Quando un dominio di
+ secondo livello viene registrato all'assegnatario, questo
+ è autorizzato a usare i nomi di dominio relativi ai
+ successivi livelli come it.wikipedia.org (dominio di terzo
+ livello) e altri come some.other.stuff.wikipedia.org
+ (dominio di quinto livello) e così via.</p>
+ </div>
+
+ <div class="section" id="tipologie-di-record">
+ <h2><a class="toc-backref" href=
+ "#id32">4.3 Tipologie di record</a></h2>
+
+ <p>Ad un nome DNS possono corrispondere diversi tipi di
+ informazioni. Per questo motivo, esistono diversi tipi di
+ record DNS. Ogni voce del database DNS deve essere
+ caratterizzata da un tipo. I principali tipi sono:</p>
+
+ <ul class="simple">
+ <li>Record A - Indica la corrispondenza tra un nome ed
+ uno (o più) indirizzi IP (per la precisione indirizzi
+ IPv4, ovvero la versione attualmente in uso).</li>
+
+ <li>Record MX - (Mail eXchange) indica a quali server
+ debba essere inviata la posta elettronica per un certo
+ dominio.</li>
+
+ <li>Record CNAME - Sono usati per creare un alias, ovvero
+ per fare in modo che lo stesso calcolatore sia noto con
+ più nomi. Uno degli utilizzi di questo tipo di record
+ consiste nell'attribuire ad un host che offre più
+ servizi un nome per ciascun servizio. In questo modo, i
+ servizi possono poi essere spostati su altri host senza
+ dover riconfigurare i client, ma modificando solo il
+ DNS.</li>
+
+ <li>Record PTR - Il DNS viene utilizzato anche per
+ realizzare la risoluzione inversa, ovvero per far
+ corrispondere ad un indirizzo IP il corrispondente nome a
+ dominio. Per questo si usano i record di tipo "PTR" (e
+ una apposita zona dello spazio dei nomi
+ in-addr.arpa).</li>
+
+ <li>Record AAAA - Restituisce un indirizzo IPv6.</li>
+
+ <li>Record SRV - Identificano il server per un
+ determinato servizio all'interno di un dominio. Possono
+ essere considerati una generalizzazione dei record
+ MX.</li>
+
+ <li>Record TXT - Associano campi di testo arbitrari ad un
+ dominio. Questi campi possono contenere una descrizione
+ informativa oppure essere utilizzati per realizzare
+ servizi.</li>
+ </ul>
+
+ <p>Vi sono anche tipi di record "di servizio", necessari al
+ funzionamento del database distribuito: * Record NS -
+ Utilizzato per indicare quali siano i server DNS
+ autoritativi per un certo dominio, ovvero per delegarne la
+ gestione. * Record SOA - (Start of Authority) usato per la
+ gestione delle zone DNS.</p>
+ </div>
+
+ <div class="section" id="utilizzo">
+ <h2><a class="toc-backref" href=
+ "#id33">4.4 Utilizzo</a></h2>
+
+ <p>I computer vengono identificati in rete grazie agli
+ indirizzi <em>IP</em>, questi pero' non sono comodi per gli
+ utenti come riferimento per i vari server. Ad esempio
+ sarebbe scomodoriferirsi al motore di ricerca Goggle con
+ uno dei suoi IP: <tt class="docutils literal"><span class=
+ "pre">74.125.43.104</span></tt>, e' preferibile usare il
+ nome di dominio <em>www.google.com</em>:</p>
+ <pre class="literal-block">
+ping -c 1 www.google.com
+PING www.l.google.com (74.125.43.104) 56(84) bytes of data.
+</pre>
+ </div>
+
+ <div class="section" id="risoluzione-dei-nomi-di-dominio">
+ <h2><a class="toc-backref" href=
+ "#id34">4.5 Risoluzione dei nomi di
+ dominio</a></h2>
+
+ <p>Ci sono vari strumenti per interrogare i server DNS e
+ ottenere l'indirizzo IP associato al nome di dominio che ci
+ interessa:</p>
+ <pre class="literal-block">
+$ host www.piffa.net
+ www.piffa.net is an alias for piffa.net.
+ piffa.net has address 65.98.21.97
+ piffa.net mail is handled by 10 65.98.21.97
+
+
+$ nslookup www.piffa.net
+ Server: 192.168.0.10
+ Address: 192.168.0.10#53
+
+ Non-authoritative answer:
+ www.piffa.net canonical name = piffa.net.
+ Name: piffa.net
+ Address: 65.98.21.97
+
+
+ $ dig www.piffa.net
+
+ ; <<>> DiG 9.6.0-P1 <<>> www.piffa.net
+ ;; global options: +cmd
+ ;; Got answer:
+ ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 47751
+ ;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 4, ADDITIONAL: 4
+
+ ;; QUESTION SECTION:
+ ;www.piffa.net. IN A
+
+ ;; ANSWER SECTION:
+ www.piffa.net. 3489 IN CNAME piffa.net.
+ piffa.net. 3489 IN A 65.98.21.97
+
+ ;; AUTHORITY SECTION:
+ piffa.net. 86289 IN NS ns2.mydomain.com.
+ piffa.net. 86289 IN NS ns1.mydomain.com.
+ piffa.net. 86289 IN NS ns4.mydomain.com.
+ piffa.net. 86289 IN NS ns3.mydomain.com.
+
+ ;; ADDITIONAL SECTION:
+ ns1.mydomain.com. 96208 IN A 64.94.117.193
+ ns2.mydomain.com. 96208 IN A 64.94.31.67
+ ns3.mydomain.com. 96208 IN A 66.150.161.137
+ ns4.mydomain.com. 96208 IN A 63.251.83.74
+
+ ;; Query time: 1 msec
+ ;; SERVER: 192.168.0.10#53(192.168.0.10)
+ ;; WHEN: Sun May 10 21:23:11 2009
+ ;; MSG SIZE rcvd: 209
+</pre>
+ </div>