在nginx.conf中定义根指令的地方

我有一个关于在处理不同虚拟主机的服务器上设置nginx的问题。 我现在有点困惑root指令应该在哪里。 我看到了以下两种可能性。

变体A

 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; } } 

或另一个

变式B

 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; } } 

如果两个变体是平等的,我有点困惑。 对于不同的虚拟主机,我计划在/etc/nginx/sites-available具有不同server_nameroot指令的独立.conf文件。 要激活一个虚拟主机,我将在/etc/nginx/sites-enabled有一个到conf文件的符号链接。 或者你将configuration文件存储在/var/www/$server_name ,让它“closures”www数据?

所以总结一下,我有两个问题:
1. nginx.conf文件的两个变体中的哪一个更适合多vhost安装,为什么?
2.你将在哪里存储每个虚拟主机的configuration文件?

谢谢。

变式A是正确的方式。 Nginx只会使用一个位置块,所以如果你在一个位置定义了root,它只会在这个位置可用。 这几乎总是导致文件path的根指令的重复,两者都不好。

如果在服务器块中定义它,它总是由位置块inheritance,所以它总是在$ document_rootvariables中可用,从而避免了文件path的重复。