NPN के बजाय ALPN का उपयोग करने के लिए ओपनसिएल 1.0.2 के साथ डेबियन जेसी नेग्नेक्स


14

मैं अपने सर्वर पर डेबियन जेसी चला रहा हूं और हाल ही में http / 2 समर्थन (nginx 1.50) के साथ नए nginx वेब सर्वर पर अपग्रेड किया गया है। आज के रूप में, यह महान काम करता है और वेबसर्वर http2 प्रोटोकॉल के साथ सामग्री वितरित कर रहा है।

मैंने पढ़ा है, कि क्रोम NPN सपोर्ट को छोड़ रहा है और केवल 15.5.2016 के बाद ALPN की अनुमति देता है। ALPN एक्सटेंशन है, जिसे खुलने के लिए 1.0.2 इंस्टॉल की आवश्यकता होती है, लेकिन डेबियन जेसी पर केवल ओपनएसएल 1.0.1 (डेबियन बैकपोर्ट और अन्य रिपॉजिटरी पर भी, इस डेबियन के लिए कोई ओपनसेल 1.0.2 संस्करण नहीं है)।

और समस्या यह है - मैंने SPDY से http2 में अपग्रेड किया है और कुछ दिनों में, मुझे http2 को बंद करना होगा और SPDY का उपयोग नहीं कर सकता क्योंकि nignx के इस संस्करण में केवल http2 है। मैंने यह भी पढ़ा है, कि डेबियन का यह संस्करण ओप्सनल 1.0.1 के साथ अटका रहेगा और केवल डेबियन स्ट्रेप का ओपनस्लैक 1.0.2 होगा। लेकिन तारीख जारी करने के लिए लगभग वर्ष है और क्रोम जल्द ही समर्थन छोड़ देगा, इसलिए मैं http2 प्रोटोकॉल का लाभ ढीला नहीं करना चाहता।

क्या इस सिस्टम पर, अपने स्वयं के बिल्ड (खराब रखरखाव) का निर्माण किए बिना या इसे रखने के लिए बैकपोर्स रिपॉजिटरी की प्रतीक्षा किए बिना, इस सिस्टम पर कोई 1.0sl स्थापित करने का कोई समाधान है? मैं भी अपने सिस्टम पर दो संस्करण के ओपनस्ले को नहीं चाहता, यदि उनमें से एक को मैन्युअल रूप से जोड़ा और बनाए रखा जाना चाहिए।

किसी भी मदद के लिए धन्यवाद।


आप उपयोग apt pinningऔर उपयोग opensslकर सकते हैं Debian stretch
gf_

@gf_ आपके सिस्टम को तोड़ने का बहुत उच्च जोखिम में है। बहुत सारी चीजें ओपनएसएसएल पर निर्भर करती हैं।
माइकल हैम्पटन

@ मिचेल हैम्पटन खैर, मैं जोखिम के स्तर के बारे में न्याय नहीं कर सकता, मुझे संदेह है कि यह बहुत अधिक है। मैं कर्ट Roeckx, देखरेख में से एक है, जो प्राप्त करने की कोशिश साथ जा रहा हूँ 1.0.2में jessieबस कुछ ही समय बाद फ्रीज (जो उस वक्त अस्वीकार कर दिया था):। "इस संस्करण 1.0.1 संस्करण के साथ संगत होना चाहिए मैं कुछ भी उम्मीद नहीं है तोड़ने के लिए 1.0.1 से 1.0.2 तक। " (मुझे अधिक जानकारी होगी libc6।)
gf_

@gf_ "उस संदर्भ में इसे प्राप्त करना" ओपनएसएसएल का उपयोग करने वाली हर चीज को पुनः प्राप्त करने की आवश्यकता होगी। मुझे आश्चर्य नहीं है कि इसे अस्वीकार कर दिया गया था; डेबियन को पुराना और स्थिर पसंद है। आपके सुझाव के संदर्भ में, इसका मतलब है कि ओपनएसएल का उपयोग करने वाले प्रत्येक स्ट्रेच पैकेज में भी खींच, और यह बहुत सारा सामान है।
माइकल हैम्पटन

@ मिचेल हैम्पटन मैं डेबियन नीतियों के बारे में काफी जागरूक हूं और मुझे आश्चर्य नहीं है कि यह फिर से खारिज हो गया (यह कहना नहीं चाहता था या इस धारणा को बनाना चाहता था)। लेकिन: (शायद मेरी शब्दों गलत थी): कर apt-get install -t stretch nginx(एक वेनिला पर Debian jessieसाथ nginxस्थापित) में खींच लेंगे: 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। (ये दस पैकेज हैं ..)
gf_

जवाबों:


16

अद्यतन 2016/08/08: nginx में jessie-backports(संस्करण के 1.9.10-1~bpo8+3खिलाफ बनाया गया था openssl >= 1.0.2~ALPNअब काम कर रहा है अगर jessieसिर्फ रनिंग पैकेज की आवश्यकता है jessie-backports, तो अब पैकेज को बाहर खींचने की आवश्यकता नहीं है stretch

-

मूल उत्तर: खैर, यहाँ मेरा जवाब है, टिप्पणियों के अनुसार: मेरी राय में, आज, 2016/05/09 पर इसे हल करने के कई तरीके नहीं हैं। मूल रूप से आप अपने सिस्टम में एक आधुनिक प्राप्त करने के लिए किसी भी तरह की कोशिश 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
    
  • यह सुनिश्चित करने के लिए कि आप केवल उन पैकेजों में से खींच रहे हैं, जिन्हें आप निर्दिष्ट कर रहे हैं, यह निर्धारित करने के लिए उपयुक्त पिनिंग सेट करें 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/ के माध्यम से root) चलाएँ ।

  • स्थापित करें nginxसे Debian stretch: apt-get install -t stretch nginx(के माध्यम से ऐसा sudoरूप / root)। फायदा!

  • जैसा कि मैंने अपनी टिप्पणी में वर्णित किया है, इसमें शामिल जोखिमों को कम करने के लिए, आप कुछ का उपयोग कर सकते हैं जैसे कि चिरोट या एलएक्ससी जैसे कंटेनर-समाधान । यदि आप chrootरास्ते में जाना चाहते हैं , तो आपको वहां एक नेटवर्क इंटरफ़ेस सेट करना होगा: ऐसा करने के लिए , उदाहरण के लिए इस ब्लॉगपोस्ट पर एक नज़र डालें , जो एक परिचय देता है network namespaces

  • उम्मीद है की यह मदद करेगा; अगर आपको अधिक सवाल मिला है, तो बेझिझक मुझसे संपर्क करें। मैं प्रतिक्रिया की सराहना करता हूं और मेरी रुचि है कि यह कैसे होता है।


मैंने आज आपके उत्तर विवरण के द्वारा nginx स्थापित किया है और सब कुछ बहुत अच्छा लगता है! केवल एक चीज, मुझे अतिरिक्त करने की ज़रूरत थी, पुराने नेगनेक्स इंस्टॉलेशन को हटाने के लिए था, क्योंकि मेरे पास nginx रिपॉजिटरी से 1.10 nginx था और यह संस्करण डेबियन रिपॉजिटरी पैकेज के साथ संगत नहीं है (लेकिन मैंने यह तब भी किया है जब मैं डेबियन नग्नेक्स से अपग्रेड कर रहा था। 1.10 तक, इसलिए यह समस्या नहीं थी)। आपके प्रयास और मदद के लिए धन्यवाद!
जुराज नेमेक

@ जुराजनेमेक महान! प्रतिक्रिया के लिए बहुत बहुत धन्यवाद! क्या आपने ALPNपहले ही समर्थन की जांच कर ली थी ?
gf_

हाँ। Http2 परीक्षण और एसएसएल लैब्स परीक्षण द्वारा इसकी जांच की गई , दोनों ने कहा कि एएलपीएन समर्थन है। यह भी nginx -Vजानकारी देता है, कि संस्करण 1.0s + ओपनसेल के साथ संकलित है। इसलिए मुझे लगता है कि यह सही तरीके से काम कर रहा है।
जुराज नेमेक

@JurajNemec बढ़िया, अच्छा लग रहा है! यदि आपके लिए संभव है, तो इस सेटअप को कुछ समय के लिए चलाने के बाद, शायद चार या आठ सप्ताह के बाद मुझे एक छोटा सा अपडेट प्राप्त करने में दिलचस्पी होगी। धन्यवाद!
gf_

@JurajNemec ऐसा लगता है, Google ने स्विच बनाया और NPN को हटा दिया। क्या आपका सेटअप अभी भी उम्मीद के मुताबिक काम करता है?
gf_

11

एक अन्य विधि ओपनसीएल 1.0.2 को जेसी-बैकपोर्ट से स्थापित करने के लिए है और निगनेक्स के स्वयं के भंडार से उबंटू 16.04 एलटीएस बिल्ड का उपयोग करता है। इस तरह से आप कम से कम जेसी के लिए निर्मित ओपनएसएसएल पैकेज का उपयोग कर रहे हैं।

इसमें जोड़ें /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 के रेपो का उपयोग करने का मतलब है कि आपको नए अपडेट मिलते हैं।


क्या आप कृपया विस्तृत / स्पष्ट कर सकते हैं कि कोई इस मार्ग पर क्यों जाएगा? "प्लस के बारे में, नेगनेक्स के रेपो का उपयोग करने का मतलब है कि आपको नए अपडेट मिलते हैं।": आपको मेरे द्वारा बताए गए तरीके का उपयोग करने के साथ-साथ "ताज़ा अपडेट" भी मिल रहे हैं।
gf_

नेगनेक्स के पैकेज उसी दिन अपडेट किए जाते हैं जब उनकी रिलीज़ प्रक्रिया होती है, क्योंकि वे डेबियन की रिलीज़ प्रक्रिया का हिस्सा होते हैं। मैंने मेनलाइन पैकेजों को शामिल किया, स्थिर पैकेजों को नहीं, लेकिन आप उपरोक्त रास्तों में सिर्फ / मेनलाइन को हटाकर स्थिर हो सकते हैं। जिसे आप पसंद करते हैं वह आपके ऊपर है।
ग्रीनरॉफ़्ट ज़ूल

उपरोक्त का विस्तार करने के लिए: खिंचाव वर्तमान 'परीक्षण' रिलीज है, और इसलिए परीक्षण से आगे बढ़ने में कितना समय लगता है, इसके आधार पर न्यूनतम विलंब होता है ; और यह मानते हुए कि यह इसे तुरंत अस्थिर कर देता है - उदाहरण के लिए, 1.10.0 26 अप्रैल को जारी किया गया था , लेकिन अस्थिर 29 अप्रैल को धकेल दिया गया और 5 मई को फैल गया ( पीटीएस देखें )।
ग्रीनरॉफ़्ट जूल

1
मुझे इन तथ्यों के बारे में पता है, धन्यवाद। :) मुझे लगता है कि यदि प्रश्न "नए पैकेज" (सिर्फ इसलिए? ()) की जरूरत है अगर स्थिर सेवाएं प्रदान करने की कोशिश कर रहा है। AFAIK, कई लोग डेबियन चुनते हैं (और यह ओएस सवाल है के बारे में है) क्योंकि यह स्थिर है। सॉफ्टवेयर के नए संस्करण चलाने में कुछ जोखिम शामिल हैं। लेकिन वैसे भी, मुझे लगता है कि कोई भी सामान्य नियम नहीं है कि कोई इसे कैसे संभालता है, क्योंकि वातावरण, अपेक्षाएं और आवश्यकताएं अलग हैं। इसके अलावा: आपके इनपुट के लिए धन्यवाद, मुझे यकीन है कि यह लोगों के लिए महत्वपूर्ण है; किसी भी तरह के अपराध का मतलब नहीं है इससे पहले मेरी लाइनें।
gf_

1
जैसा कि आप कहते हैं, यह डिग्री का सवाल है। यदि आप रक्तस्राव के किनारे पर होना चाहते हैं, तो आप दैनिक आधार पर संकलन कर सकते हैं। मेरे मामले में, कम से कम अग्रणी एज टेक्नोलॉजी-वार एक प्लस है। स्वयं ALPN शायद अधिकांश साइटों की आवश्यकता नहीं है - लेकिन यह उन लोगों द्वारा अत्यधिक वांछित है जो HTTP / 2 का उपयोग करना चाहते हैं (विशेषकर यदि आप NPN का उपयोग करते समय पहले ऐसा करते थे); और यह लक्ष्य समूह भी इस तरह की विशेषताओं में रुचि रखने की अधिक संभावना है जो स्थिर से पहले मेनलाइन नग्नेक्स में पॉप अप करते हैं। मैं दस कैश नोड्स का प्रबंधन करता हूं, और आमतौर पर इसे आगे रोल करने से पहले लोड के तहत परीक्षण करने के लिए एक छोटे से प्रयास करें।
ग्रीनट्रेल

0

एक और तरीका यह है कि jessie-backports का उपयोग करें और फिर आसानी से nginx का पुनर्निर्माण करें

/etc/apt/source.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 पर दिए गए निर्देशों का पालन करें


"[...] या तो आप अपने लिए संकलित करते हैं, जो आप नहीं करना चाहते हैं [...]"
gf_

0

मेरे लिए इसे ठीक करने का सबसे आसान तरीका एक अलग नगीनेक्स डोकर छवि का उपयोग करना था, डॉक्यू हब पर आधिकारिक नग्नेक्स बिल्ड देखें । डिफ़ॉल्ट डॉकर नग्नेक्स बिल्ड डेबियन जेसी का उपयोग करता है ताकि आपकी समस्या ठीक न हो, लेकिन वे एल्फा लिनक्स पर आधारित एक वैकल्पिक बिल्ड भी प्रदान करते हैं । इसका नवीनतम बिल्ड ओपनएसएसएल 1.0.2 का उपयोग करता है!

यह समाधान इस प्रकार मानता है कि आपने डॉकर को स्थापित किया है और Alpine Linuxइसके बजाय नगनेक्स को चलाने के साथ ठीक हैं Debian Jessie

अपना नगीनेक्स कंटेनर शुरू करने के लिए:

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 run: nginx:1.11-alpineयदि आपके पास अभी तक यह नहीं है तो डॉकर छवि डाउनलोड करें ( इस छवि के आधार पर डॉकटर कंटेनर शुरू करता है
  • --name nginx-container: डॉकटर कंटेनर को एक नाम देता है (आप सभी डॉक कंटेनर को रनिंग कंटेनर को देखने sudo docker psया उपयोग sudo docker ps -aकरने के लिए देख सकते हैं)
  • -p 80:80 -p 443:443: अपने होस्ट मशीन पर पोर्ट 80 और 443 को क्रमशः पोर्ट 80 और 443 में डोकर कंटेनर में बांधता है
  • -v /path/to/your/nginx/directory/:/etc/nginx/: अपने होस्ट सिस्टम पर निर्देशिका को मापता है जिसमें /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कंटेनर में एक बैश शेल दर्ज करने के लिए उपयोग करें ताकि आप वहां सीधे काम कर सकें (अनुशंसित नहीं, लेकिन कभी-कभी उपयोगी होते हैं)

0

इसके बजाय एक वैकल्पिक तरीका बोरिंगएसएसएल का उपयोग करना है, जो ओपनएसएसएल परिवेश को नुकसान नहीं पहुंचाता है। यहां देखें, https://www.admon.org/hardwares/enable-http2-support-for-nginx-on-debian-jessie


1
लिंक समाप्त होने के बाद लिंक-केवल उत्तर कम सहायक होते जाते हैं। कृपया अपने उत्तर में लिंक किए गए पृष्ठ का प्रासंगिक हिस्सा शामिल करें।
sendmoreinfo

0

अपनी स्थिति में मैंने Dotdeb apt रिपॉजिटरी का उपयोग किया है। इस वेबसाइट के निर्देश एक रिपॉजिटरी को जोड़ने का विकल्प देते हैं जो आपको "पूर्ण" HTTP2 समर्थन के साथ Nginx को स्थापित करने की अनुमति देता है। वर्तमान संस्करण 1.14 है जो अंतिम रिलीज के पीछे एक मामूली है, इसलिए आप बहुत पीछे नहीं रहेंगे (वर्तमान बैकपोर्ट 1.10 है)।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.