Назад | Перейти на главную страницу

Где определить корневую директиву в nginx.conf

У меня вопрос по настройке 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, что позволяет избежать дублирования путей к файлам.