به نام دانای بر حق
مقدمه
یکی از سوالاتی که ذهن کسانی که با node.js کار میکنند رو در گیر میکنه استفاده هم زمان در کنار سرور هایی که روی اونها apache نصب هستش و مشکل دقیقا زمانی شروع میشود که شما دوست دارید هر دو بر روی پورت ۸۰ اجرا بشوند و چرا که express.js نیز همواره قصد داره یه پورت جدید رو شنود کنه و در کنار آدرس وبسایت مثلا :۸۰۸۰ نمایش داده میشه، برای رفع این مشکل باید چه کاری کنیم؟
راه حل ها
در اینجا ۲ راه حل اساسی برای نمایش هر دو سرور در پورت ۸۰ و یا ۴۴۳ وجود دارد که هر دو رو راه حل مبتنی بر proxy میباشد تا این مشکل برطرف شود:
فعال کردن پروکسی بر روی آپاچی که توضیح آن را در ادامه میدهیم
فعال کردن پروکسی در node.js که شما رو به این مقاله ارجاع میدهیم
توضیح روش آپاچی
در روش مذکور ما مبنا رو بر Ubuntu گذاشتیم که شما میتوانید از روی الگوی معرفی شده این عمل رو روی سیستم عامل دیگری اگر نصب دارید انجام دهید.
مرحله اول فعال کردن مود های آپاچی با دستورات زیر در ترمینال لیست مود های زیر رو فعال میکنیم:
sudo a2enmod proxy sudo a2enmod proxy_http sudo a2enmod proxy_balancer sudo a2enmod lbmethod_byrequests
مرحله دوم ریستارت کردن آپاچی و اطمینان از اجرای صحیح
sudo systemctl restart apache2
مرحله سوم راهندازی برنامه nodejs خود روی سرور :
مثلا کد زیر رو نوشته ایم و اجرا میکنیم وارد جزئیات چگونه نوشتن و نصب پکیج های آن نمیشویم:
const express = require('express') const app = express() app.get('/', function (req, res) { res.send('Hello World!') }) app.listen(3000, function () { console.log('Example app listening on port 3000!') })
خب بعد از اجرا یعنی برنامه ی ما بر روی پورت ۳۰۰۰ اجرا شده است.
مرحله چهارم حال ما این برنامه رو در دو جای مختلف اجرا میکنیم برای نمایش چگونگی فعال سازی. برای این کار تنظیمات میزبان مجازی و یا همان VirtualHost
آپاچی خود را باید تغییر دهید که من با دستور زیر آماده تغییر کردم:
sudo gedit /etc/apache2/sites-enabled/000-default.conf
مرحله پنجم افزودن آنچه میخواهیم من فرض میگیرم که دامنه mydomain.com بر روی لوکال خودم ست شده است که با تغییر روی hosts میتوانید به صورت مجازی دامنه را ip بدهیم با فرض فوق و subdomain.mydomain.com هم که ساب دامین است نیز باید روی لوکال باشد من دستورات زیر را به انتهای فایل اضافه میکنم:
<VirtualHost subdomain.mydomain.com:80> ProxyPass / http://localhost:8080/ ProxyPassReverse / http://localhost:8080/ </VirtualHost> <VirtualHost mydomain.com:80> ProxyPass /node http://localhost:8080/ ProxyPassReverse /node http://localhost:8080/ </VirtualHost>
اطلاعات رو ذخیره و فایل رو میبندیم
مرحله ششم ریستارت کردن مجدد آپاچی:
sudo systemctl restart apache2
نکته: اگر به هر دلیل آپاچی شما دیگر بالا نیومد اطلاعاتی که اضافه کردید رو پاک کنید و دوباره آپاچی رو ریستارت کنید
خب حالا دست پخت شما آماده است و باید
Hello World!
را ببنید.
اگر پیام زیر را دیدید:
Service Unavailable The server is temporarily unable to service your request due to maintenance downtime or capacity problems. Please try again later.
یا برنامه node.js شما اجرا نیست یا آدرس برنامه nodejs شما اشتباه در کافنیگ وارد شده در مثال بالا این آدرس را http://localhost:8080/ باز کنید تا مطئن شوید
باشد که رستگار شوید
دیدگاهتان را بنویسید لغو پاسخ