Eu sugeriria usar o VirtualHosts e automatizar a configuração
Você pode configurá-lo para que /var/www/<sname> seja carregado automaticamente para qualquer <sname>.domain.com
Exemplo: ir para s1.domain.com e s1.domain.com carregará automaticamente /var/www/s1 e /var/www/s2 , respectivamente.
Nginx
A diretiva server_name é simplesmente usada para corresponder uma solicitação ao site; você pode usar um regex:
server {
listen 80;
server_name ~^(www\.)?(?<sname>.+?).domain.com$;
root /var/www/$sname
...
}
Você pode usar $sname em todo o restante da configuração
Apache
Isso é um pouco complicado, mas pode ser feito
LoadModule vhost_alias_module modules/mod_vhost_alias.so
UseCanonicalName Off
<VirtualHost *:80>
ServerName vhosts.fqdn
ServerAlias *.example.com
VirtualDocumentRoot /var/www/%1+
</VirtualHost>
Se você quiser usar HTTPS, tenho certeza de que há uma API para gerar certificados Letsencrypt