Nginx是否拥有Apache中IncludeOptional的等效功能?
好问题!其实Nginx本身并没有像Apache的IncludeOptional那样直接对应的指令,但咱们可以用几个实用的小技巧实现完全相同的效果——也就是文件存在就加载,不存在也不报错,文件存在但配置无效则依然报错。下面给你细说两种常用方法:
通配符匹配法(最常用)
Nginx的include指令在使用通配符时,如果没有匹配到任何文件,不会抛出配置错误。比如你想加载/etc/nginx/optional.conf这个可选文件,只需要把指令写成:include /etc/nginx/optional.conf*;这样如果文件存在,就会正常加载;如果不存在,通配符匹配不到内容,Nginx会直接忽略这条指令,不会影响配置有效性。不过要注意,这个写法会匹配所有以
optional.conf开头的文件(比如optional.conf.bak这类备份文件),如果有这类文件可能会意外加载,所以建议给备份文件用不同的命名规则(比如optional.conf~)来避免冲突。精确匹配的通配符技巧
如果想严格只匹配目标文件,不想意外加载其他相似命名的文件,可以用更精准的通配符写法:include /etc/nginx/optional.conf[.];这个通配符只会匹配
optional.conf或者optional.conf.,而后者一般不会存在,相当于只针对目标文件生效,不存在时也不会报错,完美模拟IncludeOptional的行为。
需要强调的是,这两种方法和Apache的IncludeOptional逻辑完全一致:只要文件存在且是合法的Nginx配置,就会正常加载;如果文件存在但配置语法错误,Nginx依然会抛出配置错误,不会跳过无效配置。
备注:内容来源于stack exchange,提问作者Amandasaurus

