私は自分のサーバーでdebian jessieを実行していて、最近http/2をサポートする新しいnginx Webサーバー(nginx 1.10)にアップグレードしました。今日と同じように機能し、ウェブサーバーはhttp2プロトコルでコンテンツを配信しています。
chromeはNPNサポートを中止しています であり、ALPNは2016年15.5。 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ストレッチのみがopenssl 1.0.2を持つことも読んだ。しかし、リリース日にはほぼ年があり、chromeは間もなくサポートを終了する予定です。そのため、http2プロトコルの利点を失いたくありません。
ソリューションはありますか?このシステムにopenssl 1.0.2をインストールする方法はありますか?独自のビルド(悪いメンテナンス)をビルドしたり、バックポートレポジトリがそれを取得するのを待ったりすることはありませんか?また、手動で2つのバージョンのopensslをリンクして保守する必要がある場合は、どちらか一方のシステムを使用したくありません。
助けてくれてありがとう。
別の方法は、jessie-backportsからOpenSSL 1.0.2をインストールし、 nginxの独自のリポジトリからUbuntu 16.04 LTSビルドを使用することです。 少なくとも、ビルドされた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のリポジトリを使用すると、最新のアップデートを取得できます。
別の方法は、代わりにBoringSSLを使用することです。これは、OpenSSLの環境に影響を与えません。詳細はこちら https://www.admon.org/hardwares/enable-http2-support-for-nginx-on-debian-jessie
私にとってこれを修正する最も簡単な方法は、別のNginx Dockerイメージを使用することでした Docker Hubの公式Nginxビルド を参照してください。デフォルトのDocker NginxビルドはDebian Jessieを使用しているため、問題は修正されませんが、 Alpine Linux に基づく代替ビルドも提供されます。その最新のビルドはOpenSSL 1.0.2を使用します!
したがって、このソリューションは インストールされたDocker であり、Alpine Linux
ではなくDebian Jessie
でNginxを実行することで問題がないと想定しています。
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 run
:まだ持っていない場合はDockerイメージ(この場合はnginx:1.11-Alpine
)をダウンロードし、このイメージに基づいてDockerコンテナーを起動します--name nginx-container
:Dockerコンテナーに名前を付けます(Sudo docker ps
を使用して実行中のすべてのDockerコンテナーを表示したり、Sudo docker ps -a
を使用して停止したコンテナーを表示したりできます)-p 80:80 -p 443:443
:ホストマシンのポート80と443をそれぞれDockerコンテナのポート80と443にバインドします-v /path/to/your/nginx/directory/:/etc/nginx/
:Nginx構成を含むホストシステム上のディレクトリをDockerコンテナの/etc/nginx/
ディレクトリにマウントします/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シェルを入力し、直接作業できるようにする(お勧めしませんが、場合によっては便利です)別の方法は、jessie-backportsを使用してnginxを簡単に再構築することです
/etc/apt/sources.listバックポートに追加
deb http://ftp.debian.org/debian jessie-backports main
そして、ルートとして実行します
apt-get update
apt-get install -t jessie-backports openssl
そしてnginxを再構築します。 https://wiki.debian.org/BuildingAPackage の指示に従ってください
私の状況では、Dotdeb aptリポジトリを使用しました。これの説明 website は、「完全な」HTTP2サポートでNginxをインストールできるリポジトリを追加するオプションを提供します。現在のバージョンは1.14で、これは前回のリリースから1マイナーです。そのため、それほど遅れることはありません(現在のバックポートは1.10)。