2011-10-28 17 views
32

पोर्ट 80 पर सुन रहा बनाने शुरू कर देंगे नहीं और शुरू करने से एप्लिकेशन:Node.js + एक्सप्रेस: ​​एप्लिकेशन इस तरह

express -s -t ejs 
npm install express 
npm install ejs 
node app.js 

और यह (पोर्ट 3000 पर) काम करता है। लेकिन जब मैं जाने के लिए और 80 पोर्ट बदलना है, तो node app.js आउटपुट इस चल:

node.js:198 
throw e; // process.nextTick error, or 'error' event on first tick 
     ^
TypeError: Cannot call method 'getsockname' of null 
at HTTPServer.address (net.js:746:23) 
at Object.<anonymous> (/var/www/thorous/app.js:35:67) 
at Module._compile (module.js:432:26) 
at Object..js (module.js:450:10) 
at Module.load (module.js:351:31) 
at Function._load (module.js:310:12) 
at Array.<anonymous> (module.js:470:10) 
at EventEmitter._tickCallback (node.js:190:26) 

यह मेरा लैपटॉप पर भी काम करता है, लेकिन मेरे अमेज़न EC2 उदाहरण है, जहां पोर्ट 80 खुला है पर नहीं। क्या पता चल सकता है कि क्या गलत है। कोई सुझाव?

+0

एक भयानक त्रुटि संदेश है कि करने के लिए पोर्ट 80 पर यातायात अग्रेषित कर सकते हैं क्या आप वाकई ऐसा करना चाहते हैं। –

उत्तर

57

आप रूट के रूप में अपने अनुप्रयोग शुरू करने कर रहे हैं? क्योंकि निचले बंदरगाहों को रूट विशेषाधिकारों की आवश्यकता होती है शायद एक सूडो नोड app.js काम करता है?

लेकिन, आपको रूट विशेषाधिकारों के साथ पोर्ट 80 पर कोई node.js ऐप नहीं चलाया जाना चाहिए !!! कभी नहीँ!

मेरे सुझाव पोर्ट पर चल रहे आपके node.js ऐप पर एक रिवर्स प्रॉक्सी के रूप में सामने nginx चलाने के लिए है। 3000

+0

यह काम किया! सुरक्षा युक्तियों के लिए धन्यवाद। – Vitaly

+7

क्या आप पोर्ट 80 पर रूट के रूप में node.js ऐप चलाने के लिए विस्तारित नहीं कर सकते? मैं उत्सुक (एक नौसिखिया जेएस देव)। – Christopher

+9

यह केवल नोड पर लागू नहीं होता है। किसी सर्वर सर्वर को रूट के रूप में चलाने की अनुशंसा नहीं की जाती है। यदि आपको ऐसा करना है, क्योंकि आप एक विशेषाधिकार प्राप्त बंदरगाह का उपयोग करना चाहते हैं, तो प्रक्रिया कम से कम प्रबल उपयोगकर्ता पर चल रही इसी प्रक्रिया में उस पोर्ट पर सभी आने वाले ट्रैफ़िक विशेषाधिकारों और "आगे" को छोड़ देती है। यह becasue कोई कार्यक्रम सही है। प्रत्येक सॉफ़्टवेयर में बग और शायद सुरक्षा समस्याएं होती हैं। यदि कोई हमलावर ऐसी बग का उपयोग कर सकता है और कोड इंजेक्ट कर सकता है - यह इस प्रक्रिया को चलाने वाले उपयोगकर्ता के रूप में निष्पादित हो जाता है। तो यदि आपकी प्रक्रिया रूट के रूप में चलती है तो हमलावर आपकी मशीन पर कुछ भी कर सकता है। –

0

शायद पोर्ट 80 पर पहले कुछ और चल रहा है?

शायद एक पोर्ट स्कैन करें और पुष्टि करें कि इसका पहले से उपयोग नहीं किया जा रहा है?

nc -z <<your IP>> 80 

दया,

दान

+0

मैं कुछ भी नहीं सोच सकता। यह node.js स्थापित और mongodb सर्वर की एक प्रति के साथ एक नया नया उदाहरण है। एनसी कुछ भी वापस नहीं किया। – Vitaly

66

आप 3000.

sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 3000 
+0

यह बहुत अच्छा है! मैं समस्या को ठीक करने में सक्षम था! –

+1

nginx या अन्य प्रॉक्सी समाधान के बिना अच्छा और साफ जवाब! – hazelnut

+0

इस कमांड का उपयोग करने के बारे में सावधान रहें। यदि आप सर्वर में रूट के रूप में लॉग इन हैं, तो यह आपके सभी डोमेन पर पोर्ट 3000 पर ट्रैफ़िक अग्रेषित करेगा। –

संबंधित मुद्दे