80 পোর্ট (উবুন্টু / লিনোড) দিয়ে নোড.জেএস চালানোর সময় সেরা অনুশীলনগুলি [বন্ধ]


260

আমি একটিতে আমার প্রথম Node.jsসার্ভার সেট আপ করছি cloud Linux nodeএবং এর বিবরণে আমি মোটামুটি নতুন Linux admin। (বিটিডাব্লু আমি একই সাথে অ্যাপাচি ব্যবহার করার চেষ্টা করছি না))

সবকিছু সঠিকভাবে ইনস্টল করা হয়েছে তবে আমি দেখতে পেলাম যে আমি যদি না ব্যবহার করি তবে আমি নোড দিয়ে root loginশুনতে সক্ষম নই port 80। তবে আমি এটি সুরক্ষার কারণে মূল হিসাবে চালাচ্ছি না।

সেরা অনুশীলন কি:

  1. নোডের জন্য ভাল অনুমতি / ব্যবহারকারীর সেট করুন যাতে এটি নিরাপদ / স্যান্ডবক্সযুক্ত?
  2. এই সীমাবদ্ধতার মধ্যে 80 পোর্ট ব্যবহার করার অনুমতি দিন।
  3. নোড শুরু করুন এবং এটি স্বয়ংক্রিয়ভাবে চালান।
  4. কনসোলে প্রেরণ করা লগ তথ্য হ্যান্ডেল করুন।
  5. অন্য কোনও সাধারণ রক্ষণাবেক্ষণ এবং সুরক্ষা সংক্রান্ত উদ্বেগ।

আমার কি পোর্ট ৮০ ট্র্যাফিককে অন্য শ্রোতার বন্দরে ফরোয়ার্ড করা উচিত?

ধন্যবাদ

উত্তর:


532

পোর্ট 80

আমি আমার মেঘের উদাহরণগুলিতে যা করি তা হ'ল আমি এই কমান্ডটি দিয়ে পোর্ট 80 কে পোর্ট 3000 এ পুনঃনির্দেশ করি:

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

তারপরে আমি আমার নোড.জেএস 3000 বন্দরে চালু করি 80 80 বন্দরটি করার অনুরোধগুলি 3000 পোর্টে ম্যাপ করা হবে।

আপনার /etc/rc.localফাইলটি সম্পাদনা করা উচিত এবং সেই লাইন বিয়োগটি যুক্ত করা উচিতsudo । এটি মেশিন বুট হয়ে গেলে পুনর্নির্দেশকে যুক্ত করবে। আপনি প্রয়োজন হবে না sudoযে /etc/rc.localকারণ কমান্ড সেখানে হিসাবে চালানো হয় rootসিস্টেম বুট।

লগ

ব্যবহার চিরকাল সঙ্গে আপনার Node.js আরম্ভ করার জন্য মডিউল। এটি নিশ্চিত হয় যে এটি কখনও ক্র্যাশ হলে এটি পুনরায় চালু হবে এবং এটি কোনও ফাইলে কনসোল লগগুলি পুনর্নির্দেশ করবে।

বুট চালু করুন

আপনার পোর্ট পুনঃনির্দেশের জন্য সম্পাদিত ফাইলটিতে আপনার নোড.জেএস শুরু স্ক্রিপ্ট যুক্ত করুন, /etc/rc.local । সিস্টেমটি শুরু হয়ে গেলে এটি আপনার নোড.জেএস লঞ্চ স্ক্রিপ্টটি চালাবে।

ডিজিটাল মহাসাগর এবং অন্যান্য ভিপিএস

এটি কেবল লিনোডের জন্যই নয়, ডিজিটাল মহাসাগর, এডাব্লুএস ইসি 2 এবং অন্যান্য ভিপিএস সরবরাহকারীদের ক্ষেত্রেও প্রযোজ্য। তবে রেডহ্যাট ভিত্তিক সিস্টেমে /etc/rc.localরয়েছে /ect/rc.d/local


3
উত্তরের জন্য ধন্যবাদ, সুন্দর এবং বিন্দু।
রোবটব্যাগস


12
ভার্চুয়াল ব্যক্তিগত সার্ভারগুলির জন্য প্রায়শই "-i eth0" পতাকাটি একটি সমস্যা হয়ে দাঁড়াবে। প্রয়োজন অনুযায়ী eth0 প্রতিস্থাপন করুন।
JHWN

7
আমি যদি আমার নোড.জেএস স্টার্ট স্ক্রিপ্টটি যুক্ত করি তবে /etc/rc.localএটি কি rootসিস্টেম বুট হিসাবে কার্যকর হবে না ? এটি 80 পুনর্নির্দেশের বন্দরের উদ্দেশ্যকে পরাস্ত করবে।
জামিক্স

4
নোট করুন যে বন্দরটি কাজ করতে পুনর্নির্দেশের জন্য গন্তব্য বন্দরটি আপনার ফায়ারওয়ালটিতেও খোলা থাকা দরকার। ডাব্লুআরটি বুটে একটি নোড উদাহরণ শুরু করে, আমরা কেবল বিতরণগুলির আরআর স্ক্রিপ্ট / সিস্টেমড ফাইলগুলি ব্যবহার করি যা আপনাকে কোনও ব্যবহারকারী নির্দিষ্ট করার অনুমতি দেয়।
বিকে 138

116

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 বন্দর দিয়ে চালাতে চান, এটি অভিযোগ করবে না।

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


9
এটি আরও ভাল, সহজ উত্তর।
কাইল চাদা

2
এছাড়াও, এখানে বিস্তারিত উত্তর যুক্ত করেছেন stackoverflow.com/questions/23281895/…
মেহতা

1
এনজিআইএনএক্স এর মতো একটি ওয়েব সার্ভার 80 পোর্টে কীভাবে চলবে? এটি কি অনুরূপ কিছু করে?
এরিক অ্যান্ড্রু লুইস

1
@ এরিক অ্যান্ড্রু লুইস: আমি বলব এটি নির্ভর করে। আপনি যখন নন-রুট মোডে সার্ভারটি চালাচ্ছেন তখন এই ত্রুটিটি প্রদর্শিত হবে। আপনি যদি রুট ব্যবহারকারী হিসাবে এনগিনেক্স সার্ভার চালাচ্ছেন! এছাড়াও, যদি সাধারণ ব্যবহারকারী হিসাবে চালানো হয় এবং ত্রুটি পাওয়া যায় getting বন্দরটি অ্যাক্সেস করতে নিরাপদ অনুমতি দেওয়ার জন্য উপরের আদেশগুলি চালান। এছাড়াও স্ট্যাকওভারফ্লো.com
মেহতা

16

80 (বা 443) পোর্টে আবদ্ধ হওয়ার পরে রুট সুবিধাগুলি ছাড়ুন।

এটি পোর্ট 80/443 সুরক্ষিত রাখতে দেয়, তবুও আপনাকে রুট হিসাবে অনুরোধগুলি সরবরাহ করতে বাধা দেয়:

function drop_root() {
    process.setgid('nobody');
    process.setuid('nobody');
}

উপরের ফাংশনটি ব্যবহার করে একটি সম্পূর্ণ কার্যকারী উদাহরণ:

var process = require('process');
var http = require('http');
var server = http.createServer(function(req, res) {
    res.write("Success!");
    res.end();
});

server.listen(80, null, null, function() {
    console.log('User ID:',process.getuid()+', Group ID:',process.getgid());
    drop_root();
    console.log('User ID:',process.getuid()+', Group ID:',process.getgid());
});

এই সম্পূর্ণ রেফারেন্সে আরও বিশদ দেখুন ।


9

80 বন্দরটির জন্য (যা আসল প্রশ্ন ছিল) ড্যানিয়েল ঠিক ঠিক is আমি সম্প্রতি চলে এসেছি httpsএবং iptablesএসএসএল শংসাপত্রগুলি পরিচালনা করে এমন একটি হালকা এনগিনেক্স প্রক্সিতে স্যুইচ করতে হয়েছিল। আমি একটি দরকারী পাওয়া উত্তর একটি সহ সারকথা দ্বারা gabrielhpugliese কিভাবে যে হ্যান্ডেল করতে হবে। মূলত আমি

আশা করি এটি অন্য কারও কিছু মাথা ব্যথা বাঁচাতে পারে। আমি নিশ্চিত যে এটি করার খাঁটি নোডের উপায় আছে তবে এনজিনেক্স দ্রুত ছিল এবং এটি কার্যকর হয়েছিল।

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