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
  phpinfo();
  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 per la produzione?

Siamo al tuo fianco! Gratis 30m di Analisi per Ottimizzare il tuo setup.
Contatta senza impegno un esperto Apache Webserver

Aggiungi un commento

Comment

  • Elementi HTML permessi: <br> <p> <code class="language-*"> <pre>
  • Linee e paragrafi vanno a capo automaticamente.
  • Solo le immagini ospitate su questo sito possono essere utilizzate nel tag <img>.