Nginx 配置文件忽略不存在的 include 文件

2018-06-28

Nginx 配置文件的 include 指令如果遇到不存在的文件名,会报错:

[emerg] open() "/home/x/srv/nginx.conf" failed (2: No such file or directory) in /etc/nginx/nginx.conf:75 configuration file /etc/nginx/nginx.conf test failed

有时我们希望文件不存在时直接忽略。这时可以利用 include 指令的一个特性:如果文件名包括通配符,允许匹配 0 个文件。所以我们将指令稍稍改写即可:

include /home/x/srv/nginx*.conf

但是,这样的风险是如果那个目录下存在一个 nginx-a.conf,也会被 include 进来。所以,更好的方法是利用 [] 通配符,在其中任意一个字符两侧加上方括号:

include /home/x/srv/ngin[x].conf

这个通配符严格地只会匹配 /home/x/srv/nginx.conf 这一个文件,文件不存在也不报错。完美!