Birkaç alan adını tek makinede barındırmak olağan ve verimlidir. Güvenli olup olmadığını belirleyen şey ne kadar ayrık olduklarıdır: ayrı dizinler, ayrı veritabanı kullanıcıları ve mümkünse ayrı sistem kullanıcıları.

Yerleşim

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

Her belge kökü kendi genel dizinini gösterir. Onun üstündeki hiçbir şeye ağdan erişilemez, böylece yapılandırma ve depolama, bir adresin ulaşabileceği yerin dışında kalır.

Alan adı başına bir sunucu bloğu

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

Veritabanlarını ayrı tutun

CREATE DATABASE site_one CHARACTER SET utf8mb4;
CREATE USER 'site_one'@'localhost' IDENTIFIED BY '...';
GRANT ALL PRIVILEGES ON site_one.* TO 'site_one'@'localhost';
Her veritabanına erişebilen tek bir veritabanı kullanıcısı demek, ele geçirilen tek bir sitenin hepsini okuyup hepsine yazması demektir. Çok siteli bir sunucudaki en yaygın hata budur ve tek bir olayı bir anda hepsine çevirir.

Yapabiliyorsanız ayrı PHP havuzları

Site başına bir havuz, her biri kendi kullanıcısıyla çalışırsa, aynı makineyi paylaşsalar da bir site ötekinin dosyalarını okuyamaz. Ayrıca bir sitenin trafiğinin, herkesin ihtiyaç duyduğu işçileri tüketmesini de engeller.

; /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

Sertifikalar

sudo certbot --nginx -d one.example -d www.one.example
sudo certbot --nginx -d two.example -d www.two.example
Her şeyi kapsayan tek bir sertifika yerine ayrı sertifikalar. Böylece bir alan adının yenilenmesi ötekileri düşüremez ve sertifika, barındırdığınız her sitenin listesini ilan etmez.