Debian jessie nginx 和 openssl 1.0.2 使用 ALPN 而不是 NPN
我在我的伺服器上執行 debian jessie,最近升級到支持 http/2 的新 nginx Web 伺服器(nginx 1.10)。與今天一樣,它執行良好,網路伺服器正在使用 http2 協議提供內容。
我已經讀過,chrome 正在放棄 NPN 支持,並且僅在 15.5.2016 之後允許 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,而不建構自己的建構(糟糕的維護)或等待 backports 儲存庫擁有它?如果必須手動連結和維護其中一個版本,我也不希望我的系統上有兩個版本的 openssl。
謝謝你的幫助。
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
- 設置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
(您可能必須更改套件和優先級以適應您的環境。)
- 執行
apt-get update
(通過sudo
/ asroot
)更新包記憶體。nginx
從安裝Debian stretch
:(apt-get install -t stretch nginx
通過sudo
/ as執行此操作root
)。利潤!- 正如我在評論中所描述的那樣,為了降低所涉及的風險,您可以使用chroot之類的東西或LXC之類的容器解決方案。如果你想走這
chroot
條路,你必須在裡面設置一個網路介面:要做到這一點,看看這篇博文,例如,它介紹了network namespaces
.- 希望這可以幫助; 如果您有更多問題,請隨時與我聯繫。我會很感激回饋,我對它的進展很感興趣。