Основываясь на ответе пользователя user2001260, позже отредактированном partlov, вот мой результат.
Имейте в виду, что это для сервера разработки, расположенного на локальной виртуальной машине, где префикс .dev
используется в конце каждого домена. Если вы хотите удалить его или использовать что-то еще, часть \.dev
в директиве server_name
может быть отредактирована или полностью удалена.
server {
listen 80 default_server;
listen [::]:80 default_server;
# Match any server name with the format [subdomain.[.subdomain...]].domain.tld.dev
server_name ~^(?<subdomain>([\w-]+\.)*)?(?<domain>[\w-]+\.[\w-]+)\.dev$;
# Map by default to (projects_root_path)/(domain.tld)/www;
set $rootdir "/var/www/$domain/www";
# Check if a (projects_root_path)/(subdomain.)(domain.tld)/www directory exists
if (-f "/var/www/$subdomain.$domain/www"){
# in which case, set that directory as the root
set $rootdir "/var/www/$subdomain.$domain/www";
}
root $rootdir;
index index.php index.html index.htm index.nginx-debian.html;
# Front-controller pattern as recommended by the nginx docs
location / {
try_files $uri $uri/ /index.php;
}
# Standard php-fpm based on the default config below this point
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php7.0-fpm.sock;
}
location ~ /\.ht {
deny all;
}
}
Регулярное выражение в server_name
захватывает переменные subdomain
и domain
. Часть subdomain
является необязательной и может быть пустой. Я установил его так, что по умолчанию, если у вас есть поддомен, скажем, admin.mysite.com
корень имеет тот же корень, что и mysite.com
. Таким образом, один и тот же фронт-контроллер (в моем случае index.php
) может маршрутизировать на основе субдомена. Но если вы хотите хранить совершенно другое приложение в поддомене, вы можете иметь каталог admin.mysite.com
, и он будет использовать этот каталог для вызовов на admin.mysite.com
.
Осторожно: Использование if
не рекомендуется в текущей версии nginx, так как оно добавляет дополнительные накладные расходы на обработку для каждого запроса, но это должно подойти для использования в среде разработчиков, что и является эта конфигурация хороша для. В производственной среде я бы порекомендовал не использовать массовую конфигурацию виртуального хоста и настраивать каждый сайт отдельно, для большего контроля и большей безопасности.