我有一个关于在处理不同虚拟主机的服务器上设置 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_name
和root
指令的单独文件/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 变量中可用,从而避免文件路径重复。