Difference between revisions of "Apache HTTP Server (Italiano)"

From ArchWiki
Jump to: navigation, search
(Moved to AUR.)
Line 11: Line 11:
 
[[tr:LAMP]]
 
[[tr:LAMP]]
 
[[zh-CN:LAMP]]
 
[[zh-CN:LAMP]]
 +
{{out_of_date | Questa pagina è in fase di revisione e potrebbe non essere aggiornata. Seguite per ora le istruzioni della versione inglese. | Talk:ArchWiki Translation Team (Italiano)#Pagine Marcate come "out of date" e "Traslateme"}}
 
[http://en.wikipedia.org/wiki/LAMP_%28software_bundle%29 LAMP] costituisce una combinazione comune di vari software utilizzati in molti server web: '''L'''inux, '''A'''pache, '''M'''ySQL, e '''P'''HP. Questo documento descrive i passi necessari per configurare un [http://httpd.apache.org Apache HTTP Server] su un sistema Arch Linux. Spiega inoltre come installare [[PHP]] e [[MySQL]] ed integrarli con il server Apache.
 
[http://en.wikipedia.org/wiki/LAMP_%28software_bundle%29 LAMP] costituisce una combinazione comune di vari software utilizzati in molti server web: '''L'''inux, '''A'''pache, '''M'''ySQL, e '''P'''HP. Questo documento descrive i passi necessari per configurare un [http://httpd.apache.org Apache HTTP Server] su un sistema Arch Linux. Spiega inoltre come installare [[PHP]] e [[MySQL]] ed integrarli con il server Apache.
  

Revision as of 17:18, 7 January 2013

Tango-view-refresh-red.pngThis article or section is out of date.Tango-view-refresh-red.png

Reason: Questa pagina è in fase di revisione e potrebbe non essere aggiornata. Seguite per ora le istruzioni della versione inglese. (Discuss in Talk:ArchWiki Translation Team (Italiano)#Pagine Marcate come "out of date" e "Traslateme")

LAMP costituisce una combinazione comune di vari software utilizzati in molti server web: Linux, Apache, MySQL, e PHP. Questo documento descrive i passi necessari per configurare un Apache HTTP Server su un sistema Arch Linux. Spiega inoltre come installare PHP e MySQL ed integrarli con il server Apache.

Avendo bisogno di solo un server web per sviluppo e test, Xampp potrebbe essere la scelta migliore, oltre che la più facile.

Installazione

# pacman -S apache php php-apache mysql

Questo documento presuppone che verranno installati Apache, PHP e MySQL insieme. Se lo si desidera tuttavia, è possibile installare Apache, PHP e MySQL separatamente e fare riferimento alle relative sezioni in seguito.

Note: Nuovi utente e gruppo di default: Invece del gruppo "nobody", apache viene eseguito ora come utente/gruppo "http". È preferibile modificare il file httpd.conf in base a questo cambiamento, anche se è possibile eseguire httpd comunque.

Configurazione

Apache

Per motivi di sicurezza, non appena Apache viene avviato dall'utente root (direttamente o tramite script di avvio) passa alla UID/GID specificata in /etc/httpd/conf/httpd.conf

  • Verificare l'esistenza degli utenti http, cercando http nell'output del seguente comando:
 # grep http /etc/passwd
  • Creare l'utente http in caso non esista già:
 # useradd -d /srv/http -r -s /bin/false -U http
Questo crea l'utente http con la home directory /srv/http/, come un account di sistema (-r), con una shell fasulla (-s /bin/false) e crea un gruppo con lo stesso nome (-U).
  • Aggiungere questa riga in /etc/hosts (se il file non esiste, crearlo):
 127.0.0.1 localhost.localdomain localhost
Se si preferisce un hostname differente, posizionarlo alla fine:
 127.0.0.1 localhost.localdomain localhost myhostname
  • Editare /etc/rc.conf: Se nel primo passo è stato messo un hostname, la variabile HOSTNAME deve avere lo stesso valore; altrimenti, usare "localhost":
 #
 # Networking
 #
 HOSTNAME="localhost"
  • Assicurarsi che l'hostname sia presente in /etc/hosts o apache non potrà essere avviato. In alternativa, è possibile editare /etc/httpd/conf/httpd.conf e commentare il modulo seguente:
 LoadModule unique_id_module        modules/mod_unique_id.so
  • Personalizzare ora la propria configurazione: cambiare per lo meno httpd.conf e extra/httpd-default.conf secondo le proprie esigenze. Per ragioni di sicurezza, sarebbe preferibile modificare ServerTokens Full a ServerTokens Prod e ServerSignature On a ServerSignature Off in extra/httpd-default.conf.
  • Per avviare il server HTTP lanciare da terminale  :
 # /etc/rc.d/httpd start
Apache ora dovrebbe essere attivo. Testarlo visitando http://localhost/ da un browser. Si dovrebbe vedere una semplice pagina di test di Apache. In caso di errore 403, decommentare le righe seguenti in /etc/httpd/conf/httpd.conf:
Include conf/extra/httpd-userdir.conf
  • Per avviare Apache automaticamente al boot, editare /etc/rc.conf e aggiungere il demone httpd:
 DAEMONS=(... httpd ...)


Cartelle utente

  • Se non si desidera che le cartelle dell'utente siano disponibili sul web (ad es. ~/public_html sulla macchina usata per l'accesso come http://localhost/~user/), commentare la seguente riga in /etc/httpd/conf/httpd.conf dal momento che sono attivate di default:
 Include conf/extra/httpd-userdir.conf
  • È necessario che le autorizzazioni della home directory siano impostate correttamente in modo che Apache possa collegarvisi. La home directory e ~/public_html/ devono essere eseguibili per gli altri ("resto del mondo"). Questo sembra essere accettabile:
 $ chmod o+x ~
 $ chmod o+x ~/public_html
  • Il modo più sicuro per condividere la propria cartella home con apache è quello di aggiungere http user nel gruppo al quale appartiene la cartella home. Per esempio, se la cartella home e le altre sotto-cartelle appartengono al gruppo piter, tutto quello che si deve fare è:
 $ usermod -aG piter http
  • Naturalmente bisogna assegnare i permessi di lettura ed esecuzione a ~/, ~/public_html, e tutte le altre sotto-cartelle in ~/public_html ai membri del gruppo (gruppo piter in questo caso). Provare qualcosa di simile (modificando i comandi secondo necessità):
 $ chmod g+xr-w /home/yourusername
 $ chmod -R g+xr-w /home/yourusername/public_html
Note: In questo modo non c'è bisogno di dare accesso alla propria cartella ad ogni singolo utente per dare accesso al http user. Solo l' http user ed altri potenziali utenti del gruppo piter avranno accesso alla propria cartella home.

E poi

 $ /etc/rc.d/httpd restart

per riavviare apache.

SSL

Creare certificato autofirmato (è possibile modificare le dimensioni della chiave e giorni di validità)

 # cd /etc/httpd/conf
 # openssl genrsa -des3 -out server.key 1024
 # openssl req -new -key server.key -out server.csr
 # cp server.key server.key.org
 # openssl rsa -in server.key.org -out server.key
 # openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt

In /etc/httpd/conf/httpd.conf decommentare la riga

 Include conf/extra/httpd-ssl.conf

Riavviare apache

 # /etc/rc.d/httpd restart

Host virtuali

Se si desidera più di un host, assicurarsi di avere

# Virtual hosts
Include conf/extra/httpd-vhosts.conf

in /etc/httpd/conf/httpd.conf.

In /etc/httpd/conf/extra/httpd-vhosts.conf impostare gli host virtuali secondo l'esempio:

NameVirtualHost *:80

#this first virtualhost enables: http://127.0.0.1, or: http://localhost, 
#to still go to /srv/http/*index.html(otherwise it will 404_error).
#the reason for this: once you tell httpd.conf to include extra/httpd-vhosts.conf, 
#ALL vhosts are handled in httpd-vhosts.conf(including the default one),
# E.G. the default virtualhost in httpd.conf is not used and must be included here, 
#otherwise, only domainname1.dom & domainname2.dom will be accessible
#from your web browser and NOT http://127.0.0.1, or: http://localhost, etc.
#

<VirtualHost *:80>
    DocumentRoot "/srv/http"
    ServerAdmin root@localhost
    ErrorLog "/var/log/httpd/127.0.0.1-error_log"
    CustomLog "/var/log/httpd/127.0.0.1-access_log" common
    <Directory /srv/http/>
		    DirectoryIndex index.htm index.html
		    AddHandler cgi-script .cgi .pl
		    Options ExecCGI Indexes FollowSymLinks MultiViews +Includes
		    AllowOverride None
		    Order allow,deny
		    allow from all
	</Directory>
</VirtualHost>


<VirtualHost *:80>
    ServerAdmin your@domainname1.dom
    DocumentRoot "/home/username/yoursites/domainname1.dom/www"
    ServerName domainname1.dom
    ServerAlias domainname1.dom
    <Directory /home/username/yoursites/domainname1.dom/www/>
		    DirectoryIndex index.htm index.html
		    AddHandler cgi-script .cgi .pl
		    Options ExecCGI Indexes FollowSymLinks MultiViews +Includes
		    AllowOverride None
		    Order allow,deny
		    allow from all
	</Directory>
</VirtualHost>

<VirtualHost *:80>
    ServerAdmin your@domainname2.dom
    DocumentRoot "/home/username/yoursites/domainname2.dom/www"
    ServerName domainname2.dom
    ServerAlias domainname2.dom
    <Directory /home/username/yoursites/domainname2.dom/www/>
		    DirectoryIndex index.htm index.html
		    AddHandler cgi-script .cgi .pl
		    Options ExecCGI Indexes FollowSymLinks MultiViews +Includes
		    AllowOverride None
		    Order allow,deny
		    allow from all
	</Directory>
</VirtualHost>

Aggiungere i nomi dei propri host virtuali al file /etc/hosts (NON è necessario se questi domini sono già vincolati, ma comunque non fa male):

127.0.0.1	domainname1.dom
127.0.0.1	domainname2.dom

Riavviare Apache:

sudo /etc/rc.d/httpd restart

Se si impostano gli host virtuali nella propria cartella utente, a volte possono interferire con le impostazioni delle "Userdir" di Apache. Per evitare problemi disabilitare le "Userdir" decommentandole:

# User home directories
#Include conf/extra/httpd-userdir.conf

Come già detto sopra, fare attenzione, dal momento che si dispone delle autorizzazioni appropriate:

sudo chmod 0775 /home/yourusername/

Se si dispone di una quantità enorme di host virtuali, sarebbe comodo poterli disabilitare e abilitare facilmente. Si consiglia quindi di creare un file di configurazione per ogni host virtuale e memorizzarli tutti in una cartella, ad es: /etc/httpd/conf/vhosts. Per prima cosa creare la cartella:

sudo mkdir /etc/httpd/conf/vhosts

Quindi inserire i singoli file di configurazione all'interno:

sudo nano /etc/httpd/conf/vhosts/domainname1.dom
sudo nano /etc/httpd/conf/vhosts/domainname2.dom
...

Come ultimo passo, includere le singole configurazioni a /etc/httpd/conf/httpd.conf:

#Enabled Vhosts:
Include conf/vhosts/domainname1.dom
#Include conf/vhosts/domainname1.dom

È possibile attivare e disattivare ogni singolo host virtuale commentandolo o decommentandolo.

Opzioni avanzate

Si potrebbe essere interessati a queste opzioni in /etc/httpd/conf/httpd.conf:

# Listen 80

Questa è la porta su cui Apache rimarrà in ascolto. Per l'accesso a Internet con un router, sarà necessario impostare correttamente la porta.

Se Apache è stato impostato per lo sviluppo locale è possibile che sia accessibile solo dal proprio computer. Modificare quindi questa riga:

# Listen 127.0.0.1:80

Questo è l'indirizzo email dell'amministratore che può essere trovato nelle pagine di errore:

# ServerAdmin sample@sample.com

Questa è la directory dove si dovrebbero mettere le proprie pagine web:

# DocumentRoot "/srv/http"

Modificarla se lo si desidera, ma non dimenticare di cambiare anche la

<Directory "/srv/http">

compatibilmente con le modifiche apportate a DocumentRoot, o probabilmente si riscontrerà l'errore 403 (mancanza di privilegi) quando si tenta di accedere al nuovo documento root. Non dimenticare di cambiare l'opzione "Deny" da tutte le righe, altrimenti si otterrà nuovamente l'errore 403.

# AllowOverride None

Questa direttiva nella sezione <Directory> è la causa per cui apache ignora completamente i file .htaccess. Se si intende utilizzare la modalità "rewrite" o altre impostazioni nei file .htaccess, è possibile consentire che le direttive dichiarate in quel file possano sovrascrivere la configurazione del server. Per maggiori informazioni fare riferimento a http://httpd.apache.org/docs/current/mod/core.html#allowoverride

Note: In caso di problemi con la configurazione si può fare in modo che apache controlli la configurazione con: apachectl configtest

PHP

  • Installare il pacchetto "php-apache" da extra con pacman.
  • Aggiungere questa riga a /etc/httpd/conf/httpd.conf:
Inserirla nella lista "LoadModule", dove si preferisca, ma dopo LoadModule dir_module modules/mod_dir.so:
 LoadModule php5_module modules/libphp5.so
Inserire la riga seguente alla fine della lista "Include":
 Include conf/extra/php5_module.conf
Assicurarsi che la riga che segue sia decommentata in httpd.conf nella sezione/(dopo la riga)<IfModule mime_module>:
 TypesConfig conf/mime.types
Decommentare la seguente riga in httpd.conf (opzionale):
 MIMEMagicFile conf/magic


  • Aggiungere questa riga in /etc/httpd/conf/mime.types:
 application/x-httpd-php		php


Note: Se non è visibile libphp5.so nella cartella dei moduli Apache (/etc/httpd/modules), si può aver dimenticato di installare il pacchetto php-apache.
  • Se il proprio DocumentRoot non è /srv/http, aggiungerlo a open_basedir in /etc/php/php.ini così:
 open_basedir=/srv/http/:/home/:/tmp/:/usr/share/pear/:/path/to/documentroot
  • Riavviare il servizio Apache per rendere effettive le modifiche:
 # /etc/rc.d/httpd restart
  • Creare il file test.php nella cartella Apache DocumentRoot (Ad es. /srv/http/ o ~/public_html) ed all'interno inserire:
 <?php phpinfo(); ?>
  • Assicurarsi di copiare questo file in ~/public_html se si è permessa tale configurazione.
Se l'istruzione PHP non viene eseguita (si visualizza: <html>...</html>), controllare di avere "Includes" alla riga "Options" per la root directory. Inoltre, verificare che TypesConfig conf/mime.types sia decommentato nella sezione <IfModule mime_module>; si può anche provare ad aggiungere quanto segue a <IfModule mime_module> in httpd.conf:
 AddHandler application/x-httpd-php .php

Opzioni avanzate

  • Aggiungere, se può risultare comodo, un gestore di file per. phtml in /etc/httpd/conf/extra/php5_module.conf:
 DirectoryIndex index.php index.phtml index.html
  • Se si desidera il modulo libGD, installare il pacchetto php-gd e decommentare la seguente riga in /etc/php/php.ini:
Note: php-gd richiede libpng, libjpeg, e freetype2
 ;extension=gd.so

a

 extension=gd.so
Prestare attenzione a quale estensione si vuole decommentare: spesso è presente un qualche commento esplicativo prima della riga stessa.


  • Se si desidera visualizzare gli errori di debug del codice php, modificare questa riga in /etc/php/php.ini:
 display_errors=Off

a

 display_errors=On
  • Se si desidera il modulo mcrypt, installare il pacchetto php-mcrypt e decommentare in /etc/php/php.ini:
 ;extension=mcrypt.so

a

 extension=mcrypt.so
Warning: In caso di questo tipo di errore:
[XXX Debug] PHP Notice: in file /index.php on line 86: date(): It is not safe to rely on the system'XXXX
[XXX Debug] PHP Notice: in file /index.php on line 86: getdate(): It is not safe to rely on the system's timezone settings.XXXX

modificare questa riga in /etc/php/php.ini

;date.timezone = 

a

date.timezone = Europe/Berlin
Note: Ulteriori informazioni riguardo Time Zone in PHP

riavviare httpd con

# /etc/rc.d/httpd restart

Utilizzare php5 con apache2-mpm-worker e mod_fcgid

Decommentare quanto segue in /etc/conf.d/apache:

HTTPD=/usr/sbin/httpd.worker

Decommentare quanto segue in /etc/httpd/conf/httpd.conf:

Include conf/extra/httpd-mpm.conf

Installare i pacchetti mod_fcgid e php-cgi:

# pacman -S mod_fcgid php-cgi

Creare /etc/httpd/conf/extra/php5_fcgid.conf ed aggiungerci il seguente contenuto:

# Required modules: fcgid_module

<IfModule fcgid_module>
	AddHandler php-fcgid .php
	AddType application/x-httpd-php .php
	Action php-fcgid /fcgid-bin/php-fcgid-wrapper
	ScriptAlias /fcgid-bin/ /srv/http/fcgid-bin/
	SocketPath /var/run/httpd/fcgidsock
	SharememPath /var/run/httpd/fcgid_shm
        PHP_Fix_Pathinfo_Enable 1
        # Path to php.ini – defaults to /etc/phpX/cgi
        DefaultInitEnv PHPRC=/etc/php/
        # Number of PHP childs that will be launched. Leave undefined to let PHP decide.
        #DefaultInitEnv PHP_FCGI_CHILDREN 3
        # Maximum requests before a process is stopped and a new one is launched
        #DefaultInitEnv PHP_FCGI_MAX_REQUESTS 5000
        <Location /fcgid-bin/>
		SetHandler fcgid-script
		Options +ExecCGI
	</Location>
</IfModule>

Creare le directory necessarie e creare dei link simbolici per php wrapper:

# mkdir /srv/http/fcgid-bin
# ln -s /usr/bin/php-cgi /srv/http/fcgid-bin/php-fcgid-wrapper

Editare /etc/httpd/conf/httpd.conf:

#LoadModule php5_module modules/libphp5.so
LoadModule fcgid_module modules/mod_fcgid.so
Include conf/extra/php5_fcgid.conf

Assicurarsi che /etc/php/php.ini abbia le direttive abilitate:

cgi.fix_pathinfo=1

Bisognerà riavviare apache:

# rc.d restart httpd

MySQL

  • Configurare MySQL come descritto da MySQL.
  • Editare /etc/php/php.ini (reperibile in /usr/etc sui sistemi più datati) e decommentare la seguente riga (Rimuovendo ;):
 ;extension=mysqli.so
 ;extension=mysql.so
 
Attenzione: Alcuni utenti hanno segnalato errori di battitura su questa riga. Assicurarsi che legga ;extension=mysql.so e non ;extension=msql.so.
  • È possibile aggiungere utenti con meno privilegi per gli script web modificando le tabelle nel database mysql. Occorre riavviare MySQL per rendere effettive le modifiche. Ricordarsi di controllare la tabella mysql/users. Se c'è una seconda voce per root e il proprio hostname è sprovvisto di password, chiunque potrebbe ottenere l'accesso completo da tale host. Vedere la sezione successiva per questo tipo di problematiche.
  • Eseguire in un terminale:
 # /etc/rc.d/mysqld start
  • Potrebbe anche essere necessario riavviare Apache. Da terminale:
 # /etc/rc.d/httpd restart
  • MySQL dovrebbe essere in esecuzione ora. Impostare la password di root e testarlo eseguendo:
 # mysqladmin -u root password password
 # mysql -u root -p
Digitare exit per uscire dalla riga di comando del client MySQL
  • Editare /etc/rc.conf (per avviare MySQL all'avvio):
 DAEMONS=(... mysqld ...)

Oppure aggiungere questa riga a rc.local:

 /etc/rc.d/mysqld start
  • Potrebbe anche essere necessario modificare /etc/mysql/my.cnf e decommentare skip-networking da così:
 skip-networking

a

 #skip-networking
Tip: Si consiglia di installare phpmyadmin, mysql-workbenchAUR o adminer per lavorare con i database.


Vedere anche

  • MySQL - Articolo wiki per MySQL
  • PhpMyAdmin - Interfaccia web per MySQL tipica degli ambienti LAMP
  • Adminer - Un completo strumento di gestione dei database disponibile per MySQL, PostgreSQL, SQLite, MS SQL e Oracle
  • Xampp - Server-web autonomo che supporta PHP, Perl e MySQL

Collegamenti esterni