nginx
在 Ubuntu 上,有一个虚拟包,是由官方存储库中的五个包之一提供的(至少从 14.04 开始,nginx-core
我相信默认为):
$ apt-cache depends nginx | tail -n+2 | cut -d: -f 2 | sort -u
nginx-core
nginx-extras
nginx-full
nginx-light
nginx-naxsi
这些包之间有什么区别以及它们的推荐用例是什么?
这个有点旧Debian 维基页面extras
有、full
和light
之间的功能比较naxsi
,但没有提到core
。 14.04 中有多少变化?
次要
的据我了解,nginx
它不支持像 Apache 那样的模块运行时启用,因此安装会nginx-extras
影响性能吗?
答案1
注意:Debian 已对此进行调整,因此不再存在风格;这最终可能会在 23.10 中影响 Ubuntu。
虽然 Steven 的回答触及了关键点,并对每种风格做了非常基本的总结,但我将为您提供更详细的差异描述,因为我在包装方面投入了大量精力,每种风格中非常不同的模块集对于一个好的答案来说绝对至关重要。基本描述并不能很好地说明比较。(此外,感谢 Steven 引用了我以前的博客(甚至称我为“维护者”)。我本想将 nginx-is-coming-to-main 帖子移植到我的新博客中,但我还没有机会。)
还请注意,NGINX Web 服务器的最新软件包可在 NGINX PPA 中找到,由我自己维护,几乎完全基于 Debian。(稳定的 PPA(截至本文发布时为 1.6.2 版);主线 PPA(本文发布时版本号为 1.7.7,1.7.8 预计于 2014 年 12 月 4 日发布)
不同风味nginx
:
不同的版本都是相同的版本nginx
,但是 Debian 软件包维护人员决定使用不同的版本以提供不同的功能集(针对nginx-extras
)以及 Web 服务器往往在网站中使用的最低限度和功能最有效的“完整”功能集。我不知道选择某个功能而不是另一个功能的确切原因,但是在与 IRC 上的一位 Debian 维护人员进行补充讨论时,他发表了一份声明,肯定了我最初的评估,即每个变体都旨在为不同的用例提供不同的功能集 -light
满足网站托管最低限度的轻量级功能集,full
不包含任何更重的额外功能的更完整的功能集,以及extras
可包含在 Ubuntu 中的软件包中的几乎所有内容。 naxsi
在 15.04 之前,是 Naxsi 变体,其中只包含最低限度的模块,因为 naxsi 可能相当耗费资源。
据称,根据一位定期与上游 NGINX 进行私人对话(目前我无法发布日志)的 Debian NGINX 维护人员的说法,NGINX 2.x 将提供可加载模块支持。在这种情况下,、light
和full
将extras
成为元包,它们将调用包含每个模块的单个包。但尚不清楚这种情况何时发生,也不知道哪些模块实际上能够做到这一点。
目前,nginx
虚拟包的设计目的只是安装可用版本之一。默认情况下,就像nginx-core
在主包中一样,我们希望人们更多地使用它,nginx-core
它是虚拟包中第一个被看到并尝试安装的项目。(但是,该nginx
包可以依赖于 的任何一种风格nginx
,它主要是为了让那些不需要任何特定风格偏好的人更容易安装)
详细分析每个变体中可用的特定模块(基于生动debian/control
档案和可信赖debian/control
文件(因为 Naxsi 包已从 Vivid 中删除))可从下方获得。 请注意,这并不反映 Ubuntu 中最新的更改,你应该参考这些软件包描述,以确保你拥有更新、准确的信息:
nginx-core
自 14.04 版起,是 Ubuntu 存储库主部分中唯一的版本,并且存在仅有的在 Ubuntu 存储库中(不在 PPA 或 Debian 中,并且永远不会包含在 Debian 中)。它实际上与风味相同nginx-full
,但不包含任何第三方模块。使用nginx-full
作为此变体基础的原因是,我们希望在构建的二进制文件中提供一组相对完整的核心模块,同时保留第三方模块。因此,它不包含任何第三方模块,因为安全团队对代码进行了审查,发现第三方模块的编码风格差异很大,不像 nginx-tarball-included 模块那样得到很好的支持(这在主要包含请求/报告错误,其中包含了关于 Ubuntu Main 中可以包含哪些内容的讨论要点和进一步审查讨论nginx
)。此处启用的模块的完整列表位于软件包描述中,我在这里挑剔了一下:标准 HTTP 模块:核心、访问、Auth Basic、自动索引、浏览器、字符集、空 GIF、FastCGI、Geo、Gzip、标头、索引、限制请求、限制区域、日志、地图、Memcached、代理、Referer、重写、SCGI、拆分客户端、SSI、上游、用户 ID、UWSGI。
可选 HTTP 模块:添加、调试、GeoIP、Gzip 预压缩、HTTP Sub、图像过滤器、IPv6、真实 IP、Spdy、SSL、存根状态、替换、WebDAV、XSLT。
邮件模块:邮件核心、IMAP、POP3、SMTP、SSL。
nginx-light
是可用的最轻量版本nginx
。它位于 Universe 存储库中,您必须启用它才能使用它。它不启用-core
或中可用的大量模块-full
。它还包含第三方模块。其中可用的模块如下:标准 HTTP 模块:核心、访问、Auth Basic、自动索引、字符集、空 GIF、FastCGI、Gzip、标头、索引、日志、地图、代理、重写、上游。
可选 HTTP 模块:身份验证请求、调试、Gzip 预压缩、IPv6、真实 IP、SSL、存根状态。
第三方模块:Echo。
nginx-full
nginx
是该软件包中功能最丰富的版本之一。与它的light
对应版本一样,它位于 Universe 存储库中。它启用了 from-nginx 源码包中标准和可选的大多数核心模块,以及旨在扩展 nginx Web 服务器功能的几个第三方模块。它的模块如下:标准 HTTP 模块:核心、访问、Auth Basic、自动索引、浏览器、字符集、空 GIF、FastCGI、Geo、Gzip、标头、索引、限制请求、限制区域、日志、地图、Memcached、代理、Referer、重写、SCGI、拆分客户端、SSI、上游、用户 ID、UWSGI。
可选 HTTP 模块:添加、身份验证请求、调试、GeoIP、Gzip 预压缩、HTTP Sub、图像过滤器、IPv6、真实 IP、Spdy、SSL、存根状态、替换、WebDAV、XSLT。
邮件模块:邮件核心、IMAP、POP3、SMTP、SSL。
第三方模块:Auth PAM、DAV Ext、Echo、HTTP Substitution Filter、Upstream Fair Queue。
nginx-extras
是该软件包中功能最丰富的版本nginx
。与它的兄弟版本一样full
,light
它也位于 Universe 存储库中。它启用了 Universe 存储库中的所有模块,nginx-full
但还包含其他模块(例如 Perl 模块)和更多旨在进一步扩展 nginx Web 服务器功能的第三方模块。其完整模块列表如下:标准 HTTP 模块:核心、访问、Auth Basic、自动索引、浏览器、字符集、空 GIF、FastCGI、Geo、Gzip、标头、索引、限制请求、限制区域、日志、地图、Memcached、代理、Referer、重写、SCGI、拆分客户端、SSI、上游、用户 ID、UWSGI。
可选 HTTP 模块:添加、身份验证请求、调试、嵌入式 Perl、FLV、GeoIP、Gzip 预压缩、图像过滤器、IPv6、MP4、随机索引、真实 IP、安全链接、Spdy、SSL、存根状态、替换、WebDAV、XSLT。
邮件模块:邮件核心、IMAP、POP3、SMTP、SSL。
第三方模块:Auth PAM、Chunkin、DAV Ext、Echo、Embedded Lua、Fancy Index、HttpHeadersMore、HTTP Substitution Filter、http push、Nginx Development Kit、Upload Progress、Upstream Fair Queue。
nginx-naxsi
是 nginx 的变体,具有 Naxsi Web 应用程序防火墙模块。它也在 Universe 中,但是Debian 维护人员不再支持此版本,并且将从 Ubuntu 15.04 版本中完全删除。 除了 Naxsi WAF 模块外,它还包含一组比 更轻的模块nginx-full
。模块的完整列表如下:标准 HTTP 模块:核心、访问、Auth Basic、自动索引、浏览器、字符集、核心、空 GIF、FastCGI、Geo、Gzip、标头、索引、限制请求、限制区域、日志、地图、Memcached、代理、Referer、重写、拆分客户端、SSI、上游、用户 ID。
可选 HTTP 模块:调试、IPv6、真实 IP、SSL、存根状态。
第三方模块:Naxsi、Cache Purge、Upstream Fair。
不同口味的资源使用情况
虽然我不知道对 的各种版本进行过任何基准测试nginx
,但通常可以合理地假设,您使用的 版本功能越多nginx
,它使用的资源就越多。
但是,与 Apache 不同,Apache 在启用更多模块时可能会占用大量内存,但nginx
在启用模块时,它仍然不会像 Apache 那样占用太多内存。(此说法的例外是风格naxsi
。该风格总是消耗更多资源,因为它既是 Web 应用程序防火墙,也是 Web 服务器。)
如果我找到基准测试,我会在这个答案中添加它们,但同样,我不知道各种风格之间的任何现有基准测试。即使我运行的网站流量不大,我也没有注意到PHP 驱动的网站上nginx-extras
、、nginx-full
或之间的任何实际性能下降。nginx-light
答案2
我根据以下描述制作了一些表格:https://salsa.debian.org/nginx-team/nginx/-/blob/master/debian/control(截至撰写本文时,最新更新于 2020 年 6 月 30 日)。鉴于表格及其所基于的描述都是手动生成的,因此可能会有错误。
标准模块 | nginx 核心 | nginx-完整 | nginx-light | nginx-extras |
---|---|---|---|---|
核 | ✔️ | ✔️ | ✔️ | ✔️ |
使用权 | ✔️ | ✔️ | ✔️ | ✔️ |
基本认证 | ✔️ | ✔️ | ✔️ | ✔️ |
自动索引 | ✔️ | ✔️ | ✔️ | ✔️ |
浏览器 | ✔️ | ✔️ | ✔️ | |
空 GIF | ✔️ | ✔️ | ✔️ | ✔️ |
快速CGI | ✔️ | ✔️ | ✔️ | ✔️ |
地理 | ✔️ | ✔️ | ✔️ | |
限制连接数 | ✔️ | ✔️ | ✔️ | |
限制请求 | ✔️ | ✔️ | ✔️ | |
地图 | ✔️ | ✔️ | ✔️ | ✔️ |
Memcached | ✔️ | ✔️ | ✔️ | |
代理人 | ✔️ | ✔️ | ✔️ | ✔️ |
引荐来源 | ✔️ | ✔️ | ✔️ | |
改写 | ✔️ | ✔️ | ✔️ | ✔️ |
新加坡化学工业协会 | ✔️ | ✔️ | ✔️ | ✔️ |
拆分客户端 | ✔️ | ✔️ | ✔️ | |
西澳大利亚州立大学 | ✔️ | ✔️ | ✔️ | ✔️ |
可选模块 | nginx 核心 | nginx-完整 | nginx-light | nginx-extras |
---|---|---|---|---|
添加 | ✔️ | ✔️ | ✔️ | |
授权请求 | ✔️ | ✔️ | ✔️ | ✔️ |
字符集 | ✔️ | ✔️ | ✔️ | ✔️ |
WebDAV | ✔️ | ✔️ | ✔️ | ✔️ |
音频视频 | ✔️ | |||
地理IP | ✔️ | ✔️ | ✔️ | |
甘齐普 | ✔️ | ✔️ | ✔️ | |
Gzip | ✔️ | ✔️ | ✔️ | ✔️ |
Gzip 预压缩 | ✔️ | ✔️ | ✔️ | ✔️ |
标头 | ✔️ | ✔️ | ✔️ | ✔️ |
HTTP/2 | ✔️ | ✔️ | ✔️ | ✔️ |
图像过滤器 | ✔️ | ✔️ | ✔️ | |
指数 | ✔️ | ✔️ | ✔️ | ✔️ |
日志 | ✔️ | ✔️ | ✔️ | ✔️ |
MP4 | ✔️ | |||
嵌入式 Perl | ✔️ | |||
随机索引 | ✔️ | |||
真实 IP | ✔️ | ✔️ | ✔️ | ✔️ |
片 | ✔️ | ✔️ | ✔️ | ✔️ |
安全链接 | ✔️ | |||
星海 | ✔️ | ✔️ | ✔️ | ✔️ |
SSL | ✔️ | ✔️ | ✔️ | ✔️ |
SSL 预读 | ✔️ | ✔️ | ✔️ | |
存根状态 | ✔️ | ✔️ | ✔️ | ✔️ |
代换 | ✔️ | ✔️ | ✔️ | |
线程池 | ✔️ | ✔️ | ✔️ | ✔️ |
上游 | ✔️ | ✔️ | ✔️ | ✔️ |
用户身份 | ✔️ | ✔️ | ✔️ | |
XSLT | ✔️ | ✔️ | ✔️ |
邮件模块 | nginx 核心 | nginx-完整 | nginx-light | nginx-extras |
---|---|---|---|---|
邮件核心 | ✔️ | ✔️ | ✔️ | |
验证 HTTP | ✔️ | ✔️ | ✔️ | |
代理人 | ✔️ | ✔️ | ✔️ | |
SSL | ✔️ | ✔️ | ✔️ | |
信息访问协议 | ✔️ | ✔️ | ✔️ | |
POP3 | ✔️ | ✔️ | ✔️ | |
邮件传输协议 | ✔️ | ✔️ | ✔️ |
溪流 | nginx 核心 | nginx-完整 | nginx-light | nginx-extras |
---|---|---|---|---|
流核心 | ✔️ | ✔️ | ✔️ | |
地理IP | ✔️ | ✔️ | ✔️ | |
GeoIP2 | ✔️ | ✔️ |
第三方模块 | nginx 核心 | nginx-完整 | nginx-light | nginx-extras |
---|---|---|---|---|
验证 PAM | ✔️ | ✔️ | ||
缓存清除 | ✔️ | |||
DAV 扩展 | ✔️ | ✔️ | ||
回声 | ✔️ | ✔️ | ✔️ | |
花式指数 | ✔️ | |||
GeoIP2 | ✔️ | ✔️ | ||
标题更多 | ✔️ | |||
嵌入式 Lua | ✔️ | |||
HTTP 替换 | ✔️ | ✔️ | ||
恩昌 | ✔️ | |||
上传进度 | ✔️ | |||
上游公平队列 | ✔️ | ✔️ |
答案3
以下是一个非常高层次的评估,主要基于包中的描述.(我无法提供每个用例的示例,但我已经想出了这么多,以满足我的好奇心,所以我也可以贡献它。)
从小到大:
nginx-light:“基础版”
实现基本功能的最小模块集。
nginx-naxsi:“带有 naxsi 的版本”
最小集合,加上强化的“Nginx Anti Xss & Sql Injection”配置及其所需的插件。
nginx-core:“核心版本”
标准的 nginx 部署,较少的第三方模块。
这是第一个 Canonical 支持的 nginx 软件包。它位于 Ubuntu“主”存储库中,而不是社区支持的“universe”存储库中。请参阅公告“nginx-core 现在位于 Ubuntu Trusty 14.04 Main 中!”维护者的非官方博客(较旧且现已不存在)的存档或维护者非官方博客上旧帖子的副本:
Ubuntu Main 中不包含任何已建立的 nginx 版本(nginx-light、nginx-full、nginx-extras 和 nginx-naxsi)。Ubuntu 安全团队表示,第三方模块在编码上存在很大差异,因此无法支持。
为此,我们创建了一个名为 nginx-core 的包,该包已包含在主存储库中。此包仅包含随原版 nginx tarball 一起提供的模块。我们不在此包中包含任何第三方模块,只包含来自 NGINX 上游的模块。
nginx-full:“标准版”
标准的 nginx 部署,包括常用的第三方模块。
nginx-extras:“扩展版本”
标准 nginx 部署加上几个不常用且较大的模块。