У меня вопрос по настройке nginx на сервере, обслуживающем разные виртуальные хосты. Я немного запутался, где root
директива должна быть. Я видел следующие две возможности.
Вариант А
server {
listen 80;
server_name www.site.com;
access_log /var/log/nginx/www.site.com.access.log main;
root /var/www/$server_name/htdocs;
location / {
index index.html;
}
}
или другой
Вариант Б
server {
listen 80;
server_name www.site.com;
access_log /var/log/nginx/www.site.com.access.log main;
location / {
root /var/www/$server_name/htdocs;
index index.html;
}
}
Я немного запутался, если эти два варианта равны. Для разных хостов я планировал создать индивидуальный .conf
файлы с разными server_name
и root
директивы в /etc/nginx/sites-available
. Чтобы активировать vhost, у меня была бы символическая ссылка на файл conf в /etc/nginx/sites-enabled
. Или вы бы сохранили файл конфигурации в /var/www/$server_name
чтобы он был «близко» к данным www?
Подводя итог, у меня есть два вопроса:
1. Какой из двух вариантов nginx.conf
файл лучше для настройки нескольких виртуальных хостов и почему?
2. Где бы вы хранили файлы конфигурации для каждого виртуального хоста?
Спасибо.
Вариант А - правильный способ сделать это. Nginx всегда будет использовать только один блок местоположения, поэтому, если вы определите root в местоположении, он будет доступен только в этом месте. Это почти всегда приводит к дублированию любых корневых директив путей к файлам, что не является правильным.
Если вы определяете его в блоке сервера, он всегда наследуется блоками местоположения, поэтому он всегда будет доступен в переменной $ document_root, что позволяет избежать дублирования путей к файлам.