केवल Node.js का उपयोग करना बनाम Apache / Nginx के साथ Node.js का उपयोग करना


224

किन मामलों में किसी को केवल वास्तविक तैनाती में सर्वर के रूप में Node.js का उपयोग करना पसंद करना चाहिए?

जब कोई केवल Node.js का उपयोग नहीं करना चाहता है, तो Node.js के साथ बेहतर क्या निभाता है? अपाचे या Nginx?

जवाबों:


207

Node.js के सामने एक और वेबसर्वर को छड़ी करने के कई अच्छे कारण हैं:

  • Node.js प्रक्रिया के लिए विशेषाधिकारों / सेतु के बारे में चिंता न करना। केवल रूट 80 को आमतौर पर पोर्ट कर सकता है। यदि आप नाज़िनक्स / अपाचे को रूट के रूप में शुरू करने के बारे में चिंता करते हैं, तो पोर्ट 80 पर बाध्यकारी है, और फिर अपने रूट विशेषाधिकारों को छोड़ते हुए, इसका मतलब है कि आपके नोड ऐप को इसके बारे में चिंता करने की ज़रूरत नहीं है।
  • छवियों, सीएसएस, js, और html जैसी स्थिर फ़ाइलों की सेवा। एक उचित स्थिर फ़ाइल वेब सर्वर का उपयोग करने की तुलना में नोड कम कुशल हो सकता है (नोड भी चुनिंदा परिदृश्यों में तेज हो सकता है, लेकिन यह आदर्श होने की संभावना नहीं है)। अधिक कुशलता से सेवा करने वाली फ़ाइलों के शीर्ष पर, आपको ईटैग या कैश कंट्रोल हेडर को संभालने के बारे में चिंता करने की ज़रूरत नहीं होगी यदि आप नोड से बाहर की चीजों को सेवित कर रहे थे। कुछ चौखटे आपके लिए इसे संभाल सकते हैं, लेकिन आप यह सुनिश्चित करना चाहेंगे। भले ही, अभी भी शायद धीमी।
  • जैसा कि मैट सार्जेंट ने अपने उत्तर में उल्लेख किया है, आप अधिक आसानी से सार्थक त्रुटि पृष्ठों को प्रदर्शित कर सकते हैं या यदि आपकी नोड सेवा दुर्घटनाग्रस्त हो जाती है तो एक स्थिर साइट पर वापस गिर सकती है। अन्यथा उपयोगकर्ताओं को केवल समय पर कनेक्शन मिल सकता है।
  • नोड के सामने एक और वेब सर्वर चलाने से नोड के खिलाफ सुरक्षा खामियों और DoS हमलों को कम करने में मदद मिल सकती है। एक वास्तविक दुनिया के उदाहरण के लिए, CVE-2013-4450 को नोड के सामने Nginx जैसी चीज़ को चलाने से रोका जाता है

मैं दूसरी गोली बिंदु को यह कहकर काट दूंगा कि आपको शायद सीडीएन के माध्यम से या वार्निश जैसे कैशिंग सर्वर के पीछे से अपनी स्थैतिक फाइलों को परोसना चाहिए। यदि आप ऐसा कर रहे हैं तो यह वास्तव में मायने नहीं रखता है यदि मूल नोड या नेग्नेक्स या अपाचे है।

विशेष रूप से नगनेक्स के साथ कैवेट: यदि आप वेबसोकेट का उपयोग कर रहे हैं, तो नगीनक्स (> = 1.3.13) के हाल के संस्करण का उपयोग करना सुनिश्चित करें, क्योंकि यह केवल वेबसोकेट का उपयोग करने के लिए कनेक्शन को अपग्रेड करने के लिए समर्थन जोड़ा है।


11
express.staticETAG और कैश-कंट्रोल हेडर को ठीक से संभालेंगे।
रॉबर्टक्लेप

18
नहीं है कि अच्छा हुह? centminmod.com/siegebenchmarks/2013/020313/index.html , zgadzaj.com/…
el vis

4
pauljz, क्या आपके पास धीमे चलने के लिए बेंचमार्क हैं? लेख @pawlakpp ने बताया कि Node.js लोड के तहत बहुत तेज है।
सैमुअल नेफ

3
यहाँ कुछ संबंधित चर्चा है: stackoverflow.com/questions/9967887/… कुछ अतिरिक्त दृष्टिकोणों के साथ। वहां के बेंचमार्क (जब से आपने अतिरिक्त बेंचमार्क मांगा) नोड.जेएस / एक्सप्रेस दिखाते हैं, यहां तक ​​कि क्लस्टर किए गए, विशेष रूप से बेहतर प्रदर्शन करते हैं। मेरी भावना यह है कि स्थिर फ़ाइल सेवारत रखना और नोड इवेंट लूप से पूरी तरह से निपटने का अनुरोध करना, उन चक्रों को उस कार्य के लिए सहेजना, जिन्हें नोड में होने की आवश्यकता है। लेकिन ईमानदारी से, यदि आप नोड से बाहर स्थिर सामान की सेवा करते हैं, तो आप भी ठीक होंगे। यह एक बड़ा सौदा नहीं है।
पौलज

4
यह ध्यान दिया जाना चाहिए कि यदि आप सीधे नोड का उपयोग कर रहे हैं, तो आप अभी भी आरक्षित पोर्ट जैसे :80बाइंडिंग को रूट के बिना रूट कर सकते हैं जैसे कि ऑर्बिटबाइंड का उपयोग करके: thomashunter.name/blog/use-authbind-with-node-js
wyqydsyq

70

पॉल्ज के उत्तर के लिए एक और कारण जोड़ने के लिए, मैं फ्रंट एंड सर्वर का उपयोग करता हूं ताकि जब मैं बैकएंड सर्वर को पुनः आरंभ कर रहा हूं या किसी कारण से क्रैश हो जाए तो यह 502 त्रुटि पृष्ठों की सेवा कर सकता है। यह आपके उपयोगकर्ताओं को कनेक्शन स्थापित करने में असमर्थ होने के बारे में कभी भी त्रुटि नहीं देता है।


28

यह मेरा मानना ​​है कि जब तक आप क्या कर रहे हैं, तब तक सभी परिस्थितियों में नोड का उपयोग करके स्थिर फ़ाइलों की सेवा करना ठीक है । यह निश्चित रूप से एक नई प्रतिमान है कि इतने सारे (हर?) प्रतिस्पर्धी प्रौद्योगिकियों (PHP, रूबी, पायथन, आदि) के रूप में स्थिर फ़ाइलों की सेवा करने के लिए एप्लिकेशन सर्वर का उपयोग करने के लिए एप्लिकेशन सर्वर (एस) के सामने HTTPD या Nginx जैसे वेब सर्वर की आवश्यकता होती है। ।

हर उद्देश्य के कारण मैंने कभी भी Node के साथ स्थिर फ़ाइलों की सेवा करने के खिलाफ पढ़ा है, जो आप सबसे अच्छा जानते हैं या बेहतर-परीक्षण / अधिक स्थिर के रूप में माना जाता है का उपयोग करने के विचार के चारों ओर घूमती है। ये व्यावहारिक रूप से बोलने के बहुत वैध कारण हैं, लेकिन इसकी विशुद्ध रूप से तकनीकी प्रासंगिकता बहुत कम है।

जब तक आपको एक ऐसी सुविधा नहीं मिल जाती जो क्लासिक वेब सर्वर के साथ संभव है जो कि नोड (और मुझे संदेह है) के साथ संभव नहीं है, तो चुनें कि आपको क्या सबसे अच्छा पता है या आप जिस दृष्टिकोण के साथ काम करना चाहते हैं वह ठीक है।

के रूप में Nginx बनाम अपाचे के लिए - वे नोड के साथ "खेलेंगे"। आपको उनकी तुलना नोड के संबंध में नहीं करनी चाहिए।


2
सामान्य तौर पर तकनीकी तुलनाओं पर अच्छा परिप्रेक्ष्य: "हर उद्देश्य का कारण जो मैंने कभी भी Node के साथ स्टैटिक फ़ाइलों की सेवा के खिलाफ पढ़ा है, यह इस बात के इर्द-गिर्द घूमता है कि आप जो जानते हैं उसका बेहतर उपयोग करते हैं या बेहतर-परीक्षण / अधिक स्थिर के रूप में माना जाता है। व्यावहारिक रूप से बोल रहे हैं, लेकिन विशुद्ध रूप से तकनीकी प्रासंगिकता है। " इन दिनों बहुत सारी तुलनाएँ पूर्वाग्रही हैं और अवर और समय-परीक्षण वाली प्रौद्योगिकियों पर अनुभव और आराम-स्तर के सामान पर आधारित हैं।
सनी

हां, लेकिन वे वास्तव में / व्यक्तिपरक / कारण हैं। वस्तुनिष्ठ कारण का एक बड़ा उदाहरण एक बेंचमार्क होगा - जिनमें से अधिकांश में मैंने पाया कि नगनेक्स> नोडज (हालांकि मुझे वास्तव में अपना काम करना चाहिए ....)
निक

@ आप बिल्कुल सही हैं। और वहाँ कुछ बाहर हैं, हालांकि मैं वैज्ञानिक बेंच-मार्किंग में विशेषज्ञ नहीं हूं इसलिए मैं लोगों को इसके लिए वेब पर खोज करने दूंगा। हालांकि मैं क्या कहूंगा कि मुझे लगता है कि दो के बजाय एक सर्वर का उपयोग करने की सादगी का लाभ है। किसी चीज के गलत होने की संभावना बहुत कम है। दूसरी ओर, Nginx आमतौर पर हर यूनिक्स की तरह अच्छा विन्यास के साथ प्रणाली नोड के साथ, जबकि आप आंकड़ा के लिए बाहर एकीकरण के साथ की जरूरत पर एक पैकेज है systemd, pm2आदि तो वहाँ pluses और minuses कर रहे हैं और उपयोगकर्ता बात करने के लिए, इसलिए उनके जहर चुनना चाहिए, ।

मैंने सोचा था कि यह विपरीत था - नोड लोड के तहत बेहतर करेगा (शायद शुद्ध अनलोड गति में नहीं) क्योंकि इसमें प्रति फ़ाइल एक फ़ाइल की सेवा करने की प्रक्रिया को बंद करने की आवश्यकता नहीं है, बल्कि स्थानीय डिस्क या जब डेटा धक्का दे सकता है दूरस्थ क्लाइंट उसी थ्रेड पर तैयार हैं, जो अन्य सभी हजारों क्लाइंट्स पर हैं। जब आपके पास मल्टी प्रोसेसर है तो यह निश्चित रूप से टूट जाता है .. जब तक कि नोड को पता नहीं है कि उन्हें अब कैसे उपयोग करना है। या webservers सहकारी मल्टीटास्किंग का उपयोग अब स्थैतिक पृष्ठों को सर्वर में लाने के लिए कर सकते हैं ..
गेरार्ड ओनली

1

एक अतिरिक्त: यह महत्वपूर्ण है अगर आपको एक रिवर्स प्रॉक्सी की आवश्यकता है, उदाहरण के लिए एक ही पोर्ट पर एक वेबसोकेट सर्वर को निष्पादित करने के लिए, या शायद कुछ टेक्नोलॉजिकल मिक्स करें (एनओडीजेएस के साथ कुछ अनुरोध और PHP के साथ कुछ अन्य या जो भी हो)

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