Nginx包含configuration文件的顺序是固定的还是随机的? Apache 明确指出通配符按字母顺序展开。 对于Nginx来说,这似乎并不适用, 手册也没有提到 。
在我的设置中, 20_example.com被包含在00_default之前,这使我00_default定义共享指令(如日志格式)。
根据nginx的源代码, 它使用带有GLOB_NOSORT参数的glob()函数 ,所以文件包含的顺序不能清晰的build立。
这在2012年11月发生了变化 ,首先在1.3.10发布。 从更改文件 :
现在,如果在Unix系统上使用带掩码的“include”指令,则包含的文件按字母顺序sorting。
AD7six的答案并不完全正确。 当两个服务器块具有相同的“特性”时,顺序也很重要,例如两者都在server_name中使用正则expression式,并且传入请求与以下两者匹配:
server { server_name ~^(www\.)?(?<domain>foo\.com|bar\.com|baz\.com)$; ... }
和
server { server_name ~^(www\.)?(?<domain>.+)$; ... }
在这种情况下,两个服务器块不能分散在两个文件,因为它们的顺序不能保证。
由于OP指出log_format命令,所以对于自定义log_formats来说,确实非常重要,如果将两个types文件放在同一个目录中,一些带有log_formats的文件,一些带有使用这些log_formats的服务器块的文件,结果将是高度不可重复的configuration。
在我们第一次把我们手工制作的nginx农场变成puppet的时候,我们开始看到一些nginx从头开始安装,在一个相同的硬件/设置中失败,经过了很多debugging奇怪的情况,比如有两个/ etc / nginx / * r)与一个md5match和相同的二进制产生不同的结果(无效log_format错误之一和其他工作),我们学习了艰难的方式, 这对于一些指令如log_format 确实非常重要 。
我们通过将conf.d / *中的服务器块生成移到conf.d / *之后的另一个文件夹中来解决这个问题。