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

本文讨论了Nginx配置中include指令不能嵌套的问题,即配置文件在被include后不能在其内部再次使用include。这可能导致配置不生效,而nginx启动时不会给出错误提示。建议在配置时遵循这一限制,以避免潜在问题。同时,文章提供了如何在官方社区提出问题的途径。
摘要由CSDN通过智能技术生成

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

参考教程:

Nginx include 主子配置文件 - 简书注意root权限创建相关配置1、创建conf目录 2、创建server配置文件 写入server部分配置内容 3、nginx.conf中http下添加include配置 配置...icon-default.png?t=N7T8https://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配置文件,可以使用include指令来引入其他的配置文件,该指令的语法如下: ``` include file | mask; ``` 其,file参数表示要引入的配置文件的路径,mask参数则表示要引入的一组配置文件路径的通配符。下面是include指令的一些使用场景: 1. 引入其他文件的配置 在nginx的主配置文件,可以使用include指令来引入其他文件的配置,这样可以使配置文件更加清晰,易于维护。例如: ``` http { ... include /etc/nginx/conf.d/*.conf; ... } ``` 上述配置将会引入/etc/nginx/conf.d目录下所有以.conf为后缀的文件的配置。 2. 拆分大型配置文件 如果一个配置文件非常大,可以使用include指令将其拆分成多个小的配置文件,这样可以使配置文件更加可读,易于维护。例如: ``` http { ... include /etc/nginx/conf.d/first.conf; include /etc/nginx/conf.d/second.conf; ... } ``` 上述配置将会引入/etc/nginx/conf.d目录下的first.conf和second.conf文件的配置。 3. 动态加载配置 在一些场景下,可能会需要动态加载配置文件,例如通过脚本生成配置文件或者从远程服务器获取配置文件等。可以通过include指令动态加载配置文件。例如: ``` http { ... include /etc/nginx/conf.d/*.conf; include /etc/nginx/conf.d/*.conf.dynamic; ... } ``` 上述配置将会引入/etc/nginx/conf.d目录下以.conf为后缀的文件和以.conf.dynamic为后缀的动态配置文件的配置。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值