Configurazione hosting multisito con Apache e PHP-FPM

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.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *