Menampung beberapa domain di satu mesin itu lazim dan hemat. Yang menentukan aman atau tidaknya adalah seberapa terpisah mereka: direktori sendiri, pengguna basis data sendiri, dan sebaiknya pengguna sistem sendiri.

Tata letaknya

/var/www/
  site-one/    public/  storage/
  site-two/    public/  storage/
  site-three/  public/  storage/

Setiap akar dokumen menunjuk ke direktori publiknya sendiri. Tidak ada yang di atasnya terjangkau dari web, jadi konfigurasi dan penyimpanan duduk di luar jangkauan sebuah alamat.

Satu blok server per domain

server {
    listen 443 ssl;
    server_name one.example;
    root /var/www/site-one/public;
    include snippets/php.conf;
}

Pisahkan basis datanya

CREATE DATABASE site_one CHARACTER SET utf8mb4;
CREATE USER 'site_one'@'localhost' IDENTIFIED BY '...';
GRANT ALL PRIVILEGES ON site_one.* TO 'site_one'@'localhost';
Satu pengguna basis data yang bisa mengakses semua basis data berarti satu situs yang jebol membaca dan menulis semuanya. Ini kesalahan paling umum pada server dengan banyak situs, dan ia mengubah satu insiden menjadi semuanya sekaligus.

Kolam PHP terpisah, kalau bisa

Satu kolam per situs, masing-masing berjalan sebagai penggunanya sendiri, berarti satu situs tak bisa membaca berkas situs lain meski berbagi mesin. Ia juga mencegah lalu lintas satu situs menghabiskan pekerja yang dibutuhkan semua yang lain.

; /etc/php/8.3/fpm/pool.d/site-one.conf
[site-one]
user = site-one
group = site-one
listen = /run/php/site-one.sock
pm = ondemand
pm.max_children = 10

Sertifikat

sudo certbot --nginx -d one.example -d www.one.example
sudo certbot --nginx -d two.example -d www.two.example
Sertifikat terpisah, bukan satu yang menutupi semuanya. Dengan begitu perpanjangan satu domain tak bisa menjatuhkan yang lain, dan sertifikatnya tidak mengumumkan daftar setiap situs yang Anda tampung.