2013-02-18 44 views
8

मेरे node.js एप्लिकेशन मैंने http 80 के लिए पोर्ट 80 पर https और 443 के लिए सुनवाई की है, जो मुझे विश्वास था कि काफी मानक अभ्यास था।मुझे कौन से बंदरगाहों को node.js सुनना चाहिए? कैसे और क्यों?

हालांकि मैं हाल ही में पढ़ा है उदाहरण के एक नंबर HTTP/HTTPS सुनने के लिए अन्य बंदरगाहों (जैसे 8080 और 8081) का उपयोग करें, और उसके बाद इस तरह के iptables या ufw नियम के रूप में अन्य साधनों का उपयोग करने के पैकेट पुनः मार्ग निर्माण के माध्यम से 80/443 बंदरगाहों की सेवा के लिए/दूसरों से।

दो उदाहरण here और here देखें।

तो मेरा प्रश्न क्यों मैं 80 और 443 बंदरगाहों को सीधे सुनना नहीं चाहूंगा?

क्या सुरक्षा समस्याएं हैं? क्या यह केवल इन लेखकों का मामला है जो 1024 से कम बंदरगाहों पर सुनने की अनुमति नहीं रखते हैं (मुझे यह आश्चर्यजनक लगेगा?)? क्या अधिकांश लोग अपाचे को साइड नोड के साथ चलाते हैं? (मैं नहीं)।

मान लीजिए कि मैं 80 और/या 443, पर सीधे क्यों नहीं सुनना चाहता हूं, 80/433 से यातायात को रिले करने के लिए मुझे किस विधि का उपयोग करना चाहिए?

मैंने ऊपर iptables और ufw का उल्लेख किया है, इनमें से एक दूसरों के मुकाबले बेहतर है, या क्या कोई अन्य विधि है जिसका उपयोग करना चाहिए? क्या उत्तर इस बात पर निर्भर करता है कि क्या मैं प्रक्रियाओं के बीच अपना भार संतुलित कर रहा हूं?

अग्रिम धन्यवाद।

+2

मुझे लगता है कि इसके कारण आपको 1024 से कम बंदरगाहों पर चलाने के लिए रूट अधिकारों की आवश्यकता है और आप नहीं चाहते हैं कि आपके पास ऐप रूट हो, फिर भी इसे बांधने के तरीके हैं। मैं व्यक्तिगत रूप से उपयोग करता हूं [AuthBind] (http://en.wikipedia.org/wiki/Authbind) – VeXii

+1

यदि मैं गलत नहीं हूं, तो पोर्ट 1337 नोडजेस चलाने के लिए मानक बन रहा है। अनुप्रयोगों को निष्पादित करने के लिए, आप एनजीआईएनएक्स का उपयोग रिवर्स प्रॉक्सी सर्वर के रूप में कर सकते हैं। –

उत्तर

14

आपके द्वारा लिंक किए गए पहले लेख की पहली पंक्ति कारण बताती है।

Standard practices say no non-root process gets to talk to 
the Internet on a port less than 1024. 

नोड बंदरगाह 80 या 443 से आबद्ध होने के लिए, आप जड़ है, जो एक अच्छा विचार नहीं है के रूप में इसे चलाने के लिए की आवश्यकता होगी।

जिस विधि का उपयोग आप उच्च बंदरगाहों पर यातायात को फिर से करने के लिए करते हैं, वह आपके ऊपर है। iptables कम से कम संसाधन-गहन और सरल है। नोड में प्रॉक्सी में NginX/Apache का उपयोग करने का एक और तरीका होगा। मैं कहूंगा कि उस विधि का मुख्य लाभ यह है कि आप वहां से स्थैतिक फाइलों जैसी चीजों की भी सेवा कर सकते हैं, और उन्हें नोड के माध्यम से सेवा नहीं करनी है।

अपाचे और एनजिनएक्स दोनों स्थिर फाइलों की सेवा में स्पष्ट रूप से बहुत अच्छे होने के लिए डिज़ाइन किए गए हैं, इसलिए वे इसमें बहुत अच्छे हैं, जबकि नोड एक संपूर्ण जेएस पर्यावरण है, जिसमें शामिल सभी ओवरहेड हैं। नोड एक साथ कई कनेक्शनों को सौंपने में बहुत अच्छा है, और यह निश्चित रूप से सामान्य लोड के लिए पूरी तरह से अच्छी तरह से फाइलों की सेवा कर सकता है, लेकिन यह एनजिनएक्स की तुलना में अधिक संसाधनों का उपयोग करेगा।

अपाचे/एनजिनएक्स जैसी HTTP-जागरूक प्रॉक्सी का उपयोग करने का भी अर्थ है कि आप अलग-अलग सबडोमेन या यहां तक ​​कि एक ही डोमेन पर अलग-अलग पथ चलाने के लिए नोड के कई उदाहरणों को आसानी से सेट कर सकते हैं।

+0

नोड के बजाय फ़ाइलों की सेवा के लिए NginX/Apache का उपयोग करने के लिए क्या फायदे हैं? – Joshua

+1

@ जोशुआ अपडेट किया गया। – loganfsmyth

+0

@loganfsmyth: लेकिन अगर आप अपाचे या NginX के साथ दृष्टिकोण का उपयोग करते हैं ... इसका मतलब है कि पोर्ट 80 को सुनने के लिए इन सर्वरों को रूट-विशेषाधिकारों की आवश्यकता होगी, है ना?तो यह उनके लिए कोई समस्या क्यों नहीं है, लेकिन node.js के लिए यह है? – Manfred