Приведу только ключевые части конфига:
server {
server_name site.com www.site.com;
root /path/to_you/site_dir;
location ~ /user/$ {
deny all;
access_log off;
log_not_found off;
}
location ~ \.php$ {
...
fastcgi_param USER_SUBDOMAIN "_MAIN_";
...
}
}
server {
server_name "~^(?<user_subdomain>[a-z0-9_-]{2,20})\.site\.com$";
root /path/to_you/site_dir;
location ~ /assets/$ {
alias /path/to_you/site_dir/user/$user_subdomain/
}
location ~ \.php$ {
...
fastcgi_param USER_SUBDOMAIN $user_subdomain;
...
}
}
Доменное имя 3-го уровня станет доступно в глобальной переменной
$_SERVER['USER_SUBDOMAIN'] В случае если там окажется значение
_MAIN_ будет понятно что это домен 2-го уровня или www
Пользовательские директории (для пользователя visya) находятся по пути
http://visya.site.com/assets
а в файловой системе по пути
/path/to_you/site_dir/user/visya/
Можно конечно пойти дальше и все засунуть в одну директиву
server