বেশিরভাগ বন্দর শোনার সময় নোড.জেএস EACCES ত্রুটি


249

আমি একটি অ্যাপ্লিকেশন পরীক্ষা করছি (আশা করি হিরকু চলবে, তবে স্থানীয়ভাবেও সমস্যা হচ্ছে)। এটি আমাকে একটি EACCES ত্রুটি দিচ্ছে যখন এটি http.Server.listen () চালায় - তবে এটি কেবল কিছু পোর্টে ঘটে।

সুতরাং, স্থানীয়ভাবে আমি চালাচ্ছি:

joe@joebuntu:~$ node
> var h = require('http').createServer();
> h.listen(900);
Error: EACCES, Permission denied
    at Server._doListen (net.js:1062:5)
    at net.js:1033:14
    at Object.lookup (dns.js:132:45)
    at Server.listen (net.js:1027:20)
    at [object Context]:1:3
    at Interface.<anonymous> (repl.js:150:22)
    at Interface.emit (events.js:42:17)
    at Interface._onLine (readline.js:132:10)
    at Interface._line (readline.js:387:8)
    at Interface._ttyWrite (readline.js:564:14)

900 বন্দরটিতে আমার কোনও চলমান নেই (বা অন্য 20 টি বন্দরগুলির মধ্যে আমি চেষ্টা করেছি), সুতরাং এটি কাজ করা উচিত। অদ্ভুত অংশ এটা করে কিছু পোর্ট কাজ। উদাহরণস্বরূপ, পোর্ট 3000 নিখুঁতভাবে কাজ করে।

এর কারণ কী হবে?

আপডেট 1:

আমি বুঝতে পেরেছিলাম যে আমার স্থানীয় কম্পিউটারে, EACCES ত্রুটিটি আসছে কারণ এই নির্দিষ্ট বন্দরগুলিতে আবদ্ধ হওয়ার জন্য আমাকে রুট হিসাবে নোড চালাতে হবে। কেন হয় তা আমি জানি না, তবে সুডো ব্যবহারের মাধ্যমে এটি ঠিক হয়ে যায়। যাইহোক, এটি হিরোকুতে কীভাবে এটি ঠিক করব তা ব্যাখ্যা করে না। হিরোকুতে মূল হিসাবে চালানোর কোনও উপায় নেই, তাই আমি কীভাবে 80 পোর্টে শুনতে পারি?


23
1024 কম বন্দরগুলির জন্য traditionতিহ্যগতভাবে উন্নত অনুমতিগুলির প্রয়োজন require হিরোকুতে আপনি 80 বন্দর শোনেন না, আপনি যে পরিবেশটি ভেরিয়েবলের মাধ্যমে আপনাকে বলেছেন সেই বন্দরের কথা শোনেন এবং তাদের রাউটিং লেয়ারটি 80 প্রান্তে বাঁধাই পোর্টটি পরিচালনা করতে দেয়।
মাট ফ্রেমম্যান

আপনার আপডেট 1 আমাকে সাহায্য করেছে। 'sudo node myporgram.js' এটিকে চালিত করে।
সাবের

উত্তর:


351

আপনার ওয়ার্কস্টেশনে চলছে

একটি সাধারণ নিয়ম হিসাবে, মূল অধিকার ছাড়াই চলমান প্রক্রিয়াগুলি 1024 এর নীচে পোর্টগুলিতে আবদ্ধ হতে পারে না।

সুতরাং একটি উচ্চতর বন্দর চেষ্টা করুন, বা এর মাধ্যমে উন্নত সুবিধাগুলি দিয়ে চালান sudo। আপনি বিশেষাধিকার ডাউনগ্রেড করতে পরে আপনি কম পোর্ট ব্যবহার করে আবদ্ধ আছে process.setgidএবং process.setuid

হিরকুতে চলছে

হিরকুতে আপনার অ্যাপ্লিকেশনগুলি চালানোর সময় আপনাকে পোর্ট পরিবেশের পরিবর্তনশীল হিসাবে নির্দিষ্ট হিসাবে পোর্টটি ব্যবহার করতে হবে।

Http://devcenter.heroku.com/articles/node-js দেখুন

const server = require('http').createServer();
const port = process.env.PORT || 3000;

server.listen(port, () => console.log(`Listening on ${port}`));

3
এর অর্থ কি হিরোকু দ্বারা সরবরাহিত বন্দরটি আমাকে ব্যবহার করতে হবে, এবং তারপরে তারা পোর্ট 80 এ স্থানান্তর করতে পর্দার আড়ালে কিছু জাদু করবে? আমি যদি পোর্ট ৮০ এ না চালিয়ে কিছু চালাতে চাই তবে কী হবে?
jwegner

12
হ্যাঁ. আপনি কেবলমাত্র the পোর্টে আপনাকে যে বন্দরটি বলি তা আপনি শুনতে পারবেন আমরা আপনার বন্দরে 80 বা 443 রাউটিংয়ের যত্ন নিই। আমরা আপনার ডায়োনোর চারপাশে সরানোর সাথে সাথে আসল বন্দরটি সমস্ত সময় পরিবর্তিত হয়। সময় এই মুহুর্তে আমরা কেবল প্রকাশ্যে 80 443 থেকে রাউটিং সমর্থন
উইল

@ উইল, এই নিষেধাজ্ঞার কোনও সম্ভাবনা? বিশেষত, 80 বা 443 ব্যতীত অন্য বন্দরগুলিতে শুনতে সক্ষম? এটি একটি দুর্দান্ত সীমাবদ্ধ সেট, বিবেচনা করা সমস্ত জিনিস।
ghayes

2
আপনি কেন নিজের অ্যাপটি HTTP এবং https এর চেয়ে আলাদা বন্দরে চলতে চান?
উইল

1
@ আমি হিরোকুতে একটি সাধারণ গেম সার্ভার হোস্ট করতে চাই। Ity crossdomain.xmlক্যটি 843 বন্দর দিয়ে স্থানান্তর করা দরকার ।
polkovnikov.ph

178

অ-সুবিধাযুক্ত ব্যবহারকারী (মূল নয়) 1024 এর নীচে পোর্টগুলিতে শ্রোতা সকেট খুলতে পারবেন না।


5
আপভোটেড - এটি একটি ভাল সাধারণ নিয়ম, তবে এর ব্যতিক্রম রয়েছে যেমন, লিনাক্সে 'ক্ষমতা'।
মাইকমেকানা

3
আপনি সবেমাত্র আমাকে ডিবাগের কয়েক ঘন্টা বাঁচিয়েছেন। আমি এটা সম্পর্কে জানতাম না।
মলহারক

6
যদিও আমি এটি পছন্দ করি না, sudoনোড ব্যবহার করে এক্সপ্রেস সার্ভার চালানোর সময় আমার আসলে থাকতে হবে না (আসলেই ঝাঁকুনি)। সুতরাং বোঝা যায় না
6:55 এ ব্লেম করুন

এই জ্ঞানের টুকরো
মরিস

4
@ ব্লাম্ব তারপরে মিটমেহতার সমাধানটি ব্যবহার করুন ; ^)
রাফিন

107

এই রেফারেন্স লিঙ্কটি পরীক্ষা করুন :

80 ব্যবহারের জন্য নিরাপদ ব্যবহারকারীর অনুমতি দিন

মনে রাখবেন, আমরা আপনার অ্যাপ্লিকেশনগুলি মূল ব্যবহারকারী হিসাবে চালাতে চাই না, তবে একটি বাধা আছে: আপনার নিরাপদ ব্যবহারকারীর ডিফল্ট এইচটিটিপি পোর্ট (৮০) ব্যবহারের অনুমতি নেই। আপনার লক্ষ্য হ'ল এমন কোনও ওয়েবসাইট প্রকাশ করতে সক্ষম হবেন যা দর্শকদের মতো সহজে ব্যবহারযোগ্য URL এর মতো নেভিগেট করে ব্যবহার করতে পারে http://ip:port/

দুর্ভাগ্যক্রমে, আপনি রুট হিসাবে সাইন না করা পর্যন্ত আপনাকে সাধারণত একটি ইউআরএল ব্যবহার করতে হবে http://ip:port- যেখানে পোর্ট নম্বর> 1024।

এখানে প্রচুর লোক আটকে যায় তবে সমাধানটি সহজ। কয়েকটি বিকল্প আছে তবে এটি আমার পছন্দ। নিম্নলিখিত আদেশগুলি টাইপ করুন:

sudo apt-get install libcap2-bin
sudo setcap cap_net_bind_service=+ep `readlink -f \`which node\``

এখন, আপনি যখন কোনও নোড অ্যাপ্লিকেশনটি বলবেন যে আপনি এটি 80 বন্দর দিয়ে চালাতে চান, এটি অভিযোগ করবে না।


5
এটি অবশ্যই সেরা সমাধান।
মার্ক Lagendijk

1
@ মারকলেজেনডিজ্ক: ধন্যবাদ মার্ক। আমিও একই প্রশ্নটি ভুল করে জিজ্ঞাসা করেছি এবং এখানে বিশদ উত্তর পোস্ট করেছি stackoverflow.com/questions/23281895/… । এটি সম্পাদনা করতে নির্দ্বিধায়।
মেহতা

6
এই উত্তরটি কেন নয়
Kha

@ খালেদমোহমদ পি: এতে খুশী হয়েছে :)
মেহতার সাথে

কে বলেছে এটি এখনও pm2 মডিউলটির সাথে কাজ করে না। আপনার পিএম 2 কে মেরে pm2 killএটিকে পুনরায় তৈরি করুন।
প্রশান্ত জয়া

10

আরেকটি পন্থা হ'ল বন্দর পুনর্নির্দেশকরণ:

sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 900 -j REDIRECT --to-port 3000

এবং আপনার সার্ভারটি> 1024 পোর্টে চালান:

require('http').createServer().listen(3000);

পিএস একইভাবে https (443) বন্দরের জন্য করা যেতে পারে।


1
ধন্যবাদ ধন্যবাদ! এটি আমার নিরাপদ বন্দরের ডিবাগিংয়ের এক ঘন্টা, এসএসএল পুনর্নির্দেশের জন্য আরও এক ঘন্টা বাঁচিয়েছে এবং আমাকে এডাব্লু লাইটসটেলে ডেভলপমেন্ট সার্ভারের দৃশ্যমানতা সীমাবদ্ধ করার অনুমতি দেয় (যা আইপি ঠিকানার মাধ্যমে অনুরোধগুলির সূক্ষ্ম-সুরকরণের অনুমতি দেয় না)।
মাইগুয়েলমোরিন

3

এর অর্থ নোড সংজ্ঞায়িত পোর্টে শুনতে সক্ষম নয়। এটিকে 1234 বা 2000 বা 3000 এর মতো কিছুতে পরিবর্তন করুন এবং আপনার সার্ভারটি পুনরায় চালু করুন।


3

ঈশ্বর!! আমার ক্ষেত্রে আমি এর ....listen(ip, port)পরিবর্তে করছিলাম ...listen(port, ip)এবং এটি ত্রুটিটি ছড়িয়ে দিচ্ছিল _:Error: listen EACCES localhost

আমি পোর্ট নম্বরগুলি ব্যবহার করছিলাম> = 3000 এবং এমনকি অ্যাডমিন অ্যাক্সেস দিয়ে চেষ্টা করেছি। কিছুই কাজ হয়নি। তারপরে একটি ঘনিষ্ঠ দৃষ্টিভঙ্গি দিয়ে, আমি বিষয়টি লক্ষ্য করেছি। এটিতে পরিবর্তন হয়েছে ...listen(port, ip)এবং সবকিছু ঠিকঠাক কাজ শুরু করেছে !!

এটি যদি অন্য কারও পক্ষে কার্যকর হয় তবে এটি কল করে ...


ধন্যবাদ! আমারও একই সমস্যা ছিল। আমি হোস্ট-নেম, পোর্ট ব্যবহার করে অন্য সমস্ত এপিআইতে অভ্যস্ত।
ডেভিড

আমি যখন ওয়েকন ডকার চিত্র চালানোর চেষ্টা করছিলাম তখন আমার এই সমস্যা হয়েছিল। আমি এই টিপটি ব্যবহার করে সমাধান করেছি। ধন্যবাদ.
অ্যাঞ্জেলো পোলোটো

@ দিলিপ-মুথুকুরুসিমন ....listen(ip, port)আপনার উত্তরটি (চারটি দিয়ে .) রাখার ইচ্ছা ছিল? আপনি যে কারণে যুক্তির ক্রম সম্পর্কে কথা বলছিলেন তা বুঝতে আমার এক মিনিট সময় লেগেছে।
bschlueter

হ্যাঁ, আমি কেবল যুক্তিগুলির ক্রম বলতে চাইছি। Pls ....সেখানে (চারটি বিন্দু) রাখবেন না, যা আমি ভেবেছিলাম স্পষ্ট।
দিলীপ মুথুকুরুশিমানা

2

আমি আমার ম্যাকটিতে এই ত্রুটিটি পেয়েছি কারণ এটি নোড সার্ভার দ্বারা ব্যবহৃত পোর্ট হিসাবে একই পোর্টটি ব্যবহার করে ডিফল্টরূপে অ্যাপাচি সার্ভারটি চালিয়েছিল যা আমার ক্ষেত্রে বন্দর 80 ছিল I sudo apachectl stop

আশা করি এটি কাউকে সাহায্য করবে।


2

আমি আমার ম্যাকটিতেও এই ত্রুটি পেয়েছি। আমি npm run devউইন্ডোতে আমার নোডেজ অ্যাপ্লিকেশন চালানোর জন্য ব্যবহার করি এবং এটি দুর্দান্ত কাজ করে। তবে আমি আমার ম্যাক এ এই ত্রুটি পেয়েছি - error given was: Error: bind EACCES null:80

এটি সমাধানের একটি উপায় হ'ল এটি রুট অ্যাক্সেস দিয়ে চালানো। আপনি ব্যবহার করতে পারেন sudo npm run devএবং আপনার পাসওয়ার্ড দেওয়ার প্রয়োজন হবে।

আপনার অ্যাপ্লিকেশনটি কোনও সুবিধামুক্ত পোর্টে যেমন 3000 এর মতো, যা রুটের অনুমতি ছাড়াই কাজ করবে সেগুলি সরবরাহ করা ভাল।

রেফারেন্স: HTTP 80 পোর্টে শোনার সময় নোড.জেএস EACCES ত্রুটি


2

আমারো একই সমস্যা এটি বন্দর 8080 চালানোর আত্মত্যাগী হয়, কিন্তু এছাড়াও ছিল কোনো অন্য।

দেখা যাচ্ছে, কারণ env.localএটি পড়া ফাইলটিতে ভেরিয়েবল নামের পরে মতামত রয়েছে:

PORT=8080 # The port the server runs at

এবং এটি এর মতো ব্যাখ্যা করে পোর্ট " 8080 # The port the server runs at" ব্যবহার করার চেষ্টা করে যা স্পষ্টতই একটি অবৈধ পোর্ট (-1)। মন্তব্যগুলি মুছে ফেলা পুরোপুরি সমাধান হয়েছে।

উইন্ডোজ 10 এবং গিট বাশ ব্যবহার করে।


আমি জানি এটি ঠিক এখানে বর্ণিত সমস্যা নয় তবে এটি কারওর পক্ষে সাহায্য করতে পারে। আমি আমার প্রশ্নের উত্তর খুঁজতে এই প্রশ্নটিতে অবতরণ করেছি, তাই ... সম্ভবত?


হ্যাঁ, আমি এটি অভিজ্ঞতা অর্জন করেছি। .Env ফাইলগুলিতে মানগুলির পরে মন্তব্যগুলি এর কারণ হতে পারে।
ডানোজ

1

মনে রাখবেন আপনি ৮০ বন্দরকে বাঁধতে sudo ব্যবহার করেন এবং env ভেরিয়েবলগুলি পোর্ট এবং NODE_ENV ব্যবহার করছেন তবে আপনাকে অবশ্যই সেই সমস্তগুলি পুনরায় রপ্তানি করতে হবে কারণ আপনি এখন রুট প্রোফাইলের অধীনে রয়েছেন এবং আপনার ব্যবহারকারীর প্রোফাইল নয়। সুতরাং, আমার ম্যাক এ কাজ করতে আমি নিম্নলিখিতগুলি করেছি:

sudo su
export NODE_ENV=production
export PORT=80
docpad run


1

অ্যাথবাইন্ড চেষ্টা করুন:

http://manpages.ubuntu.com/manpages/hardy/man1/authbind.1.html

ইনস্টল করার পরে, আপনি নীচের ফোল্ডারে আপনি যে পোর্ট নম্বরটি ব্যবহার করতে চান তার নাম সহ একটি ফাইল যুক্ত করতে পারেন: / ইত্যাদি / অ্যাথবাইন্ড / বাইপোর্ট /

Chmod ব্যবহার করে এটিকে 500 টি অনুমতি দিন এবং আপনি যে ব্যবহারকারীটির অধীনে প্রোগ্রামটি চালাতে চান তার মালিকানা পরিবর্তন করুন।

এর পরে, আপনার প্রকল্পের ব্যবহারকারী হিসাবে "অথথবাইন্ড নোড ..." করুন।


1

সার্ভার.জেজে বিশেষত এই লাইনে পোর্ট নম্বর পরিবর্তন করে আমার ত্রুটিটি সমাধান হয়েছে

const port = process.env.PORT || 8085;

আমি আমার পোর্ট নম্বরটি 8080 থেকে 8085 এ পরিবর্তন করেছি।

আশা করি এটা সাহায্য করবে.


0

বিভিন্ন উপায়ে চেষ্টা করার পরে, আমার উইন্ডোজগুলিতে আইআইএস পুনরায় ইনস্টল করা সমস্যার সমাধান করেছে।


0

আমার ত্রুটিটি সমাধান হয়েছে (উইন্ডোজ অন) ব্যবহার করে

app.set('PORT', 4000 || process.env.PORT);

app.listen(app.get('PORT'), <IP4 address> , () => {
    console.log("Server is running at " + app.get('PORT'));
});

নোডজেএস অ্যাপ্লিকেশনটিকে উইন্ডোজ ফায়ারওয়ালে নেটওয়ার্ক অ্যাক্সেস করার অনুমতি দিন।


0

পুনঃসূচনা যথেষ্ট ছিল না! সমস্যা সমাধানের একমাত্র উপায় নিম্নলিখিতটি দ্বারা:

আপনাকে সেই বন্দরে চালিত পরিষেবাটি মেরে ফেলতে হবে।

সেমিডিতে এডমিন হিসাবে চালান, তারপরে টাইপ করুন: নেটস্ট্যাট -আওন | / আমি "শুনছি" সন্ধান করুন

তারপরে আপনি সক্রিয় পরিষেবাদির সাথে একটি তালিকা পাবেন, ৪২০০ এ চলমান বন্দরটি অনুসন্ধান করুন এবং প্রসেস আইডি ব্যবহার করুন যা এটি শেষ করে দেওয়ার জন্য শেষ কলামটি রয়েছে

: টাস্কিল / এফ / পিআইডি 2652

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.