在 Nginx 服务器块中使用“include”以及将包含的内容保存在哪里?

在 Nginx 服务器块中使用“include”以及将包含的内容保存在哪里?

我所见过的所有示例都在 http 块中使用了“include something.conf”。

是否可以在服务器块中使用“include something.conf”?如果可以,那么将 conf 保存在哪里是最佳做法?

例如:

server {
    listen 80;
    server_name example.com;

    include (where)/somethingcool.conf

}

答案1

您可以将文件放在任何您想要的地方,这取决于您。

如果你使用相对的路径,那么它将相对于 nginx 配置目录(例如/etc/nginx在 Linux、/usr/local/etc/nginxBSD 等上)。

我亲自创建一个目录/etc/nginx/includes并将这些配置位放在其中。例如:

server {
    server_name deploy.example.com;

    include includes/listen-80;
    include includes/letsencrypt;

    return 301 https://$host$request_uri;
}

其中/etc/nginx/includes/listen-80包含:

listen 80;
listen [::]:80;

/etc/nginx/includes/letsencrypt包含:

location /.well-known/acme-challenge/ {
    root /var/www;
    try_files $uri =404;
}

当然我还有很多其他这样的配置位。

答案2

@michaelhampton 回答了这个问题,乍一看,我以为你也问过这个问题。正如他的例子所示,你可以使用includeserver块中的指令。您实际上可以在任何块中使用它,因此在服务器块中使用它也可以。

答案3

您还可以使用我曾经在 SE 上看到过的一个巧妙的语法技巧,有条件地启用仅当包含存在时才启用它:

include /var/www/sites/includes/adminer[.]conf;

诀窍是使用文件名.conf后缀来命名子模块,然后[.]在包含行中使用,如上例所示……这会告诉 Nginx 仅当文件存在时才加载子模块。

我们在SlickStack对于某些可选子模块。

相关内容