如何在 14.04 上安装 nginx/development?

如何在 14.04 上安装 nginx/development?

直到最近我一直在使用,ppa:nginx/development但突然我无法再在 14.04 上安装 nginx 版本了。

https://launchpad.net/~nginx/+archive/ubuntu/development还指出:

由于构建依赖性或由于版本过旧而无法解决的问题,以下 Ubuntu 版本不再受 PPA 支持:

  • 值得信赖 (14.04)

我还有哪些其他选择可以在 14.04 上获取较新版本的 nginx?

我至少需要http2支持(我在一些机器上成功运行 1.9 和 1.13)。

答案1

仅供参考:我是该 PPA 的维护者,因此这些都是与为什么PPA 不再支持 14.04。

仅供参考,“NGINX Development”不再是“Development”。Development 分支变成了“Mainline”分支,所以你应该这样称呼它 - PPA 是nginx/development因为它是在他们称之为 Mainline 之前保留下来的“旧”PPA。

我本来想改变它但这并不是什么大事所以......


为什么 PPA 不再支持 Trusty 14.04?

14.04 版上不存在较新 NGINX 所需的依赖项,而且我们仅构建 Debian 中的 Debian 软件包,而不构建 Ubuntu 特定版本。因此,14.04 版 NGINX 软件包的构建失败,因为 NGINX 中的一个或多个代码无法在(已有 4 年多历史的)14.04 代码库中构建。

构建日志显示了此失败:

cc -c -fPIC -g -O2 -fPIE -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security -g -O2 -fPIE -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security -fPIC -D_FORTIFY_SOURCE=2 -DNDK_SET_VAR -I src/core -I src/event -I src/event/modules -I src/os/unix -I src/http/modules/perl -I /<<PKGBUILDDIR>>/debian/modules/http-ndk/objs -I objs/addon/ndk -I /<<PKGBUILDDIR>>/debian/modules/http-ndk/src -I /<<PKGBUILDDIR>>/debian/modules/http-ndk/objs -I objs/addon/ndk -I /<<PKGBUILDDIR>>/debian/modules/nchan/src -I /<<PKGBUILDDIR>>/debian/modules/http-lua/src/api -I /usr/include/lua5.1 -I /<<PKGBUILDDIR>>/debian/modules/rtmp -I /usr/include/libxml2 -I objs -I src/http -I src/http/modules -I src/http/v2 -I /<<PKGBUILDDIR>>/debian/modules/http-ndk/src -I src/mail -I src/stream \
        -o objs/addon/store/store_common.o \
        /<<PKGBUILDDIR>>/debian/modules/nchan/src/store/store_common.c
make[3]: *** No rule to make target `/<<PKGBUILDDIR>>/debian/modules/nchan/src/hiredis/hiredis.c', needed by `objs/addon/hiredis/hiredis.o'.  Stop.

... 涵盖 PPA 14.04 中的所有架构构建(1.15.0 的构建日志:amd64arm64armhfi386, 和ppc64el)。确切的构建失败在于第三方模块,该模块随附nginx-extras并被许多人使用。此构建失败并非 NGINX 主线分支所独有,因为相同的失败也发生在稳定分支中。并且此构建失败仅有的发生在 14.04。

在任何情况下,此模块都不会在 14.04 中构建;因此 14.04 构建无法完成。我可以降低Trusty 软件包中的此功能,但这会使软件包不一致跨版本。

出于这个原因,我删除了对 14.04 版本的 NGINX PPAs 支持。


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 上游存储库的说明,但为了做到这一点,你必须先删除所有其他 NGINX 包,并确保你没有使用任何第三方模块,如 Lua


“真正的问题”,或者“为什么你应该升级到较新的 Ubuntu 而不是使用 14.04 来运行较新的 NGINX”:

你真正应该去的主要原因是升级到较新的 Ubuntu而不是尝试使用 14.0414.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 的软件包。

相关内容