Installare Apache https e PHP-FPM in Debian
Installiamo il webserver Apache con https il primo dello stack LAMP, che si occuperà di servire i contenuti
Per ottimizzare le performance del webserver, consigliamo di utilizzare PHP-FPM, mpm_event e http2
La maggior parte dei siti web, utilizza connessioni sicure, vedremo come generare un certificato https valido e gratuito con Let's Encrypt
Di default, è previsto il modulo multiprocessi, mpm_prefork, che permette di utilizzare mod_php o php7.0, l'interprete interno
Questo approccio è sconsigliato, sui siti molto visitati, arrivati al numero di thread massimi, il webserver, smette di rispondere fino alla liberazione di un thread che possa servire i contenuti
apt install apache2
a2dismod mpm_prefork
a2enmod mpm_event http2
service apache2 restart
Installare PHP-FPM
PHP-FPM è un implementazione alternativa a PHP FastCGI, nota per la velocità, tre volte superiore al classico modulo e le feature aggiuntive
FPM è un vero e proprio demone, resta in ascolto per le richieste php, tramite una porta o un socket UNIX
Rappresenta la P del nostro LAMP
apt install php-fpm libapache2-mod-fcgid
a2enmod actions proxy_fcgi alias headers
service php7.0-fpm restart
service apache2 restart
E' ora possibile configurare per tutti i virtual host apache2 l'uso di FPM aggiungendo questo handler nella loro definizione
<FilesMatch ".+\.ph(p[345]?|t|tml)$">
SetHandler "proxy:fcgi://127.0.0.1:9000"
</FilesMatch>
Test di php con info.php:
<?php
phpinfo();
phpinfo(INFO_MODULES);
?>
Installiamo i moduli necessari, php-MySQL e alcuni dei più comuni
apt-get install php7.0-mysql php7.0-curl php7.0-gd php7.0-intl php-pear \
php7.0-imap php7.0-mcrypt php7.0-ps php7.0-pspell php7.0-recode php7.0-snmp \
php7.0-sqlite php7.0-tidy php7.0-xmlrpc php7.0-xsl
Possiamo anche usare i moduli presenti in plesk
apt-get install php7.0-bcmath php7.0-enchant php7.0-imap php7.0-ldap php7.0-mysql \
php7.0-curl php7.0-curl php7.0-dba php7.0-enchant php7.0-gd php7.0-intl \
php7.0-json php7.0-ldap php7.0-mbstring php7.0-mcrypt php7.0-odbc \
php7.0-opcache php7.0-pgsql php7.0-sqlite3 php7.0-pspell php7.0-soap \
php7.0-tidy php7.0-xml php7.0-xmlrpc php7.0-xsl php7.0-zip
Let's Encrypt certificati SSL validi e gratuiti
Grazie all'ottimo Let's Encrypt, è possibile generare dei certificati SSL, universalmente riconosciuti, sicuri e gratuiti
E' necessario configurare il nome DNS del sito web che andremo a ospitare in modo da raggiungere l'IP del nostro server
Esempio configurazione DNS
Per configurare il DNS, è necessario accedere al pannello del nostro fornitore e registrare un nome di questo tipo
mydomain.ext A 1.1.1.1
Installiamo Let's Encrypt e generiamo i certificati SSL e TLS
apt-get install certbot python-certbot-apache
# Creazione e configurazione di apache2
certbot --apache
# Test renew dei certificati
certbot renew --dry-run
# Cron di revewal
cat /etc/cron.d/certbot
Se non ci sono stati problemi nella risoluzione del nostro dominio, i nostri virtual host risponderanno in https, restituendoci il famoso "luchetto verde" sul browser
I Virtualhost apache2
Virtual host http
Per configurare un virtualhost http, possiamo utilizzare una definizione molto semplice, come questa listata
E' disponibile nella directory /etc/apache2/sites-available vhost di default, da cui possiamo partire
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
Virtual host https
I virtual host https, includono i path necessari per l'utilizzo di SSL e l'attivazionedi PHP
<VirtualHost *:443>
ServerAdmin [email protected]
DocumentRoot "/var/www/data/online"
ServerName mydomain.ext
ServerAlias www.mydomain.ext
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
Protocols h2 h2c http/1.1
SSLEngine on
Include /etc/letsencrypt/options-ssl-apache.conf
SSLCertificateFile /etc/letsencrypt/live/mydomain.ext/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/mydomain.ext/privkey.pem
<FilesMatch ".+\.ph(p[345]?|t|tml)$">
SetHandler "proxy:fcgi://127.0.0.1:9000"
</FilesMatch>
</VirtualHost>