Go के लिए वेबसर्वर के सामने Nginx का उपयोग करने के क्या फायदे हैं? [बन्द है]


84

मैं JSON डेटा लौटाने वाले कुछ वेबसर्विस लिख रहा हूं, जिनमें बहुत सारे उपयोगकर्ता हैं।

सिर्फ http सर्वर का उपयोग करने की तुलना में मेरे सर्वर के सामने Nginx का उपयोग करने के क्या लाभ हैं?


फी, सहकर्मी द्वारा कनेक्शन रीसेट की तरह बहुत सी tcp त्रुटियां थीं, और i / o समयबाह्य सेवा के लिए गो http सर्वर का उपयोग करके 100 मिलियन बड़े POST अनुरोधों को एक मिनट में निपटा दिया। इसके सामने nginx रखो - कोई और समस्या नहीं।
पीटर केली

आखिरकार मैंने एनजीआईएनएक्स के बिना गो http सर्वर का उपयोग करने का फैसला किया, और यह बहुत अच्छी तरह से काम करता है। मैं किसी भी समस्या में नहीं चल रहा हूँ। लेकिन मेरी सेवा आपके मामले में बड़े POST अनुरोध नहीं चला रही है।
डेनियल बी

20
यह आवश्यक नहीं है कि जनमत संग्रह आधारित है। इसे इस तरह से बंद करना विचार और समझ की कमी का एक गंभीर अभाव दर्शाता है कि इस तरह के प्रश्न का उत्तर प्रदान कर सकता है और प्रदान कर सकता है। चयनित उत्तर एक महान उदाहरण है। वास्तव में, मैं सभी प्रदान किए गए उत्तरों में प्रासंगिक नए विचार देखता हूं।
vee_ess 18

जवाबों:


135

निर्भर करता है।

बॉक्स के बाहर, एक विपरीत प्रॉक्सी के रूप में nginx को सामने रखना आपको देने जा रहा है:

  • प्रवेश लॉग
  • त्रुटि लॉग
  • आसान एसएसएल समाप्ति
  • SPDY समर्थन करते हैं
  • gzip समर्थन
  • कुछ मार्गों में कुछ मार्गों के लिए HTTP हेडर सेट करने के आसान तरीके
  • बहुत तेज़ स्थैतिक संपत्ति सेवारत (यदि आप S3 / etc से सेवा कर रहे हैं। हालांकि, यह उतना प्रासंगिक नहीं है)

गो HTTP सर्वर बहुत अच्छा है, लेकिन आपको इनमें से कुछ चीजें करने के लिए पहिया को फिर से मजबूत करना होगा (जो कि ठीक है: इसका मतलब हर किसी के लिए सब कुछ होना नहीं है)।

मैंने हमेशा nginx को सामने रखना आसान पाया है - जो कि यह अच्छा है - और इसे "वेब सर्वर" सामान करने दें। माई गो एप्लीकेशन एप्लीकेशन स्टफ करता है, और केवल नंगे न्यूनतम हेडर / आदि। यह करने की जरूरत है। एक "बुरी" चीज़ के रूप में नंगेक्स को सामने रखकर मत देखो।


आपके जवाब का धन्यवाद! (1) क्या गो HTTP कुछ प्रकार के लॉग का उत्पादन करता है? - 2) क्या नगनेक्स किसी तरह अनुरोध / प्रतिक्रिया को कम करता है?
डेनियल बी

3
@DanieleB गो HTTP सर्वर केवल वही लॉग पैदा करता है जो आप इसे चाहते हैं (यानी logपैकेज का उपयोग करके )। यदि आप IP एड्रेस, रिसोर्स एक्सेस आदि को लॉग इन करना चाहते हैं, तो आपको वह लिखना होगा। एक ही हेडर सेट करने के लिए जाता है, मूल से परे। हालाँकि मेरे पास कोई ठोस डेटा नहीं है, Go के सामने nginx को वास्तव में Go की तुलना में कोई धीमा नहीं होना चाहिए: वास्तव में यह gzip और इसके स्वयं के अनुकूलन के लिए तेजी से धन्यवाद हो सकता है। "लागत" अधिक मेमोरी / सीपीयू उपयोग होगा, लेकिन उस मोर्चे पर भी नग्नेक्स बहुत कुशल है।
एलीथ्रर

16
एक और बड़ी विशेषता: आप अपने ऐप को कैसे अपग्रेड / मेनटेन करेंगे (डाउन डाउन होते हुए पैकेट गिराए बिना)? नग्नेक्स आपको बिना पैकेट खोले चारों ओर ट्रैफ़िक चलाने देगा।
BraveNewCurrency

+1, Nginx अपनी जगह पर है।
अनातोली

3
मेरे रास्पबेरी पाई पर, नगनेक्स को गो के सामने रखकर पेज लोड की गति में काफी वृद्धि हुई।
425 सेकेंड

17

गो का मानक http सर्वर ठीक है। यदि आपका आवेदन ज्यादातर / केवल "गतिशील" अनुरोध / प्रतिक्रियाएं हैं, तो यह वास्तव में सबसे अच्छा तरीका है।

आप स्थैतिक संपत्ति की सेवा करने के लिए nginx का उपयोग कर सकते हैं, लेकिन सबसे अधिक संभावना है कि मानक गो उस के लिए भी ठीक है। यदि आपको उच्च प्रदर्शन की आवश्यकता है, तो आपको बस वार्निश या उदाहरण के लिए सीडीएन या कैश का उपयोग करना चाहिए।

यदि आपको एक ही आईपी पते से अलग-अलग अनुप्रयोगों की सेवा करने की आवश्यकता है, तो अलग-अलग अनुप्रयोगों के बीच अनुरोधों को वितरित करने के लिए nginx एक प्रॉक्सी के लिए एक अच्छा विकल्प है; हालाँकि मैं अधिक बार वार्निश या HAProxy को उस तरह की चीज़ के लिए टूलबॉक्स से बाहर निकाल देता हूँ।


हां, मैं वास्तव में केवल इसका उपयोग गतिशील डेटा की सेवा के लिए कर रहा हूं। तो, मुझे लगता है कि मुझे NGINX की जरूरत नहीं है! आपके उत्तर के लिए धन्यवाद
Daniele B

वार्निश / हैप्रेसी की आवश्यकता नहीं होती है, नग्नेक्स में कैशिंग और लोड संतुलन के लिए समान टूलसेट है।
अनातोली

@ मिखाइलोव यह नहीं है कि मैंने क्या कहा? nginx इसके लिए अच्छी तरह से काम करता है; हालाँकि मैं व्यक्तिगत रूप से अक्सर वार्निश या HAproxy पसंद करता हूँ। मुझे उन्हें कॉन्फ़िगर और संचालित करना आसान लगता है।
Bjørn हैनसेन

5

गोरिल्ला वेब टूलकिट आप देता है:

  • उन्नत मार्ग (डोमेन / उपडोमेन प्रतिबंध, regex पथ मिलान)।
  • gzip समर्थन ( मिडलवेयर हैंडलर के माध्यम से )
  • लॉगिंग मिडिलवेयर हैंडलर जो अपाचे कॉमन लॉग फॉर्मेट में आउटपुट करता है।
  • सुरक्षित एन्क्रिप्टेड कुकीज़।
  • सत्र।
  • schema पैकेज संरचना के लिए मूल्यों को रूपांतरित करता है।

यह net/httpएनजीआईएनएक्स जैसे गो और एचटीटीपी सर्वर के बीच बहुत अंतर भरता है ।

व्यक्तिगत रूप से, net/httpअगर मैं जानता हूं कि मैं एक सीडीएन में प्लग इन कर सकता हूं तो शीर्ष पर दूसरे HTTP सर्वर को स्थापित करने और कॉन्फ़िगर करने से बचूंगा।

मुझे लगता net/httpहै कि किसी भी मानक पुस्तकालय में सबसे शक्तिशाली HTTP सर्वर है।


2

से https://blog.gopheracademy.com/caddy-a-look-inside/ यह लग रहा है जाओ की तरह gzip संभाल कर सकते हैं, त्रुटियों, स्टैटिक फ़ाइलें, मार्ग और http हेडर मिडिलवेयर का उपयोग कर। नीचे दी गई लाइन, ब्लॉग से दिखाती है कि आप इस तरह के अनुरोध को कैसे संभालेंगे।

logHandler(gzipHandler(fileServer))

वे वास्तव में दिलचस्प तरीके से त्रुटि लॉगिंग को संभालते हैं। जब तक आपका मिडलवेयर एक एरर कोड (int) देता है, तब तक एरर-हैंडलिंग मिडलवेयर स्वचालित रूप से इसे हैंडल करता है। वे भी पूरी तरह से गोइंग में पूरी साइट को कॉन्फ़िगर करने के लिए चले गए हैं जैसे कि नग्नेक्स। "सभी गोफर अकादमी वेबसाइटों के लिए nginx.conf फ़ाइल 115 लाइनों से अधिक लंबी थी। समकक्ष Caddyfile केवल 50 लाइनें है।"

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