Saya menjalankan debian jessie di server saya dan baru-baru ini ditingkatkan ke server web nginx baru dengan dukungan http / 2 (nginx 1.10). Seperti hari ini, ini berfungsi dengan baik dan server web mengirimkan konten dengan protokol http2.
Saya telah membaca, bahwa chrome menjatuhkan dukungan NPN dan hanya memungkinkan ALPN setelah 15.5.2016. ALPN adalah ekstensi, yang membutuhkan openssl 1.0.2 diinstal, tetapi pada debian jessie hanya openssl 1.0.1 (juga pada backport debian dan repositori lain, tidak ada versi openssl 1.0.2 untuk debian ini).
Dan ada masalah - saya telah meningkatkan dari SPDY ke http2 dan dalam beberapa hari, saya harus mematikan http2 dan tidak dapat menggunakan SPDY karena versi nignx ini hanya memiliki http2. Saya juga telah membaca, bahwa versi debian ini akan macet dengan openssl 1.0.1 dan hanya debian stretch yang akan memiliki openssl 1.0.2. Tetapi untuk tanggal rilis ada hampir setahun dan chrome akan segera menjatuhkan dukungan, jadi saya tidak ingin kehilangan manfaat dari protokol http2.
Apakah ada solusi, bagaimana cara menginstal openssl 1.0.2 pada sistem ini, tanpa membangun build sendiri (pemeliharaan buruk) atau menunggu repositori backports untuk memilikinya? Saya juga tidak ingin dua versi openssl di sistem saya jika salah satunya harus ditautkan dan dikelola secara manual.
Terima kasih atas bantuannya.
apt pinning
dan menggunakanopenssl
dariDebian stretch
.1.0.2
masukjessie
tidak lama setelah pembekuan (yang ditolak saat itu): "Versi ini harus kompatibel dengan versi 1.0.1. Saya tidak mengharapkan apa-apa untuk istirahat bergerak dari 1.0.1 ke 1.0.2. " (Saya akan lebih sadarlibc6
.)apt-get install -t stretch nginx
(pada vaniliDebian jessie
dengannginx
diinstal) akan menarik: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
. (Ini adalah sepuluh paket ..)Jawaban:
Perbarui 2016/08/08:
nginx
dalamjessie-backports
(versi1.9.10-1~bpo8+3
dibangun terhadapopenssl >= 1.0.2~
. MulaiALPN
bekerja sekarang jika berjalanjessie
hanya membutuhkan paket keluarjessie-backports
, tidak perlu lagi menarik paketstretch
.-
Jawaban orisinal: Baiklah, begini jawabannya, menurut komentar: Menurut pendapat saya, tidak ada banyak cara untuk menyelesaikan masalah ini hingga hari ini, 2016/05/09. Pada dasarnya Anda sudah mencoba entah bagaimana untuk mendapatkan yang modern
nginx
ke dalam sistem Anda, dikompilasi terhadap>= openssl 1.0.2~
.Hanya dua opsi yang saya lihat saat ini: Entah Anda mengkompilasi untuk diri sendiri, yang tidak ingin Anda lakukan, yang cukup dimengerti, atau Anda menarik paket modern keluar dari
Debian stretch
ke dalam sistem Anda. Ini melibatkan beberapa risiko, karena Anda mencampur lingkungan yang stabil dengan yang lain, tetapi menurut saya risiko ini cukup rendah, karena Anda menggunakannyaDebian
.Jadi, mari kita pergi dan coba ini:
Tambahkan
Debian stretch
repositori keapt sources
. Jangan gunakan/etc/apt/sources.list
untuk ini, tetapi gunakan file khusus di dalam/etc/apt/sources.list.d/
untuk menjaganya tetap bersih, secara pribadi saya menggunakanstretch.list
.Letakkan garis-garis ini di dalam sana:
Siapkan pinning yang tepat untuk memastikan Anda hanya menarik paket
Debian stretch
yang Anda tentukan. File yang akan digunakan untuk ini adalah/etc/apt/preferences
, di dalam sana, masukkan:(Anda mungkin harus mengubah suite dan prioritas agar sesuai dengan lingkungan Anda.)
Jalankan
apt-get update
(viasudo
/ asroot
) untuk memperbarui cache paket.Instal
nginx
dariDebian stretch
:apt-get install -t stretch nginx
(lakukan ini viasudo
/ sebagairoot
). Keuntungan!Seperti yang saya jelaskan dalam komentar saya, untuk mengurangi risiko yang terlibat, Anda dapat menggunakan sesuatu seperti chroot atau solusi wadah seperti LXC . Jika Anda ingin melanjutkan
chroot
, Anda harus mengatur antarmuka jaringan di dalam sana: Untuk melakukan ini, lihat blogpost ini misalnya , yang memberikan pengantar untuknetwork namespaces
.Semoga ini membantu; jika Anda punya pertanyaan lebih lanjut, jangan ragu untuk menghubungi saya. Saya akan menghargai umpan balik dan saya tertarik dengan kelanjutannya.
sumber
ALPN
dukungan?nginx -V
memberikan info, bahwa versi ini dikompilasi dengan openssl 1.0.2+. Jadi saya pikir itu berfungsi dengan benar.Metode lain adalah menginstal OpenSSL 1.0.2 dari jessie-backports dan menggunakan Ubuntu 16.04 LTS build dari repositori nginx sendiri. Dengan begitu Anda setidaknya menggunakan paket OpenSSL yang dibuat untuk Jessie.
Tambahkan ke
/etc/apt/sources.list
:Lalu lari:
Ini jelas menempatkan Anda ke dalam konfigurasi yang secara resmi tidak didukung, tetapi mungkin itu lebih baik daripada tidak memiliki paket sama sekali - dan itu berhasil untuk saya. Plus, menggunakan repo nginx berarti Anda mendapatkan pembaruan baru.
sumber
Metode lain adalah dengan menggunakan jessie-backports dan kemudian membangun kembali dengan mudah nginx
tambahkan ke /etc/apt/sources.list backports
dan kemudian jalankan sebagai root
dan kemudian membangun kembali nginx. Ikuti instruksi di https://wiki.debian.org/BuildingAPackage
sumber
Bagi saya cara termudah untuk memperbaikinya adalah dengan menggunakan gambar Nginx Docker yang berbeda, lihat build Nginx resmi di Docker Hub . Docker Nginx build default menggunakan Debian Jessie sehingga tidak akan memperbaiki masalah Anda, tetapi mereka juga menawarkan build alternatif berdasarkan Alpine Linux . Build terbarunya menggunakan OpenSSL 1.0.2!
Solusi ini sehingga mengasumsikan bahwa Anda menginstal Docker dan baik-baik saja dengan menjalankan Nginx pada
Alpine Linux
bukanDebian Jessie
.Untuk memulai wadah Nginx Anda:
Penjelasan singkat untuk memulai dengan Docker:
docker run
: mengunduh gambar Docker (dalam hal ininginx:1.11-alpine
) jika Anda belum memilikinya dan memulai wadah Docker berdasarkan gambar ini--name nginx-container
: memberi nama wadah Docker (Anda dapat melihat semua kontainer Docker yang sedang berjalan menggunakansudo docker ps
atau menggunakansudo docker ps -a
juga untuk melihat kontainer yang berhenti)-p 80:80 -p 443:443
: mengikat port 80 dan 443 pada mesin host Anda masing-masing port 80 dan 443 dalam wadah Docker-v /path/to/your/nginx/directory/:/etc/nginx/
: memasang direktori pada sistem host Anda yang berisi konfigurasi Nginx Anda ke/etc/nginx/
direktori dalam wadah Docker/path/to/your/files/to/serve/:/usr/share/nginx/html/
: me-mount direktori pada sistem host Anda yang berisi file yang ingin Anda layani Nginx-d
: memulai wadah di latar belakang (Anda dapat menghentikan wadah menggunakandocker stop nginx-container
)nginx:1.11-alpine
: gunakan gambar ini untuk memulai wadah Anda ( gambar Nginx Docker resmi tercantum di sini )Juga bermanfaat:
sudo docker exec nginx-container <command>
untuk menjalankan perintah dalam wadah, misalnyasudo docker exec nginx-container nginx -s reload
untuk memuat ulang Nginx setelah Anda mengubah file konfigurasi pada sistem hostsudo docker exec -it nginx-container bash
untuk memasukkan bash shell dalam wadah sehingga Anda dapat bekerja di sana secara langsung (tidak disarankan, tetapi terkadang bermanfaat)sumber
Cara alternatif adalah menggunakan BoringSSL sebagai gantinya, yang tidak merusak lingkungan OpenSSL. Berikut adalah detail untuk merujuk, https://www.admon.org/hardwares/enable-http2-support-for-nginx-on-debian-jessie
sumber
Dalam situasi saya, saya telah menggunakan repositori Dotdeb apt. Instruksi situs web ini memberikan opsi untuk menambahkan repositori yang memungkinkan Anda menginstal Nginx dengan dukungan HTTP2 "penuh". Versi saat ini adalah 1.14 yang merupakan salah satu minor di belakang rilis terakhir, sehingga Anda tidak akan terlalu jauh di belakang (backport saat ini adalah 1,10).
sumber