Salta al contenuto principale

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

  1. Installiamo Apache2

    apt install apache2
  2. Disabilitiamo il modulo mpm_prefork

    a2dismod mpm_prefork
  3. Abilitiamo mpm_event e http2

    a2enmod mpm_event http2
  4. 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.

Supporto esperto per la produzione? Siamo al tuo fianco!

Gratis 30m di Analisi per Ottimizzare il tuo setup, Contattaci Ora!

Aggiungi un commento

Text Only

  • Nessun tag HTML consentito.