Questa guida descrive come configurare un server Linux in grado di erogare servizi di hosting multisito utilizzando Apache e PHP-FPM, garantendo un isolamento sicuro tra i siti web. Segui i passaggi per ottenere una configurazione sicura e performante su Ubuntu Server 24.04.1 LTS.
1. Installare Apache e PHP-FPM
sudo apt install apache2
sudo apt install php-fpm2. Disabilitare il modulo PHP tradizionale
Disabilita il modulo PHP in Apache, se è attivo:
sudo a2dismod php3. Abilitare il modulo proxy_fcgi
Abilita il modulo richiesto per il funzionamento di PHP-FPM:
sudo a2enmod proxy_fcgi4. Riavviare i servizi
Applica le modifiche riavviando Apache e PHP-FPM:
sudo systemctl restart apache2
sudo systemctl restart php-fpm5. Creare utenti separati per i siti
Crea un utente per ogni sito web, con directory dedicate:
sudo useradd -m -d /home/sito1 -s /usr/sbin/nologin sito1
sudo useradd -m -d /home/sito2 -s /usr/sbin/nologin sito26. Configurare i gruppi
Aggiungi Apache al gruppo di ogni utente del sito:
sudo usermod -a -G sito1 www-data
sudo usermod -a -G sito2 www-data7. Creare le directory dei siti
sudo mkdir -p /home/sito1/public_html
sudo mkdir -p /home/sito2/public_html8. Impostare i permessi
Imposta i permessi per ogni directory:
sudo chown sito1:sito1 /home/sito1/public_html
sudo chmod 750 /home/sito1/public_html
sudo chown sito2:sito2 /home/sito2/public_html
sudo chmod 750 /home/sito2/public_html9. Configurare i pool PHP-FPM
Crea un file di configurazione pool per ogni sito. Esempio per sito1:
sudo nano /etc/php/8.2/fpm/pool.d/sito1.confContenuto:
[sito1]
user = sito1
group = sito1
listen = /run/php/php8.2-fpm-sito1.sock
listen.owner = sito1
listen.group = sito1
listen.mode = 0660
pm = ondemand
pm.max_children = 10
pm.process_idle_timeout = 30s
chdir = /home/sito1/public_html
php_admin_value[open_basedir] = /home/sito1/public_html:/tmp:/var/tmp
php_admin_value[expose_php] = OffRipeti per sito2.
10. Configurare Apache
Crea un file Virtual Host per ogni sito. Esempio per sito1:
sudo nano /etc/apache2/sites-available/sito1.confContenuto:
<VirtualHost *:80>
    ServerName sito1
    ServerAlias www.sito1
    DocumentRoot /home/sito1/public_html
    <Directory /home/sito1/public_html>
        Options -Indexes
        AllowOverride All
        Require all granted
    </Directory>
    <FilesMatch \.php$>
        SetHandler "proxy:unix:/run/php/php8.2-fpm-sito1.sock|fcgi://localhost/"
    </FilesMatch>
</VirtualHost>Ripeti per sito2.
11. Abilitare i siti
sudo a2ensite sito1.conf
sudo a2ensite sito2.conf12. Riavviare i servizi
sudo systemctl reload apache2
sudo systemctl reload php-fpmA questo punto, la configurazione è completa. Ogni sito è isolato e utilizza un pool PHP-FPM separato.