APACHE - SERVER HTTP

(pubblicato il 15 ottobre 2006)

Server Apache 2.2.3

Un altro programma servente HTTPD presente sia in ambiente Linux che Windows è rappresentato da Apache HTTP Server (scaricabile dal sito www.apache.org)

Installazione del server HTTPD Apache

Per installarlo occorre fare doppio click sull'icona:

e seguire i passaggi qui descritti

Cliccare sul pulsante "Next" sulla prima videata Accettare i termini  del contratto di licenza
click ancora sul pulsante "Next" nella videata successiva Digitare l'IP del proprio PC (ottenibile con il comando dos IPCONFIG) e una mail di fantasia
Lasciare l'impostazione "Typical" e poi click su "Next" Cliccare su "Next" senza modificare la cartella di installazione (ServerRoot)
Click su "Install" Attendere il completamento del processo di installazione
Cliccare sul pulsante "Finish" per concludere l'installazione Terminata l'installazione nella "barra delle applicazioni" appare l'icona del servizio  Apache - Utilizzando il tasto destro (sopra l'icona!)  richiamare il menu contestuale
Utilizzando il menu "Open Services" apriamo l'elenco dei servizi attivi di windows - Si noti la riga relativa al processo "Apache2.2"
Utilizzando il menu "Open Apache Monitor" si apre il pannello di gestione di Apache - I pulsanti "Stop", "Start" e "Restart" consentono di avviare/arrestare/riavviare il servizio HTTPD - Con il pulsante "Connect" posso gestire il servizio "Apache" installato su un altro computer

Verifica del corretto funzionamento del server HTTPD Apache

Per verificare che tutto funzioni correttamente mi basta aprire una finestra di Internet Explorer e digitare l'indirizzo http://127.0.0.1 (oppure l'indirizzo IP del vostro computer). Deve apparire la seguente pagina:

Parametri di configurazione relativi al server APACHE

Il server Apache ha come file di configurazione il file httpd.conf (generalmente in C:\Programmi\Apache Group\Apache2\conf) - Si tratta di un file di testo editabile mediante il blocco note. La modifica di questo file può essere effettuata utilizzando il menu Avvio, in corrispondenza del menu adoperato per avviare il programma Apache. (vedasi figura sottostante). Affinchè le modifiche apportate vengano recepite dal server httpd è necessario fare il restart del servizio (bottone apposito sull'Apache Monitor)

Tutte le righe che cominciano con # sono viste da Apache come dei commenti e pertanto verranno ignorate. All'interno di questo file si evidenziano le seguenti sezioni:

indirizzo IP utilizzati per il servizio httpd - SERVER NAME

#
#
ServerName allows you to set a host name which is sent back to clients for
#
your server if it's different than the one the program would get (i.e., use
# "www"
instead of the host's real name).
#
# Note:
You cannot just invent host names and hope they work. The name you
#
define here must be a valid DNS name for your host. If you don't understand
#
this, ask your network administrator.
#
If your host doesn't have a registered DNS name, enter its IP address here.
#
You will have to access it by its address (e.g., http://123.45.67.89/)
#
anyway, and this will make redirections work in a sensible way.
#
# 127.0.0.1
is the TCP/IP local loop-back address, often named localhost. Your
#
machine always knows itself by this address. If you use Apache strictly for
#
local testing and development, you may use 127.0.0.1 as the server name.
#
ServerName 192.168.1.32

Per vedere l'indirizzo IP del server httpd basta richiamare la finestra dos (vedi figura sottostante)

e digitare ipconfig

DEFINIZIONE DELLA PORTA - LISTEN

#
# Listen: Allows you to bind Apache to specific IP addresses and/or
# ports, instead of the default. See also the <VirtualHost>
# directive.
#
# Change this to Listen on specific IP addresses as shown below to
# prevent Apache from glomming onto all bound IP addresses (0.0.0.0)
#
#Listen 12.34.56.78:80
Listen
8081

Se la porta definita, come si vede qui sopra, è la 8081 allora per accedere alla home page del mio server WEB devo digitare http://127.0.0.1:8081/ oppure http://192.168.1.32:8081/ (dove 192.168.1.32 rappresenta l'indirizzo IP del computer dove "gira" il server httpd)

Cartella dei documenti erogati - documentroot

La cartella contenente tutti i documenti erogati dal server httpd è definita mediante il parametro documentroot

Supponiamo di voler utilizzare come cartella dei documenti erogati la directory c:\SitoApache. Realizziamo quindi una struttura come indicato in figura:

Creiamo ciascun file html inserendo il seguente testo (oppure clicca qui per scaricare la cartella)

<html><body>
<h1>It works! - Sono il file "Nome file"</h1>
</body></html>

Affinchè Apache utilizzi la nostra cartella è necessario modificare il file di configurazione come segue (vedasi parti evidenziate in verde):

#
# DocumentRoot: The directory out of which you will serve your
# documents. By default, all requests are taken from this directory, but
# symbolic links and aliases may be used to point to other locations.
#
DocumentRoot "
C:/SitoApache"

#
# Each directory to which Apache has access can be configured with respect
# to which services and features are allowed and/or disabled in that
# directory (and its subdirectories).
#
# First, we configure the "default" to be a very restrictive set of
# features.
#
<Directory />
   Options FollowSymLinks
   AllowOverride None
   Order deny,allow
   Deny from all
   Satisfy all
</Directory>

#
# Note that from this point forward you must specifically allow
# particular features to be enabled - so if something's not working as
# you might expect, make sure that you have specifically enabled it
# below.
#

#
# This should be changed to whatever you set DocumentRoot to.
#
<Directory "
C:/SitoApache">
#
# Possible values for the Options directive are "None", "All",
# or any combination of:
# Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews
#
# Note that "MultiViews" must be named *explicitly* --- "Options All"
# doesn't give it to you.
#
# The Options directive is both complicated and important. Please see
# http://httpd.apache.org/docs/2.2/mod/core.html#options
# for more information.
#
Options Indexes FollowSymLinks

#
# AllowOverride controls what directives may be placed in .htaccess files.
# It can be "All", "None", or any combination of the keywords:
# Options FileInfo AuthConfig Limit
#
AllowOverride None

#
# Controls who can get stuff from this server.
#
Order allow,deny
Allow from all

</Directory>
 

Documento predefinito - DirectoryIndex

Sempre nel file di configurazione è possibile inserire il nome del documento predefinito ovvero il documento html che verrà caricato quando, sulla barra degli indirizzi, digito il percorso di una cartella (presente sul mio web server) senza fornire il nome di uno specifico file. Ad esempio modificando httpd.conf in questo modo:

#
# DirectoryIndex: sets the file that Apache will serve if a directory
# is requested.
#
<IfModule dir_module>
DirectoryIndex
caio.html, index.html
</IfModule>

otteniamo che digitando http://192.168.1.32/ oppure http://192.168.1.32/caio.html venga visualizzata sempre la  stessa pagina

Lo stesso vale per tutte le sottocartelle del nostro web server:

Quando nella cartella richiesta non esiste un file corrispondente ad uno dei nomi indicati nel parametro directoryindex allora sul browser verrà visualizzata questa videata:

La visualizzazione dell'elenco delle directory non è una buona soluzione e va pertanto evitata. Basta apportare al file httpd.conf la seguente modifica (ho eliminato la dicitura indexes)
#
# This should be changed to whatever you set DocumentRoot to.
#
<Directory "C:/SitoApache">
   Options Indexes FollowSymLinks
   AllowOverride None
   Order allow,deny
   Allow from all
</Directory>

Dopo la modifica appare il seguente messaggio

Pagine di errore personalizzate - ERRORDOCUMENT

E possibile, come in IIS, personalizzare anche i messaggi di errore

#
# Customizable error responses come in three flavors:
# 1) plain text 2) local redirects 3) external redirects
#
# Some examples:
#ErrorDocument 500 "The server made a boo boo."
#ErrorDocument 404 /missing.html
#ErrorDocument 404 "/cgi-bin/missing_handler.pl"
#ErrorDocument 402 http:///subscription_info.html
#

ErrorDocument 404 "Utente! Sappi che hai digitato una pagina inesistente!"

Con questa impostazione se digito l'indirizzo di una pagina inesistente ottengo:

Per vedere gli errori personalizzati impostati sul server è necessario disabilitare (figura sottostante) la gestione dei messaggi di errore di internet explorer.

Protezione delle cartelle - con modifica dell'httpd.conf

Per proteggere una cartella (ad esempio c:\sitoApache\riservata) del vostro sito con utente/password occorre aggiungere le seguenti righe al file httpd.conf

<Directory "C:/SitoApache/riservata">
    AuthType Basic
    AuthName "
Digita utente e password"
    AuthUserFile
c:/password.file
    Require valid-user
</Directory>

Inoltre occorre creare un file contenente l'elenco degli utenti con le relative password. Il nome del file in linux è solitamente .htpasswd ma poichè windows non accetta nomi che iniziano con il punto dobbiamo rinominarlo. Nel nostro esempio abbiamo utilizzato il nome password.file. Per ragioni di sicurezza è buona norma salvare il file delle password in una cartella esterna alla documentroot

Per generare il file occorre utilizzare un'utility dos  htpasswd (fornita con apache) presente nella cartella: C:\Programmi\Apache Software Foundation\Apache2.2\bin. Qui sotto è presentata la sequenza di comandi necessari per generare due utenti: sechi (password marco) e rossi (password anna).

Il file delle password va registrato nella stessa cartella indicata nel parametro AuthUserFile del file httpd.conf.

Se adesso proviamo ad accedere ad un file contenuto nella cartella protetta otteniamo:

Se Inseriamo un utente e una password non corretta verrà dato il messaggio di errore:

Protezione delle cartelle - con file .htaccess inserito nella cartella da proteggere (valido per linux)

Si poteva ottenere il medesimo risultato utilizzando questo schema:

Modificare il file httpd.conf in corrispondenza dei punti evidenziati in verde (questa modifica è fatta dal nostro provider)

#
# This should be changed to whatever you set DocumentRoot to.
#
AccessFileName HtAccess
<Directory "C:/SitoApache">
#
# Possible values for the Options directive are "None", "All",
# or any combination of:
# Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews
#
# Note that "MultiViews" must be named *explicitly* --- "Options All"
# doesn't give it to you.
#
# The Options directive is both complicated and important. Please see
# http://httpd.apache.org/docs/2.2/mod/core.html#options
# for more information.
#
Options Indexes FollowSymLinks

#
# AllowOverride controls what directives may be placed in .htaccess files.
# It can be "All", "None", or any combination of the keywords:
# Options FileInfo AuthConfig Limit
#
AllowOverride
All

#
# Controls who can get stuff from this server.
#
Order allow,deny
Allow from all

</Directory>

Aggiungere nella cartella da proteggere il file htaccess (è stato rinominato con l'istruzione AccessFileName HtAccess per vincoli sulle regole di naming dell'ambiente windows altrimenti il suo nome di default è .htaccess) contenente queste istruzioni

AuthType Basic
AuthName "
Digita utente e password"
AuthUserFile
c:/password.file
Require valid-user

Questo metodo è usato quando non si ha accesso al file httpd.conf. E' necessario comunque che il nostro provider di spazio web abbia inserito nel file httpd.conf le due istruzioni: AllowOverride All e AccessFileName HtAccess