Английский не является моим родным языком, примите мои извинения за любые языковые проблемы.
Я хочу, чтобы конфигурация с автоматическим корнем, независимо от домена, выглядела так (с использованием nginx):
root /var/www/${http_host}/public
Но я хочу, чтобы корневой домен и «www» указывали на один и тот же каталог, но без «www»:
"www.mysite.com" и "mysite.com"
корень / var / www /mysite.com/ public
Но "blog.mysite.com"
корень / var / www /blog.mysite.com/ public
Да, я видел, что есть и другие подобные вопросы (как этот), но мне было трудно удалить www. Прошу прощения!
Я не буду использовать такой универсальный название сервера, но это должно работать даже с:
server_name ~.+$;
Но также так:
listen 443 ssl http2;
server_name ~ ^((www|blog|account|bbs)\.)?mysite.com$;
root /var/www/${http_host}/public
ssl_certificate /ssl/${http_host}/{http_host}.pem
ssl_certificate_key /ss/${http_host}/{http_host}.key
ПРИМЕЧАНИЕ. Он должен работать с SSL-сертификатом.
Вы можете использовать map
в http
блок вроде этого:
map $http_host $rootdir {
"~^(?:www\.)?(<domain>.+)$ $domain;
}
И затем вы используете следующее в своем server
блок:
root /var/www/$rootdir/public;
в map
директива, мы конвертируем $http_host
переменная, содержащая HTTP-запрос Host
заголовок в $rootdir
используя регулярное выражение.
В регулярном выражении мы извлекаем фактическое доменное имя в $domain
переменная из Host
заголовок, исключив www.
префикс, если он существует. Затем мы используем $domain
переменная для построения $rootdir
переменная.
Однако этот метод может не работать с SSL по причинам, указанным в комментарии. В этом случае вам необходимо реализовать систему управления конфигурацией, которая генерирует файлы конфигурации для доменов из шаблонов.