Nginx踩坑记录 配置文件中的include不能嵌套 (include的文件里不能再include其他文件了)

上一篇文章介绍了配置文件有多个位置,并且可以采用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)

Nginx踩坑记录 配置文件中的include不能嵌套 (include的文件里不能再include其他文件了)_第1张图片

顺便查了下如何提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

参考教程:

Nginx include 主子配置文件 - 简书注意root权限创建相关配置1、创建conf目录 2、创建server配置文件 写入server部分配置内容 3、nginx.conf中http下添加include配置 配置...https://www.jianshu.com/p/5d35a27da411

nginx的include_nginx include_backzy的博客-CSDN博客一台服务器配置多个网站,如果配置都写在nginx.conf主配置文件中,会导致nginx.conf主配置文件变得非常庞大而且可读性非常的差。那么后期的维护就变得麻烦。假设现在希望快速的关闭一个站点,该怎么办? 1.如果是写在nginx.conf中,则需要手动注释,比较麻烦 2.如果是include的方式,那么仅需修改配置文件的扩展名,即可完成注释 Include包含的作用是为了简化主配置文件,便于阅读。inlcude /etc/nginx/online/*.conf  #线上使用的配置mv /ethttps://blog.csdn.net/cmdd_/article/details/108622689

你可能感兴趣的:(nginx,服务器,linux,运维,ubuntu)