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-fpm
2. Disabilitare il modulo PHP tradizionale
Disabilita il modulo PHP in Apache, se è attivo:
sudo a2dismod php
3. Abilitare il modulo proxy_fcgi
Abilita il modulo richiesto per il funzionamento di PHP-FPM:
sudo a2enmod proxy_fcgi
4. Riavviare i servizi
Applica le modifiche riavviando Apache e PHP-FPM:
sudo systemctl restart apache2
sudo systemctl restart php-fpm
5. 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 sito2
6. 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-data
7. Creare le directory dei siti
sudo mkdir -p /home/sito1/public_html
sudo mkdir -p /home/sito2/public_html
8. 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_html
9. 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.conf
Contenuto:
[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] = Off
Ripeti per sito2
.
10. Configurare Apache
Crea un file Virtual Host per ogni sito. Esempio per sito1
:
sudo nano /etc/apache2/sites-available/sito1.conf
Contenuto:
<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.conf
12. Riavviare i servizi
sudo systemctl reload apache2
sudo systemctl reload php-fpm
A questo punto, la configurazione è completa. Ogni sito è isolato e utilizza un pool PHP-FPM separato.