Se você estiver procurando por subdomínios automáticos, com base em um modelo padrão (por exemplo, um subdomínio para cada usuário), poderá usar capturas de expressões regulares na diretiva server_name. Essa abordagem permitirá que você atribua parte do server_name a uma variável para usar em outro lugar na sua configuração (por exemplo, para definir um caminho).
Geralmente é uma boa prática colocar subdomínios 'reais' acima da raiz da web, para separar melhor os sites (e tem a vantagem de impedir o acesso através do site principal) e para evitar ambigüidade quanto a se um diretório é ou não mapeia para um subdomínio ou não. Por exemplo, considere o seguinte caminho para a raiz do subdomínio 'dev': /var/www/example.com/subdomains/dev/www. Isso também permitiria que você mantivesse registros separados para seu site de desenvolvimento, por exemplo, /var/www/example.com/subdomains/dev/logs).
O exemplo abaixo usa seu subdomínio pma como modelo e mantém a raiz do subdomínio sob o site principal.
server{
#regex capture assigning the subdomain to $subdomain
server_name ~^(?<subdomain>.+)\.example\.com$;
#if the directory doesn't exist, redirect to the main site
if (!-d /var/www/example.com/www/$subdomain) {
rewrite . example.com redirect;
}
#if we have made it here, set the root to the above directory
root /var/www/example.com/www/$subdomain;
#the rest of your config
index index.php;
access_log /var/www/example.com/logs/access.log;
error_log /var/www/example.com/logs/errors.log;
location ~ \.php$
{
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /var/www/domain.com/$subdomain$fastcgi_script_name;
include fastcgi_params;
}
location / {
auth_basic "Authentication Required";
auth_basic_user_file /var/www/example.com/$subdomain/authfile;
}
location ~ /\.ht{
deny all;
}
}
A ideia acima só funciona se todos os subdomínios seguirem o mesmo modelo. Na configuração que você postou, o subdomínio pma e o subdomínio dev são substancialmente diferentes (em que o subdomínio dev tem muitos reescreve que o pma não tem). Qualquer subdomínio que não siga o 'template' que você está usando precisará do seu próprio bloco de servidor e config. Vale a pena mencionar que, no caso de dois blocos de servidor serem aplicáveis (por exemplo, um com um nome de servidor estático e outro com um nome de servidor de regex), o nome de servidor estático terá precedência.