- Documentazione ufficiale
- Guide della comunità
- 12.04 LTS

web wiki forum planet
help.ubuntu-it comunità italiana

- Desktop
- Server
- Ricerca

Questa guida non è stata ancora completamente tradotta. Se vuoi contribuire alla sua traduzione contatta il Gruppo Traduzione di Ubuntu-it.
Guida a Ubuntu Server » Server web »
Indietro | Avanti

# HTTPD - Server web Apache2

Apache is the most commonly used Web Server on Linux systems. Web Servers are used to serve Web Pages requested by client computers. Clients typically request and view Web Pages using Web Browser applications such as Firefox, Opera, Chromium, or Mozilla.

Users enter a Uniform Resource Locator (URL) to point to a Web server by means of its Fully Qualified Domain Name (FQDN) and a path to the required resource. For example, to view the home page of the Ubuntu Web site a user will enter only the FQDN:

    www.ubuntu.com

To view the community sub-page, a user will enter the FQDN followed by a path:

    www.ubuntu.com/community

Il protocollo più utilizzato per il trasferimento delle pagine web è l'HTTP (Hyper Text Transfer Protocol). Sono anche supportati protocolli come HTTPS (Hyper Text Transfer Protocol over Secure Sockets Layer) e FTP (File Transfer Protocol), un protocollo per caricare e scaricare file dalla rete.

I server web Apache vengono comunemente usati in combinazione con il motore di database MySQL, il linguaggio di script per la pre-elaborazione dell'ipertesto PHP (Pre-processor Hyper Text) e altri noti linguaggi di script come Python e Perl. Questa configurazione viene denominata LAMP (Linux, Apache, MYSQL e Perl/Phyton/PHP) e costituisce una piattaforma robusta e potente per lo sviluppo e l'installazione di applicazioni basate sul web.

- Installazione
- Configurazione
- Configurazione HTTPS
- Sharing Write Permission
- Riferimenti

## Installazione

Il server web Apache2 è disponibile in Ubuntu 10.04. Per installare Apache2:

- Al prompt di un terminale, eseguire il seguente comando:

      sudo apt-get install apache2

## Configurazione

La configurazione di Apache2 avviene scrivendo delle direttive in semplici file di testo. Queste direttive sono suddivise tra i seguenti file e directory:

- apache2.conf: il principale file di configurazione di Apache2. Contiene impostazioni globali per Apache2.

- conf.d: contiene file di configurazione che si applicano globalmente ad Apache2. Altri pacchetti che usano Apache2 per fornire contenuti possono aggiungere file o collegamenti simbolici in questa directory.

- envvars: file dove vengono impostate le variabili d'ambiente di Apache2.

- httpd.conf: historically the main Apache2 configuration file, named after the httpd daemon. Now the file is typically empty, as most configuration options have been moved to the below referenced directories. The file can be used for user specific configuration options that globally effect Apache2.

- mods-available: questa directory contiene file di configurazione per caricare e configurare moduli. Non tutti i moduli hanno file di configurazione specifici.

- mods-enabled: contiene collegamenti simbolici ai file in /etc/apache2/mods-available. Quando viene creato un collegamento simbolico a un modulo di configurazione, viene abilitato al successivo riavvio di apache2.

- ports.conf: contiene le direttive che determinano su quali porte TCP Apache2 sta in ascolto.

- sites-available: questa directory contiene i file di configurazione per i Virtual Hosts di Apache2. Questi consentono di configurare Apache2 affinché venga utilizzato per siti multipli con configurazioni separate.

- sites-enabled: come mods-enabled, sites-enabled contiene collegamenti simbolici alla directory /etc/apache2/sites-available. Quando viene creato un collegamento simbolico di un file di configurazione nella directory sites-available, il sito configurato sarà attivo al riavvio di Apache2.

Altri file di configurazione possono essere aggiunti attraverso la direttiva Include e caratteri speciali possono essere usati per aggiungere molti altri file di configurazione. Una qualsiasi direttiva può essere posizionata in uno qualsiasi di questi file di configurazione. Modifiche ai file principali di configurazione vengono riconosciute solo con un riavvio di Apache2.

The server also reads a file containing mime document types; the filename is set by the TypesConfig directive, typically via /etc/apache2/mods-available/mime.conf, which might also include additions and overrides, and is /etc/mime.types by default.

### Impostazioni di base

Questa sezione descrive i parametri di configurazione fondamentali del server Apache2. Per maggiori informazioni, consultare la documentazione di Apache2.

- Apache2 è dotato di una configurazione predefinita adatta agli host virtuali: è configurato con un singolo host virtuale (attraverso l'uso della direttiva VirtualHost) che può essere modificato oppure usato così com'è nel caso si disponga di un solo sito web oppure usato come modello per aggiungere altri host virtuali. Se lasciato così, l'host virtuale predefinito verrà usato come sito predefinito o come il sito che gli utenti vedranno se l'URL inserito non corrisponde alla direttiva ServerName in uno qualsiasi dei file personalizzati. Per modificare l'host virtuale, modificare il file /etc/apache2/sites-available/default.

  Le direttive impostate per un host virtuale si applicano solamente a quel particolare host. Se una direttiva è impostata all'interno del server e non è definita nelle impostazioni dell'host virtuale, vengono utilizzate le impostazioni predefinite. Per esempio, è possibile impostare un indirizzo email per il webmaster e non definirne alcuno per per gli host virtuali.

  Per configurare un nuovo host virtuale o un nuovo sito, copiare quel file nella stessa directory con un nome a scelta. Per esempio:

      sudo cp /etc/apache2/sites-available/default /etc/apache2/sites-available/mionuovosito

  Modificare il file per configurare il nuovo sito usando alcune delle direttive descritte di seguito.

- La direttiva ServerAdmin specifica a quale indirizzo email il sistema deve indirizzare la posta destinata agli amministratori. Il valore predefinito è «webmaster@localhost». Quest’impostazione deve essere modificata con l’indirizzo che è stato assegnato all’utente (nel caso sia l’amministratore). Se il sito presenta dei problemi, Apache2 mostrerà un messaggio di errore indicante l'indirizzo a cui deve essere segnalato il problema. Questa direttiva è presente nel file /etc/apache2/sites-available del proprio sito.

- La direttiva Listen specifica la porta, e opzionalmente l'indirizzo IP, su cui Apache2 dovrebbe essere in ascolto. Se l'indirizzo IP non è specificato, Apache2 ascolta tutti gli indirizzi IP assegnati alla macchina. Il valore predefinito per la direttiva Listen è 80. Modificare questo valore, in 127.0.0.1:80 per fare in modo che Apache2 ascolti solo l'interfaccia di loopback e non sia disponibile verso internet, in 81 per modificare la porta di ascolto o lasciare il valore predefinito per il normale funzionamento. Questa direttiva può essere trovata e modifica in un file specifico: /etc/apache2/ports.conf

- La direttiva ServerName è opzionale e specifica il FQDN a cui il proprio sito risponde. L'host virtuale predefinito non ha la direttiva ServerName impostata, cosicché risponderà a tutte le richieste che non corrispondono alla direttiva ServerName in un altro host virtuale. Se si è i proprietari del dominio "ubunturocks.com" e si vuole ospitare tale dominio su un server Ubuntu, il valore della direttiva ServerName nel file di configurazione dell'host virtuale dovrebbe essere "ubunturocks.com". Aggiungere quindi questa direttiva al nuovo file di configurazione creato precedentemente (/etc/apache2/sites-available/mionuovosito).

  Potrebbe essere necessario che il proprio sito risponda anche alle richieste per "www.ubunturocks.com", dato che molti utenti ritengono corretto inserire il prefisso "www". Per ottenere questo, usare la direttiva ServerAlias: è possibile usare anche caratteri speciali con la direttiva ServerAlias.

  Per esempio, la seguente configurazione farà in modo che il proprio sito risponda a qualsiasi richiesta il cui dominio termina con .ubunturocks.com.

      ServerAlias *.ubunturocks.com

- The DocumentRoot directive specifies where Apache2 should look for the files that make up the site. The default value is /var/www, as specified in /etc/apache2/sites-available/default. If desired, change this value in your site's virtual host file, and remember to create that directory if necessary!

Abilitare il nuovo VirtualHost utilizzando l'utilità a2ensite e riavviare Apache2:

    sudo a2ensite mionuovosito
    sudo service apache2 restart

Assicurarsi di sostituire mionuovosito con una nome più descrittivo per il VirtualHost. Un metodo molto utilizzato consiste nel definire il nome del file secondo la direttiva ServerName dell'host virtuale.

Allo stesso modo, usare l'utilità a2dissite per disabilitare i siti. Questo può rivelarsi utile per diagnosticare problemi di configurazione con molteplici host virtuali:

    sudo a2dissite mionuovosito
    sudo service apache2 restart

### Impostazioni predefinite

Questa sezione si occupa delle impostazioni predefinite del server Apache2. Per esempio, se viene aggiunto un host virtuale, le impostazioni modificate dell'host virtuale hanno precedenza rispetto quelle dell'host. Per una direttiva non definita, viene utilizzato il valore predefinito.

- DirectoryIndex è la pagina predefinita proposta dal server alle richieste dell'indice di una directory, specificate attraverso l'uso di una barra (/) come suffisso al nome della directory.

  For example, when a user requests the page http://www.example.com/this_directory/, he or she will get either the DirectoryIndex page if it exists, a server-generated directory list if it does not and the Indexes option is specified, or a Permission Denied page if neither is true. The server will try to find one of the files listed in the DirectoryIndex directive and will return the first one it finds. If it does not find any of these files and if Options Indexes is set for that directory, the server will generate and return a list, in HTML format, of the subdirectories and files in the directory. The default value, found in /etc/apache2/mods-available/dir.conf is "index.html index.cgi index.pl index.php index.xhtml index.htm". Thus, if Apache2 finds a file in a requested directory matching any of these names, the first will be displayed.

- The ErrorDocument directive allows you to specify a file for Apache2 to use for specific error events. For example, if a user requests a resource that does not exist, a 404 error will occur. By default, Apache2 will simply return a HTTP 404 Return code. Read /etc/apache2/conf.d/localized-error-pages for detailed instructions for using ErrorDocument, including locations of example files.

- By default, the server writes the transfer log to the file /var/log/apache2/access.log. You can change this on a per-site basis in your virtual host configuration files with the CustomLog directive, or omit it to accept the default, specified in /etc/apache2/conf.d/other-vhosts-access-log. You may also specify the file to which errors are logged, via the ErrorLog directive, whose default is /var/log/apache2/error.log. These are kept separate from the transfer logs to aid in troubleshooting problems with your Apache2 server. You may also specify the LogLevel (the default value is "warn") and the LogFormat (see /etc/apache2/apache2.conf for the default value).

- Alcune opzioni vengono specificate per directory piuttosto che per server, come la direttiva Options. Una stanza "Directory" è racchiusa tra tag in stile XML:

      <Directory /var/www/mionuovosito>
      ...
      </Directory>

  La direttiva Options all'interno della stanza "Directory" accetta uno o più dei seguenti valori (tra gli altri) separati da spazi:

  - ExecCGI: consente l'esecuzione di script CGI. Questi script non vengono eseguiti se l'opzione non è selezionata.

    La maggior parte dei file non dovrebbe venir eseguita come script CGI, potrebbe essere molto pericoloso. Gli script CGI dovrebbero essere mantenuti in una directory separata, al di fuori della propria DocumentRoot e solo questa directory dovrebbe avere l'opzione ExecCGI impostata. Questo è il comportamento predefinito in Ubuntu e la posizione per gli script CGI è /usr/lib/cgi-bin.

  - Includes - Allow server-side includes. Server-side includes allow an HTML file to include other files. See Apache SSI documentation (Ubuntu community) for more information.

  - IncludesNOEXEC: consente inclusioni lato server, ma disabilita i comandi #exec e #include negli script CGI.

  - Indexes: visualizza un elenco formattato dei contenuti della directory se non esiste alcun DirectoryIndex (come index.html) nella directory richiesta.

    Per motivi di sicurezza, quest'opzione non dovrebbe essere impostata e soprattutto non su DocumentRoot. Abilitare questa opzione con molta cautela solo su alcune directory e nel caso in cui si voglia visualizzare l'intero contenuto della directory.

  - Multiview: supporta visualizzazioni multiple in base al contenuto, quest'opzione è disabilitata in modo predefinito per ragioni di sicurezza. Per maggiori informazioni, consultare la documentazione di Apache2.

  - SymLinksIfOwnerMatch: segue i collegamenti simbolici solamente se il file di arrivo o la directory hanno gli stessi proprietari del collegamento.

### Impostazioni di httpd

Questa sezione espone alcune delle configurazioni di base del demone httpd.

LockFile: la direttiva LockFile imposta il percorso al file di lock utilizzato quando il server viene compilato con USE_FCNTL_SERIALIZED_ACCEPT o USE_FLOCK_SERIALIZED_ACCEPT. Deve essere conservato nel disco locale. Questo valore dovrebbe essere lasciato invariato a meno che la directory di log non sia localizzata su una condivisione NFS. In questo caso, il valore dovrebbe essere modificato con una posizione sul disco locale e una directory accessibile solamente dall'utente root.

PidFile: la direttiva PidFile imposta il file in cui il server registra il proprio «pid». Questo file dovrebbe essere leggibile solamente dall'utente root. Nella maggior parte dei casi può essere lasciata invariata.

User - The User directive sets the userid used by the server to answer requests. This setting determines the server's access. Any files inaccessible to this user will also be inaccessible to your website's visitors. The default value for User is "www-data".

A meno che non sia estremamente necessario, non impostare mai la direttiva «User» a root. Utilizzare root con «User» può creare una falla nella sicurezza del server Web.

Group - The Group directive is similar to the User directive. Group sets the group under which the server will answer requests. The default group is also "www-data".

### Moduli di Apache2

Apache2 è un server modulare: solo le funzionalità basilari sono incluse nel server principale. È possibile estendere le funzionalità del server attraverso dei moduli che vengono caricati all'interno di Apache2. Un piccolo insieme di moduli è incluso nel server durante la compilazione: se il server è compilato per caricare i moduli dinamicamente, gli stessi moduli possono essere compilati separatamente e aggiungi quando necessario utilizzando la direttiva LoadModule; altrimenti è necessario ricompilare Apache2 per aggiungere o rimuovere i moduli.

La versione di Ubuntu consente il caricamento dinamico dei moduli. Le direttive di configurazione possono essere incluse in base alla presenza di un particolare modulo racchiudendole in un blocco tipo: <IfModulo> block.

È quindi possibile installare moduli aggiuntivi di Apache2 e usarli con il server web. Per esempio, per installare il modulo MySQL Authentication, in un terminale digitare quanto segue:

    sudo apt-get install libapache2-mod-auth-mysql

Per altri moduli, consultare la directory /etc/apache2/mods-available.

Usare l'utilità a2enmod per abilitare un modulo:

    sudo a2enmod auth_mysql
    sudo service apache2 restart

Allo stesso modo, a2dismod disabiliterà un modulo:

    sudo a2dismod auth_mysql
    sudo service apache2 restart

## Configurazione HTTPS

Il modulo mod_ssl aggiunge un'importante caratteristica al server Apache2, l'abilità di cifrare le comunicazioni. In questo modo, quando il browser utilizza la cifratura SSL per le comunicazioni, il prefisso «https://» verrà inserito nell'URL (Uniform Resource Locator) nella barra degli indirizzi.

Il modulo mod_ssl è disponibile nel pacchetto apache2-common. Per abilitare il modulo mod_ssl, eseguire il seguente comando in un terminale:

    sudo a2enmod ssl

Esiste un file di configurazione HTTPS predefinito in /etc/apache2/sites-available/default-ssl. Affinché Apache2 possa fornire connessioni HTTPS, sono necessari un certificato e una chiave. La configurazione HTTPS predefinita utilizza un certificato e una chiave generati attraverso ssl-cert, utili in fase di test, ma da sostituire con con una versione specifica per il sito o il server. Per maggiori informazioni su come generare una chiave e su come procurarsi un certificato, consultare Certificati

Per configurare l'HTTPS per Apache2, digitare quanto segue:

    sudo a2ensite default-ssl

Le directory /etc/ssl/certs e /etc/ssl/private sono le posizioni predefinite. Se si installa il certificato e la chiave in un'altra directory assicurarsi di modificare SSLCertificateFile e SSLCertificateKeyFile appropriatamente.

Con l'HTTPS configurato, riavviare il servizio per abilitare le nuove impostazioni:

    sudo service apache2 restart

In base a come è stato ottenuto il certificato, potrebbe essere necessario inserire una passphrase quando viene avviato Apache2.

È possibile accedere alle pagine del server sicuro digitando «https://nome_host/url/» nel barra degli indirizzi del proprio browser.

## Sharing Write Permission

For more than one user to be able to write to the same directory it will be necessary to grant write permission to a group they share in common. The following example grants shared write permission to /var/www to the group "webmasters".

    sudo chgrp -R webmasters /var/www
    sudo find /var/www -type d -exec chmod g=rwxs "{}" \;
    sudo find /var/www -type f -exec chmod g=rws  "{}" \;

If access must be granted to more than one group per directory, enable Access Control Lists (ACLs).

## Riferimenti

- La documentazione di Apache2 contiene informazioni dettagliate riguardo le direttive di configurazione di Apache2. Inoltre, per la documentazione ufficiale di Apache2, consultare il pacchetto apache2-doc.

- Per maggiori informazioni riguardo SSL, consultare la documentazione di Mod SSL.

- Il libro Apache Cookbook di O'Reilly è un'ottima risorsa per informazioni su specifiche configurazioni di Apache2.

- Per domande relative alla versione di Ubuntu di Apache2, chiedere nel canale IRC #ubuntu-server sul server freenode.net.

- Una buona risorsa riguardo PHP e MySQL può essere trovata nella documentazione online.

Indietro | Avanti