在 nginx.conf 中定义 root 指令的位置

在 nginx.conf 中定义 root 指令的位置

我有一个关于在处理不同虚拟主机的服务器上设置 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;
   }
}

我有点困惑这两个变体是否相等。对于不同的虚拟主机,我计划在 中拥有具有.conf不同server_nameroot指令的单独文件/etc/nginx/sites-available。要激活虚拟主机,我需要在 中有一个指向 conf 文件的符号链接/etc/nginx/sites-enabled。或者您是否会将配置文件存储在 中/var/www/$server_name以使其“接近”www 数据?

总而言之,我有两个问题:
1. 这两种nginx.conf文件变体中的哪一种更适合多 vhost 设置,为什么?
2. 您将在哪里存储每个 vhost 的配置文件?

谢谢。

答案1

变体 A 是正确的做法。Nginx 只会使用一个位置块,因此如果您在某个位置定义 root,它将仅在该位置可用。这几乎总是导致 root 指令或文件路径重复,这两者都不好。

如果您在服务器块中定义它,它将始终被位置块继承,因此它将始终在 $document_root 变量中可用,从而避免文件路径重复。

相关内容