Installare un ambiente LAMP: Linux, Apache2, SSL, MySQL, PHP5 - Stretch: differenze tra le versioni

Vai alla navigazione Vai alla ricerca
m
compatibilità per Stretch
m (compatibilità per Stretch)
(26 versioni intermedie di 2 utenti non mostrate)
Riga 1: Riga 1:
{{Versioni compatibili|Stretch}}
{{Versioni compatibili|ONLY|Stretch}}
== Introduzione ==
== Introduzione ==
'''LAMP''' è un acronimo che indica un ambiente server in cui siano installati '''L'''inux, '''A'''pache, '''M'''ySQL e '''P'''HP. In questa guida vedremo come installare un server Apache2 su Debian Lenny, come configurare il modulo SSL e come fornire supporto per il linguaggio di scripting PHP5 e i database basati su MySQL.
'''LAMP''' è un acronimo che indica un ambiente server in cui siano installati '''L'''inux, '''A'''pache, '''M'''ySQL e '''P'''HP. In questa guida vedremo come installare un server Apache2 su Debian Lenny, come configurare il modulo SSL e come fornire supporto per il linguaggio di scripting PHP5 e i database basati su MySQL.
Riga 15: Riga 15:
using 127.0.0.1 for ServerName
using 127.0.0.1 for ServerName
</pre>
</pre>
Per eliminarlo è sufficiente aprire il file di configurazione di Apache2:
Per eliminarlo è sufficiente aprire il file:
<pre>
<pre>
# nano /etc/apache2/apache2.conf
# nano /etc/apache2/conf-available/fqdn.conf
</pre>
</pre>
e aggiungere la direttiva:
e aggiungere la direttiva:
<pre>
<pre>
ServerName demo
ServerName demo
</pre>
e abilitare la configurazione:
<pre>
# a2enconf fqdn
# systemctl restart apache2.service
</pre>
</pre>
Abilitate alcuni comodi moduli aggiuntivi:
Abilitate alcuni comodi moduli aggiuntivi:
Riga 188: Riga 193:
Per avere il supporto a PHP7 è sufficiente installare il linguaggio di scripting e il relativo modulo di supporto ad Apache2:
Per avere il supporto a PHP7 è sufficiente installare il linguaggio di scripting e il relativo modulo di supporto ad Apache2:
<pre>
<pre>
# apt install php libapache2-mod-php php7.0 php7.0-common php7.0-gd php7.0-mysql php7.0-imap php7.0-cli php7.0-cgi php-pear php7.0-mcrypt imagemagick php7.0-curl php7.0-intl php7.0-pspell php7.0-recode php7.0-sqlite3 php7.0-tidy php7.0-xmlrpc php7.0-xsl php-memcache php-imagick php-gettext php7.0-zip php7.0-mbstring php7.0-soap php7.0-fpm php7.0-opcache php-apcu
# apt install php libapache2-mod-php php7.0 php7.0-common php7.0-gd php7.0-mysql php7.0-imap php7.0-cli php7.0-cgi php-pear php7.0-mcrypt imagemagick php7.0-curl php7.0-intl php7.0-pspell php7.0-recode php7.0-sqlite3 php7.0-tidy php7.0-xmlrpc php7.0-xsl php-memcache php-imagick php-gettext php7.0-zip php7.0-mbstring php7.0-soap php7.0-fpm php7.0-opcache php-apcu php-bcmath
</pre>
</pre>
PHP 7.0 è ormai fuori supporto, e il team di sviluppo consiglia di passare alla versione LTS 7.2 di PHP. I pacchetti per Debian Stretch di PHP 7.2 sono disponibili solo tramite un repository esterno. Per chi volesse installare PHP 7.2 su Debian Stretch consigliamo di seguire la guida apposita: [[Installare PHP 7.2 su Debian Stretch]] .
A questo punto un riavvio di Apache è sufficiente:
A questo punto un riavvio di Apache è sufficiente:
<pre>
<pre>
Riga 237: Riga 244:
# systemctl reload apache2
# systemctl reload apache2
</pre>
</pre>
=== Messa in sicurezza di PHP ===
Modifichiamo il file:
<pre>
# nano /etc/php/7.0/apache2/conf.d/99_security.ini
</pre>
con questi valori:
<pre>
allow_url_include = Off
allow_url_fopen = Off
session.use_only_cookies = 1
session.cookie_httponly = 1
expose_php = Off
display_errors = Off
register_globals = Off
disable_functions = shell_exec, escapeshellarg, escapeshellcmd, passthru, proc_close, proc_get_status, proc_nice, proc_open,proc_terminate
</pre>
e riavviamo Apache:
<pre>
# systemctl restart apache2.service
</pre>
=== Test della configurazione ===
=== Test della configurazione ===
Prima di procedere è una buona idea verificare che tutto ciò che abbiamo fatto funzioni realmente. Per questo utilizziamo il metodo <code>phpinfo</code> di PHP5 caricandolo in una pagina di test. Partiamo col creare il file della pagina di test:
Prima di procedere è una buona idea verificare che tutto ciò che abbiamo fatto funzioni realmente. Per questo utilizziamo il metodo <code>phpinfo</code> di PHP5 caricandolo in una pagina di test. Partiamo col creare il file della pagina di test:
Riga 255: Riga 283:
</html>
</html>
</pre>
</pre>
salviamo il file e richiamiamolo nel nostro browser: '''http://123.45.67.890/test.php'''. Se tutto è andato per il verso giusto vi troverete davanti a una schermata di riepilogo delle funzionalità abilitate di PHP5.
salviamo il file e richiamiamolo nel nostro browser: '''http://123.45.67.890/test.php'''. Se tutto è andato per il verso giusto vi troverete davanti a una schermata di riepilogo delle funzionalità abilitate di PHP7.
 
==Installazione di PHP 5.6==
Potrebbe essere necessario installare una vecchia versione di PHP affiancata a quella ufficiale presente in Stretch, ad esempio perchè alcuni siti presenti sul nostro server non girano correttamente con PHP 7.0.
<br/>
Debian Stretch offre nei repository ufficiali solo la versione 7.0 di PHP, ma possiamo utilizzare i pacchetti .deb messi a disposizione direttamente dal maintainer dei pacchetti PHP di Debian, Ondřej Surý.
<br/>
Aggiungiamo il suo repository al nostro sources.list:
<pre>
# apt-get install apt-transport-https curl
# curl https://packages.sury.org/php/apt.gpg | apt-key add -
# echo 'deb https://packages.sury.org/php/ stretch main' > /etc/apt/sources.list.d/deb.sury.org.list
# apt-get update
</pre>
E installiamo PHP 5.6:
<pre>
# apt-get install php5.6-cli php5.6-fpm libapache2-mod-php5.6
</pre>
<pre>
# apt install dh-php5.6 libapache2-mod-php5.6filter libexpect-php5.6 libgv-php5.6 libow-php5.6 libphp5.6-embed php5.6-adodb php5.6-apcu php5.6-cgi php5.6-curl php5.6-dbg php5.6-enchant php5.6-exactimage php5.6-ffmpeg php5.6-fpm php5.6-gd php5.6-gdcm php5.6-geoip php5.6-gmp php5.6-imagick php5.6-idn php5.6-imap php5.6-interbase php5.6-intl php5.6-json php5.6-ldap php5.6-librdf php5.6-mapscript php5.6-mcrypt php5.6-memcache php5.6-memcached php5.6-mhash php5.6-ming php5.6-mongo php5.6-mssql php5.6-mysql php5.6-odbc php5.6-pgsql php5.6-ps php5.6-pspell php5.6-radius php5.6-recode php5.6-remctl php5.6-rrd php5.6-sasl php5.6-snmp php5.6-sqlite php5.6-svn php5.6-sybase php5.6-tidy php5.6-xcache php5.6-xmlrpc php5.6-xsl
</pre>
Verifichiamo che tutto sia a posto:
<pre>
# php7.0 -v
PHP 7.0.15-1 (cli)
# php5.6 -v
PHP 5.6.30-5+0~20170223133422.27+stretch~1.gbp1ee0cb (cli)
</pre>
La versione predefinita è rimasta la 7.0, come possiamo facilmente constatare:
<pre>
# php -v
PHP 7.0.15-1 (cli)
</pre>
ma possiamo cambiarla in maniera molto veloce:
<pre>
# update-alternatives --config php
</pre>


== Installazione di MySQL ==
== Installazione di MySQL ==
Riga 268: Riga 332:
</pre>
</pre>
La password che sceglierete sarà valida sia per l'utente MySQL root@localhost sia per l'utente root@demo.
La password che sceglierete sarà valida sia per l'utente MySQL root@localhost sia per l'utente root@demo.
<br/>
Mettiamo in sicurezza l'installazione di MySQL avviando il tool apposito:
<pre>
# mysql_secure_installation
</pre>
e rispondendo alle domande autoesplicative.
<br/><br/>
<br/><br/>
Per creare un utente in MySQL è necessario accedere come ''root'' (o da altro utente che ha i privilegi di creazione degli utenti): aprite un terminale e digitate:
Per creare un utente in MySQL è necessario accedere come ''root'' (o da altro utente che ha i privilegi di creazione degli utenti): aprite un terminale e digitate:
Riga 280: Riga 350:
</pre>
</pre>
=== L'interfaccia phpMyAdmin ===
=== L'interfaccia phpMyAdmin ===
Per amministrare i nostri database può essere comoda un'interfaccia grafica raggiungibile da browser. A questo scopo installiamo '''phpMyAdmin''':
Per amministrare i nostri database può essere comoda un'interfaccia grafica raggiungibile da browser. A questo scopo installiamo '''phpMyAdmin''' (e adminer, un'interfaccia semplificata):
<pre>
<pre>
# apt install phpmyadmin
# apt install phpmyadmin adminer
</pre>
</pre>
Durante l'installazione vi verrà chiesto di indicare il web server in esecuzione sulla vostra machina. Indicate apache2:
Durante l'installazione vi verrà chiesto di indicare il web server in esecuzione sulla vostra machina. Indicate apache2:
Riga 330: Riga 400:


== Sicurezza della configurazione e prestazioni del server ==
== Sicurezza della configurazione e prestazioni del server ==
Di seguito alcune guide specifiche per migliorare la protezione e le prestazioni del server Apache appena installato:
* Migliorare le prestazioni con Memcached: [[http://guide.debianizzati.org/index.php/Installare_Memcached_in_un_server_Apache2_-_Stretch Memcached]]
* Migliorare le prestazioni con Memcached: [[http://guide.debianizzati.org/index.php/Installare_Memcached_in_un_server_Apache2_-_Stretch Memcached]]
* Configurare i Virtual Hosts: [[http://guide.debianizzati.org/index.php/Apache_e_Virtual_Hosts:_configurare_Apache2_per_ospitare_pi%C3%B9_siti_web Virtual Hosts]]
* Configurare i Virtual Hosts: [[http://guide.debianizzati.org/index.php/Apache_e_Virtual_Hosts:_configurare_Apache2_per_ospitare_pi%C3%B9_siti_web Virtual Hosts]]
* Migliorare le prestazioni con PageSpeed: [[http://guide.debianizzati.org/index.php/Incrementare_le_prestazioni_di_Apache_con_mod_pagespeed Mod_PageSpeed]]
* Migliorare le prestazioni con PageSpeed: [[http://guide.debianizzati.org/index.php/Incrementare_le_prestazioni_di_Apache_con_mod_pagespeed Mod_PageSpeed]]
* Hardening di Apache2: [[http://guide.debianizzati.org/index.php/Hardening_di_un_web_server_Apache Hardening di Apache2]]
* Hardening di Apache2: [[http://guide.debianizzati.org/index.php/Hardening_di_un_web_server_Apache Hardening di Apache2]]
* Ottimizzare la banda di Apache2: [[http://guide.debianizzati.org/index.php/Ottimizzare_la_banda_di_Apache Ottimizzare la banda]]
* Individuare gli script PHP che inviano SPAM: [[http://guide.debianizzati.org/index.php/Individuare_gli_script_PHP_che_inviano_SPAM Script PHP che inviano SPAM]]
Non sono impostazioni necessarie per il corretto funzionamento di Apache, ma sono '''fortemente consigliate'''.
==Note e changelog==
Da Debian Jessie è stato introdotto Apache 2.4 al posto del 2.2, e anche il sistema di configurazione è cambiato leggermente.
<br/>
Invece della directory <code>/etc/apache2/conf.d/</code> abbiamo <code>/etc/apache2/conf-enabled/</code> che contiene dei link a <code>/etc/apache2/conf-available/</code>.
<br/>
I file di configurazione in <code>/etc/apache2/sites-enabled</code>/ devono terminare con l'estensione <code>.conf</code>.
<br/>
La direttiva <code>NameVirtualHost *:80</code> e analoga per la porta 443 non serve più.
<br/>
Una directory pubblicata tramite Alias deve avere l'opzione <code>Require all granted</code> altrimenti ogni tentativo di accedere al suo contenuto risulta in un errore <code>AH01630: client denied by server configuration</code>.
<br/><br/>
Una delle modifiche classiche da fare è la seguente:
<pre>
# Configuration for Apache 2.2
Order allow,deny
Allow from all
# Configuration for Apache 2.4 with mod_authz_host.
Require all granted
</pre>
In maniera analoga per negare ogni richiesta:
<pre>
# Configuration for Apache 2.2
Order deny,allow
Deny from all
# Configuration for Apache 2.4 with mod_authz_host.
Require all denied
</pre>
Un controllo di accesso basato sull'indirizzo IP è fatto in questo modo:
<pre>
Require local
Require ip 127.0.0.0/8 ::1 185.21.73.97 10.0.1.0/24
</pre>
Un'altro cambiamento non da poco è la direttiva <code>AllowOverride</code>, che adesso ha valore predefinito <code>None</code>. Questo significa ad esempio che tutti i file .htaccess smettono di funzionare!


== Apache2: layout di configurazione ==
== Apache2: layout di configurazione ==
Riga 368: Riga 475:
</pre>
</pre>
Su questo web server il solo sito ad essere visibile sarà perciò quello chiamato <code>default</code>.
Su questo web server il solo sito ad essere visibile sarà perciò quello chiamato <code>default</code>.
==== mods-available ====
=== mods-available ===
Questa directory contiene i moduli di Apache2 pronti per essere resi disponibili.
Questa directory contiene i moduli di Apache2 pronti per essere resi disponibili.
=== mods-enabled ===
=== mods-enabled ===
Questa directory, come nel caso dei virtual host, contiene i link simbolici ai moduli effettivamente abilitati sul web server.
Questa directory, come nel caso dei virtual host, contiene i link simbolici ai moduli effettivamente abilitati sul web server.
Riga 442: Riga 550:
</pre>
</pre>
Descrive il tempo in secondi in cui ogni connessione persistente attiva aspetta per la prossima richiesta, prima di chiudersi definitivamente.
Descrive il tempo in secondi in cui ogni connessione persistente attiva aspetta per la prossima richiesta, prima di chiudersi definitivamente.
==== prefork MPM ====
Durante l'installazione di Apache2 abbiamo optato per il pacchetto <code>apache2-mpm-prefork</code>, preferendolo al pacchetto <code>apache2-mpm-worker</code>. Vi rimando alla documentazione ufficiale di Apache2 per le differenze.<br>
Questo parametro definisce il comportamento di Apache2 MPM prefork.<br>
Default:
<pre>
<IfModule mpm_prefork_module>
    StartServers          5
    MinSpareServers      5
    MaxSpareServers      10
    MaxClients          150
    MaxRequestsPerChild  0
</IfModule>
</pre>
* '''StartServers''': il numero di processi figlio creati all'avvio
* '''MinSpareServers''': il numero minimo di processi figlio inattivi (idle)
* '''MaxSpareServers''': il numero massimo di processi figlio inattivi (idle)
* '''MaxClients''': imposta il numero massimo di richieste contemporanee gestibili da Apache
* '''MaxRequestsPerChild''': imposta quante richieste saranno gestite da un processo figlio prima di terminare. Il valore 0 indica che il processo non termina mai. Modificare questo valore può aiutare la gestione della memoria RAM del server.
==== ServerName ====
==== ServerName ====
Default: Non impostato
Default: Non impostato
3 581

contributi

Menu di navigazione