Héberger plusieurs sites sur une machine
Un vhost par site, l'isolation des utilisateurs et des pools PHP, et pourquoi un site compromis ne doit pas emporter les autres.
Un VPS modeste héberge sans peine une dizaine de sites de faible trafic. La question n'est pas la puissance, c'est l'isolation : par défaut, tout tourne sous le même utilisateur, et une faille dans l'un donne accès à tous les autres.
Un dossier et un utilisateur par site
sudo adduser --system --group --home /var/www/site-a --no-create-home site-a
sudo mkdir -p /var/www/site-a/public
sudo chown -R site-a:site-a /var/www/site-aUn pool PHP par site
C'est la pièce maîtresse : chaque site exécute son PHP sous son propre compte, avec son propre socket. Un site compromis ne peut alors pas lire les fichiers du voisin.
/etc/php/8.3/fpm/pool.d/site-a.conf
[site-a]
user = site-a
group = site-a
listen = /run/php/site-a.sock
listen.owner = www-data
listen.group = www-data
pm = ondemand
pm.max_children = 8
pm.process_idle_timeout = 30s
php_admin_value[open_basedir] = /var/www/site-a:/tmp
php_admin_value[disable_functions] = exec,passthru,shell_exec,systemondemand plutôt que dynamic
Avec ondemand, les processus PHP ne démarrent qu'à la première visite et s'arrêtent après trente secondes d'inactivité. Sur une machine qui héberge dix sites dont huit reçoivent trois visiteurs par jour, cela libère beaucoup de mémoire.
Le vhost correspondant
server {
listen 80;
server_name site-a.fr;
root /var/www/site-a/public;
index index.php;
location / { try_files $uri $uri/ /index.php?$query_string; }
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/site-a.sock;
}
location ~ /\. { deny all; }
access_log /var/log/nginx/site-a.access.log;
error_log /var/log/nginx/site-a.error.log;
}Des journaux séparés par site paraissent superflus jusqu'au jour où l'un d'eux se fait marteler : vous voyez immédiatement lequel.
Un certificat pour tous
sudo certbot --nginx -d site-a.fr -d www.site-a.fr -d site-b.fr -d www.site-b.frUn seul certificat pour tout, ou un par site ?
Un certificat unique est plus simple à renouveler, mais si un seul domaine cesse de résoudre, le renouvellement échoue en entier et tous vos sites passent en erreur le même jour. Au-delà de trois ou quatre sites, préférez un certificat par site.
Combien de sites tient une machine ?
| Mémoire | Sites de faible trafic | Remarque |
|---|---|---|
| 4 Go | 5 à 10 | WordPress, vitrines, blogs |
| 8 Go | 15 à 25 | Avec une base de données par site |
| 16 Go | 30 et plus | La base devient le facteur limitant |
Bloqué malgré tout ? Ouvrez un ticket : on répond en français, et on regarde votre machine si besoin.
Ouvrir un ticket