![在 Nginx 服务器块中使用“include”以及将包含的内容保存在哪里?](https://linux22.com/image/732626/%E5%9C%A8%20Nginx%20%E6%9C%8D%E5%8A%A1%E5%99%A8%E5%9D%97%E4%B8%AD%E4%BD%BF%E7%94%A8%E2%80%9Cinclude%E2%80%9D%E4%BB%A5%E5%8F%8A%E5%B0%86%E5%8C%85%E5%90%AB%E7%9A%84%E5%86%85%E5%AE%B9%E4%BF%9D%E5%AD%98%E5%9C%A8%E5%93%AA%E9%87%8C%EF%BC%9F.png)
我所见过的所有示例都在 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/nginx
BSD 等上)。
我亲自创建一个目录/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 回答了这个问题,乍一看,我以为你也问过这个问题。正如他的例子所示,你可以使用include
server
块中的指令。您实际上可以在任何块中使用它,因此在服务器块中使用它也可以。
答案3
您还可以使用我曾经在 SE 上看到过的一个巧妙的语法技巧,有条件地启用仅当包含存在时才启用它:
include /var/www/sites/includes/adminer[.]conf;
诀窍是使用文件名.conf
后缀来命名子模块,然后[.]
在包含行中使用,如上例所示……这会告诉 Nginx 仅当文件存在时才加载子模块。
我们在SlickStack对于某些可选子模块。