Jur*_*mec 14 debian nginx openssl debian-jessie http2
我在我的服务器上运行 debian jessie,最近升级到支持 http/2 的新 nginx web 服务器(nginx 1.10)。与今天一样,它运行良好,并且网络服务器正在使用 http2 协议提供内容。
我读过,chrome 正在放弃 NPN 支持,并且只在 2016 年 5 月 15 日之后才允许使用 ALPN。ALPN 是扩展,需要安装 openssl 1.0.2,但在 debian jessie 上只有 openssl 1.0.1(在 debian backports 和另一个存储库上,这个 debian 没有 openssl 1.0.2 版本)。
还有一个问题——我已经从 SPDY 升级到了 http2,几天后,我将不得不关闭 http2 并且无法使用 SPDY,因为这个版本的 nignx 只有 http2。我也读过,这个版本的 debian 将坚持使用 openssl 1.0.1,只有 debian stretch 会有 openssl 1.0.2。但是到发布日期快一年了,chrome 很快就会停止支持,所以我不想失去 http2 协议的好处。
是否有任何解决方案,如何在此系统上安装 openssl 1.0.2,而无需构建自己的构建(糟糕的维护)或等待向后移植存储库拥有它?如果必须手动链接和维护其中之一,我也不希望我的系统上有两个版本的 openssl。
谢谢你的帮助。
gf_*_*gf_ 16
更新2016年8月8日: nginx
在jessie-backports
(版本1.9.10-1~bpo8+3
始建针对openssl >= 1.0.2~
入门。ALPN
现在的工作,如果运行jessie
只是需要包装出来的jessie-backports
,没有必要再以拉包出来的stretch
。
——
原始答案:好吧,根据评论,这是我的答案:在我看来,截至 2016 年 5 月 9 日,没有太多方法可以解决此问题。基本上,您必须尝试以某种方式将现代版本nginx
引入您的系统,并针对>= openssl 1.0.2~
.
我目前看到的唯一两个选项:要么自己编译,你不想这样做,这是很容易理解的,要么将现代包从Debian stretch
系统中提取出来。这涉及一些风险,因为您将一个稳定的环境与另一个环境混合在一起,但在我看来,这些风险非常低,因为您使用的是Debian
.
所以,让我们去试试这个:
将Debian stretch
存储库添加到您的apt sources
. 不要/etc/apt/sources.list
用于此,而是使用内部专用文件/etc/apt/sources.list.d/
来保持清洁,我个人正在使用stretch.list
.
将这些行放在那里:
deb http://httpredir.debian.org/debian/ stretch main contrib non-free
deb-src http://httpredir.debian.org/debian/ stretch main contrib non-free
deb http://security.debian.org/ stretch/updates main contrib non-free
deb-src http://security.debian.org/ stretch/updates main contrib non-free
# stretch-updates, previously known as 'volatile'
deb http://httpredir.debian.org/debian/ stretch-updates main contrib non-free
deb-src http://httpredir.debian.org/debian/ stretch-updates main contrib non-free
Run Code Online (Sandbox Code Playgroud)设置apt pinning以确保您只拉入Debian stretch
您指定的包。用于此的文件是/etc/apt/preferences
,在里面,放:
Package: *
Pin: release n=jessie
Pin-Priority: 900
Package: *
Pin: release a=jessie-backports
Pin-Priority: 500
Package: *
Pin: release n=stretch
Pin-Priority: 100
Run Code Online (Sandbox Code Playgroud)
(您可能需要更改套件和优先级以适应您的环境。)
运行apt-get update
(通过sudo
/ as root
)以更新包缓存。
安装nginx
来自Debian stretch
:apt-get install -t stretch nginx
(通过这样做sudo
/ AS root
)。利润!
正如我在评论中所描述的,为了降低所涉及的风险,您可以使用诸如chroot 之类的东西或诸如LXC 之类的容器解决方案。如果你想走这chroot
条路,你必须在里面设置一个网络接口:要做到这一点,例如看看这篇博文,它介绍了network namespaces
.
希望这可以帮助; 如果您有更多问题,请随时与我联系。我很感激反馈,我对它的进展很感兴趣。
Gre*_*per 11
另一种方法是从 jessie-backports 安装 OpenSSL 1.0.2 并使用来自nginx 自己的存储库的Ubuntu 16.04 LTS 构建。这样你至少使用了一个为 Jessie 构建的 OpenSSL 包。
添加到/etc/apt/sources.list
:
# jessie-backports, from stretch-level but with no dependencies
deb http://httpredir.debian.org/debian/ jessie-backports main contrib non-free
deb-src http://httpredir.debian.org/debian/ jessie-backports main contrib non-free
# Nginx repository - use Ubuntu 16.04 LTS Xenial to get packages compiled with OpenSSL 1.0.2
deb http://nginx.org/packages/mainline/ubuntu/ xenial nginx
deb-src http://nginx.org/packages/mainline/ubuntu/ xenial nginx
Run Code Online (Sandbox Code Playgroud)
然后运行:
apt-get update
apt-get install -t jessie-backports openssl
apt-get install nginx
Run Code Online (Sandbox Code Playgroud)
这显然使您处于官方不受支持的配置中,但也许这比根本没有软件包要好 - 它对我有用。另外,使用 nginx 的 repo 意味着您可以获得最新的更新。
归档时间: |
|
查看次数: |
19513 次 |
最近记录: |