• Apache in locale

    Chi ha l'esigenza di installare un server web Apache in locale, spesso lo fa senza conoscere il funzionamento del più famoso server del mondo. Esistono diversi pacchetti preconfigurati e egregiamente funzionanti, fra i quali spiccano XAMPP per Windows, XAMPP per Linux e MAMP per Mac. In questo articolo vediamo come installare manualmente Apache per Windows (Linux e Mac possono funzionare in modo analogo con piccole modifiche).


    Prima di tutto ci dobbiamo scaricare il pacchetto XAMPP zippato ed estrarlo in una cartella temporanea. Se abbiamo bisogno di PHP 5.2 (probabilissimo), dobbiamo usare uno dei pacchetti vecchi. Consigliamo il pacchetto versione 1.7.1 che è l'ultimo della serie con PHP 5.2.




    Estratto i file, bisogna eliminare tutto quel che non ci interessa. Ad esempio non dobbiamo installare un FTP server o Mail server e se li volessimo, allora è meglio usare la configurazione specifica e non quella preconfigurata:




    La cartella ripulita si presenta così:


    A questo punto saliamo di un livello e spostiamo la cartella xampp nella radice del disco, ad esempio c:\xampp. E' particolarmente importante di non usare cartelle che contengono spazi e con soli caratteri in minuscolo, e non va bene usare la cartella Programmi o simili. I problemi derivanti dalla nominazione errata sono tanti e sottili, perfino in Windows.

    Apriamo il file \xampp\apache\conf\httpd.conf e cancelliamo tutto il contenuto. Poi inseriamo questo codice:

    Codice HTML: [Visualizza]
    ServerRoot /xampp/apache
    Listen 80
    
    LoadModule actions_module modules/mod_actions.so
    LoadModule auth_basic_module modules/mod_auth_basic.so
    LoadModule authn_default_module modules/mod_authn_default.so
    LoadModule authn_file_module modules/mod_authn_file.so
    LoadModule authz_default_module modules/mod_authz_default.so
    LoadModule authz_groupfile_module modules/mod_authz_groupfile.so
    LoadModule authz_host_module modules/mod_authz_host.so
    LoadModule authz_user_module modules/mod_authz_user.so
    LoadModule dir_module modules/mod_dir.so
    LoadModule env_module modules/mod_env.so
    LoadModule include_module modules/mod_include.so
    LoadModule log_config_module modules/mod_log_config.so
    LoadModule mime_module modules/mod_mime.so
    LoadModule negotiation_module modules/mod_negotiation.so
    LoadModule rewrite_module modules/mod_rewrite.so
    LoadModule setenvif_module modules/mod_setenvif.so
    ServerAdmin email@dominio.tld
    ServerName *:80
    DocumentRoot /vhosts
    <Directory />
        Options FollowSymLinks
        AllowOverride None
        Order deny,allow
        Deny from all
    </Directory>
    
    <Directory /vhosts>
        Options Indexes FollowSymLinks Includes
        AllowOverride All
        Order allow,deny
        Allow from all
    </Directory>
    
    <IfModule dir_module>
        DirectoryIndex index.html index.htm index.php
    </IfModule>
    
    <FilesMatch "^\.ht">
        Order allow,deny
        Deny from all
    </FilesMatch>
    
    ErrorLog logs/error.log
    LogLevel warn
    
    <IfModule log_config_module>
        BufferedLogs On
        LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
        LogFormat "%h %l %u %t \"%r\" %>s %b" common
        <IfModule logio_module>
            LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio
        </IfModule>
    </IfModule>
    
    DefaultType text/plain
    
    <IfModule mime_module>
        TypesConfig conf/mime.types
        AddType application/x-compress .Z
        AddType application/x-gzip .gz .tgz
    </IfModule>
    
    EnableMMAP off
    EnableSendfile off
    
    # ==============================================================================
    LoadModule php5_module /xampp/apache/bin/php5apache2_2.dll
    <IfModule mime_module>
        AddType application/x-httpd-php .php
    </IfModule>
    
    <IfModule alias_module>
        Alias /phpmyadmin /vhosts/phpmyadmin/
    </IfModule>
    
    <IfModule mpm_winnt_module>
        ThreadsPerChild       64
        MaxRequestsPerChild   0
    </IfModule>
    
    Include conf/extra/httpd-multilang-errordoc.conf
    Include conf/extra/httpd-languages.conf
    Include conf/extra/httpd-vhosts.conf
    Include conf/extra/httpd-default.conf
    Salviamo. Questo file dunque contiene una serie di informazioni che preconfigura il server web in modo diverso dal pacchetto XAMPP e che è mirato alla compatibilità del server web. Lo scopo è di avvicinarsi il più possibile al server in produzione perché poi le differenze sono soltanto formali (ad esempio, firewall e IP).

    Ora dobbiamo modificare un altro file, \xampp\apache\conf\extra\httpd-vhosts.conf. Anche qui cancelliamo tutto e scriviamo:

    Codice HTML: [Visualizza]
    # Permetti server virtuali
    NameVirtualHost *:80
    
    # Dominio principale ===========================================================
    Include conf/vhosts/local.com.conf
    
    # Altri domini -----------------------------------------------------------------
    #Include conf/vhosts/dominio.tld.conf
    Salviamo. Come vediamo qui, includiamo un altro file nella configurazione, conf/vhosts/local.com.conf, che ci serve per impostare un sito predefinito e locale per fare sperimenti veloci.

    Analogamente possiamo aggiungere altri file con simili configurazioni. Se questi file mancano, il server non si avvia. Se la sintassi è errata, il risultato è imprevedibile. Quindi occhio!

    Ora creiamo la cartella \xampp\apache\conf\vhosts e un nuovo file, \xampp\apache\conf\vhosts\local.com.conf. Questo file contiene la configurazione predefinita:

    Codice HTML: [Visualizza]
    <VirtualHost *:80>
        ServerAdmin webmaster@local.com
        ServerName local.com
        ServerAlias www.local.com
        CustomLog /vhosts/local.com/weblogs/access.log combined
        ErrorLog /vhosts/local.com/weblogs/error.log
        DocumentRoot /vhosts/local.com/httpdocs
        <Directory /vhosts/local.com/httpdocs>
            Options FollowSymLinks
            AllowOverride All
            Order allow,deny
            Allow from all
        </Directory>
    </VirtualHost>
    Per farlo funzionare, dobbiamo creare anche la struttura delle cartelle corrispondente:


    Chiudiamo tutto e proviamo a avviare il server Apache. Per questo apriamo una finestra console (Start - Esegui: cmd). Scriviamo:


    Quando ci risponde con: Syntax OK, allora abbiamo lavorato bene. Altrimenti dobbiamo ripetere. Con il codice copia incolla e la struttura suggerita dovrebbe veramente funzionare in qualunque sistema. Qualora non lo facesse, qui si può chiedere assistenza

    Apache è veramente sensibile a tutte le sfumature e non bisogna pensare semplice, ma ultra semplice. Una virgola di troppo è spesso sorgente di grande disperazione! Quando invece parte, si dimostra dal suo lato migliore: affidabile, stabile, robusto.

    A questo punto installiamo Apache come servizio. Sempre nella finestra di prima, scriviamo:

    Codice: [Visualizza]
    httpd -k install
    Per avviare Apache come servizio, digitiamo:

    Codice: [Visualizza]
    net start apache2.2
    E vai!

    Ora dobbiamo aggiungere nel file hosts (C:\WINDOWS\system32\drivers\etc\hosts) la seguente riga:

    Codice: [Visualizza]
    127.0.0.1 www.local.com local.com
    E credetelo o no, ora funziona il sito local.com sulla vostra macchina, come se fosse sul web:

    Codice: [Visualizza]
    http://www.local.com/
    Commenti 5 Commenti
    1. L'avatar di Asterix_ita
      Asterix_ita -
      guida ben fatta normalmente installo i singoli pacchetti, ma leggendola mi ha incuriosito e l'ho voluta provare purtroppo ho rilevato un problema nel lancio della verifica sintassi

      Codice:
      C:\xampp\apache\bin>httpd.exe -t 
      Syntax error on line 22 of C:/xampp/apache/conf/httpd.conf: DocumentRoot must be a directory
      il test l'ho fatto su due pc uno con XP sp3 e un'altro con seven ed in entrambi i casi l'errore era il medesimo. la riga incriminata è la seguente: DocumentRoot /vhosts

      qualche idea?
    1. L'avatar di y2ksw
      y2ksw -
      Hai creato la cartella (c:\vhosts)?
    1. L'avatar di Asterix_ita
      Asterix_ita -
      Citazione Originariamente Scritto da y2ksw Visualizza Messaggio
      Hai creato la cartella (c:\vhosts)?
      Ciao

      ieri sera avevo creato la struttura su questo percorso \xampp\apache\conf\vhosts in quanto nelle righe precedenti avevi citato questa root.

      Ora ho provato a riportare la struttura nel c:\vhosts e l'errore permane.

      thanks
    1. L'avatar di y2ksw
      y2ksw -
      c:\xampp\apache\conf\vhosts va bene solo per le configurazioni dei siti che si trovano in c:\vhosts

      La struttura dei siti invece si trova in una cartella aggiuntiva: c:\vhosts
    1. L'avatar di y2ksw
      y2ksw -
      Se non funziona ancora, prova a mettere un cancelletto prima di DocumentRoot per commentarlo.