在 Chef 部署的 Nginx 服务器中扩展 mime 类型

extending mime types in a Chef deployed Nginx server

我希望在我的 Nginx 配置中扩展 mime 类型。

我了解到原则上我可以编辑 mime.types 文件,或者在配置的 http 块中包含 mime.types 之后,您可以按照 include mime.typestypes = {...} 附加更多类型 a la this answer.

由于我使用 Chef 设置 Nginx,我在 sites-enabled 文件夹中有一个模板化配置,它包含在 Nginx 配置中。我宁愿不必模板化 nginx 配置或 mime.types 文件,所以我希望可以在启用站点的配置文件中获取它。

本着与上述 linked 问题相似的精神,我可以将其包含在我的启用站点的文件中以获得相同的效果吗?

http {
    types {
        # here is additional types
    }
}

我的工作理论是,如果块按照上面 link 中的描述工作,添加这样的块不会覆盖 Nginx 配置中的 http 块,但会像我一样扩展它已将 types 直接添加到 nginx.conf 中的 http 块。

这是一个有效的策略吗?还是我忽略了一些更容易的事情?

尽管文档中没有明确说明,nginx types 指令在继承方面似乎与其他指令类似。

当且仅当当前级别上没有定义 type 指令时,该指令才从上一级别继承。

types 指令可能出现在 httpserverlocation 块级别。

要扩展 mime 类型(而不是重新定义它们),可以在任何包含 httpserver 或 [=17= 的文件中添加一个 types 块。 ] 上下文。

但是如果你在server或者location层级添加一个types块,你应该在同一层级再添加一个include mime.types语句,以免丢失系统默认值。

在您启用站点的文件中:

# (1)
server {
    # (2)
    location ... {
        # (3)
    }
}

如果您的启用站点的文件包含 server { ... } 块定义,您可以在位置 (1) 添加一个类型块,这将增加主 nginx.conf 文件已经加载的 mime 类型。

但是,如果您在位置 (2) 或 (3) 中添加了一个类型块,您还需要添加一个 include 语句以再次引入系统类型:

server {
    include mime.types;
    types { ... }  
    ...
}

types 指令是 documented here