NPNではなくALPNを使用するためのopenssl 1.0.2を備えたDebian jessie nginx


14

私は自分のサーバーでdebian jessieを実行していますが、最近http / 2をサポートする新しいnginx Webサーバー(nginx 1.10)にアップグレードしました。今日のように、うまく機能し、ウェブサーバーはhttp2プロトコルでコンテンツを配信しています。

私は、読んだことがあるクロムがNPNのサポートを落としているだけで2016年5月15日後にALPNすることができます。ALPNは拡張機能で、openssl 1.0.2がインストールされている必要がありますが、debian jessieではopenssl 1.0.1のみです(debianバックポートや他のリポジトリにも、このdebian用のopenssl 1.0.2バージョンはありません)。

そして問題があります-SPDYからhttp2にアップグレードしましたが、数日でhttp2をオフにする必要があり、このバージョンのnignxにはhttp2しかありませんのでSPDYを使用できません。また、debianのこのバージョンはopenssl 1.0.1でスタックし、debian stretchのみがopenssl 1.0.2を持つことを読みました。しかし、リリース日にはほぼ一年があり、クロムはすぐにサポートを廃止するので、http2プロトコルの利点を失いたくありません。

解決策はありますか?このシステムにopenssl 1.0.2をインストールする方法はありますか?独自のビルドを構築する(メンテナンスが悪い)か、バックポートリポジトリがそれを保持するのを待つことはありませんか?また、システムのopensslの2つのバージョンのいずれかを手動でリンクおよび保守する必要がある場合は、このバージョンは必要ありません。

助けてくれてありがとう。


あなたは使用することができますapt pinningし、使用opensslのアウトDebian stretch
-gf_

@gf_システムを破壊する非常に高いリスク。多くのことがOpenSSLに依存しています。
マイケルハンプトン

@MichaelHamptonまあ、私はリスクのレベルに関して判断することはできません、私はそれが非常に高いことを疑います。私が取得しようとクルトRoeckx、メンテナの1つとつもり1.0.2jessieすぐに(当時拒否された)凍結した後、ちょうど:「このバージョンは、1.0.1バージョンと互換性があり、私は何も期待しないでください。 1.0.1から1.0.2への移行を中断します。」(私はもっと知っているだろうlibc6。)
gf_

@gf_そのコンテキストで「取得」するには、OpenSSLを使用するすべてを再コンパイルする必要があります。それが拒否されたことは驚くことではありません。Debianは古くて安定しているのが好きです。あなたの提案の文脈では、OpenSSLを使用するすべてのストレッチパッケージを取り込むことも意味しますが、それはたくさんのことです。
マイケルハンプトン

@MichaelHampton私はDebianのポリシーをよく知っていますし、これが当時拒否されたことにも驚いていません(これを言ったり、この印象を作りたくなかった)。しかし:(多分私の言葉遣いが間違っていました):こうapt-get install -t stretch nginx(バニラ上Debian jessienginxに引っ張ってくるインストール): nginx nginx-common nginx-full libnginx-mod-http-auth-pam libnginx-mod-http-geoip libnginx-mod-http-image-filter libnginx-mod-http-xslt-filter libnginx-mod-mail libnginx-mod-stream libssl1.0.2。(これらは10個のパッケージです。)
gf_

回答:


16

更新2016年8月8日: nginxjessie-backports(バージョンが1.9.10-1~bpo8+3反対に建てられたopenssl >= 1.0.2~取得。ALPNランニングがあれば、今働いてjessieちょうど外のパッケージを必要とするjessie-backports必要はありません、の引き抜きパッケージにはもうstretch

-

元の答え:さて、コメントによると、ここに私の答えがあります:私の意見では、今日、2016/05/09の時点でこれを解決する多くの方法はありません。基本的に、あなたは何らかの形でnginxあなたのシステムにモダンを取り入れようとし、に対してコンパイルしなければなりません>= openssl 1.0.2~

私が現在見る唯一の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 updatesudo/ as を介してroot)実行してパッケージキャッシュを更新します。

  • nginxからインストールしますDebian stretchapt-get install -t stretch nginxsudo/ 経由でこれを行いますroot)。利益!

  • 私のコメントで説明したように、関与するリスクをさらに下げるには、chrootのようなものやLXCのようなコンテナソリューションを使用できます。行きたい場合はchroot、内部にネットワークインターフェースを設定する必要があります。これを行うには、たとえばに紹介するこのブログ投稿をご覧くださいnetwork namespaces

  • お役に立てれば; さらに質問がある場合は、お気軽にご連絡ください。私はフィードバックに感謝します、そして、私はそれがどうなるかに興味があります。


私はあなたの答えの説明によってnginxを今日インストールしました、そしてすべてがうまくいくようです!私が余分に行う必要があるのは、nginxリポジトリからnginx 1.10があり、そのバージョンはdebianリポジトリパッケージと互換性がないため、古いnginxインストールを削除することでした(しかし、debian nginxからアップグレードするときにもこれを行いました1.10なので、問題ではありませんでした)。あなたの努力と助けに感謝します!
ユライNemecの

@JurajNemec素晴らしい!フィードバックありがとうございます!ALPNすでにサポートを確認しましたか?
gf_

はい。でそれをチェックHTTP2テストおよびSSL Labsのテスト ALPNのサポートがあることを、両方の状態。またnginx -V、バージョンがopenssl 1.0.2+でコンパイルされているという情報も提供します。だから私はそれが正しく動作していると思います。
ジュラジネメック

@JurajNemec素晴らしい、いいですね!可能であれば、このセットアップをしばらく(おそらく4週間または8週間)実行した後に小さな更新プログラムを入手したいと思います。ありがとう!
gf_

@JurajNemec Googleが切り替えを行い、NPNを削除したようです。セットアップは期待どおりに機能しますか?
-gf_

11

もう1つの方法は、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

次に実行します:

apt-get update
apt-get install -t jessie-backports openssl
apt-get install nginx

これは明らかに公式にサポートされていない構成になりますが、おそらくパッケージをまったく持たないよりも良いでしょう-そしてそれは私のために働いた。さらに、nginxのレポを使用すると、最新の更新を取得できます。


このルートに進む理由を詳しく説明してください。「さらに、nginxのレポを使用すると、最新の更新が得られます。」:私が説明した方法を使用しても、「最新の更新」が得られます。
gf_

nginxのパッケージは、Debianのリリースプロセスではなくリリースプロセスの一部であるため、リリースと同じ日に更新されます。安定版パッケージではなくメインラインパッケージを含めましたが、上記のパスで/ mainlineを削除するだけで安定版を取得できます。どちらを好むかはあなた次第です。
GreenReaper

上記を拡張するには、stretchは現在の「テスト」リリースであるため、テストから移行するのにかかる時間に基づいて最小遅延があります。そしてそれはそれはすぐに不安定にそれを作ると仮定しています-例えば、1.10.0をされた4月26日にリリースされますが、不安定な4月29日にプッシュし、5月5日にストレッチに移行PTSを参照してください)。
GreenReaper

1
私はこれらの事実をよく知っています、ありがとう。:)安定したサービスを提供しようとする場合、「新しいパッケージ」が必要な場合((?)だけ)に問題は要約されると思います。私の知る限り、多くの人がDebianを選んでいます(そして、これが質問の対象となるOSです)なぜなら、それは安定しているからです。ソフトウェアの新しいバージョンの実行には、かなりのリスクが伴います。しかし、とにかく、環境、期待、ニーズが異なるため、これをどのように処理するかという一般的なルールはないと思います。その上:あなたの意見をありがとう、私はそれが人々にとって価値があると確信しています。前の私のラインは、どんな種類の攻撃も意味しません。
gf_

1
あなたが言うように、それは学位の問題です。最先端になりたい場合は、ビルドを毎日コンパイルできます。私の場合は、上の少なくともあることをリードする最先端技術ワイズはプラスです。ALPN自体はおそらくほとんどのサイトに必要ではありませんが、HTTP / 2を使用することを希望する人には特に望まれます(特にNPNの使用中に以前に持っていた場合)。また、このターゲットグループは、安定版の前にメインラインのnginxに表示される機能の種類に興味を持つ可能性が高くなります。私は10個のキャッシュノードを管理し、通常、それをさらに展開する前に、負荷がかかった状態でテストするために小さいノードで試してみます。
GreenReaper

0

別の方法は、jessie-backportsを使用してから、nginxを簡単に再構築することです。

/etc/apt/sources.list backportsに追加します

deb http://ftp.debian.org/debian jessie-backports main

そして、rootとして実行します

apt-get update
apt-get install -t jessie-backports openssl

その後、nginxを再構築します。https://wiki.debian.org/BuildingAPackageの指示に従ってください


「[...]自分でコンパイルするか、したくない[...]」
gf_

0

私にとってこれを修正する最も簡単な方法は、異なるNginx Dockerイメージを使用することでした。DockerHubの公式Nginxビルドを参照してください。デフォルトのDocker NginxビルドはDebian Jessieを使用しているため、問題は解決しませんが、Alpine Linuxに基づく代替ビルドも提供します。その最新のビルドはOpenSSL 1.0.2を使用します!

したがって、このソリューションでは、Dockerインストールし、のAlpine Linux代わりにNginxを実行しても問題ないと想定していますDebian Jessie

Nginxコンテナーを起動するには:

sudo docker run --name nginx-container -p 80:80 -p 443:443 -v /path/to/your/nginx/directory/:/etc/nginx/ /path/to/your/files/to/serve/:/usr/share/nginx/html/ -d nginx:1.11-alpine

Dockerを使い始めるための簡単な説明:

  • docker runnginx:1.11-alpineまだ持っていない場合はDockerイメージ(この場合)をダウンロードし、このイメージに基づいてDockerコンテナーを開始します
  • --name nginx-container:Dockerコンテナに名前を付けます(停止しているコンテナをsudo docker ps使用sudo docker ps -aして、または停止したコンテナを表示するために使用するすべての実行中のDockerコンテナを表示できます)
  • -p 80:80 -p 443:443:ホストマシンのポート80および443を、それぞれDockerコンテナのポート80および443にバインドします
  • -v /path/to/your/nginx/directory/:/etc/nginx/:Nginx設定を含むホストシステムの/etc/nginx/ディレクトリをDockerコンテナのディレクトリにマウントします
  • /path/to/your/files/to/serve/:/usr/share/nginx/html/:Nginxが提供するファイルを含むホストシステム上のディレクトリをマウントします
  • -d:コンテナをバックグラウンドで起動します(コンテナを使用して停止できますdocker stop nginx-container
  • nginx:1.11-alpine:このイメージを使用してコンテナーを開始します(公式のNginx Dockerイメージはここにリストされています

また便利です:

  • sudo docker exec nginx-container <command>コンテナでコマンドを実行するために使用します。たとえばsudo docker exec nginx-container nginx -s reload、ホストシステムの構成ファイルを変更した後にNginxをリロードする場合
  • またはsudo docker exec -it nginx-container bash、コンテナにbashシェルを入力するために使用して、そこで直接作業できるようにします(推奨されませんが、時には便利です)


0

私の状況では、Dotdeb aptリポジトリを使用しました。このWebサイトの手順では、「完全な」HTTP2サポートでNginxをインストールできるリポジトリを追加するオプションが提供されています。現在のバージョンは1.14で、これは前回のリリースより1つ小さいため、それほど遅れることはありません(現在のバックポートは1.10です)。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.