上一篇文章介绍了配置文件有多个位置,并且可以采用include实现主配置文件+分文件的个性化配置模式:Nginx配置文件 所在路径 到底在哪?_身价五毛的博客-CSDN博客
然后就又踩坑了,include不能嵌套调用,即:
如果配置文件是 A.conf ,在A中包含了 include B.conf; 语句,则不能再细分一个 C.conf,使得B文件中包含 include C.conf 语句。
也就是说,nginx在读取配置文件时,只能识别一次 include 语句,并将分配置文件包含进来。include 在调用栈内只能加载一次,但同一个配置文件可以有多个include语句,即主配置文件可以include多次,并且一次include也可以在后面跟多个文件(include *.conf; include A.conf; include B.conf; include C.conf; ...),但这些语句都必须在主配置文件中,具体下面的每个分配置文件不能再次使用include了。
不知道为什么要这样设计,可能是避免循环调用导致无限嵌套,配置文件无限长的情况发生。
太坑了,不知道后续nginx会不会考虑修复。针对这一问题,nginx在运行时不会进行任何提示,测试也是可以通过的。
nginx -t
使用上述语句测试配置文件,嵌套include不会有提示,也不会提示第二次include及以后include的配置文件不会生效。nginx可以正常启动,在实际使用过程中才会发现配置未生效的问题。
nginx环境:
nginx version: nginx/1.10.3 (Ubuntu)
顺便查了下如何提Issue,有点麻烦:
中文社区:开源Web服务提供商 - NGINX开源社区 可以提问等待答复。
官网:nginx: support 需要先订阅,再通过邮件反馈,等待答复。
Mailing lists can be browsed. To post to a mailing list, an e-mail address that will be used for posting must first be subscribed.
Include的用法(重申)
只要include的文件自身语法正确,include可以随意使用,并正确启动nginx。
include文件路径可以是绝对路径,也可以是相对路径,相对路径以nginx.conf(主配置文件)为基准,同时可以使用通配符(例如使用 *.conf 代表所有文件名)。
示例
# 绝对路径
include /etc/conf/nginx.conf
# 相对路径
include conf/component.conf
# 通配符
include *.conf
参考教程: