Nginx

Debian jessie nginx 和 openssl 1.0.2 使用 ALPN 而不是 NPN

  • February 28, 2019

我在我的伺服器上執行 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 日**更新:**在nginxjessie-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/ as root)更新包記憶體。
  • nginx從安裝Debian stretch:(apt-get install -t stretch nginx通過sudo/ as執行此操作root)。利潤!
  • 正如我在評論中所描述的那樣,為了降低所涉及的風險,您可以使用chroot之類的東西或LXC之類的容器解決方案。如果你想走這chroot條路,你必須在裡面設置一個網路介面:要做到這一點,看看這篇博文,例如,它介紹了network namespaces.
  • 希望這可以幫助; 如果您有更多問題,請隨時與我聯繫。我會很感激回饋,我對它的進展很感興趣。

引用自:https://serverfault.com/questions/775298