Installare Apache, HTTPS e PHP-FPM in Debian 12
In questa guida installeremo Apache, PHP-FPM, Let's Encrypt SSL in Debian 12 Bookworm. Applichiamo le prime ottimizzazioni e testiamo i risultati creando phpinfo.ini
Installiamo Apache2
Installiamo il web server Apache con HTTPS il primo dello stack LAMP, che si occuperà di servire i contenuti
Per ottimizzare le performance del web server, 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 multi processi, mpm_prefork
, che permette di utilizzare mod_php
e php8.2, l'interprete interno
Questo approccio è sconsigliato sui siti molto visitati, oltre la maggiore lentezza, arrivati al numero di thread massimi, il web server, smette di rispondere fino alla liberazione di un thread che possa servire i contenuti
Installiamo Apache2
apt install apache2
Disabilitiamo il modulo
mpm_prefork
a2dismod mpm_prefork
Abilitiamo
mpm_event
ehttp2
a2enmod mpm_event http2
Riavviamo Apache2
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
Installiamo FPM e FastCGI
apt install php-fpm libapache2-mod-fcgid
Abilitiamo i moduli
a2enmod actions proxy_fcgi alias headers
Riavviamo il processo di PHP FPM
service php8.2-fpm restart
Riavviamo Apache2
service apache2 restart
È 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>
Per testare l'esecuzione di PHP e avere informazioni su moduli e configurazione, possiamo creare un file phpinfo.php
nella directory configurata nel nostro virtual host
<?php
// Visualizza tutte le informazioni, default: INFO_ALL
phpinfo();
// Solo le informazioni sui moduli
// phpinfo(8) visualizza il medesimo risultato
phpinfo(INFO_MODULES);
?>
Visitando l'indirizzo https://IP-WEB/phpinfo.php
possiamo visualizzare le informazioni relative a PHP
Installiamo i moduli necessari, PHP-MySQL
e alcuni dei più comuni
apt-get install php8.2-{mysql,curl,gd,intl,imap,mcrypt,ps,pspell,snmp,sqlite,tidy,xmlrpc,xsl}
Possiamo anche scegliere di installare i moduli più comuni, come quelli di default in Plesk
apt-get install php8.2-{bcmath,enchant,imap,ldap,mysql,curl,dba,enchant,gd,intl,ldap,mbstring,mcrypt,odbc,opcache,pgsql,sqlite3,pspell,soap,tidy,xml,xmlrpc,xsl,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
È 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 python3-certbot-apache
Creiamo la configurazione di Apache2
certbot --apache
Testiamo il rinnovo dei certificati
certbot renew --dry-run
Controlliamo che sia presente il processo schedulato di Cron per il rinnovo
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 virtual host http, possiamo utilizzare una definizione molto semplice, come questa listata
È 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'attivazione di 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>
A questo punto il nostro web server sarà in grado in grado di rispondere in HTTPS e servire le pagine PHP.