直到最近我一直在使用ppa:nginx/development
,但突然我无法在 14.04 上从那里安装 nginx 版本。
https://launchpad.net/~nginx/+archive/ubuntu/development还指出:
PPA 不再支持以下 Ubuntu 版本,因为构建依赖关系或由于版本年龄而无法解决的问题:
- 值得信赖 (14.04)
在 14.04 上获得更新版本的 nginx 时,我还有哪些其他选择?
我至少需要http2
支持(我在某些机器上成功运行了 1.9 和 1.13)。
仅供参考,“NGINX 开发”不再是“开发”。开发分支变成了“主线”分支,所以你应该这样称呼它——PPA
nginx/development
是因为它是在他们称之为主线之前保留的“旧”PPA。我本来打算改变它,但它并不是一个重要的优先事项,所以......
为什么 PPA 不再支持 Trusty 14.04?
较新的 NGINX 所需的依赖项在 14.04 上不存在,我们仅从 Debian 构建 Debian 软件包,而不是 Ubuntu 特定的变体。因此,NGINX 14.04 包的构建失败,因为 NGINX 中的一位或多位代码没有构建在(现在超过 4 年的)14.04 代码库中。
构建日志显示此失败:
... 跨 PPA 14.04 中的所有体系结构构建(1.15.0 的构建日志:
amd64
、、、、arm64
和)。确切的构建失败在于第三方模块,该模块随许多人一起提供并被许多人使用。这种构建失败也不是 NGINX 的 Mainline 分支所独有的,因为同样的失败发生在 Stable 分支中。而这个构建失败只发生在 14.04 中。armhf
i386
ppc64el
nginx-extras
该模块在任何情况下都不会在 14.04 中构建;因此 14.04 构建无法完成。我可以从 Trusty 的包中删除此功能,但这会使包在不同版本之间不一致。
出于这个原因,我放弃了 14.04 作为 NGINX PPA 的支持。
PPA 曾经有一个较旧的 1.13.x 版本,为什么不再起作用了?
至于 PPA 不再有 1.13,那是因为通常(通常每年一次,大约在每年 7 月中下旬的某个时间),我会检查并清理 PPA 以删除“不支持在PPA”发布。
这就是为什么 PPA 不再适用于 14.04 的原因,因为我去清理了 PPA 中的包。
(我们在 2014 年遇到了 Precise 类似的问题,出于同样的原因,我不得不终止 Precise 构建:旧的库不会构建新的 NGINX 和模块要求)
PPA 的替代方案:使用 NGINX 上游存储库
这将不包含 nginx-extras 或任何第三方模块,例如 Lua 模块 - 如果你需要那些你运气不好。
现在,要在 14.04 中更新 NGINX,您可以尝试使用说明安装 NGINX Upstream Repositories,但是为了做到这一点,您必须先删除所有其他 NGINX 包,并确保您没有使用任何第三方Lua 等模块
“真正的问题”,或者,“为什么你应该升级到更新的 Ubuntu 而不是为更新的 NGINX 使用 14.04”:
您真正应该升级到更新的 Ubuntu而不是尝试使用 14.04 的主要原因是 14.04 上的HTTP/2 将不具备真正支持 HTTP/2 所需的所有功能- 即来自 OpenSSL 库的 ALPN 支持。
HTTP/2 需要 ALPN 支持才能在现代真正发挥作用;这在 Ubuntu 14.04 中的 OpenSSL 库中不可用。许多浏览器不支持 HTTP/2 (NPN) 的另一种模式,因此您现在实际上不会从许多库中获得 HTTP/2 支持,因为许多浏览器等不支持 NPN HTTP/2。
解决此问题的唯一方法是将您的系统升级到至少 16.04,因为这些将提供足够新的 OpenSSL 以启用 HTTP/2 支持,并且还将使您能够使用更新的 NGINX 构建,因为库更新和构建依赖项编译较新的 NGINX 并且存在来自 Debian 的软件包。