Debian jessie nginx, NPN yerine ALPN kullanmak için 1.0.2 ile openssl


14

Sunucumda debian jessie çalıştırıyorum ve son zamanlarda http / 2 desteği (nginx 1.10) ile yeni nginx web sunucusuna yükselttim. Bugün olduğu gibi, harika çalışıyor ve web sunucusu http2 protokolü ile içerik sağlıyor.

Bunu, okudum krom NPN destek düşüyorsa ve ancak 15.5.2016 sonra ALPN verir. ALPN, openssl 1.0.2'nin yüklü olmasını gerektiren bir uzantıdır, ancak debian jessie sadece openssl 1.0.1'dir (ayrıca debian backports ve başka bir depoda, bu debian için openssl 1.0.2 sürümü yoktur).

Ve sorun var - SPDY'den http2'ye yükseltme yaptım ve birkaç gün içinde, http2'yi kapatmak zorunda kalacak ve SPDY'yi kullanamıyorum çünkü nignx'in bu sürümünde sadece http2 var. Ben de, bu debian sürümünün openssl 1.0.1 ile sıkışmış ve sadece debian streç 1.0.2l openssl olacak okudum. Ama tarihi yayınlamak için neredeyse yıl var ve krom yakında destek bırakacak, bu yüzden http2 protokolünün faydasını kaybetmek istemiyorum.

Herhangi bir çözüm var mı, kendi sisteminizi (kötü bakım) inşa etmeden veya backports deposunun sahip olmasını beklemeden, openssl 1.0.2'yi bu sisteme nasıl kurabilirim? Bunlardan birinin manuel olarak bağlanması ve bakımı yapılması gerekiyorsa, sistemimde iki openssl sürümü istemiyorum.

Herhangi bir yardım için teşekkürler.


Sen kullanabilirsiniz apt pinningve kullanımı openssldışında Debian stretch.
gf_

@gf_ Sisteminizi bozma riski çok yüksek. Birçok şey OpenSSL'ye bağlıdır.
Michael Hampton

@MichaelHampton Peki, riskin seviyesi hakkında karar veremiyorum, çok yüksek olduğundan şüpheliyim. Dondan kısa bir süre sonra (o zamanlar reddedildi) içeri 1.0.2girmeye çalışan koruculardan Kurt Roeckx ile gidiyorum jessie: "Bu sürüm 1.0.1 sürümü ile uyumlu olmalıdır. Hiçbir şey beklemiyorum 1.0.1'den 1.0.2'ye taşınmayı kırmak. " (Daha fazla farkında libc6
olurum

@gf_ Bu bağlamda "içeri girmek", OpenSSL kullanan her şeyin yeniden derlenmesini gerektirir. Bunun reddedildiğine şaşırmadım; Debian eski ve istikrarlı sever. Önerileriniz bağlamında, OpenSSL kullanan her streç paketi de çekmek anlamına gelir ve bu çok fazla şeydir.
Michael Hampton

@MichaelHampton Debian politikalarının oldukça farkındayım ve o zamanlar bunun reddedildiğine şaşırmadım (bunu söylemek ya da bu izlenimi yaratmak istemedim). Ama: (belki benim ifadeler yanlış): Doing apt-get install -t stretch nginx(a vanilya üzerinde Debian jessiebirlikte nginxolarak çeker yüklü): 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. (Bunlar on paket ..)
gf_

Yanıtlar:


16

Güncelleme 2016/08/08: nginx in jessie-backports(sürüm 1.9.10-1~bpo8+3karşı inşa edildi openssl >= 1.0.2~. Çalıştırmak için sadece paketlerin çıkarılması gerekiyorsa ALPNşimdi çalışmaya başlamak, paketleri dışarı çekmeye gerek yok .jessiejessie-backportsstretch

-

Orijinal cevap: Eh, işte cevabım, yorumlara göre: Bence, bunu 2016/05/09 itibariyle çözmenin pek çok yolu yok. Temel olarak, bir şekildenginx sisteminize modern bir şekilde girmeye çalışmalısınız >= openssl 1.0.2~.

Şu anda gördüğüm tek iki seçenek: Ya kendiniz için derliyorsunuz, bunu yapmak istemiyorsunuz, ki bu oldukça anlaşılabilir bir durumdur ya da modern paketleri Debian stretchsisteminize çekiyorsunuz . Bu bazı riskler içerir, çünkü istikrarlı bir ortamı başka bir ortamla karıştırıyorsunuz, ancak bence bu riskler oldukça düşük, çünkü kullanıyorsunuz Debian.

Hadi gidip şunu deneyelim:

  • Ekle Debian stretchadresinden Müşteri depo apt sources. Bunun için kullanmayın /etc/apt/sources.list, bunun yerine /etc/apt/sources.list.d/temiz tutmak için özel bir dosya kullanın , şahsen kullanıyorum stretch.list.

    Bu çizgileri içine koy:

    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
    
  • Yalnızca belirttiğiniz paketleri aldığınızdan emin olmak için uygun sabitlemeyi ayarlayın Debian stretch. Bunun için kullanılacak dosya /etc/apt/preferences, içine koymak:

    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
    

    (Süitleri ve öncelikleri ortamınıza uyacak şekilde değiştirmeniz gerekebilir.)

  • Çalıştır apt-get update(via sudoolarak / ' root) paket önbelleği güncellemek için.

  • Yükleme nginxden Debian stretch: apt-get install -t stretch nginx(ile bunu sudoolarak / ' root). Kar!

  • Yorumlarımda açıkladığım gibi, ilgili riskleri bile azaltmak için, bir kroket veya LXC gibi bir konteyner çözümü gibi bir şey kullanabilirsiniz . chrootYolda gitmek istiyorsanız, orada bir ağ arabirimi ayarlamanız gerekir: Bunu yapmak için, örneğin bir giriş veren bu blog yazısına bir göz atınnetwork namespaces .

  • Bu yardımcı olur umarım; daha fazla sorunuz varsa, benimle temas kurmaktan çekinmeyin. Geri bildirimi takdir ediyorum ve nasıl gittiğiyle ilgileniyorum.


Bugün nginx'i cevap açıklamanızla yükledim ve her şey harika çalışıyor! Ekstra yapmam gereken tek şey, eski nginx kurulumunu kaldırmaktı, çünkü nginx deposundan nginx 1.10 vardı ve bu sürüm debian repositories paketiyle uyumlu değil (ama bunu debian nginx'ten yükseltme yaparken de yaptım 1.10, bu yüzden sorun değildi). Çabalarınız ve yardımlarınız için teşekkür ederiz!
Juraj Nemec

@JurajNemec Harika! Geri bildiriminiz için çok teşekkürler! ALPNDesteği zaten kontrol ettiniz mi?
gf_

Evet. Bunu Kontrol http2 testi ve SSL Labs testi ALPN destek olduğunu, her iki devletin. Ayrıca nginx -Vsürüm, 1.0.2+ openssl ile derlendi bilgi verir. Bu yüzden doğru çalıştığını düşünüyorum.
Juraj Nemec

@JurajNemec Harika, kulağa hoş geliyor! Mümkünse, bu kurulumu bir süre çalıştırdıktan sonra belki dört veya sekiz hafta sonra küçük bir güncelleme almak isterim. Teşekkürler!
gf_

@JurajNemec Görünüşe göre Google, geçiş yaptı ve NPN'yi kaldırdı. Kurulumunuz hala beklendiği gibi çalışıyor mu?
gf_

11

Başka bir yöntem, jessie-backports'tan OpenSSL 1.0.2'yi kurmak ve nginx'in kendi deposundan Ubuntu 16.04 LTS yapılarını kullanmaktır . Bu şekilde en azından Jessie için üretilmiş bir OpenSSL paketi kullanıyorsunuz.

Şuraya ekle /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

O zaman koş:

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

Bu, sizi resmi olarak desteklenmeyen bir yapılandırmaya sokar , ancak belki de bu bir pakete sahip olmamaktan daha iyidir - ve bu benim için çalıştı. Ayrıca, nginx'in deposunu kullanmak yeni güncellemeler alacağınız anlamına gelir.


Bu rotaya neden gidileceğini açıklayabilir / açıklayabilir misiniz? "Artı ile ilgili olarak, nginx'in repo'sunu kullanmak yeni güncellemeler almanız anlamına gelir."
gf_

nginx'in paketleri, sürümleriyle aynı gün güncellenir, çünkü Debian'ın sürüm sürecinin değil, sürümlerinin bir parçasıdır. Stabil paketleri değil, ana hat paketlerini dahil ettim, ancak yukarıdaki yollardaki / mainline'ı kaldırarak kararlı olabilirsiniz. Tercih ettiğiniz size kalmış.
GreenReaper

Yukarıdakileri genişletmek için: streç mevcut 'test' sürümüdür ve dolayısıyla testten ne kadar süre geçmesi gerektiğine bağlı olarak minimum bir gecikme vardır ; ve bunu hemen kararsız hale getirdiğini varsayarız - örneğin, 1.10.0 26 Nisan yayınlandı , ancak kararsız 29 Nisan'a itildi ve 5 Mayıs'ta gerilmek üzere göç etti ( bkz. PTS ).
GreenReaper

1
Bu gerçeklerin oldukça farkındayım, teşekkürler. :) Ben istikrarlı hizmetler sunmak için çalışıyorsa (sadece (?)) Biri "yeni paketler" gerekiyorsa soru kaynar düşünüyorum. AFAIK, birçok kişi Debian'ı seçiyor (ve bu sorunun konusu işletim sistemi) çünkü kararlı. Yazılımın yeni sürümlerini çalıştırma riski vardır. Ama her neyse, sanırım birinin bunu nasıl ele aldığı konusunda genel bir kural yok, çünkü ortamlar, beklentiler ve ihtiyaçlar farklı. Ayrıca: Katkınız için teşekkürler, eminim ki insanlar için değerlidir; daha önce benim hatlarım herhangi bir suç anlamına gelmez.
gf_

1
Dediğiniz gibi, bu bir derece meselesi. Kanayan kenarda olmak istiyorsanız, derlemeleri günlük olarak derleyebilirsiniz. Benim durumumda, en azından teknoloji açısından öncü olmak bir artı. ALPN'in kendisi muhtemelen çoğu site için bir ihtiyaç değildir - ancak HTTP / 2 kullanmak isteyenler tarafından özellikle istenir (özellikle daha önce NPN kullanırken sahip olsaydınız); ve bu hedef grubun istikrardan önce ana nginx'te ortaya çıkan özelliklerle ilgilenmesi daha olasıdır. On önbellek düğümünü yönetiyorum ve genellikle daha küçük bir düğümde denemeden önce yük altında test etmeyi deniyorum.
GreenReaper

0

Başka bir yöntem jessie-backports kullanmak ve daha sonra kolayca nginx yeniden inşa etmektir

/etc/apt/sources.list backports'a ekle

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

ve sonra root olarak çalıştır

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

ve sonra nginx'i yeniden oluşturun. Https://wiki.debian.org/BuildingAPackage adresindeki talimatları izleyin.


"[...] Ya kendiniz için derlersiniz, bunu yapmak istemezsiniz [...]"
gf_

0

Benim için bu sorunu gidermek için en kolay yolu, farklı bir Nginx Docker resim kullanmak, bkz oldu Docker Hub resmi Nginx yapı . Varsayılan Docker Nginx derlemesi Debian Jessie'yi kullanır, böylece sorununuzu çözmez, ancak aynı zamanda Alpine Linux tabanlı alternatif bir derleme sunarlar . En son sürümlerinde OpenSSL 1.0.2 kullanılıyor!

Bu çözüm böylece Docker'ı yüklediğinizi ve Alpine Linuxbunun yerine Nginx'i çalıştırmanın iyi olduğunu varsayar Debian Jessie.

Nginx konteynırınızı başlatmak için:

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'ı kullanmaya başlamanız için kısa açıklama:

  • docker run: nginx:1.11-alpinehenüz sahip değilseniz Docker görüntüsünü indirir (bu durumda ) ve bu görüntüye dayalı bir Docker kapsayıcısı başlatır
  • --name nginx-container: Docker kapsayıcısına bir ad verir ( durdurulan kapsayıcıları kullanarak sudo docker psya sudo docker ps -ada kullanarak görüntülemek için çalışan tüm Docker kapsayıcılarını görebilirsiniz)
  • -p 80:80 -p 443:443: ana makinenizdeki 80 ve 443 numaralı bağlantı noktalarını sırasıyla Docker kapsayıcısındaki 80 ve 443 numaralı bağlantı noktalarına bağlar
  • -v /path/to/your/nginx/directory/:/etc/nginx/: ana sisteminizde Nginx yapılandırmanızı içeren /etc/nginx/dizini Docker kapsayıcısındaki dizine bağlar
  • /path/to/your/files/to/serve/:/usr/share/nginx/html/: ana sisteminize Nginx'in sunmasını istediğiniz dosyaları içeren bir dizin bağlar
  • -d: kapsayıcıyı arka planda başlatır (kapsayıcıyı kullanarak durdurabilirsiniz docker stop nginx-container)
  • nginx:1.11-alpine: kapsayıcınızı başlatmak için bu resmi kullanın ( resmi Nginx Docker resimleri burada listelenir )

Ayrıca yararlı:

  • kullanmak sudo docker exec nginx-container <command>, örneğin kapta bir komutu çalıştırmak için sudo docker exec nginx-container nginx -s reloadana bilgisayar sistemi üzerinde yapılandırma dosyalarını değiştirdikten sonra Nginx yeniden
  • Ya da sudo docker exec -it nginx-container bashdoğrudan orada çalışabilmeniz için kap içine bir bash kabuğu girmek için kullanın (önerilmez, ancak bazen yararlıdır)


0

Benim durumumda Dotdeb apt deposunu kullandım. Bu web sitesinin talimatları, Nginx'i "tam" HTTP2 desteğiyle yüklemenizi sağlayan bir havuz ekleme seçeneği sunar. Mevcut sürüm 1.14, son sürümün bir küçük arkasında, bu yüzden çok geride olmayacaksınız (mevcut backport 1.10).

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.