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

Vai alla navigazione Vai alla ricerca
(15 versioni intermedie di 2 utenti non mostrate)
Riga 193: 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>
A questo punto un riavvio di Apache è sufficiente:
A questo punto un riavvio di Apache è sufficiente:
Riga 243: Riga 243:
</pre>
</pre>
=== Messa in sicurezza di PHP ===
=== 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 261: Riga 281:
</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 292: Riga 348:
</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 350: Riga 406:
* 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]]
* 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'''.
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 459: Riga 548:
</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

Menu di navigazione